diff --git a/DEPS b/DEPS
index d372052..3bbf2c1 100644
--- a/DEPS
+++ b/DEPS
@@ -175,11 +175,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '852ebea2d55dc3f41992ba25cb2f25fdff11875b',
+  'skia_revision': '0999bce974ac9f85f3e579b8f8e63eeddbea1a1a',
   # 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': '6ae4715e52340389b57cad8b761f31c191e189ec',
+  'v8_revision': '203b5f85263b3862b258ecf78a5fdee9565f6f28',
   # 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.
@@ -187,11 +187,11 @@
   # 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': 'd14735b25df3359bcc895673307d93ca97cb3df0',
+  'angle_revision': 'e4da6f1598e3486cb2c88e0d653ddf09554f3ec7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'b4a27407e2be535f44b960929e7c4e6c0532f862',
+  'swiftshader_revision': 'dc23b088cf8e8a37bfc617579b8ae5f21896f715',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -230,7 +230,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
-  'harfbuzz_revision': '014e038b2c2fd55e0bffbe5c5adc893c07df187a',
+  'harfbuzz_revision': '0d5695983e8bf3184ecd4cb92f737b9dfe5d6d25',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Emoji Segmenter
   # and whatever else without interference from each other.
@@ -246,7 +246,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'e29095b1961e7b087b8d3f60a45e855f7c991641',
+  'devtools_frontend_revision': '298b8cc3134fdb6d63895f869e02e359e8afbf98',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -302,7 +302,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'c3c6694d8f0f57f1df49ffd4a63d7083b1d81c85',
+  'dawn_revision': '2d10e954cec2a605345e0971c4cf7fc046a27ca8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -877,7 +877,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '06c0b50c29e0c9fa3876052363a6eefb643f5af6',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '3863fc52b9e5fd5c40624e718572d113183a4df6',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -933,7 +933,7 @@
     Var('chromium_git') + '/codecs/libgav1.git' + '@' + '638ef84819f8b3cd614dcf63378fe4814aa4cb2a',
 
   'src/third_party/glslang/src':
-    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + 'b5757b95005bbf6b0287096c5b708c5e25645311',
+    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '9c3204a1fde09ba7b98b1779047bf8d3491244a5',
 
   'src/third_party/google_toolbox_for_mac/src': {
       'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'),
@@ -1228,7 +1228,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '91aecef3b39e245791203a1c2130ffc2a0ff1c2b',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '97d7d4772df77bf2721c7c0fe31805902c29c80f',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1533,7 +1533,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e89877724abaec4aae785c44fe3e1f082e956484',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@09fdff26a543a871f96102d1220d8547b7d548aa',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
index 75154513..cd25302 100644
--- a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
+++ b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
@@ -209,50 +209,23 @@
             String path = uri.getPath();
             // The content URL type can be queried directly.
             if (uri.getScheme().equals(CONTENT_SCHEME)) {
-                String mimeType =
-                        ContextUtils.getApplicationContext().getContentResolver().getType(uri);
-                if (mimeType == null) {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.NULL_FROM_CONTENT_PROVIDER);
-                } else {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.NONNULL_FROM_CONTENT_PROVIDER);
-                }
-                return mimeType;
+                return ContextUtils.getApplicationContext().getContentResolver().getType(uri);
                 // Asset files may have a known extension.
             } else if (uri.getScheme().equals(FILE_SCHEME)
                     && path.startsWith(AndroidProtocolHandlerJni.get().getAndroidAssetPath())) {
                 String mimeType = URLConnection.guessContentTypeFromName(path);
-                if (mimeType == null) {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.CANNOT_GUESS_FROM_ANDROID_ASSET_PATH);
-                    // Do not return yet, try guessing from the stream.
-                } else {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.GUESSED_FROM_ANDROID_ASSET_PATH);
+                if (mimeType != null) {
                     return mimeType;
                 }
             }
         } catch (Exception ex) {
             Log.e(TAG, "Unable to get mime type" + url);
-            AwHistogramRecorder.recordMimeType(
-                    AwHistogramRecorder.MimeType.CANNOT_GUESS_DUE_TO_GENERIC_EXCEPTION);
             return null;
         }
         // Fall back to sniffing the type from the stream.
         try {
-            String mimeType = URLConnection.guessContentTypeFromStream(stream);
-            if (mimeType == null) {
-                AwHistogramRecorder.recordMimeType(
-                        AwHistogramRecorder.MimeType.CANNOT_GUESS_FROM_ANDROID_ASSET_INPUT_STREAM);
-            } else {
-                AwHistogramRecorder.recordMimeType(
-                        AwHistogramRecorder.MimeType.GUESSED_FROM_ANDROID_ASSET_INPUT_STREAM);
-            }
-            return mimeType;
+            return URLConnection.guessContentTypeFromStream(stream);
         } catch (IOException e) {
-            AwHistogramRecorder.recordMimeType(
-                    AwHistogramRecorder.MimeType.CANNOT_GUESS_DUE_TO_IO_EXCEPTION);
             return null;
         }
     }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 3ea9a07..b89c83f3 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -656,16 +656,6 @@
                 mContentsClient.getCallbackHelper().postOnLoadResource(url);
             }
 
-            if (awWebResourceResponse != null) {
-                String mimeType = awWebResourceResponse.getMimeType();
-                if (mimeType == null) {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.NULL_FROM_SHOULD_INTERCEPT_REQUEST);
-                } else {
-                    AwHistogramRecorder.recordMimeType(
-                            AwHistogramRecorder.MimeType.NONNULL_FROM_SHOULD_INTERCEPT_REQUEST);
-                }
-            }
             if (awWebResourceResponse != null && awWebResourceResponse.getData() == null) {
                 // In this case the intercepted URLRequest job will simulate an empty response
                 // which doesn't trigger the onReceivedError callback. For WebViewClassic
diff --git a/android_webview/java/src/org/chromium/android_webview/AwHistogramRecorder.java b/android_webview/java/src/org/chromium/android_webview/AwHistogramRecorder.java
index 5edf6ec..f772d7b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwHistogramRecorder.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwHistogramRecorder.java
@@ -47,32 +47,6 @@
                 "Android.WebView.Callback.Counts", result, WebViewCallbackType.NUM_ENTRIES);
     }
 
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef({MimeType.NULL_FROM_CONTENT_PROVIDER, MimeType.NONNULL_FROM_CONTENT_PROVIDER,
-            MimeType.CANNOT_GUESS_FROM_ANDROID_ASSET_PATH, MimeType.GUESSED_FROM_ANDROID_ASSET_PATH,
-            MimeType.CANNOT_GUESS_FROM_ANDROID_ASSET_INPUT_STREAM,
-            MimeType.GUESSED_FROM_ANDROID_ASSET_INPUT_STREAM})
-    public @interface MimeType {
-        // These values are persisted to logs. Entries should not be renumbered and numeric values
-        // should never be reused. Update NUM_ENTRIES when adding more entries.
-        int NULL_FROM_CONTENT_PROVIDER = 0;
-        int NONNULL_FROM_CONTENT_PROVIDER = 1;
-        int CANNOT_GUESS_FROM_ANDROID_ASSET_PATH = 2;
-        int GUESSED_FROM_ANDROID_ASSET_PATH = 3;
-        int CANNOT_GUESS_DUE_TO_GENERIC_EXCEPTION = 4;
-        int CANNOT_GUESS_FROM_ANDROID_ASSET_INPUT_STREAM = 5;
-        int GUESSED_FROM_ANDROID_ASSET_INPUT_STREAM = 6;
-        int CANNOT_GUESS_DUE_TO_IO_EXCEPTION = 7;
-        int NULL_FROM_SHOULD_INTERCEPT_REQUEST = 8;
-        int NONNULL_FROM_SHOULD_INTERCEPT_REQUEST = 9;
-        int NUM_ENTRIES = 10;
-    }
-
-    public static void recordMimeType(@MimeType int type) {
-        RecordHistogram.recordEnumeratedHistogram(
-                "Android.WebView.Mimetype.AppProvided", type, MimeType.NUM_ENTRIES);
-    }
-
     // not meant to be instantiated
     private AwHistogramRecorder() {}
 }
diff --git a/android_webview/lib/aw_main_delegate.cc b/android_webview/lib/aw_main_delegate.cc
index 42a65d5..081726c 100644
--- a/android_webview/lib/aw_main_delegate.cc
+++ b/android_webview/lib/aw_main_delegate.cc
@@ -219,6 +219,8 @@
 
     features.DisableIfNotSet(::features::kWebXrHitTest);
 
+    features.DisableIfNotSet(::features::kDynamicColorGamut);
+
     // De-jelly is never supported on WebView.
     features.EnableIfNotSet(::features::kDisableDeJelly);
 
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc
index 736800f..ff11f49 100644
--- a/ash/accelerators/accelerator_controller_impl.cc
+++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -96,6 +96,7 @@
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/accelerators/accelerator_manager.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/chromeos/events/keyboard_layout_util.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_sequence.h"
@@ -292,16 +293,20 @@
 void HandleActivateDesk(const ui::Accelerator& accelerator) {
   auto* desks_controller = DesksController::Get();
   const bool success = desks_controller->ActivateAdjacentDesk(
-      /*going_left=*/accelerator.key_code() == ui::VKEY_OEM_4,
+      /*going_left=*/
+      (accelerator.key_code() == ui::VKEY_OEM_4 ||
+       accelerator.key_code() == ui::VKEY_LEFT),
       DesksSwitchSource::kDeskSwitchShortcut);
   if (!success)
     return;
 
   switch (accelerator.key_code()) {
     case ui::VKEY_OEM_4:
+    case ui::VKEY_LEFT:
       base::RecordAction(base::UserMetricsAction("Accel_Desks_ActivateLeft"));
       break;
     case ui::VKEY_OEM_6:
+    case ui::VKEY_RIGHT:
       base::RecordAction(base::UserMetricsAction("Accel_Desks_ActivateRight"));
       break;
 
@@ -329,19 +334,16 @@
     return;
 
   Desk* target_desk = nullptr;
-  switch (accelerator.key_code()) {
-    case ui::VKEY_OEM_4:
-      target_desk = desks_controller->GetPreviousDesk();
-      base::RecordAction(base::UserMetricsAction("Accel_Desks_MoveWindowLeft"));
-      break;
-    case ui::VKEY_OEM_6:
-      target_desk = desks_controller->GetNextDesk();
-      base::RecordAction(
-          base::UserMetricsAction("Accel_Desks_MoveWindowRight"));
-      break;
-
-    default:
-      NOTREACHED();
+  bool going_left = accelerator.key_code() == ui::VKEY_OEM_4 ||
+                    accelerator.key_code() == ui::VKEY_LEFT;
+  if (going_left) {
+    target_desk = desks_controller->GetPreviousDesk();
+    base::RecordAction(base::UserMetricsAction("Accel_Desks_MoveWindowLeft"));
+  } else {
+    DCHECK(accelerator.key_code() == ui::VKEY_OEM_6 ||
+           accelerator.key_code() == ui::VKEY_RIGHT);
+    target_desk = desks_controller->GetNextDesk();
+    base::RecordAction(base::UserMetricsAction("Accel_Desks_MoveWindowRight"));
   }
 
   if (!target_desk)
@@ -350,7 +352,7 @@
   if (!in_overview) {
     desks_animations::PerformWindowMoveToDeskAnimation(
         window_to_move,
-        /*going_left=*/accelerator.key_code() == ui::VKEY_OEM_4);
+        /*going_left=*/going_left);
   }
 
   if (!desks_controller->MoveWindowFromActiveDeskTo(
@@ -1746,6 +1748,11 @@
 
   RegisterAccelerators(kAcceleratorData, kAcceleratorDataLength);
 
+  if (::features::IsNewShortcutMappingEnabled()) {
+    RegisterAccelerators(kNewAdditionalAcceleratorData,
+                         kNewAdditionalAcceleratorDataLength);
+  }
+
   RegisterDeprecatedAccelerators();
 
   if (debug::DebugAcceleratorsEnabled()) {
diff --git a/ash/accessibility/accessibility_focus_ring_group.cc b/ash/accessibility/accessibility_focus_ring_group.cc
index 9fd1fa2..47955c3 100644
--- a/ash/accessibility/accessibility_focus_ring_group.cc
+++ b/ash/accessibility/accessibility_focus_ring_group.cc
@@ -90,6 +90,8 @@
 }
 
 bool AccessibilityFocusRingGroup::CanAnimate() const {
+  if (no_fade_for_testing_)
+    return false;
   return !focus_rings_.empty() && focus_layers_[0]->CanAnimate();
 }
 
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc
index c8a58f1..2ea6d71 100644
--- a/ash/ambient/ambient_controller.cc
+++ b/ash/ambient/ambient_controller.cc
@@ -11,6 +11,7 @@
 #include "ash/ambient/ui/ambient_container_view.h"
 #include "ash/ambient/util/ambient_util.h"
 #include "ash/assistant/assistant_controller.h"
+#include "ash/assistant/util/animation_util.h"
 #include "ash/login/ui/lock_screen.h"
 #include "ash/public/cpp/ambient/ambient_mode_state.h"
 #include "ash/public/cpp/ambient/ambient_prefs.h"
@@ -93,20 +94,17 @@
 }
 
 void AmbientController::OnLockStateChanged(bool locked) {
-  if (!locked) {
-    // We should already exit ambient mode at this time, as the ambient
-    // container needs to be closed to uncover the login port for
-    // re-authentication.
+  if (locked) {
+    // Show ambient mode when entering lock screen.
     DCHECK(!container_view_);
-    return;
+    Show();
+  } else {
+    // Destroy ambient mode after user re-login.
+    Destroy();
   }
-
-  // Show the ambient container on top of the lock screen.
-  DCHECK(!container_view_);
-  Start();
 }
 
-void AmbientController::Start() {
+void AmbientController::Show() {
   if (!CanStartAmbientMode()) {
     // TODO(wutao): Show a toast to indicate that Ambient mode is not ready.
     return;
@@ -121,14 +119,34 @@
   ambient_state_.SetAmbientModeEnabled(true);
 }
 
-void AmbientController::Stop() {
+void AmbientController::Destroy() {
   ambient_state_.SetAmbientModeEnabled(false);
 }
+
 void AmbientController::Toggle() {
   if (container_view_)
-    Stop();
+    Destroy();
   else
-    Start();
+    Show();
+}
+
+void AmbientController::OnBackgroundPhotoEvents() {
+  refresh_timer_.Stop();
+
+  // Move the |AmbientModeContainer| beneath the |LockScreenWidget| to show the
+  // lock screen contents on top before the fade-out animation.
+  auto* ambient_window = container_view_->GetWidget()->GetNativeWindow();
+  ambient_window->parent()->StackChildAtBottom(ambient_window);
+
+  // Start fading out the current background photo.
+  StartFadeOutAnimation();
+}
+
+void AmbientController::StartFadeOutAnimation() {
+  // We fade out the |PhotoView| on its own layer instead of using the general
+  // layer of the widget, otherwise it will reveal the color of the lockscreen
+  // wallpaper beneath.
+  container_view_->FadeOutPhotoView();
 }
 
 void AmbientController::CreateContainerView() {
@@ -146,9 +164,6 @@
 }
 
 void AmbientController::RefreshImage() {
-  if (!PhotoController::Get())
-    return;
-
   if (photo_model_.ShouldFetchImmediately()) {
     // TODO(b/140032139): Defer downloading image if it is animating.
     base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h
index 43af2ffb..9a2030d 100644
--- a/ash/ambient/ambient_controller.h
+++ b/ash/ambient/ambient_controller.h
@@ -45,12 +45,21 @@
   // SessionObserver:
   void OnLockStateChanged(bool locked) override;
 
-  void Start();
-  void Stop();
+  // Creates and displays the ambient mode screen on top of the lock screen.
+  void Show();
+  // Destroys the ambient mode screen widget.
+  void Destroy();
+  // Toggle between show and destroy the ambient mode screen.
+  // Should be removed once we delete the shortcut entry point.
   void Toggle();
 
   PhotoModel* photo_model() { return &photo_model_; }
 
+  // Handles user interactions on the background photo. For now the behavior
+  // is showing lock screen contents (login pod and media control view) on top
+  // while fading-out the current shown image.
+  void OnBackgroundPhotoEvents();
+
   AmbientContainerView* get_container_view_for_testing() {
     return container_view_;
   }
@@ -69,6 +78,8 @@
   void GetNextImage();
   void OnPhotoDownloaded(bool success, const gfx::ImageSkia& image);
 
+  void StartFadeOutAnimation();
+
   AmbientViewDelegateImpl delegate_{this};
   AmbientContainerView* container_view_ = nullptr;   // Owned by view hierarchy.
   PhotoModel photo_model_;
diff --git a/ash/ambient/ambient_view_delegate_impl.cc b/ash/ambient/ambient_view_delegate_impl.cc
index 863107a..4049c23 100644
--- a/ash/ambient/ambient_view_delegate_impl.cc
+++ b/ash/ambient/ambient_view_delegate_impl.cc
@@ -21,18 +21,7 @@
 }
 
 void AmbientViewDelegateImpl::OnBackgroundPhotoEvents() {
-  // Exit ambient mode by closing the widget when user interacts with the
-  // background photo using mouse or gestures. We do this asynchronously to
-  // ensure that for a mouse moved event, the widget will be destroyed *after*
-  // its cursor has been updated in |RootView::OnMouseMoved|.
-  base::SequencedTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(
-          [](const base::WeakPtr<AmbientViewDelegateImpl>& weak_ptr) {
-            if (weak_ptr)
-              weak_ptr->ambient_controller_->Stop();
-          },
-          weak_factory_.GetWeakPtr()));
+  ambient_controller_->OnBackgroundPhotoEvents();
 }
 
 }  // namespace ash
diff --git a/ash/ambient/ui/ambient_container_view.cc b/ash/ambient/ui/ambient_container_view.cc
index 3027243..4f1d4a75 100644
--- a/ash/ambient/ui/ambient_container_view.cc
+++ b/ash/ambient/ui/ambient_container_view.cc
@@ -12,6 +12,7 @@
 #include "ash/ambient/ui/photo_view.h"
 #include "ash/ambient/util/ambient_util.h"
 #include "ash/assistant/assistant_controller.h"
+#include "ash/assistant/util/animation_util.h"
 #include "ash/login/ui/lock_screen.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shell.h"
@@ -27,6 +28,12 @@
 // Ambient Assistant container view appearance.
 constexpr int kAmbientAssistantContainerViewPreferredHeightDip = 128;
 
+// TODO(meilinw): temporary values for dev purpose, need to be updated with the
+// final spec.
+constexpr float kBackgroundPhotoOpacity = 0.5f;
+constexpr base::TimeDelta kBackgroundPhotoFadeOutAnimationDuration =
+    base::TimeDelta::FromMilliseconds(500);
+
 aura::Window* GetContainer() {
   aura::Window* container = nullptr;
   if (ambient::util::IsShowing(LockScreen::ScreenType::kLock))
@@ -41,7 +48,7 @@
   params.parent = GetContainer();
   params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS;
   params.delegate = view;
-  params.name = view->GetClassName();
+  params.name = "AmbientModeContainer";
 
   views::Widget* widget = new views::Widget;
   widget->Init(std::move(params));
@@ -76,6 +83,16 @@
                 kAmbientAssistantContainerViewPreferredHeightDip));
 }
 
+void AmbientContainerView::FadeOutPhotoView() {
+  DCHECK(photo_view_);
+
+  photo_view_->layer()->GetAnimator()->StartAnimation(
+      assistant::util::CreateLayerAnimationSequence(
+          assistant::util::CreateOpacityElement(
+              kBackgroundPhotoOpacity,
+              kBackgroundPhotoFadeOutAnimationDuration)));
+}
+
 void AmbientContainerView::Init() {
   CreateWidget(this);
   // TODO(b/139954108): Choose a better dark mode theme color.
diff --git a/ash/ambient/ui/ambient_container_view.h b/ash/ambient/ui/ambient_container_view.h
index be5308c..4dba381088 100644
--- a/ash/ambient/ui/ambient_container_view.h
+++ b/ash/ambient/ui/ambient_container_view.h
@@ -26,6 +26,9 @@
   gfx::Size CalculatePreferredSize() const override;
   void Layout() override;
 
+  // Fade out the background photo.
+  void FadeOutPhotoView();
+
  private:
   void Init();
 
diff --git a/ash/ambient/ui/ambient_view_delegate.h b/ash/ambient/ui/ambient_view_delegate.h
index 9a23080a..768987ea 100644
--- a/ash/ambient/ui/ambient_view_delegate.h
+++ b/ash/ambient/ui/ambient_view_delegate.h
@@ -17,7 +17,7 @@
 
   virtual PhotoModel* GetPhotoModel() = 0;
 
-  // Invoked when user interacts with the background photo using mouse,
+  // Invoked when user interacting with the background photo using mouse,
   // touchpad, or touchscreen.
   virtual void OnBackgroundPhotoEvents() = 0;
 };
diff --git a/ash/app_list/views/app_list_page.cc b/ash/app_list/views/app_list_page.cc
index 917980e..9306495aa 100644
--- a/ash/app_list/views/app_list_page.cc
+++ b/ash/app_list/views/app_list_page.cc
@@ -59,6 +59,17 @@
   return true;
 }
 
+void AppListPage::AnimateOpacity(float current_progress,
+                                 AppListViewState target_view_state,
+                                 const OpacityAnimator& animator) {
+  animator.Run(this, target_view_state != AppListViewState::kClosed);
+}
+
+void AppListPage::AnimateYPosition(AppListViewState target_view_state,
+                                   const TransformAnimator& animator) {
+  animator.Run(layer(), this);
+}
+
 gfx::Rect AppListPage::GetAboveContentsOffscreenBounds(
     const gfx::Size& size) const {
   gfx::Rect rect(size);
diff --git a/ash/app_list/views/app_list_page.h b/ash/app_list/views/app_list_page.h
index 53a52ae..d3eca97a 100644
--- a/ash/app_list/views/app_list_page.h
+++ b/ash/app_list/views/app_list_page.h
@@ -105,6 +105,28 @@
   // Returns true if the search box should be shown in this page.
   virtual bool ShouldShowSearchBox() const;
 
+  // Called when the app list view state changes to |target_view_state| to
+  // animate the app list page opacity.
+  // |current_progress| - the current app list transition progress.
+  // |animator| - callback that when run starts the opacity animation.
+  using OpacityAnimator =
+      base::RepeatingCallback<void(views::View* view, bool target_visibility)>;
+  virtual void AnimateOpacity(float current_progress,
+                              AppListViewState target_view_state,
+                              const OpacityAnimator& animator);
+
+  // Called when the app list view state changes to |target_view_state| to
+  // animate the app list page vertical offset from the app list view top.
+  // |animator| - The callback that runs the transform animation to update the
+  // page's vertical position. (The layer is required argument, while view is
+  // optional, and should be used with layers associated with views - the
+  // animator will send out a11y position change notification for the view when
+  // the animation finishes).
+  using TransformAnimator =
+      base::RepeatingCallback<void(ui::Layer* layer, views::View* view)>;
+  virtual void AnimateYPosition(AppListViewState target_view_state,
+                                const TransformAnimator& animator);
+
   // Returns the area above the contents view, given the desired size of this
   // page, in the contents view's coordinate space.
   gfx::Rect GetAboveContentsOffscreenBounds(const gfx::Size& size) const;
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc
index 87db1f69..b5388c45 100644
--- a/ash/app_list/views/apps_container_view.cc
+++ b/ash/app_list/views/apps_container_view.cc
@@ -212,15 +212,16 @@
       AppListView::GetTransitionProgressForState(target_view_state));
 
   suggestion_chip_container_view_->SetY(target_suggestion_chip_y);
-  animator.Run(suggestion_chip_container_view_);
+  animator.Run(suggestion_chip_container_view_->layer(),
+               suggestion_chip_container_view_);
 
   apps_grid_view_->SetY(suggestion_chip_container_view_->y() +
                         chip_grid_y_distance_);
-  animator.Run(apps_grid_view_);
+  animator.Run(apps_grid_view_->layer(), apps_grid_view_);
 
   page_switcher_->SetY(suggestion_chip_container_view_->y() +
                        chip_grid_y_distance_);
-  animator.Run(page_switcher_);
+  animator.Run(page_switcher_->layer(), page_switcher_);
 }
 
 void AppsContainerView::UpdateYPositionAndOpacity(float progress,
diff --git a/ash/app_list/views/apps_container_view.h b/ash/app_list/views/apps_container_view.h
index ceab8a7..669603e 100644
--- a/ash/app_list/views/apps_container_view.h
+++ b/ash/app_list/views/apps_container_view.h
@@ -74,7 +74,7 @@
   // |current_progress| - the current app list transition progress.
   // |animator| - callback that when run starts the opacity animation.
   using OpacityAnimator =
-      base::RepeatingCallback<void(views::View*, bool target_visibility)>;
+      base::RepeatingCallback<void(views::View* view, bool target_visibility)>;
   void AnimateOpacity(float current_progress,
                       AppListViewState target_view_state,
                       const OpacityAnimator& animator);
@@ -83,7 +83,8 @@
   // |animator| for each of them to run transform animation from current bounds.
   // (This assumes that animator knows the offset between current apps container
   // bounds and target apps container bounds).
-  using TransformAnimator = base::RepeatingCallback<void(views::View*)>;
+  using TransformAnimator =
+      base::RepeatingCallback<void(ui::Layer*, views::View*)>;
   void AnimateYPosition(AppListViewState target_view_state,
                         const TransformAnimator& animator);
 
diff --git a/ash/app_list/views/assistant/assistant_page_view.cc b/ash/app_list/views/assistant/assistant_page_view.cc
index 572741315..e7ece916 100644
--- a/ash/app_list/views/assistant/assistant_page_view.cc
+++ b/ash/app_list/views/assistant/assistant_page_view.cc
@@ -24,6 +24,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/chromeos/search_box/search_box_constants.h"
+#include "ui/compositor_extra/shadow.h"
 #include "ui/views/background.h"
 #include "ui/views/focus/focus_manager.h"
 #include "ui/views/layout/fill_layout.h"
@@ -221,6 +222,23 @@
       this, GetWidget(), /*reverse=*/true, /*dont_loop=*/false);
 }
 
+void AssistantPageView::AnimateYPosition(AppListViewState target_view_state,
+                                         const TransformAnimator& animator) {
+  // Assistant page view may host native views for its content. The native view
+  // hosts use view to widget coordinate conversion to calculate the native view
+  // bounds, and thus depend on the view transform values.
+  // Make sure the view is laid out before starting the transform animation so
+  // native views are not placed according to interim, animated page transform
+  // value.
+  layer()->GetAnimator()->StopAnimatingProperty(
+      ui::LayerAnimationElement::TRANSFORM);
+  if (needs_layout())
+    Layout();
+
+  animator.Run(layer(), this);
+  animator.Run(view_shadow_->shadow()->shadow_layer(), nullptr);
+}
+
 void AssistantPageView::OnUiVisibilityChanged(
     AssistantVisibility new_visibility,
     AssistantVisibility old_visibility,
diff --git a/ash/app_list/views/assistant/assistant_page_view.h b/ash/app_list/views/assistant/assistant_page_view.h
index c8a62c26..1079d1d 100644
--- a/ash/app_list/views/assistant/assistant_page_view.h
+++ b/ash/app_list/views/assistant/assistant_page_view.h
@@ -56,6 +56,8 @@
       const gfx::Rect& search_box_bounds) const override;
   views::View* GetFirstFocusableView() override;
   views::View* GetLastFocusableView() override;
+  void AnimateYPosition(AppListViewState target_view_state,
+                        const TransformAnimator& animator) override;
 
   // AssistantUiModelObserver:
   void OnUiVisibilityChanged(
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc
index ebb738f..a2cb858 100644
--- a/ash/app_list/views/contents_view.cc
+++ b/ash/app_list/views/contents_view.cc
@@ -33,6 +33,7 @@
 #include "ui/display/screen.h"
 #include "ui/events/event.h"
 #include "ui/views/accessibility/view_accessibility.h"
+#include "ui/views/view_constants_aura.h"
 #include "ui/views/view_model.h"
 #include "ui/views/widget/widget.h"
 
@@ -833,11 +834,12 @@
 
   // Animates layer's vertical position (using transform animation).
   // |layer| - The layer to transform.
+  // |view| - Optional, the view to which the layer belongs (if the layer is a
+  // view layer).
   // |y_offset| - The initial vertical offset - the layer's vertical offset will
   //              be animated to 0.
   auto animate_transform = [](base::TimeDelta duration, float y_offset,
-                              views::View* view) {
-    ui::Layer* layer = view->layer();
+                              ui::Layer* layer, views::View* view) {
     gfx::Transform transform;
     transform.Translate(0, y_offset);
     layer->SetTransform(transform);
@@ -849,7 +851,8 @@
     settings->SetPreemptionStrategy(
         ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET);
     // Observer will delete itself after animation completes.
-    settings->AddObserver(new AccessibilityAnimationObserver(view));
+    if (view)
+      settings->AddObserver(new AccessibilityAnimationObserver(view));
 
     layer->SetTransform(gfx::Transform());
   };
@@ -900,7 +903,7 @@
   // For search box, animate the search_box view layer instead of the widget
   // layer to avoid conflict with pagination model transitions (which update the
   // search box widget layer transform as the transition progresses).
-  animate_transform(duration, y_offset, search_box);
+  animate_transform(duration, y_offset, search_box->layer(), search_box);
 
   // Update app list page bounds to their target values. This assumes that
   // potential in-progress pagination transition does not directly animate page
@@ -908,17 +911,23 @@
   for (AppListPage* page : app_list_pages_) {
     page->UpdatePageBoundsForState(target_page, GetContentsBounds(),
                                    target_search_box_bounds);
-    if (page != horizontal_page_container_) {
-      animate_opacity(duration, page, closing ? 0.0f : 1.0f);
-      animate_transform(duration, y_offset, page);
-    } else {
-      GetAppsContainerView()->AnimateOpacity(
-          progress, target_view_state,
-          base::BindRepeating(animate_opacity, duration));
-      GetAppsContainerView()->AnimateYPosition(
-          target_view_state,
-          base::BindRepeating(animate_transform, duration, y_offset));
-    }
+
+    page->AnimateOpacity(progress, target_view_state,
+                         base::BindRepeating(animate_opacity, duration));
+    page->AnimateYPosition(
+        target_view_state,
+        base::BindRepeating(animate_transform, duration, y_offset));
+  }
+
+  // Assistant page and search results page may host native views (e.g. for
+  // search result answer cards, or card assistant results). These windows are
+  // descendants of the app list view window layer rather than the page layers,
+  // so they have to be animated separately from their associated page.
+  for (auto* child_window : GetWidget()->GetNativeWindow()->children()) {
+    View* host_view = child_window->GetProperty(views::kHostViewKey);
+    if (!host_view)
+      continue;
+    animate_transform(duration, y_offset, child_window->layer(), nullptr);
   }
 
   last_target_view_state_ = target_view_state;
@@ -930,7 +939,7 @@
   animate_transform(
       duration,
       expand_arrow_view()->CalculateOffsetFromCurrentAppListProgress(progress),
-      expand_arrow_view());
+      expand_arrow_view()->layer(), expand_arrow_view());
 }
 
 void ContentsView::SetExpandArrowViewVisibility(bool show) {
diff --git a/ash/app_list/views/horizontal_page_container.cc b/ash/app_list/views/horizontal_page_container.cc
index b96688ca..a68ad05 100644
--- a/ash/app_list/views/horizontal_page_container.cc
+++ b/ash/app_list/views/horizontal_page_container.cc
@@ -168,6 +168,19 @@
   return GetSelectedPage()->ShouldShowSearchBox();
 }
 
+void HorizontalPageContainer::AnimateOpacity(float current_progress,
+                                             AppListViewState target_view_state,
+                                             const OpacityAnimator& animator) {
+  apps_container_view_->AnimateOpacity(current_progress, target_view_state,
+                                       animator);
+}
+
+void HorizontalPageContainer::AnimateYPosition(
+    AppListViewState target_view_state,
+    const TransformAnimator& animator) {
+  apps_container_view_->AnimateYPosition(target_view_state, animator);
+}
+
 void HorizontalPageContainer::OnTabletModeChanged(bool started) {
   pagination_controller_->set_is_tablet_mode(started);
 }
diff --git a/ash/app_list/views/horizontal_page_container.h b/ash/app_list/views/horizontal_page_container.h
index ca9b612d..5b31d272 100644
--- a/ash/app_list/views/horizontal_page_container.h
+++ b/ash/app_list/views/horizontal_page_container.h
@@ -46,6 +46,11 @@
   views::View* GetFirstFocusableView() override;
   views::View* GetLastFocusableView() override;
   bool ShouldShowSearchBox() const override;
+  void AnimateOpacity(float current_progress,
+                      AppListViewState target_view_state,
+                      const OpacityAnimator& animator) override;
+  void AnimateYPosition(AppListViewState target_view_state,
+                        const TransformAnimator& animator) override;
 
   AppsContainerView* apps_container_view() { return apps_container_view_; }
 
diff --git a/ash/app_list/views/search_result_page_view.cc b/ash/app_list/views/search_result_page_view.cc
index a3ab03b0..68b7dd3 100644
--- a/ash/app_list/views/search_result_page_view.cc
+++ b/ash/app_list/views/search_result_page_view.cc
@@ -537,6 +537,23 @@
   ScheduleResultsChangedA11yNotification();
 }
 
+void SearchResultPageView::AnimateYPosition(AppListViewState target_view_state,
+                                            const TransformAnimator& animator) {
+  // Search result page view may host a native view to show answer card results.
+  // The native view hosts use view to widget coordinate conversion to calculate
+  // the native view bounds, and thus depend on the view transform values.
+  // Make sure the view is laid out before starting the transform animation so
+  // native views are not placed according to interim, animated page transform
+  // value.
+  layer()->GetAnimator()->StopAnimatingProperty(
+      ui::LayerAnimationElement::TRANSFORM);
+  if (needs_layout())
+    Layout();
+
+  animator.Run(layer(), this);
+  animator.Run(view_shadow_->shadow()->shadow_layer(), nullptr);
+}
+
 void SearchResultPageView::OnAnimationStarted(AppListState from_state,
                                               AppListState to_state) {
   if (from_state != AppListState::kStateSearchResults &&
diff --git a/ash/app_list/views/search_result_page_view.h b/ash/app_list/views/search_result_page_view.h
index 23a3802..383e54b 100644
--- a/ash/app_list/views/search_result_page_view.h
+++ b/ash/app_list/views/search_result_page_view.h
@@ -54,6 +54,8 @@
   // AppListPage overrides:
   void OnHidden() override;
   void OnShown() override;
+  void AnimateYPosition(AppListViewState target_view_state,
+                        const TransformAnimator& animator) override;
 
   void OnAnimationStarted(AppListState from_state,
                           AppListState to_state) override;
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 907a566..8b8648c 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -1862,8 +1862,8 @@
       <message name="IDS_ASH_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME" desc="Text to be spoken when the focus is set to the menu button of the user pod on the login screen.">
         Options menu for <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph>
       </message>
-      <message name="IDS_ASH_LOGIN_POD_MENU_REMOVE_ITEM_ACCESSIBLE_NAME" desc="Text to be spoken when 'Remove user' item is selected on the pod menu.">
-        Remove this user
+      <message name="IDS_ASH_LOGIN_POD_MENU_REMOVE_ITEM_ACCESSIBLE_NAME" desc="Text to be spoken when 'Remove account' item is selected on the pod menu.">
+        Remove account
       </message>
       <message name="IDS_ASH_LOGIN_POD_LEGACY_SUPERVISED_EXPIRATION_WARNING" desc="Text shown as a warning that supervised users will be deprecated.">
         Your supervised user profile will be removed soon. Sign in to learn more.
@@ -1877,6 +1877,9 @@
       <message name="IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2" desc="Text shown as a warning when attempting to remove non-owner user. Also see IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_1.">
         <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph> can still sign in later.
       </message>
+      <message name="IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2_SUPERVISED_USER" desc="Text shown as a warning when attempting to remove non-owner supervised user. Also see IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_1.">
+        <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph> can be re-added later with a parent’s permission.
+      </message>
       <message name="IDS_ASH_LOGIN_PUBLIC_ACCOUNT_MONITORING_WARNING" desc="Template for text shown in the public account user pod, informing the user that this is a public, managed account.">
         The device admin may monitor your browsing activity.
       </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2_SUPERVISED_USER.png.sha1 b/ash/ash_strings_grd/IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2_SUPERVISED_USER.png.sha1
new file mode 100644
index 0000000..0224cbe
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2_SUPERVISED_USER.png.sha1
@@ -0,0 +1 @@
+7df0a0ed21e090e5c71d48062f64f57ba4e2b617
\ No newline at end of file
diff --git a/ash/login/ui/login_user_menu_view.cc b/ash/login/ui/login_user_menu_view.cc
index bfe946a..172a9fd 100644
--- a/ash/login/ui/login_user_menu_view.cc
+++ b/ash/login/ui/login_user_menu_view.cc
@@ -8,6 +8,7 @@
 #include "ash/login/ui/views_utils.h"
 #include "ash/public/cpp/shelf_config.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -139,9 +140,11 @@
           base::UTF8ToUTF16(kLegacySupervisedUserManagementDisplayURL));
     }
     base::string16 part2 = l10n_util::GetStringFUTF16(
-        IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2, email);
-
-    warning_message_ = part1 + base::ASCIIToUTF16(" ") + part2;
+        type == user_manager::UserType::USER_TYPE_CHILD
+            ? IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2_SUPERVISED_USER
+            : IDS_ASH_LOGIN_POD_NON_OWNER_USER_REMOVE_WARNING_PART_2,
+        email);
+    warning_message_ = base::StrCat({part1, base::ASCIIToUTF16(" "), part2});
 
     remove_user_confirm_data_ = new views::View();
     remove_user_confirm_data_->SetLayoutManager(
@@ -153,8 +156,10 @@
 
     remove_user_confirm_data_->AddChildView(
         login_views_utils::CreateBubbleLabel(part1, gfx::kGoogleGrey200, this));
+
     remove_user_confirm_data_->AddChildView(
         login_views_utils::CreateBubbleLabel(part2, gfx::kGoogleGrey200, this));
+
     remove_user_button_ = new RemoveUserButton(this, this);
     remove_user_button_->SetID(kUserMenuRemoveUserButtonIdForTest);
     AddChildView(remove_user_button_);
diff --git a/ash/public/cpp/accelerators.cc b/ash/public/cpp/accelerators.cc
index b792e3e..85b10a3 100644
--- a/ash/public/cpp/accelerators.cc
+++ b/ash/public/cpp/accelerators.cc
@@ -223,6 +223,50 @@
 
 const size_t kAcceleratorDataLength = base::size(kAcceleratorData);
 
+const AcceleratorData kNewAdditionalAcceleratorData[] = {
+    // Desk activation:
+    {true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
+     DESKS_ACTIVATE_DESK},
+    {true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
+     DESKS_ACTIVATE_DESK},
+
+    // Moving windows to desks:
+    {true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
+     DESKS_MOVE_ACTIVE_ITEM},
+    {true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
+     DESKS_MOVE_ACTIVE_ITEM},
+
+    // Snap
+    {true, ui::VKEY_OEM_COMMA,
+     ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
+     WINDOW_CYCLE_SNAP_LEFT},
+    {true, ui::VKEY_OEM_PERIOD,
+     ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
+     WINDOW_CYCLE_SNAP_RIGHT},
+
+    // Zoom
+    {true, ui::VKEY_UP,
+     ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
+     SCALE_UI_UP},
+    {true, ui::VKEY_DOWN,
+     ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
+     SCALE_UI_DOWN},
+    {true, ui::VKEY_BACK,
+     ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
+     SCALE_UI_RESET},
+
+    // Shortcut Viewer
+    {true, ui::VKEY_OEM_2, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
+     SHOW_SHORTCUT_VIEWER},
+
+    // Minimize / Maximize
+    {true, ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN, WINDOW_MINIMIZE},
+    {true, ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN, TOGGLE_MAXIMIZED},
+};
+
+const size_t kNewAdditionalAcceleratorDataLength =
+    base::size(kNewAdditionalAcceleratorData);
+
 // static
 AcceleratorController* AcceleratorController::Get() {
   return g_instance;
diff --git a/ash/public/cpp/accelerators.h b/ash/public/cpp/accelerators.h
index 2931bfcf..7160521 100644
--- a/ash/public/cpp/accelerators.h
+++ b/ash/public/cpp/accelerators.h
@@ -155,6 +155,10 @@
 ASH_PUBLIC_EXPORT extern const AcceleratorData kAcceleratorData[];
 ASH_PUBLIC_EXPORT extern const size_t kAcceleratorDataLength;
 
+// Experimental new additional accelerators. crbug.com/1067269
+ASH_PUBLIC_EXPORT extern const AcceleratorData kNewAdditionalAcceleratorData[];
+ASH_PUBLIC_EXPORT extern const size_t kNewAdditionalAcceleratorDataLength;
+
 // The public-facing interface for accelerator handling, which is Ash's duty to
 // implement.
 class ASH_PUBLIC_EXPORT AcceleratorController {
diff --git a/ash/shelf/hotseat_widget.cc b/ash/shelf/hotseat_widget.cc
index 7413f7e..e1f408b4 100644
--- a/ash/shelf/hotseat_widget.cc
+++ b/ash/shelf/hotseat_widget.cc
@@ -39,6 +39,15 @@
 namespace ash {
 namespace {
 
+void DoScopedAnimationSetting(
+    ui::ScopedLayerAnimationSettings* animation_setter) {
+  animation_setter->SetTransitionDuration(
+      ShelfConfig::Get()->shelf_animation_duration());
+  animation_setter->SetTweenType(gfx::Tween::EASE_OUT);
+  animation_setter->SetPreemptionStrategy(
+      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+}
+
 // Custom window targeter for the hotseat. Used so the hotseat only processes
 // events that land on the visible portion of the hotseat, and only while the
 // hotseat is not animating.
@@ -207,26 +216,27 @@
   translucent_background_.SetVisible(true);
   SetBackgroundBlur(/*enable_blur=*/true);
 
-  // Animate the bounds change if we're changing the background, or if there's
-  // a change of width (for instance when dragging an app into, or out of,
-  // the shelf.
-  bool animate =
-      ShelfConfig::Get()->GetDefaultShelfColor() != target_color_ ||
-      background_bounds.width() != translucent_background_.bounds().width();
-  ui::ScopedLayerAnimationSettings animation_setter(
-      translucent_background_.GetAnimator());
-  animation_setter.SetTransitionDuration(
-      animate ? ShelfConfig::Get()->shelf_animation_duration()
-              : base::TimeDelta::FromMilliseconds(0));
-  animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
-  animation_setter.SetPreemptionStrategy(
-      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
-
   if (ShelfConfig::Get()->GetDefaultShelfColor() != target_color_) {
+    ui::ScopedLayerAnimationSettings color_animation_setter(
+        translucent_background_.GetAnimator());
+    DoScopedAnimationSetting(&color_animation_setter);
     target_color_ = ShelfConfig::Get()->GetDefaultShelfColor();
     translucent_background_.SetColor(target_color_);
   }
 
+  // Animate the bounds change if there's a change of width (for instance when
+  // dragging an app into, or out of, the shelf) and meanwhile scrollable
+  // shelf's bounds does not update at the same time.
+  const bool animate_bounds =
+      background_bounds.width() != translucent_background_.bounds().width() &&
+      (scrollable_shelf_view_ &&
+       !scrollable_shelf_view_->NeedUpdateToTargetBounds());
+  base::Optional<ui::ScopedLayerAnimationSettings> bounds_animation_setter;
+  if (animate_bounds) {
+    bounds_animation_setter.emplace(translucent_background_.GetAnimator());
+    DoScopedAnimationSetting(&bounds_animation_setter.value());
+  }
+
   const int radius = ShelfConfig::Get()->hotseat_size() / 2;
   gfx::RoundedCornersF rounded_corners = {radius, radius, radius, radius};
   if (translucent_background_.rounded_corner_radii() != rounded_corners)
diff --git a/ash/shelf/scrollable_shelf_view.cc b/ash/shelf/scrollable_shelf_view.cc
index ed626046..5da91558 100644
--- a/ash/shelf/scrollable_shelf_view.cc
+++ b/ash/shelf/scrollable_shelf_view.cc
@@ -608,6 +608,11 @@
   return base::i18n::IsRTL() && GetShelf()->IsHorizontalAlignment();
 }
 
+bool ScrollableShelfView::NeedUpdateToTargetBounds() const {
+  return GetAvailableLocalBounds(/*use_target_bounds=*/true) !=
+         GetAvailableLocalBounds(/*use_target_bounds=*/false);
+}
+
 gfx::Rect ScrollableShelfView::GetTargetScreenBoundsOfItemIcon(
     const ShelfID& id) const {
   // Calculates the available space for child views based on the target bounds.
@@ -1362,12 +1367,14 @@
       2 * base_padding_;
 
   int gap = CanFitAllAppsWithoutScrolling(use_target_bounds)
-                ? available_size_for_app_icons - icons_size  // shelf centering
-                : 0;                                         // overflow
+                ? available_size_for_app_icons - icons_size
+                : 0;  // overflow
 
   // Calculates the paddings before/after the visible area of scrollable shelf.
-  const int before_padding = gap / 2;
-  const int after_padding = (gap % 2 ? gap / 2 + 1 : gap / 2);
+  // |after_padding| being zero ensures that the available space after the
+  // visible area is filled first.
+  const int before_padding = gap;
+  const int after_padding = 0;
 
   gfx::Insets padding_insets;
   if (GetShelf()->IsHorizontalAlignment()) {
diff --git a/ash/shelf/scrollable_shelf_view.h b/ash/shelf/scrollable_shelf_view.h
index 9b2a0f40..06f1b41 100644
--- a/ash/shelf/scrollable_shelf_view.h
+++ b/ash/shelf/scrollable_shelf_view.h
@@ -86,6 +86,10 @@
   // Returns whether the view should adapt to RTL.
   bool ShouldAdaptToRTL() const;
 
+  // Returns whether the scrollable shelf's current size is equal to the target
+  // size.
+  bool NeedUpdateToTargetBounds() const;
+
   // Returns the icon's target bounds in screen. The returned bounds are
   // calculated with the hotseat's target bounds instead of the actual bounds.
   // It helps to get the icon's final location before the bounds animation on
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 4ac7bef3..9964cc23 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">ሁሉንም ዘግተህ ውጣ</translation>
 <translation id="2277103315734023688">ወደ ፊት ፈልግ</translation>
 <translation id="2292698582925480719">ልኬትን አሳይ</translation>
+<translation id="2295777434187870477">ማይክሮፎን በርቷል፣ መቀያየር ግቤትን ድምጹን ይዘጋል</translation>
 <translation id="2298170939937364391">የሙሉ ማያ ገጽ ማጉያ ነቅቷል። እንዲጠፋ አድርጎ እንደገና ለመቀያየር Ctrl+ፍለጋ+M ይጫኑ።</translation>
 <translation id="2302092602801625023">ይህ መለያ በFamily Link የሚተዳደር ነው</translation>
 <translation id="2303600792989757991">የመስኮት አጠቃላይ እይታን ቀያይር</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">ጠቅ ያድርጉ እና ይጎትቱ</translation>
 <translation id="2700493154570097719">የእርስዎን ቁልፍ ሰሌዳ ያቀናብሩ</translation>
 <translation id="2704781753052663061">ሌላ Wi-Fi አውታረ መረቦችን ይቀላቀሉ</translation>
+<translation id="2705001408393684014">ማይክሮፎንን ቀያይር። <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">የምሽት ብርሃን</translation>
 <translation id="2727977024730340865">አነስተኛ ኃይል ወዳለው ባትሪ መሙያ ተሰክቷል። የባትሪ መሙላት አስተማማኝ ላይሆን ይችላል።</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">አትረብሽ የሚለውን አብራ ወይም አጥፋ። <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">በወላጅ ኮድ መሣሪያን ክፈት</translation>
 <translation id="4702647871202761252">የግላዊነት ማያ ገጽ ጠፍቷል</translation>
+<translation id="4705716602320768426">የፋይል ግብረመልስ</translation>
 <translation id="4710243778082831592">የIME ቅንብሮች</translation>
 <translation id="4731797938093519117">የወላጅ መዳረሻ</translation>
 <translation id="4734965478015604180">አግድማዊ</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">በርቷል</translation>
+<translation id="5920710855273935292">የማይክሮፎን ድምጽ ተዘግቷል።</translation>
 <translation id="5947494881799873997">አድህር</translation>
 <translation id="595202126637698455">አፈጻጸም መከታተያ ነቅቷል</translation>
 <translation id="5957083217255311415">የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል።</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 7d5c5082..8652f6f 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">خروج من كل الحسابات</translation>
 <translation id="2277103315734023688">الانتقال إلى الأمام</translation>
 <translation id="2292698582925480719">مقياس العرض</translation>
+<translation id="2295777434187870477">الميكروفون مفعّل، وسيؤدي التبديل إلى كتم المُدخَلات.</translation>
 <translation id="2298170939937364391">‏تم تفعيل ميزة "المكبِّر بملء الشاشة". يمكنك إيقافها بالضغط على Ctrl+Search+M مرة أخرى.</translation>
 <translation id="2302092602801625023">‏تتم إدارة هذا الحساب من خلال Family Link</translation>
 <translation id="2303600792989757991">نظرة عامة لنافذة التبديل</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">انقر واسحب</translation>
 <translation id="2700493154570097719">تعيين لوحة المفاتيح</translation>
 <translation id="2704781753052663061">‏الانضمام إلى شبكات Wi-Fi أخرى</translation>
+<translation id="2705001408393684014">تبديل الميكروفون: <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">الإضاءة الليلية</translation>
 <translation id="2727977024730340865">تمّ توصيل شاحن منخفض الطاقة. لذا قد لا تكون عملية شحن البطارية جديرة بالثقة.</translation>
 <translation id="2792498699870441125">‏Alt+مفتاح البحث</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">تبديل حالة "عدم الإزعاج" <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">فتح قفل الجهاز باستخدام رمز الوالدين</translation>
 <translation id="4702647871202761252">تم إيقاف شاشة الخصوصية.</translation>
+<translation id="4705716602320768426">تقديم تعليقات</translation>
 <translation id="4710243778082831592">‏إعدادات أداة IME</translation>
 <translation id="4731797938093519117">وصول أحد الوالدين</translation>
 <translation id="4734965478015604180">أفقي</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">مفعّل</translation>
+<translation id="5920710855273935292">تم كتم الميكروفون.</translation>
 <translation id="5947494881799873997">التراجع عن الإجراء</translation>
 <translation id="595202126637698455">تم تفعيل تتبع مستوى الأداء</translation>
 <translation id="5957083217255311415">تم إيقاف ميزة بيانات الجوّال.</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 1010342..f3d1cae 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Hamısından çıxın</translation>
 <translation id="2277103315734023688">İrəli çəkin</translation>
 <translation id="2292698582925480719">Miqyası göstərin</translation>
+<translation id="2295777434187870477">Mikrofon aktivdir, dəyişdirdikdə daxiletmə səssiz ediləcək.</translation>
 <translation id="2298170939937364391">Tam Ekran Böyüdücüsü aktiv edildi. Rejimi deaktiv etmək üçün Ctrl+Search+M düymələrinə basın.</translation>
 <translation id="2302092602801625023">Bu hesab Family Link tərəfindən idarə olunur</translation>
 <translation id="2303600792989757991">Pəncərə ümumi görünüşünə keçirin</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klikləyin və çəkin</translation>
 <translation id="2700493154570097719">Klaviaturanı ayarlayın</translation>
 <translation id="2704781753052663061">Digər Wi-Fi şəbəkələrinə qoşulun</translation>
+<translation id="2705001408393684014">Mikrofonu dəyişdirin. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Gecə İşığı</translation>
 <translation id="2727977024730340865">Zəif şarjerə qoşulub. Ola bilər ki, enerji dolmasın.</translation>
 <translation id="2792498699870441125">Alt+Axtarış</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">"Narahat etməyin" rejiminə keçin. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Cihazı valideyn kodu ilə kiliddən çıxarın</translation>
 <translation id="4702647871202761252">Məxfilik ekranı deaktivdir</translation>
+<translation id="4705716602320768426">Rəy göndərin</translation>
 <translation id="4710243778082831592">IME ayarları</translation>
 <translation id="4731797938093519117">Valideyn girişi</translation>
 <translation id="4734965478015604180">Üfüqi</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Aktiv</translation>
+<translation id="5920710855273935292">Mikrofon səssiz edilib.</translation>
 <translation id="5947494881799873997">Geri dönün</translation>
 <translation id="595202126637698455">Fəaliyyət izləməsi aktiv edildi</translation>
 <translation id="5957083217255311415">Mobil data deaktiv edildi.</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index ae3f7263..9802365 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Выйсці адусюль</translation>
 <translation id="2277103315734023688">Перайсці ўперад</translation>
 <translation id="2292698582925480719">Маштаб паказу</translation>
+<translation id="2295777434187870477">Мікрафон уключаны, выключыць яго можна з дапамогай гэтага пераключальніка.</translation>
 <translation id="2298170939937364391">Уключана поўнаэкранная лупа. Каб выключыць яе, зноў націсніце Ctrl + Пошук + M.</translation>
 <translation id="2302092602801625023">Гэты ўліковы запіс кіруецца праз Family Link</translation>
 <translation id="2303600792989757991">Уключэнне агляду вокнаў</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Націснуць і перацягнуць</translation>
 <translation id="2700493154570097719">Наладзьце клавіятуру</translation>
 <translation id="2704781753052663061">Падключыцца да іншых сетак Wi-Fi</translation>
+<translation id="2705001408393684014">Уключыць або выключыць мікрафон. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Начны рэжым</translation>
 <translation id="2727977024730340865">Падключана зарадная прылада нізкай магутнасці. Зарадка акумулятара можа быць нестабільнай.</translation>
 <translation id="2792498699870441125">Alt+Пошук</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Уключэнне рэжыму "Не турбаваць". <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Разблакіруйце прыладу бацькоўскім кодам</translation>
 <translation id="4702647871202761252">Экран прыватнасці выключаны</translation>
+<translation id="4705716602320768426">Водгук па файле.</translation>
 <translation id="4710243778082831592">Налады IME</translation>
 <translation id="4731797938093519117">Бацькоўскі доступ</translation>
 <translation id="4734965478015604180">Гарызантальна</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Уключана</translation>
+<translation id="5920710855273935292">Мікрафон выключаны.</translation>
 <translation id="5947494881799873997">Вярнуць</translation>
 <translation id="595202126637698455">Уключана трасіроўка прадукцыйнасці</translation>
 <translation id="5957083217255311415">Мабільная перадача даных выключана.</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 0e1b7a9e..4e4e751 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Odhlásit vše</translation>
 <translation id="2277103315734023688">Přetočit dopředu</translation>
 <translation id="2292698582925480719">Měřítko displeje</translation>
+<translation id="2295777434187870477">Mikrofon je zapnutý, přepnutím ho ztlumíte.</translation>
 <translation id="2298170939937364391">Je zapnutá lupa celé obrazovky. Vypnete ji opětovným stisknutím kombinace kláves Ctrl+Hledat+M.</translation>
 <translation id="2302092602801625023">Tento účet spravuje služba Family Link</translation>
 <translation id="2303600792989757991">Přepnutí přehledu okna</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Kliknout a přetáhnout</translation>
 <translation id="2700493154570097719">Nastavit klávesnici</translation>
 <translation id="2704781753052663061">Připojit se k dalším sítím Wi-Fi</translation>
+<translation id="2705001408393684014">Přepnout mikrofon. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Noční režim</translation>
 <translation id="2727977024730340865">Byla připojena nabíječka s nízkým výkonem. Nabíjení baterie nemusí probíhat spolehlivě.</translation>
 <translation id="2792498699870441125">Alt + Vyhledávání</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Přepnout možnost Nerušit. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Odemkněte zařízení rodičovským kódem</translation>
 <translation id="4702647871202761252">Obrazovka ochrany soukromí je vypnutá</translation>
+<translation id="4705716602320768426">Poslat zpětnou vazbu</translation>
 <translation id="4710243778082831592">Nastavení editoru IME</translation>
 <translation id="4731797938093519117">Rodičovský přístup</translation>
 <translation id="4734965478015604180">Na šířku</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> <ph name="MAIL" /></translation>
 <translation id="5916664084637901428">Zapnuto</translation>
+<translation id="5920710855273935292">Mikrofon je ztlumen.</translation>
 <translation id="5947494881799873997">Vrátit zpět</translation>
 <translation id="595202126637698455">Sledování výkonu aktivováno</translation>
 <translation id="5957083217255311415">Mobilní data jsou vypnuta.</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 9d156a4..232fddee 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Alle abmelden</translation>
 <translation id="2277103315734023688">Vorwärts springen</translation>
 <translation id="2292698582925480719">Displaymaßstab</translation>
+<translation id="2295777434187870477">Mikrofon ist an. Sie können es hier stummschalten.</translation>
 <translation id="2298170939937364391">Vollbildlupe aktiviert. Wenn Sie sie deaktivieren möchten, drücken Sie noch einmal Strg + Suchtaste + M.</translation>
 <translation id="2302092602801625023">Dieses Konto wird über Family Link verwaltet</translation>
 <translation id="2303600792989757991">Fensterübersicht umschalten</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klicken und ziehen</translation>
 <translation id="2700493154570097719">Tastatur einrichten</translation>
 <translation id="2704781753052663061">Mit anderen WLANs verbinden</translation>
+<translation id="2705001408393684014">Mikrofon ein-/ausschalten. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Nachtlicht</translation>
 <translation id="2727977024730340865">Das Gerät ist an ein Schwachstrom-Ladegerät angeschlossen. Möglicherweise kann der Akku nicht zuverlässig aufgeladen werden.</translation>
 <translation id="2792498699870441125">Alt+Suchtaste</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">"Bitte nicht stören" aktivieren/deaktivieren. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Gerät mit Elterncode entsperren</translation>
 <translation id="4702647871202761252">Der Datenschutzbildschirm ist momentan deaktiviert</translation>
+<translation id="4705716602320768426">Feedback geben</translation>
 <translation id="4710243778082831592">IME-Einstellungen</translation>
 <translation id="4731797938093519117">Elternfreigabe</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Umschalttaste + Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">An</translation>
+<translation id="5920710855273935292">Mikrofon ist stummgeschaltet.</translation>
 <translation id="5947494881799873997">Rückgängig machen</translation>
 <translation id="595202126637698455">Leistungsnachverfolgung aktiviert</translation>
 <translation id="5957083217255311415">Mobile Daten sind deaktiviert.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 3c4faf6..175665e 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Salir de todo</translation>
 <translation id="2277103315734023688">Buscar más adelante</translation>
 <translation id="2292698582925480719">Escala de visualización</translation>
+<translation id="2295777434187870477">El micrófono está activado. Si lo seleccionas, se silenciará.</translation>
 <translation id="2298170939937364391">Se habilitó la lupa de pantalla completa. Presiona Ctrl+Buscar+M de nuevo para desactivarla.</translation>
 <translation id="2302092602801625023">Esta cuenta está administrada por Family Link</translation>
 <translation id="2303600792989757991">Activar vista general de ventanas</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Hacer clic y arrastrar</translation>
 <translation id="2700493154570097719">Establecer el teclado</translation>
 <translation id="2704781753052663061">Unirse a otras redes Wi-Fi</translation>
+<translation id="2705001408393684014">Activa o desactiva el micrófono. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727977024730340865">Conexión a un cargador de baja potencia. Es posible que la carga de la batería no sea confiable.</translation>
 <translation id="2792498699870441125">Alt+tecla de búsqueda</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Activa o desactiva la función No interrumpir. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Desbloquea el dispositivo con el código parental</translation>
 <translation id="4702647871202761252">La pantalla de privacidad está desactivada</translation>
+<translation id="4705716602320768426">Enviar comentarios</translation>
 <translation id="4710243778082831592">Configuración de IME</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Mayúscula + Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Activado</translation>
+<translation id="5920710855273935292">El micrófono está silenciado.</translation>
 <translation id="5947494881799873997">Revertir</translation>
 <translation id="595202126637698455">Seguimiento de rendimiento habilitado</translation>
 <translation id="5957083217255311415">Los datos móviles están desactivados.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 1504c91..273c63d 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Cerrar sesiones</translation>
 <translation id="2277103315734023688">Ir hacia delante</translation>
 <translation id="2292698582925480719">Escala de pantalla</translation>
+<translation id="2295777434187870477">El micrófono está activado. Utiliza el botón para silenciarlo.</translation>
 <translation id="2298170939937364391">Se ha habilitado la lupa de pantalla completa. Pulsa Ctrl + tecla de búsqueda + M de nuevo para desactivarla.</translation>
 <translation id="2302092602801625023">Esta cuenta se gestiona con Family Link</translation>
 <translation id="2303600792989757991">Activar descripción general de ventanas</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Hacer clic y arrastrar</translation>
 <translation id="2700493154570097719">Elegir el teclado</translation>
 <translation id="2704781753052663061">Conectarse a otras redes Wi‑Fi</translation>
+<translation id="2705001408393684014">Activar o desactivar micrófono. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727977024730340865">Conectado a un cargador de baja potencia. Es posible que la carga de la batería no sea fiable.</translation>
 <translation id="2792498699870441125">Alt+tecla de búsqueda</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Activar o desactivar el modo No molestar. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Desbloquear el dispositivo con código parental</translation>
 <translation id="4702647871202761252">La pantalla de privacidad está desactivada</translation>
+<translation id="4705716602320768426">Comentarios sobre el archivo</translation>
 <translation id="4710243778082831592">Ajustes de IME</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Mayús+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Activado</translation>
+<translation id="5920710855273935292">El micrófono está silenciado.</translation>
 <translation id="5947494881799873997">Deshacer</translation>
 <translation id="595202126637698455">Se ha habilitado el control del rendimiento</translation>
 <translation id="5957083217255311415">Los datos móviles están desactivados.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 2c9298c..33ea61d9 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Logi kõik kasutajad välja</translation>
 <translation id="2277103315734023688">Keri edasi</translation>
 <translation id="2292698582925480719">Ekraani skaala</translation>
+<translation id="2295777434187870477">Mikrofon on sees, lülitamisel sisend vaigistatakse.</translation>
 <translation id="2298170939937364391">Täisekraani suurendus on lubatud. Vajutage selle väljalülitamiseks uuesti klahvikombinatsiooni Ctrl + otsinguklahv + M.</translation>
 <translation id="2302092602801625023">Kontot haldab Family Link</translation>
 <translation id="2303600792989757991">Akna ülevaate sisse- ja väljalülitamine</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klõpsamine ja lohistamine</translation>
 <translation id="2700493154570097719">Valige klaviatuur</translation>
 <translation id="2704781753052663061">Muude WiFi-võrkudega liitumine</translation>
+<translation id="2705001408393684014">Lülitage mikrofoni. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Öövalgus</translation>
 <translation id="2727977024730340865">Ühendatud väikese energiakuluga laadijaga. Aku laadimine võib olla ebastabiilne.</translation>
 <translation id="2792498699870441125">Alt + otsinguklahv</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Lülitab režiimi Mitte segada sisse või välja. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Avage seade lapsevanema koodiga</translation>
 <translation id="4702647871202761252">Privaatsuskuva on väljas</translation>
+<translation id="4705716602320768426">Tagasiside esitamine</translation>
 <translation id="4710243778082831592">IME seaded</translation>
 <translation id="4731797938093519117">Vanema juurdepääs</translation>
 <translation id="4734965478015604180">Horisontaalne</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Tõstuklahv + ESC</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Sees</translation>
+<translation id="5920710855273935292">Mikrofon on vaigistatud.</translation>
 <translation id="5947494881799873997">Ennista</translation>
 <translation id="595202126637698455">Toimivuse jälgimine on lubatud</translation>
 <translation id="5957083217255311415">Mobiilne andmeside on välja lülitatud.</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 81c530b1..7b7a2f5a 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Amaitu guztien saioa</translation>
 <translation id="2277103315734023688">Aurreratu</translation>
 <translation id="2292698582925480719">Pantailaren eskala</translation>
+<translation id="2295777434187870477">Mikrofonoa aktibatuta dago. Aldatzen baduzu, audioa desaktibatuko da.</translation>
 <translation id="2298170939937364391">Gaitu da pantaila osoko lupa. Desaktibatzeko, sakatu berriro Ktrl + Bilatu + M.</translation>
 <translation id="2302092602801625023">Kontua Family Link bidez kudeatzen da</translation>
 <translation id="2303600792989757991">Aldatu leihoen ikuspegi orokorra</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Sakatu eta arrastatu</translation>
 <translation id="2700493154570097719">Zehaztu teklatua</translation>
 <translation id="2704781753052663061">Konektatu beste wifi-sare batzuetara</translation>
+<translation id="2705001408393684014">Aktibatu/Desaktibatu mikrofonoa. <ph name="STATE_TEXT" />.</translation>
 <translation id="2718395828230677721">Gaueko argia</translation>
 <translation id="2727977024730340865">Energia gutxiko kargagailu bat entxufatu duzu. Agian bateria kargatzeko prozesua ez da fidagarria izango.</translation>
 <translation id="2792498699870441125">Alt + Bilaketa</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Gaitu/Desgaitu ez molestatzeko modua. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Desblokeatu gailua gurasoen kodearekin</translation>
 <translation id="4702647871202761252">Desaktibatuta dago pribatutasun-pantaila</translation>
+<translation id="4705716602320768426">Fitxategiari buruzko oharrak</translation>
 <translation id="4710243778082831592">IME eginbidearen ezarpenak</translation>
 <translation id="4731797938093519117">Gurasoen sarbidea</translation>
 <translation id="4734965478015604180">Horizontala</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Maius + Ihes</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Aktibatuta</translation>
+<translation id="5920710855273935292">Mikrofonoa desaktibatuta dago.</translation>
 <translation id="5947494881799873997">Leheneratu</translation>
 <translation id="595202126637698455">Errendimenduaren jarraipena egiteko aukera gaitu da</translation>
 <translation id="5957083217255311415">Desaktibatuta dago datu-konexioa.</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 84e6f4c..ee099ea3 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">خروج همه از سیستم</translation>
 <translation id="2277103315734023688">رفتن به جلو</translation>
 <translation id="2292698582925480719">مقیاس نمایش</translation>
+<translation id="2295777434187870477">میکروفون روشن است، با تغییر وضعیت صامت می‌شود.</translation>
 <translation id="2298170939937364391">‏«ذره‌بین تمام‌صفحه» فعال شد. برای خاموش کردن آن، Ctrl+Search+M را دوباره فشار دهید.</translation>
 <translation id="2302092602801625023">‏این حساب با Family Link مدیریت می‌شود</translation>
 <translation id="2303600792989757991">مروری کلی بر پنجره تغییر حالت</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">کلیک کنید و بکشید</translation>
 <translation id="2700493154570097719">تنظیم صفحه‌کلید</translation>
 <translation id="2704781753052663061">‏افزودن دیگر شبکه‌های Wi-Fi</translation>
+<translation id="2705001408393684014">روشن/خاموش کردن میکروفون. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">نور شب</translation>
 <translation id="2727977024730340865">باتری به شارژر برق ضعیف متصل است. شارژ باتری ممکن است قابل اطمینان نباشد.</translation>
 <translation id="2792498699870441125">‏Alt+جستجو</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">روشن/خاموش کردن «مزاحم نشوید». <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">باز کردن قفل دستگاه با کد والدین</translation>
 <translation id="4702647871202761252">صفحه حریم‌خصوصی خاموش است</translation>
+<translation id="4705716602320768426">ثبت بازخورد</translation>
 <translation id="4710243778082831592">‏تنظیمات IME</translation>
 <translation id="4731797938093519117">دسترسی والدین</translation>
 <translation id="4734965478015604180">افقی</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">روشن</translation>
+<translation id="5920710855273935292">میکروفون صامت است.</translation>
 <translation id="5947494881799873997">برگرداندن</translation>
 <translation id="595202126637698455">ردیابی عملکرد فعال شد</translation>
 <translation id="5957083217255311415">داده تلفن همراه خاموش است.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 80b5ce3..0c1a9b3 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Kirjaa kaikki ulos</translation>
 <translation id="2277103315734023688">Kelaa eteenpäin</translation>
 <translation id="2292698582925480719">Näytön skaalaus</translation>
+<translation id="2295777434187870477">Mikrofoni on päällä, asetuksen vaihtaminen mykistää äänitulon.</translation>
 <translation id="2298170939937364391">Koko näytön suurennus on käytössä. Poista se käytöstä painamalla uudelleen Ctrl + haku + M.</translation>
 <translation id="2302092602801625023">Tiliä ylläpidetään Family Linkissä</translation>
 <translation id="2303600792989757991">Vaihda ikkunan yleiskatsausta</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klikkaa ja vedä</translation>
 <translation id="2700493154570097719">Määritä näppäimistö</translation>
 <translation id="2704781753052663061">Liity muihin Wi-Fi-verkkoihin</translation>
+<translation id="2705001408393684014">Mikrofoni päälle/pois. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Yövalo</translation>
 <translation id="2727977024730340865">Pienitehoinen laturi kytketty. Akku ei ehkä lataudu luotettavasti.</translation>
 <translation id="2792498699870441125">Alt + haku</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Älä häiritse ‑tila päälle tai pois. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Avaa lukitus vanhemman koodilla</translation>
 <translation id="4702647871202761252">Näytönsuoja on pois päältä</translation>
+<translation id="4705716602320768426">Tiedostopalaute</translation>
 <translation id="4710243778082831592">IME-asetukset</translation>
 <translation id="4731797938093519117">Avaus vanhemmille</translation>
 <translation id="4734965478015604180">Vaakasuora</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Päällä</translation>
+<translation id="5920710855273935292">Mikrofoni on mykistetty.</translation>
 <translation id="5947494881799873997">Palauta</translation>
 <translation id="595202126637698455">Tehokkuuden seuranta on käytössä</translation>
 <translation id="5957083217255311415">Mobiilidata on poistettu käytöstä.</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index bc60b331..91796f47 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">I-sign out ang lahat</translation>
 <translation id="2277103315734023688">Mag-seek Pasulong</translation>
 <translation id="2292698582925480719">Scale ng display</translation>
+<translation id="2295777434187870477">Naka-on ang mikropono, mamu-mute ang input kapag nag-toggle.</translation>
 <translation id="2298170939937364391">Na-enable ang Pang-magnify ng Full-screen. Pindutin ulit ang Ctrl+Search+M para i-off ito.</translation>
 <translation id="2302092602801625023">Pinapamahalaan ng Family Link ang account na ito</translation>
 <translation id="2303600792989757991">I-toggle ang window ng pangkalahatang-ideya</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">I-click at i-drag</translation>
 <translation id="2700493154570097719">Itakda ang iyong keyboard</translation>
 <translation id="2704781753052663061">Sumali sa iba pang Wi-Fi network</translation>
+<translation id="2705001408393684014">I-toggle ang Mikropono. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Night Light</translation>
 <translation id="2727977024730340865">Naka-saksak sa isang low-power charger. Maaaring hindi maging tiyak ang pag-charge ng baterya.</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">I-toggle ang Huwag istorbohin. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">I-unlock ang device gamit ang parent code</translation>
 <translation id="4702647871202761252">Naka-off ang privacy screen</translation>
+<translation id="4705716602320768426">Magbigay ng feedback</translation>
 <translation id="4710243778082831592">Mga Setting ng IME</translation>
 <translation id="4731797938093519117">Pangunahing access</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Naka-on</translation>
+<translation id="5920710855273935292">Naka-mute ang mikropono.</translation>
 <translation id="5947494881799873997">I-revert</translation>
 <translation id="595202126637698455">Naka-enable ang pagte-trace sa pagganap</translation>
 <translation id="5957083217255311415">Naka-off ang mobile data.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 81af68fc..97ba184 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Déconnecter tous les utilisateurs</translation>
 <translation id="2277103315734023688">Rechercher vers l'avant</translation>
 <translation id="2292698582925480719">Échelle d'affichage</translation>
+<translation id="2295777434187870477">Le microphone est activé, si vous le désactivez, l'entrée sonore sera aussi désactivée.</translation>
 <translation id="2298170939937364391">La loupe en mode plein écran a été activée. Appuyez à nouveau sur Ctrl+Recherche+M pour la désactiver.</translation>
 <translation id="2302092602801625023">Ce compte est géré par Family Link</translation>
 <translation id="2303600792989757991">Activer ou désactiver la vue d'ensemble des fenêtres</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Cliquez et faites glisser</translation>
 <translation id="2700493154570097719">Définir votre clavier</translation>
 <translation id="2704781753052663061">Se connecter à d'autres réseaux Wi-Fi</translation>
+<translation id="2705001408393684014">Activer ou désactiver le microphone. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Éclairage nocturne</translation>
 <translation id="2727977024730340865">L'appareil est branché à un chargeur de faible puissance. Il se peut que la recharge de la batterie ne soit pas fiable.</translation>
 <translation id="2792498699870441125">Alt + Recherche</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Basculer le mode Ne pas déranger. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Déverrouiller l'appareil avec le code parental</translation>
 <translation id="4702647871202761252">L'écran de confidentialité est désactivé</translation>
+<translation id="4705716602320768426">Classer le commentaire</translation>
 <translation id="4710243778082831592">Paramètres d'éditeur de mode d'entrée (IME)</translation>
 <translation id="4731797938093519117">Accès parental</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Maj+Échap</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Activé</translation>
+<translation id="5920710855273935292">Le microphone est désactivé.</translation>
 <translation id="5947494881799873997">Rétablir</translation>
 <translation id="595202126637698455">Suivi des performances activé</translation>
 <translation id="5957083217255311415">Les données mobiles sont désactivées.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 1e2b797..03a36782 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Déconnecter tous les utilisateurs</translation>
 <translation id="2277103315734023688">Avance rapide</translation>
 <translation id="2292698582925480719">Échelle d'affichage</translation>
+<translation id="2295777434187870477">Le son du micro est activé et peut être coupé si vous déplacez le curseur vers la gauche.</translation>
 <translation id="2298170939937364391">Le mode Loupe plein écran est activé. Appuyez de nouveau sur Ctrl+Recherche+M pour le désactiver.</translation>
 <translation id="2302092602801625023">Ce compte est géré par Family Link</translation>
 <translation id="2303600792989757991">Activer/Désactiver la vue d'ensemble des fenêtres</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Cliquer et faire glisser</translation>
 <translation id="2700493154570097719">Définir votre clavier</translation>
 <translation id="2704781753052663061">Rejoindre d'autres réseaux Wi-Fi</translation>
+<translation id="2705001408393684014"><ph name="STATE_TEXT" /> Déplacez le curseur vers la droite pour activer le son.</translation>
 <translation id="2718395828230677721">Éclairage nocturne</translation>
 <translation id="2727977024730340865">L'appareil est branché à un chargeur de faible puissance. Il se peut que la charge ne soit pas fiable.</translation>
 <translation id="2792498699870441125">Alt + Recherche</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Activer/Désactiver le mode Ne pas déranger. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Déverrouiller l'appareil avec le code parental</translation>
 <translation id="4702647871202761252">L'écran de confidentialité est désactivé</translation>
+<translation id="4705716602320768426">Classer le commentaire</translation>
 <translation id="4710243778082831592">Paramètres IME</translation>
 <translation id="4731797938093519117">Accès parental</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Maj+Échap</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Activé</translation>
+<translation id="5920710855273935292">Le son du micro est coupé.</translation>
 <translation id="5947494881799873997">Rétablir</translation>
 <translation id="595202126637698455">Suivi des performances activé</translation>
 <translation id="5957083217255311415">Les données mobiles sont désactivées.</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index fcf7318..6b4f38f 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Pechar a sesión de todos os usuarios</translation>
 <translation id="2277103315734023688">Avanzar</translation>
 <translation id="2292698582925480719">Escala de visualización</translation>
+<translation id="2295777434187870477">O micrófono está activado. Utiliza o botón para silencialo.</translation>
 <translation id="2298170939937364391">Activouse a lupa de pantalla completa. Preme Ctrl+Buscar+M de novo para desactivala.</translation>
 <translation id="2302092602801625023">Esta conta está xestionada por Family Link</translation>
 <translation id="2303600792989757991">Alternar vista xeral da ventá</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Facer clic e arrastrar</translation>
 <translation id="2700493154570097719">Definir teclado</translation>
 <translation id="2704781753052663061">Unirse a outras redes wifi</translation>
+<translation id="2705001408393684014">Activar/desactivar micrófono. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727977024730340865">Conectado a un cargador de baixa potencia. É posible que a carga da batería non sexa fiable.</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Activar/desactivar o modo Non molestar. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Desbloquea o dispositivo co código parental</translation>
 <translation id="4702647871202761252">A pantalla de privacidade está desactivada</translation>
+<translation id="4705716602320768426">Enviar comentarios</translation>
 <translation id="4710243778082831592">Configuración de IME</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Maiúsculas+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Si</translation>
+<translation id="5920710855273935292">O micrófono está silenciado.</translation>
 <translation id="5947494881799873997">Reverter</translation>
 <translation id="595202126637698455">Seguimento do rendemento activado</translation>
 <translation id="5957083217255311415">Os datos móbiles están desactivados.</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 733e01d..696b52b2 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">सभी को साइन आउट करें</translation>
 <translation id="2277103315734023688">आगे बढ़ाएं</translation>
 <translation id="2292698582925480719">डिसप्ले पैमाना</translation>
+<translation id="2295777434187870477">माइक चालू है, टॉगल करने से इनपुट बंद हो जाएगा.</translation>
 <translation id="2298170939937364391">फ़ुलस्क्रीन पर सामग्री को बड़ा करके दिखाने की सुविधा चालू है. उसे टॉगल करके बंद करने के लिए फिर से Ctrl+Search+M दबाएं.</translation>
 <translation id="2302092602801625023">यह खाता Family Link के ज़रिए प्रबंधित किया जाता है</translation>
 <translation id="2303600792989757991">टॉगल विंडो का संक्षिप्त विवरण</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">क्लिक करके खींचें और छोड़ें</translation>
 <translation id="2700493154570097719">अपना कीबोर्ड सेट करें</translation>
 <translation id="2704781753052663061">अन्य वाई-फ़ाई नेटवर्क से कनेक्ट करें</translation>
+<translation id="2705001408393684014">माइक टॉगल करें. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">नाइट लाइट</translation>
 <translation id="2727977024730340865">कम-शक्ति वाले चार्जर में प्लग इन करें. बैटरी चार्ज करना संभवत: विश्वसनीय नहीं होगा.</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">'परेशान न करें' को टॉगल करें. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">माता-पिता के कोड से डिवाइस अनलॉक करें</translation>
 <translation id="4702647871202761252">निजता स्क्रीन बंद है</translation>
+<translation id="4705716602320768426">फ़ाइल के बारे में सुझाव/शिकायत/राय दें</translation>
 <translation id="4710243778082831592">IME की सेटिंग</translation>
 <translation id="4731797938093519117">अभिभावक ऐक्सेस</translation>
 <translation id="4734965478015604180">क्षैतिज</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">चालू</translation>
+<translation id="5920710855273935292">माइक म्यूट है.</translation>
 <translation id="5947494881799873997">वापस लाएं</translation>
 <translation id="595202126637698455">निष्पादन ट्रेसिंग सक्षम है</translation>
 <translation id="5957083217255311415">मोबाइल डेटा बंद कर दिया गया है.</translation>
@@ -512,7 +516,7 @@
 <translation id="7649070708921625228">सहायता</translation>
 <translation id="7654687942625752712">कंप्यूटर का बोलकर दिया गया जवाब बंद करने के लिए दोनों वॉल्यूम की पांच सेकंड तक दबाकर रखें.</translation>
 <translation id="7705524343798198388">वीपीएन</translation>
-<translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{एक सूचना}one{# सूचनाएं}other{# सूचनाएं}}</translation>
+<translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 सूचना}one{# सूचनाएं}other{# सूचनाएं}}</translation>
 <translation id="7749443890790263709">ज़्यादा से ज़्यादा इतने ही डेस्क जोड़े जा सकते हैं.</translation>
 <translation id="776344839111254542">अपडेट के विवरण देखने के लिए क्लिक करें</translation>
 <translation id="7780159184141939021">स्क्रीन घुमाएं</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 03685745..e44aee4f 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Keluarkan semua pengguna</translation>
 <translation id="2277103315734023688">Cari Maju</translation>
 <translation id="2292698582925480719">Skala layar</translation>
+<translation id="2295777434187870477">Mikrofon aktif, mengalihkan tombol akan membisukan masukan.</translation>
 <translation id="2298170939937364391">Kaca Pembesar Layar diaktifkan. Tekan Ctrl+Penelusuran+M lagi untuk menonaktifkannya.</translation>
 <translation id="2302092602801625023">Akun ini dikelola oleh Family Link</translation>
 <translation id="2303600792989757991">Beralih ikhtisar jendela</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klik dan tarik</translation>
 <translation id="2700493154570097719">Setel keyboard Anda</translation>
 <translation id="2704781753052663061">Bergabung dengan jaringan Wi-Fi lain</translation>
+<translation id="2705001408393684014">Alihkan Mikrofon. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Cahaya Malam</translation>
 <translation id="2727977024730340865">Dipasang ke pengisi daya rendah. Pengisian daya baterai mungkin tidak dapat diandalkan.</translation>
 <translation id="2792498699870441125">Alt+Telusuri</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Alihkan mode Jangan Ganggu. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Buka kunci perangkat dengan kode orang tua</translation>
 <translation id="4702647871202761252">Layar privasi nonaktif</translation>
+<translation id="4705716602320768426">Kirim masukan</translation>
 <translation id="4710243778082831592">Setelan IME</translation>
 <translation id="4731797938093519117">Akses orang tua</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Aktif</translation>
+<translation id="5920710855273935292">Mikrofon dibisukan.</translation>
 <translation id="5947494881799873997">Kembalikan</translation>
 <translation id="595202126637698455">Kinerja pelacakan aktif</translation>
 <translation id="5957083217255311415">Data seluler dinonaktifkan.</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 14a6308..440f8af 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">すべてログアウト</translation>
 <translation id="2277103315734023688">前方に移動</translation>
 <translation id="2292698582925480719">表示スケール</translation>
+<translation id="2295777434187870477">マイクはオンになっています。切り替えると入力がミュートされます。</translation>
 <translation id="2298170939937364391">全画面拡大鏡がオンになっています。オフにするには Ctrl+検索+M キーをもう一度押します。</translation>
 <translation id="2302092602801625023">このアカウントはファミリー リンクによって管理されています</translation>
 <translation id="2303600792989757991">ウィンドウ切り替えの概要</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">クリックしてドラッグ</translation>
 <translation id="2700493154570097719">キーボードを設定</translation>
 <translation id="2704781753052663061">他の Wi-Fi ネットワークに接続</translation>
+<translation id="2705001408393684014">マイクを切り替えます。<ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">夜間モード</translation>
 <translation id="2727977024730340865">低電力の充電器に接続しています。バッテリーが充電されない可能性があります。</translation>
 <translation id="2792498699870441125">Alt+ 検索</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">サイレント モードを切り替えます。<ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">保護者のコードでデバイスをロック解除</translation>
 <translation id="4702647871202761252">プライバシー スクリーンはオフになっています</translation>
+<translation id="4705716602320768426">ファイルのフィードバック</translation>
 <translation id="4710243778082831592">IME 設定</translation>
 <translation id="4731797938093519117">保護者によるアクセス</translation>
 <translation id="4734965478015604180">横</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" />(<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">オン</translation>
+<translation id="5920710855273935292">マイクはミュートされています。</translation>
 <translation id="5947494881799873997">元に戻す</translation>
 <translation id="595202126637698455">パフォーマンス追跡機能が有効です</translation>
 <translation id="5957083217255311415">モバイルデータ通信が無効になっています。</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 650e8a3..1a968d3a 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Барлығын шығару</translation>
 <translation id="2277103315734023688">Алға</translation>
 <translation id="2292698582925480719">Дисплей масштабы</translation>
+<translation id="2295777434187870477">Микрофон қосулы. Егер басқасына ауыссаңыз, кіріс дыбыс өшеді.</translation>
 <translation id="2298170939937364391">Толық экран ұлғайтқышы қосулы. Оны өшіру үшін Ctrl+Search+M пернелер тіркесімін қайта басыңыз.</translation>
 <translation id="2302092602801625023">Бұл есептік жазба Family Link арқылы басқарылады</translation>
 <translation id="2303600792989757991">Терезеде шолу режимін ауыстыру</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Басу және сүйреу</translation>
 <translation id="2700493154570097719">Пернетақтаны орнатыңыз</translation>
 <translation id="2704781753052663061">Басқа Wi-Fi желілеріне қосылу</translation>
+<translation id="2705001408393684014">Басқа микрофонға ауысыңыз. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Түнгі жарық</translation>
 <translation id="2727977024730340865">Төмен қуатты зарядтағышқа жалғанған. Батареяны зарядтау кезінде қиындықтар болуы мүмкін.</translation>
 <translation id="2792498699870441125">Alt+Іздеу</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">"Мазаламау" режиміне ауысыңыз. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Құрылғының құлпын ата-ана кодымен ашыңыз</translation>
 <translation id="4702647871202761252">Құпиялылық экраны өшірулі.</translation>
+<translation id="4705716602320768426">Пікір жіберу</translation>
 <translation id="4710243778082831592">IME параметрлері</translation>
 <translation id="4731797938093519117">Ата-ананың кіру рұқсаты</translation>
 <translation id="4734965478015604180">Көлденең</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Қосу</translation>
+<translation id="5920710855273935292">Микрофон дыбысы өшірулі.</translation>
 <translation id="5947494881799873997">Қайтару</translation>
 <translation id="595202126637698455">Өнімділікті бақылау қосылған</translation>
 <translation id="5957083217255311415">Мобильдік деректер өшірулі.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 4065f94..6e744f3 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">ចាកចេញទាំងអស់</translation>
 <translation id="2277103315734023688">សា​ទៅមុខ</translation>
 <translation id="2292698582925480719">មាត្រដ្ឋានអេក្រង់</translation>
+<translation id="2295777434187870477">បានបើកមីក្រូហ្វូន ការបិទ/បើកនឹង​បិទសំឡេងរបស់ឧបករណ៍បញ្ចូលសំឡេង។</translation>
 <translation id="2298170939937364391">បានបើក​កម្មវិធី​ពង្រីក​ពេញ​អេក្រង់។ សូមចុច Ctrl+Search+M ម្ដងទៀត​ដើម្បី​បិទ​វា​។</translation>
 <translation id="2302092602801625023">គណនីនេះ​ត្រូវបាន​គ្រប់គ្រង​ដោយ Family Link</translation>
 <translation id="2303600792989757991">បិទបើកផ្ទាំងសង្ខេប</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">ចុចហើយអូស</translation>
 <translation id="2700493154570097719">កំណត់​ក្ដារចុច​របស់អ្នក</translation>
 <translation id="2704781753052663061">ភ្ជាប់​បណ្ដាញ Wi-Fi ផ្សេងទៀត</translation>
+<translation id="2705001408393684014">បិទ/បើកមីក្រូហ្វូន។ <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">ពន្លឺពេលយប់</translation>
 <translation id="2727977024730340865">បានដោតទៅឆ្នាំងសាកថាមពលខ្សោយ។ ការសាកថ្មប្រហែលជាមិនអាចជឿជាក់បានទេ។</translation>
 <translation id="2792498699870441125">Alt+ស្វែងរក</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">បិទ/បើក​មុខងារ​ "កុំរំខាន"។ <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">ដោះ​សោ​ឧបករណ៍​ដោយ​ប្រើ​កូដ​សម្រាប់​មាតា​បិតា</translation>
 <translation id="4702647871202761252">អេក្រង់​ឯកជនភាព​ត្រូវបានបិទ</translation>
+<translation id="4705716602320768426">ដាក់បញ្ជូនមតិកែលម្អ</translation>
 <translation id="4710243778082831592">ការកំណត់ IME</translation>
 <translation id="4731797938093519117">សិទ្ធិចូលប្រើប្រាស់​សម្រាប់មាតាបិតា</translation>
 <translation id="4734965478015604180">ផ្ដេក​</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">បើក</translation>
+<translation id="5920710855273935292">បានបិទសំឡេងមីក្រូហ្វូន។</translation>
 <translation id="5947494881799873997">ត្រលប់ក្រោយ</translation>
 <translation id="595202126637698455">ការតាមដានប្រតិបត្តិការបានបើកដំណើរការ</translation>
 <translation id="5957083217255311415">ទិន្នន័យ​ទូរសព្ទចល័ត​ត្រូវបានបិទ។</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index e4e57459..f25e2e1 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">모두 로그아웃</translation>
 <translation id="2277103315734023688">앞으로 탐색</translation>
 <translation id="2292698582925480719">디스플레이 배율</translation>
+<translation id="2295777434187870477">마이크가 켜져 있으며 전환하면 음소거됩니다.</translation>
 <translation id="2298170939937364391">전체 화면 돋보기가 사용 설정되었습니다. 사용 중지하려면 Ctrl+Search+M을 다시 누르세요.</translation>
 <translation id="2302092602801625023">Family Link에서 관리되는 계정입니다.</translation>
 <translation id="2303600792989757991">창 전환 개요</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">클릭하여 드래그</translation>
 <translation id="2700493154570097719">키보드 설정</translation>
 <translation id="2704781753052663061">다른 Wi-Fi 네트워크에 연결</translation>
+<translation id="2705001408393684014">마이크를 전환합니다. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">야간 조명</translation>
 <translation id="2727977024730340865">저출력 충전기에 연결되었습니다. 배터리 충전 상태가 불안정합니다.</translation>
 <translation id="2792498699870441125">Alt+검색 키</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">방해 금지 모드를 켜고 끕니다. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">부모 코드로 기기 잠금 해제</translation>
 <translation id="4702647871202761252">개인정보 보호 화면이 꺼져 있습니다</translation>
+<translation id="4705716602320768426">의견 보내기</translation>
 <translation id="4710243778082831592">IME 설정</translation>
 <translation id="4731797938093519117">부모 액세스</translation>
 <translation id="4734965478015604180">가로</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" />(<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">사용</translation>
+<translation id="5920710855273935292">마이크가 음소거되어 있습니다.</translation>
 <translation id="5947494881799873997">되돌리기</translation>
 <translation id="595202126637698455">성능 추적 사용 중</translation>
 <translation id="5957083217255311415">모바일 데이터가 사용 중지되었습니다.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 51b15b2..b1979d1 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Баарын чыгаруу</translation>
 <translation id="2277103315734023688">Алдыга түрдүрүү</translation>
 <translation id="2292698582925480719">Дисплей шкаласы</translation>
+<translation id="2295777434187870477">Микрофон күйүк, өчүрүү менен микрофондун үнү басылат.</translation>
 <translation id="2298170939937364391">Толук экран лупасы иштетилди. Аны өчүрүү үчүн Ctrl+Search+M баскычтарын кайра басыңыз.</translation>
 <translation id="2302092602801625023">Бул аккаунт Family Link аркылуу башкарылат</translation>
 <translation id="2303600792989757991">Терезеге ыкчам көз чаптырууга которуу</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Чыкылдатып, сүйрөө</translation>
 <translation id="2700493154570097719">Баскычтобуңузду тандаңыз</translation>
 <translation id="2704781753052663061">Башка Wi-Fi тармактарына кошулуу</translation>
+<translation id="2705001408393684014">Микрофонду өчүрүү/күйгүзүү. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Түнкү режим</translation>
 <translation id="2727977024730340865">Кубаттуулугу төмөн кубаттагычка сайылды. Батареяны кубаттоо аракети ишенимдүү эмес.</translation>
 <translation id="2792498699870441125">Alt+Издөө</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">"Тынчымды алба" режимин күйгүзүү/өчүрүү. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Түзмөктүн кулпусун ата-эненин коду менен ачуу</translation>
 <translation id="4702647871202761252">Купуялык экраны өчүк</translation>
+<translation id="4705716602320768426">Пикир билдирүү</translation>
 <translation id="4710243778082831592">IME жөндөөлөрү</translation>
 <translation id="4731797938093519117">Ата-эненин кирүү уруксаты</translation>
 <translation id="4734965478015604180">Туурасынан</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift + Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Күйүк</translation>
+<translation id="5920710855273935292">Микрофондун үнү өчүрүлдү.</translation>
 <translation id="5947494881799873997">Кайтаруу</translation>
 <translation id="595202126637698455">Иштин майнаптуулугуна көз салуу аракети иштетилди</translation>
 <translation id="5957083217255311415">Мобилдик Интернет өчүрүлгөн.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 4fdafe0ad..7f53a422 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Izrakstīt visus</translation>
 <translation id="2277103315734023688">Pāriet uz priekšu</translation>
 <translation id="2292698582925480719">Attēlojuma mērogs</translation>
+<translation id="2295777434187870477">Mikrofons ir ieslēgts. Pārslēdzot iestatījumu, tiks izslēgta ievade.</translation>
 <translation id="2298170939937364391">Pilnekrāna lupa ir iespējota. Lai to izslēgtu, vēlreiz nospiediet taustiņu kombināciju Ctrl+Search+M.</translation>
 <translation id="2302092602801625023">Šo kontu pārvalda lietotne Family Link.</translation>
 <translation id="2303600792989757991">Pārslēgt loga kopsavilkumu</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Noklikšķiniet un velciet</translation>
 <translation id="2700493154570097719">Iestatiet savu tastatūru</translation>
 <translation id="2704781753052663061">Pievienoties citiem Wi-Fi tīkliem</translation>
+<translation id="2705001408393684014">Pārslēgt mikrofonu. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Nakts režīms</translation>
 <translation id="2727977024730340865">Pievienots lādētājs ar mazu strāvas padevi. Akumulatora uzlāde var nebūt uzticama.</translation>
 <translation id="2792498699870441125">Alt+Meklēt</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Pārslēgt režīmu “Netraucēt”. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Ierīces atbloķēšana, ievadot vecāku kodu</translation>
 <translation id="4702647871202761252">Konfidencialitātes ekrāns ir izslēgts</translation>
+<translation id="4705716602320768426">Iesniegt atsauksmi</translation>
 <translation id="4710243778082831592">IME iestatījumi</translation>
 <translation id="4731797938093519117">Vecāku piekļuve</translation>
 <translation id="4734965478015604180">Horizontāli</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Iesl.</translation>
+<translation id="5920710855273935292">Mikrofons ir izslēgts.</translation>
 <translation id="5947494881799873997">Atjaunot</translation>
 <translation id="595202126637698455">Veiktspējas izsekošana ir iespējota</translation>
 <translation id="5957083217255311415">Mobilie dati ir izslēgti.</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index a540a01..b0cf52bf 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -18,7 +18,7 @@
 <translation id="1190609913194133056">Центар за известување</translation>
 <translation id="1195412055398077112">прескенирање</translation>
 <translation id="119944043368869598">Избриши ги сите</translation>
-<translation id="1199716647557067911">Дали сигурно сакате да го исклучите пристапот со прекинувачи?</translation>
+<translation id="1199716647557067911">Дали сигурно сакате да го исклучите „Пристапот со прекинувачи“?</translation>
 <translation id="1247372569136754018">Микрофон (внатрешен)</translation>
 <translation id="1252999807265626933">Се полни од <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Какво е времето?</translation>
@@ -436,7 +436,7 @@
 <translation id="6537924328260219877">Јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, батерија на телефонот: <ph name="BATTERY_STATUS" /></translation>
 <translation id="6542521951477560771">Емитување на <ph name="RECEIVER_NAME" /></translation>
 <translation id="6559976592393364813">Прашајте го администраторот</translation>
-<translation id="6584550827717945790">Исклучете го пристапот со прекинувачи</translation>
+<translation id="6584550827717945790">Исклучете го „Пристапот со прекинувачи“</translation>
 <translation id="6585808820553845416">Сесијата ќе заврши во <ph name="SESSION_TIME_REMAINING" />.</translation>
 <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, управувана од администраторот</translation>
 <translation id="6614169507485700968">Вклучен е екранот за приватност</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index e8593a4df..45ed95a 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Бүгдээс гарах</translation>
 <translation id="2277103315734023688">Урагшлуулах</translation>
 <translation id="2292698582925480719">Дэлгэцийн хэмжээс</translation>
+<translation id="2295777434187870477">Микрофон асаалттай байна. Унтраах нь оролтын дууг хаана.</translation>
 <translation id="2298170939937364391">Бүтэн дэлгэц томруулагчийг идэвхжүүлсэн. Үүнийг унтраахын тулд Ctrl+Хайх+M-г дахин дарна уу.</translation>
 <translation id="2302092602801625023">Энэ бүртгэлийг Family Link-р удирддаг</translation>
 <translation id="2303600792989757991">Цонхыг тоймлож харах</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Товшоод чирэх</translation>
 <translation id="2700493154570097719">Гараа тохируулах</translation>
 <translation id="2704781753052663061">Бусад Wi-Fi сүлжээнд нэгдэх</translation>
+<translation id="2705001408393684014">Микрофоныг унтраах/асаах. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Шөнийн гэрэл</translation>
 <translation id="2727977024730340865">Бага энергитэй цэнэглэгч залгасан байна. Тэжээлийг цэнэглэхгүй байж болох юм.</translation>
 <translation id="2792498699870441125">Alt+ Хайлт</translation>
@@ -297,6 +299,7 @@
 <translation id="4665114317261903604">Бүү саад бол горимыг унтраах/асаах. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Төхөөрөмжийн түгжээг эцэг эхийн кодоор тайлна уу</translation>
 <translation id="4702647871202761252">Нууцлалын дэлгэц унтраалттай байна</translation>
+<translation id="4705716602320768426">Cанал хүсэлт илгээх</translation>
 <translation id="4710243778082831592">IME тохиргоо</translation>
 <translation id="4731797938093519117">Эцэг эхийн хандалт</translation>
 <translation id="4734965478015604180">Хөндлөн</translation>
@@ -377,6 +380,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Асаах</translation>
+<translation id="5920710855273935292">Микрофоны дууг хаасан.</translation>
 <translation id="5947494881799873997">Буцаах</translation>
 <translation id="595202126637698455">Гүйцэтгэлийн ажиглалтыг идэвхжүүлсэн</translation>
 <translation id="5957083217255311415">Мобайл дата унтраалттай байна.</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 98fc1b9..02b201b 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -56,6 +56,7 @@
 <translation id="1570871743947603115">'ဘလူးတုသ်' ကို အဖွင့်အပိတ် ပြုလုပ်ရန်။ <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">ဤစက်ရှင်ရှိ သင့်လုပ်ဆောင်ချက်အားလုံးကို ဝင်ကြည့်နိုင်သည်</translation>
 <translation id="1608626060424371292">ဒီအသုံးပြုသူကို ဖယ်ရှားရန်</translation>
+<translation id="1632985212731562677">'ဆက်တင်များ &gt; အများသုံးစွဲနိုင်မှု' တွင် 'ခလုတ်သုံးခြင်း' ကို ပိတ်နိုင်သည်။</translation>
 <translation id="1654477262762802994">အသံဖြင့် စတင် စုံစမ်းမေးမြန်းရန်</translation>
 <translation id="1658406695958299976">ဝမ်းနည်းပါသည်။ သင့်စကားဝှက်ကို အတည်ပြု၍ မရသေးပါ။ မှတ်ချက်− သင့်စကားဝှက်အား မကြာသေးခင်က ပြောင်းထားလျှင် သင်ထွက်လိုက်ပြီးသည့်နောက်မှ ၎င်းစကားဝှက်အသစ်သည် အကျိုးသက်ရောက်မည်ဖြစ်သောကြောင့် ဤနေရာတွင် စကားဝှက်အဟောင်းကို အသုံးပြုပါ။</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ကျန်ပါသည်</translation>
@@ -182,6 +183,7 @@
 <translation id="3154351730702813399">စက်ပစ္စည်းစီမံခန့်ခွဲသူသည် သင့်အင်တာနက် အသုံးပြုမှုများကို စောင့်ကြည့်နိုင်ပါသည်။</translation>
 <translation id="3181441307743005334">ပြန်စရန် အချိန်အနည်းငယ် ကြာနိုင်သည်</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{စက်ပစ္စည်းတစ်ခုသို့ ချိတ်ထားသည်}other{စက်ပစ္စည်း # ခုသို့ ချိတ်ထားသည်}}</translation>
+<translation id="3203405173652969239">'ခလုတ်သုံးခြင်း' ဖွင့်ထားသည်</translation>
 <translation id="3207953481422525583">အသုံးပြုသူ ဆက်တင်များ</translation>
 <translation id="3217205077783620295">အသံဖွင့်ထားသည်၊ ပိတ်လိုက်ခြင်းဖြင့် အသံကိုတိတ်လိုက်ပါမည်။</translation>
 <translation id="3226991577105957773">+နောက်ထပ် <ph name="COUNT" /> ခု</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 5845c10..d898e18 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Logg alle av</translation>
 <translation id="2277103315734023688">Spol fremover</translation>
 <translation id="2292698582925480719">Visningsskala</translation>
+<translation id="2295777434187870477">Mikrofonen er på. Hvis du slår den av, kuttes lyden for innenheten.</translation>
 <translation id="2298170939937364391">Lupe for hele skjermen er slått på. Trykk på Ctrl + Søk + M igjen for å slå det av.</translation>
 <translation id="2302092602801625023">Denne kontoen er administrert av Family Link</translation>
 <translation id="2303600792989757991">Vis eller skjul vindusoversikten</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klikk og dra</translation>
 <translation id="2700493154570097719">Velg tastatur</translation>
 <translation id="2704781753052663061">Koble til andre Wi-Fi-nettverk</translation>
+<translation id="2705001408393684014">Slå av/på mikrofonen. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Nattlys</translation>
 <translation id="2727977024730340865">Tilkoblet laveffektslader. Batteriladingen kan være upålitelig.</translation>
 <translation id="2792498699870441125">Alt + Søk</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Slå av/på Ikke forstyrr. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Lås opp enheten med foreldrekode</translation>
 <translation id="4702647871202761252">Personvernskjermen er av</translation>
+<translation id="4705716602320768426">Send tilbakemelding</translation>
 <translation id="4710243778082831592">IME-innstillinger</translation>
 <translation id="4731797938093519117">Foreldretilgang</translation>
 <translation id="4734965478015604180">Horisontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">På</translation>
+<translation id="5920710855273935292">Lyden for mikrofonen er kuttet.</translation>
 <translation id="5947494881799873997">Tilbakestill</translation>
 <translation id="595202126637698455">Ytelsessporing er aktivert</translation>
 <translation id="5957083217255311415">Mobildata er slått av.</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 4ed09d166..6f90d0f 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -56,6 +56,7 @@
 <translation id="1570871743947603115">Włącz lub wyłącz Bluetooth. <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">uzyskiwać dostęp do całej Twojej aktywności w tej sesji;</translation>
 <translation id="1608626060424371292">Usuń tego użytkownika</translation>
+<translation id="1632985212731562677">Funkcję Switch Access możesz wyłączyć, otwierając Ustawienia &gt; Ułatwienia dostępu.</translation>
 <translation id="1654477262762802994">Rozpocznij zapytanie głosowe</translation>
 <translation id="1658406695958299976">Nadal nie można zweryfikować Twojego hasła. Uwaga: jeśli ostatnio hasło było zmieniane, nowe hasło zostanie zastosowane, gdy się wylogujesz. Tu podaj stare hasło.</translation>
 <translation id="1677472565718498478">Pozostało <ph name="TIME" /></translation>
@@ -182,6 +183,7 @@
 <translation id="3154351730702813399">Administrator urządzenia może monitorować Twoją aktywność związaną z przeglądaniem.</translation>
 <translation id="3181441307743005334">Ponowne uruchomienie może trochę potrwać</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Połączono z urządzeniem}few{Połączono z # urządzeniami}many{Połączono z # urządzeniami}other{Połączono z # urządzenia}}</translation>
+<translation id="3203405173652969239">Włączono funkcję Switch Access</translation>
 <translation id="3207953481422525583">Ustawienia użytkownika</translation>
 <translation id="3217205077783620295">Dźwięk jest włączony. Kliknij, by wyciszyć.</translation>
 <translation id="3226991577105957773">i jeszcze <ph name="COUNT" /></translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 10959994..1a7543f 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Выйти из всех аккаунтов</translation>
 <translation id="2277103315734023688">Перемотать вперед</translation>
 <translation id="2292698582925480719">Масштаб экрана</translation>
+<translation id="2295777434187870477">Микрофон включен. Нажмите, чтобы отключить его.</translation>
 <translation id="2298170939937364391">Полноэкранная лупа включена. Чтобы отключить ее, ещё раз нажмите Ctrl + Поиск + M.</translation>
 <translation id="2302092602801625023">Аккаунт находится под управлением Family Link</translation>
 <translation id="2303600792989757991">Переключить режим обзора</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Перетаскивание</translation>
 <translation id="2700493154570097719">Выберите раскладку</translation>
 <translation id="2704781753052663061">Подключиться к другим сетям Wi-Fi</translation>
+<translation id="2705001408393684014">Кнопка включения и отключения микрофона. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Ночной режим</translation>
 <translation id="2727977024730340865">Подключено маломощное зарядное устройство. Возможны проблемы при зарядке.</translation>
 <translation id="2792498699870441125">Alt + Search</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Включить или отключить режим "Не беспокоить". <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Требуется родительский код доступа</translation>
 <translation id="4702647871202761252">Экран конфиденциальности отключен</translation>
+<translation id="4705716602320768426">Отправить отзыв</translation>
 <translation id="4710243778082831592">Настройки редактора методов ввода</translation>
 <translation id="4731797938093519117">Родительский доступ</translation>
 <translation id="4734965478015604180">Горизонтальная ориентация</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift + Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">ВКЛ</translation>
+<translation id="5920710855273935292">Микрофон отключен.</translation>
 <translation id="5947494881799873997">Отменить</translation>
 <translation id="595202126637698455">Включено отслеживание эффективности</translation>
 <translation id="5957083217255311415">Мобильный Интернет отключен.</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 35e01cc0..272b90c 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -56,6 +56,7 @@
 <translation id="1570871743947603115">බ්ලූටූත් ටොගල කරන්න. <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">මෙම සැසියෙහි ඔබේ සියලු ක්‍රියාකාරකම්වලට ප්‍රවේශය</translation>
 <translation id="1608626060424371292">මෙම භාවිතකරු ඉවත් කරන්න</translation>
+<translation id="1632985212731562677">ප්‍රවේශය මාරු කිරීම සැකසීම් &gt; ප්‍රවේශ්‍යතාව තුළ අබල කළ හැක.</translation>
 <translation id="1654477262762802994">හඬ විමසුමක් අරඹන්න</translation>
 <translation id="1658406695958299976">සමාවන්න, ඔබේ මුරපදය තවමත් සත්‍යාපනය කළ නොහැකි විය. සටහන: ඔබ ඔබේ මුරපදය මෑතකදී වෙනස් කළේ නම්, ඔබ වරක් වැරූ විට ඔබේ නව මුරපදය යෙදවෙනු ඇත, පැරණි මුරපදය මෙහි භාවිතා කරන්න.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ඉතිරිය</translation>
@@ -182,6 +183,7 @@
 <translation id="3154351730702813399">උපාංග පරිපාලක ඔබේ බ්‍රවුස් කිරීමේ ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකිය:</translation>
 <translation id="3181441307743005334">යළි ඇරඹීමට කෙටි වේලාවක් ගත විය හැක</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{උපාංගයකට සම්බන්ධ වී ඇත}one{උපාංග # කට සම්බන්ධ වී ඇත}other{උපාංග # කට සම්බන්ධ වී ඇත}}</translation>
+<translation id="3203405173652969239">ප්‍රවේශය මාරු කිරීම සබල කළා</translation>
 <translation id="3207953481422525583">පරිශීලක සැකසුම්</translation>
 <translation id="3217205077783620295">ශබ්දය ක්‍රියාත්මකයි, ටොගල කිරීම ශ්‍රව්‍ය නිහඬ කරනු ඇත.</translation>
 <translation id="3226991577105957773">තවත් +<ph name="COUNT" /></translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 3d7df29..77d29f8 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Odhlásiť všetkých</translation>
 <translation id="2277103315734023688">Pretočiť dopredu</translation>
 <translation id="2292698582925480719">Hustota zobrazenia</translation>
+<translation id="2295777434187870477">Mikrofón je zapnutý. Prepnutím vypnete zvuk vstupu.</translation>
 <translation id="2298170939937364391">Bola zapnutá lupa na celú obrazovku. Vypnete ju opätovným stlačením kombinácie klávesov Ctrl+Hľadať+M.</translation>
 <translation id="2302092602801625023">Tento účet spravuje aplikácia Family Link</translation>
 <translation id="2303600792989757991">Prepnúť prehľad okien</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Kliknúť a presunúť</translation>
 <translation id="2700493154570097719">Nastavenie klávesnice</translation>
 <translation id="2704781753052663061">Pripojiť sa k iným sieťam Wi-Fi</translation>
+<translation id="2705001408393684014">Prepnúť mikrofón. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Nočný režim</translation>
 <translation id="2727977024730340865">Batéria je zapojená do nabíjačky s nízkym výkonom. Nabíjanie batérie nemusí byť spoľahlivé.</translation>
 <translation id="2792498699870441125">Alt + Hľadať</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Prepnúť režim bez vyrušení. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Odomknutie zariadenia kódom rodiča</translation>
 <translation id="4702647871202761252">Obrazovka ochrany súkromia je vypnutá</translation>
+<translation id="4705716602320768426">Odoslať spätnú väzbu</translation>
 <translation id="4710243778082831592">Nastavenia editora IME</translation>
 <translation id="4731797938093519117">Rodičovský prístup</translation>
 <translation id="4734965478015604180">Na šírku</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Zapnuté</translation>
+<translation id="5920710855273935292">Mikrofón je vypnutý.</translation>
 <translation id="5947494881799873997">Vrátiť</translation>
 <translation id="595202126637698455">Sledovanie výkonnosti je povolené</translation>
 <translation id="5957083217255311415">Mobilné dáta sú vypnuté.</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 48b9e37..531cd3f 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Dil nga të gjitha</translation>
 <translation id="2277103315734023688">Kërko përpara</translation>
 <translation id="2292698582925480719">Shkalla e ekranit</translation>
+<translation id="2295777434187870477">Mikrofoni është aktiv. Ndryshimi i tij do ta çaktivizojë hyrjen.</translation>
 <translation id="2298170939937364391">"Zmadhuesi i ekranit të plotë" u aktivizua. Shtyp përsëri Ctrl+Kërko+M për ta çaktivizuar.</translation>
 <translation id="2302092602801625023">Kjo llogari menaxhohet nga Family Link</translation>
 <translation id="2303600792989757991">Ndrysho përmbledhjen e dritares</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Kliko dhe zvarrit</translation>
 <translation id="2700493154570097719">Vendos tastierën</translation>
 <translation id="2704781753052663061">Bashkohu me rrjete të tjera Wi-Fi</translation>
+<translation id="2705001408393684014">Aktivizo/çaktivizo mikrofonin. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Drita e natës</translation>
 <translation id="2727977024730340865">E lidhur me një karikues me fuqi të ulët. Ngarkimi i baterisë mund të mos jetë i sigurt.</translation>
 <translation id="2792498699870441125">Alt+Kërko</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Aktivizo/çaktivizo modalitetin "Mos shqetëso". <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Shkyç pajisjen me kodin e prindit</translation>
 <translation id="4702647871202761252">Ekrani i privatësisë është joaktiv</translation>
+<translation id="4705716602320768426">Dërgo komente</translation>
 <translation id="4710243778082831592">Cilësimet e redaktorit IME</translation>
 <translation id="4731797938093519117">Qasja e prindit</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Aktiv</translation>
+<translation id="5920710855273935292">Mikrofoni është i çaktivizuar.</translation>
 <translation id="5947494881799873997">Riktheje</translation>
 <translation id="595202126637698455">Gjurmimi i rendimentit u aktivizua</translation>
 <translation id="5957083217255311415">Të dhënat celulare janë çaktivizuar.</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 342d9fc8..6a7f4153 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Logga ut alla</translation>
 <translation id="2277103315734023688">Sök framåt</translation>
 <translation id="2292698582925480719">Skala på skärmen</translation>
+<translation id="2295777434187870477">Mikrofonen är på. Om du ändrar läge stängs indata av.</translation>
 <translation id="2298170939937364391">Helskärmsförstoring har aktiverats. Tryck på Ctrl + Sök + M igen om du vill inaktivera funktionen.</translation>
 <translation id="2302092602801625023">Det här kontot hanteras av Family Link</translation>
 <translation id="2303600792989757991">Växla fönsteröversikt</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Klicka och dra</translation>
 <translation id="2700493154570097719">Ställ in tangentbord</translation>
 <translation id="2704781753052663061">Anslut till andra Wi-Fi-nätverk</translation>
+<translation id="2705001408393684014">Aktivera eller inaktivera mikrofonen. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Nattljus</translation>
 <translation id="2727977024730340865">Ansluten till en laddare med låg effekt. Batteriet kanske inte laddas ordentligt.</translation>
 <translation id="2792498699870441125">Alt + Sök</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Aktivera och inaktivera Stör ej. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Lås upp enheten med föräldrakod</translation>
 <translation id="4702647871202761252">Sekretesskärmen är inaktiverad</translation>
+<translation id="4705716602320768426">Skicka feedback</translation>
 <translation id="4710243778082831592">IME-inställningar</translation>
 <translation id="4731797938093519117">Föräldraåtkomst</translation>
 <translation id="4734965478015604180">Horisontell</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Skift+Escape</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">På</translation>
+<translation id="5920710855273935292">Mikrofonen är av.</translation>
 <translation id="5947494881799873997">Återgå</translation>
 <translation id="595202126637698455">Resultatspårning aktiverat</translation>
 <translation id="5957083217255311415">Mobildata har inaktiverats.</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 6981ecb..aafb19f 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Tüm kullanıcıların oturumunu kapat</translation>
 <translation id="2277103315734023688">İleri Sar</translation>
 <translation id="2292698582925480719">Görüntüyü ölçekle</translation>
+<translation id="2295777434187870477">Mikrofon açık, düğmeye basılırsa girişin sesi kapatılacak.</translation>
 <translation id="2298170939937364391">Tam Ekran Büyüteci etkinleştirildi. Kapatmak için tekrar Ctrl+Arama+M tuşlarına basın.</translation>
 <translation id="2302092602801625023">Bu hesap Family Link tarafından yönetiliyor</translation>
 <translation id="2303600792989757991">Pencere genel bakışını değiştir</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Tıkla ve sürükle</translation>
 <translation id="2700493154570097719">Klavyenizi ayarlayın</translation>
 <translation id="2704781753052663061">Başka kablosuz ağlara katıl</translation>
+<translation id="2705001408393684014">Mikrofonu aç/kapat. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Gece Işığı</translation>
 <translation id="2727977024730340865">Düşük güçlü bir şarj cihazına takıldı. Şarj durumu güvenilir olmayabilir.</translation>
 <translation id="2792498699870441125">Alt+Arama</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Rahatsız Etmeyin modunu aç/kapat. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Kilidi ebeveyn koduyla açın</translation>
 <translation id="4702647871202761252">Gizlilik ekranı kapalı</translation>
+<translation id="4705716602320768426">Geri bildirim gönder</translation>
 <translation id="4710243778082831592">IME Ayarları</translation>
 <translation id="4731797938093519117">Ebeveyn erişimi</translation>
 <translation id="4734965478015604180">Yatay</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Üst Karakter+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Açık</translation>
+<translation id="5920710855273935292">Mikrofonun sesi kapalı.</translation>
 <translation id="5947494881799873997">Geri döndür</translation>
 <translation id="595202126637698455">Performans izleme etkin</translation>
 <translation id="5957083217255311415">Mobil veri kapatıldı.</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 2dd85eae..b3319e3 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">سبھی سے سائن آؤٹ کریں</translation>
 <translation id="2277103315734023688">آگے کریں</translation>
 <translation id="2292698582925480719">ڈسپلے اسکیل</translation>
+<translation id="2295777434187870477">مائیک آن ہے، ٹوگل کرنے سے ان پٹ خاموش ہو جائے گا۔</translation>
 <translation id="2298170939937364391">‏فُل اسکرین میگنیفائر فعال ہے۔ اسے ٹوگل کر کے بند کرنے کے لیے Ctrl+Search+M کو دوبارہ دبائیں۔</translation>
 <translation id="2302092602801625023">‏یہ اکاؤنٹ Family Link کے زیر نظم ہے</translation>
 <translation id="2303600792989757991">ونڈو کا عمومی جائزہ ٹوگل کریں</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">کلک کریں اور گھسیٹیں</translation>
 <translation id="2700493154570097719">اپنا کی بورڈ سیٹ کریں</translation>
 <translation id="2704781753052663061">‏Wi-Fi کے دیگر نیٹ ورکس میں شامل ہوں</translation>
+<translation id="2705001408393684014">مائیک ٹوگل کریں۔ <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">نائٹ لائٹ</translation>
 <translation id="2727977024730340865">ایک کم پاور کے چارجر میں پلگ ان ہے۔ بیٹری چارجنگ ممکن ہے بھروسہ مند نہ ہو۔</translation>
 <translation id="2792498699870441125">‏Alt+تلاش</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">ڈسٹرب نہ کریں کو ٹوگل کریں۔ <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">والدین کے کوڈ سے آلہ غیر مقفل کریں</translation>
 <translation id="4702647871202761252">رازداری کی اسکرین آف ہے</translation>
+<translation id="4705716602320768426">تاثرات فائل کریں</translation>
 <translation id="4710243778082831592">‏IME کی ترتیبات</translation>
 <translation id="4731797938093519117">والدین کی رسائی</translation>
 <translation id="4734965478015604180">افقی</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">آن</translation>
+<translation id="5920710855273935292">مائیک خاموش کیا ہوا ہے۔</translation>
 <translation id="5947494881799873997">واپس لوٹیں</translation>
 <translation id="595202126637698455">کارکردگی کی ٹریسنگ فعال کر دی گئی</translation>
 <translation id="5957083217255311415">موبائل ڈیٹا بند ہے۔</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index cb00fb2a..67ab7a3 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">Đăng xuất tất cả</translation>
 <translation id="2277103315734023688">Tua tiến</translation>
 <translation id="2292698582925480719">Tỷ lệ hiển thị</translation>
+<translation id="2295777434187870477">Micrô đang bật. Nếu bạn chuyển đổi, âm thanh đầu vào sẽ bị tắt.</translation>
 <translation id="2298170939937364391">Đã bật tính năng Phóng to toàn màn hình. Hãy nhấn lại tổ hợp phím Ctrl+Tìm kiếm+M để tắt tính năng này.</translation>
 <translation id="2302092602801625023">Tài khoản này do Family Link quản lý</translation>
 <translation id="2303600792989757991">Tổng quan về chuyển đổi cửa sổ</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">Nhấp và kéo</translation>
 <translation id="2700493154570097719">Đặt bàn phím</translation>
 <translation id="2704781753052663061">Dùng các mạng Wi-Fi khác</translation>
+<translation id="2705001408393684014">Chuyển đổi micrô. <ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">Ánh sáng đêm</translation>
 <translation id="2727977024730340865">Được cắm vào bộ sạc công suất thấp. Việc sạc pin có thể không được đảm bảo.</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">Bật/tắt chế độ Không làm phiền. <ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">Mở khóa thiết bị bằng mã dành cho cha mẹ</translation>
 <translation id="4702647871202761252">Màn hình bảo vệ quyền riêng tư đang tắt</translation>
+<translation id="4705716602320768426">Gửi ý kiến phản hồi</translation>
 <translation id="4710243778082831592">Cài đặt Trình chỉnh sửa phương thức nhập (IME)</translation>
 <translation id="4731797938093519117">Quyền truy cập của cha mẹ</translation>
 <translation id="4734965478015604180">Ngang</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">Bật</translation>
+<translation id="5920710855273935292">Micrô đang tắt tiếng.</translation>
 <translation id="5947494881799873997">Hoàn nguyên</translation>
 <translation id="595202126637698455">Đã bật theo dõi hoạt động</translation>
 <translation id="5957083217255311415">Dữ liệu di động đã bị tắt.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 04d88b6f..edf3383 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">全部退出</translation>
 <translation id="2277103315734023688">快进</translation>
 <translation id="2292698582925480719">显示比例</translation>
+<translation id="2295777434187870477">麦克风已开启,使用切换开关可将输入的音频静音。</translation>
 <translation id="2298170939937364391">已启用全屏放大镜。再按一次 Ctrl+搜索键+M 组合键即可将其停用。</translation>
 <translation id="2302092602801625023">该帐号由 Family Link 管理</translation>
 <translation id="2303600792989757991">“切换窗口”概述</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">点击并拖动</translation>
 <translation id="2700493154570097719">设置键盘</translation>
 <translation id="2704781753052663061">连接到其他 Wi-Fi 网络</translation>
+<translation id="2705001408393684014">开启/关闭麦克风。<ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">夜间模式</translation>
 <translation id="2727977024730340865">已插入低功率充电器;可能无法保证充电成功。</translation>
 <translation id="2792498699870441125">Alt + 搜索键</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">开启/关闭“勿扰”模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">使用家长访问代码解锁设备</translation>
 <translation id="4702647871202761252">已关闭隐私保护屏</translation>
+<translation id="4705716602320768426">提交反馈</translation>
 <translation id="4710243778082831592">IME 设置</translation>
 <translation id="4731797938093519117">家长访问</translation>
 <translation id="4734965478015604180">横向</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">启用</translation>
+<translation id="5920710855273935292">麦克风已静音。</translation>
 <translation id="5947494881799873997">还原</translation>
 <translation id="595202126637698455">已启用性能跟踪</translation>
 <translation id="5957083217255311415">移动数据网络现处于关闭状态。</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index a8dec0e..7584dc4 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">登出所有使用者</translation>
 <translation id="2277103315734023688">向前快轉</translation>
 <translation id="2292698582925480719">顯示比例</translation>
+<translation id="2295777434187870477">開咗咪高風,切換將會靜音。</translation>
 <translation id="2298170939937364391">已啟用全螢幕放大鏡。再次按下 Ctrl+Search+M 鍵即可停用。</translation>
 <translation id="2302092602801625023">此帳戶由 Family Link 管理</translation>
 <translation id="2303600792989757991">切換視窗總覽</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">按一下並拖曳</translation>
 <translation id="2700493154570097719">設定鍵盤</translation>
 <translation id="2704781753052663061">加入其他 Wi-Fi 網絡</translation>
+<translation id="2705001408393684014">切換去咪高風。<ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">夜燈模式</translation>
 <translation id="2727977024730340865">使用低功率充電器,可能導致充電狀態不穩定。</translation>
 <translation id="2792498699870441125">Alt + 搜尋鍵</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">切換「請勿騷擾」模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">使用家長存取碼解鎖裝置</translation>
 <translation id="4702647871202761252">已停用隱私保護畫面</translation>
+<translation id="4705716602320768426">提供意見</translation>
 <translation id="4710243778082831592">輸入法編輯器設定</translation>
 <translation id="4731797938093519117">家長存取</translation>
 <translation id="4734965478015604180">橫向</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift + Esc 鍵</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">開啟</translation>
+<translation id="5920710855273935292">咪高風校咗靜音。</translation>
 <translation id="5947494881799873997">還原</translation>
 <translation id="595202126637698455">效能追蹤已啟用</translation>
 <translation id="5957083217255311415">流動數據已關閉。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 76aa54e..3b58aa2 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -105,6 +105,7 @@
 <translation id="2268813581635650749">登出所有使用者</translation>
 <translation id="2277103315734023688">快轉</translation>
 <translation id="2292698582925480719">顯示比例</translation>
+<translation id="2295777434187870477">麥克風已開啟;使用切換按鈕可將輸入裝置設為靜音。</translation>
 <translation id="2298170939937364391">全螢幕放大鏡已啟用。再次按下 Ctrl 鍵 + 搜尋鍵 + M 鍵即可切換為停用。</translation>
 <translation id="2302092602801625023">這個帳戶是由 Family Link 所管理</translation>
 <translation id="2303600792989757991">切換視窗總覽</translation>
@@ -138,6 +139,7 @@
 <translation id="2658778018866295321">按住並拖曳</translation>
 <translation id="2700493154570097719">設定鍵盤</translation>
 <translation id="2704781753052663061">加入其他 Wi-Fi 網路</translation>
+<translation id="2705001408393684014">切換麥克風。<ph name="STATE_TEXT" /></translation>
 <translation id="2718395828230677721">夜燈</translation>
 <translation id="2727977024730340865">使用低功率充電器,可能導致充電狀態不穩定。</translation>
 <translation id="2792498699870441125">Alt + 搜尋鍵</translation>
@@ -296,6 +298,7 @@
 <translation id="4665114317261903604">切換零打擾模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4696813013609194136">使用家長存取碼將裝置解鎖</translation>
 <translation id="4702647871202761252">已停用隱私保護畫面</translation>
+<translation id="4705716602320768426">提供意見回饋</translation>
 <translation id="4710243778082831592">輸入法編輯器設定</translation>
 <translation id="4731797938093519117">家長存取</translation>
 <translation id="4734965478015604180">橫向</translation>
@@ -376,6 +379,7 @@
 <translation id="5901316534475909376">Shift + Esc 鍵</translation>
 <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">開啟</translation>
+<translation id="5920710855273935292">麥克風已設為靜音。</translation>
 <translation id="5947494881799873997">還原</translation>
 <translation id="595202126637698455">效能追蹤已啟用</translation>
 <translation id="5957083217255311415">行動數據已關閉。</translation>
diff --git a/ash/system/accessibility/autoclick_menu_bubble_controller.cc b/ash/system/accessibility/autoclick_menu_bubble_controller.cc
index d0424c0..6923f12 100644
--- a/ash/system/accessibility/autoclick_menu_bubble_controller.cc
+++ b/ash/system/accessibility/autoclick_menu_bubble_controller.cc
@@ -9,6 +9,7 @@
 #include "ash/shell.h"
 #include "ash/system/accessibility/autoclick_scroll_bubble_controller.h"
 #include "ash/system/tray/tray_background_view.h"
+#include "ash/system/tray/tray_bubble_view.h"
 #include "ash/system/tray/tray_constants.h"
 #include "ash/system/unified/unified_system_tray_view.h"
 #include "ash/wm/collision_detection/collision_detection_utils.h"
@@ -212,6 +213,7 @@
   init_params.parent_window = Shell::GetContainer(
       Shell::GetPrimaryRootWindow(), kShellWindowId_AutoclickContainer);
   init_params.anchor_mode = TrayBubbleView::AnchorMode::kRect;
+  init_params.is_anchored_to_status_area = false;
   // The widget's shadow is drawn below and on the sides of the view, with a
   // width of kCollisionWindowWorkAreaInsetsDp. Set the top inset to 0 to ensure
   // the scroll view is drawn at kCollisionWindowWorkAreaInsetsDp above the
@@ -225,7 +227,7 @@
   init_params.corner_radius = kUnifiedTrayCornerRadius;
   init_params.has_shadow = false;
   init_params.translucent = true;
-  bubble_view_ = new AutoclickMenuBubbleView(init_params);
+  bubble_view_ = new TrayBubbleView(init_params);
 
   menu_view_ = new AutoclickMenuView(type, position);
   menu_view_->SetBorder(
diff --git a/ash/system/accessibility/autoclick_menu_bubble_controller.h b/ash/system/accessibility/autoclick_menu_bubble_controller.h
index 302c5086..07b5561 100644
--- a/ash/system/accessibility/autoclick_menu_bubble_controller.h
+++ b/ash/system/accessibility/autoclick_menu_bubble_controller.h
@@ -14,6 +14,7 @@
 namespace ash {
 
 class AutoclickScrollBubbleController;
+class TrayBubbleView;
 
 // Manages the bubble which contains an AutoclickMenuView.
 class ASH_EXPORT AutoclickMenuBubbleController
@@ -70,7 +71,7 @@
   friend class AutoclickTest;
 
   // Owned by views hierarchy.
-  AutoclickMenuBubbleView* bubble_view_ = nullptr;
+  TrayBubbleView* bubble_view_ = nullptr;
   AutoclickMenuView* menu_view_ = nullptr;
   AutoclickMenuPosition position_ = kDefaultAutoclickMenuPosition;
 
diff --git a/ash/system/accessibility/autoclick_menu_view.cc b/ash/system/accessibility/autoclick_menu_view.cc
index 0eb1758..e02b04b 100644
--- a/ash/system/accessibility/autoclick_menu_view.cc
+++ b/ash/system/accessibility/autoclick_menu_view.cc
@@ -35,24 +35,6 @@
 
 }  // namespace
 
-// ------ AutoclickMenuBubbleView  ------ //
-
-AutoclickMenuBubbleView::AutoclickMenuBubbleView(
-    TrayBubbleView::InitParams init_params)
-    : TrayBubbleView(init_params) {}
-
-AutoclickMenuBubbleView::~AutoclickMenuBubbleView() {}
-
-bool AutoclickMenuBubbleView::IsAnchoredToStatusArea() const {
-  return false;
-}
-
-const char* AutoclickMenuBubbleView::GetClassName() const {
-  return "AutoclickMenuBubbleView";
-}
-
-// ------ AutoclickMenuView  ------ //
-
 AutoclickMenuView::AutoclickMenuView(AutoclickEventType type,
                                      AutoclickMenuPosition position)
     : left_click_button_(
diff --git a/ash/system/accessibility/autoclick_menu_view.h b/ash/system/accessibility/autoclick_menu_view.h
index a5d2b6f..07daf1a8 100644
--- a/ash/system/accessibility/autoclick_menu_view.h
+++ b/ash/system/accessibility/autoclick_menu_view.h
@@ -13,23 +13,6 @@
 
 class FloatingMenuButton;
 
-// View for the Automatic Clicks menu bubble, which holds the Automatic Clicks
-// Menu.
-class AutoclickMenuBubbleView : public TrayBubbleView {
- public:
-  AutoclickMenuBubbleView(TrayBubbleView::InitParams init_params);
-  ~AutoclickMenuBubbleView() override;
-
-  // TrayBubbleView:
-  bool IsAnchoredToStatusArea() const override;
-
-  // views::View:
-  const char* GetClassName() const override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AutoclickMenuBubbleView);
-};
-
 // View for the Automatic Clicks Menu, which creates and manages
 // individual buttons to control Automatic Clicks settings.
 class AutoclickMenuView : public views::View, public views::ButtonListener {
diff --git a/ash/system/accessibility/tray_accessibility.cc b/ash/system/accessibility/tray_accessibility.cc
index d27aa90..ce689183 100644
--- a/ash/system/accessibility/tray_accessibility.cc
+++ b/ash/system/accessibility/tray_accessibility.cc
@@ -69,6 +69,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 // ash::tray::AccessibilityDetailedView
 
+constexpr char AccessibilityDetailedView::kClassName[];
+
 AccessibilityDetailedView::AccessibilityDetailedView(
     DetailedViewDelegate* delegate)
     : TrayDetailedView(delegate) {
@@ -184,7 +186,7 @@
 }
 
 const char* AccessibilityDetailedView::GetClassName() const {
-  return "AccessibilityDetailedView";
+  return kClassName;
 }
 
 void AccessibilityDetailedView::AppendAccessibilityList() {
diff --git a/ash/system/accessibility/tray_accessibility.h b/ash/system/accessibility/tray_accessibility.h
index 1eb765b..2807ff7 100644
--- a/ash/system/accessibility/tray_accessibility.h
+++ b/ash/system/accessibility/tray_accessibility.h
@@ -37,6 +37,8 @@
 // Create the detailed view of accessibility tray.
 class ASH_EXPORT AccessibilityDetailedView : public TrayDetailedView {
  public:
+  static constexpr char kClassName[] = "AccessibilityDetailedView";
+
   explicit AccessibilityDetailedView(DetailedViewDelegate* delegate);
   ~AccessibilityDetailedView() override {}
 
diff --git a/ash/system/accessibility/tray_accessibility_unittest.cc b/ash/system/accessibility/tray_accessibility_unittest.cc
index bee606e..7f0aff77 100644
--- a/ash/system/accessibility/tray_accessibility_unittest.cc
+++ b/ash/system/accessibility/tray_accessibility_unittest.cc
@@ -3,8 +3,11 @@
 // found in the LICENSE file.
 
 #include "ash/system/accessibility/tray_accessibility.h"
+#include <memory>
 
 #include "ash/accessibility/accessibility_controller_impl.h"
+#include "ash/accessibility/accessibility_observer.h"
+#include "ash/magnifier/docked_magnifier_controller_impl.h"
 #include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/ash_pref_names.h"
 #include "ash/session/session_controller_impl.h"
@@ -12,21 +15,43 @@
 #include "ash/system/tray/detailed_view_delegate.h"
 #include "ash/system/tray/hover_highlight_view.h"
 #include "ash/test/ash_test_base.h"
+#include "base/command_line.h"
 #include "base/macros.h"
 #include "components/prefs/pref_service.h"
+#include "ui/accessibility/accessibility_switches.h"
+#include "ui/accessibility/ax_enums.mojom-shared.h"
+#include "ui/accessibility/ax_node_data.h"
 
 namespace ash {
 namespace {
 
-void SetMagnifierEnabled(bool enabled) {
+void SetScreenMagnifierEnabled(bool enabled) {
   Shell::Get()->accessibility_delegate()->SetMagnifierEnabled(enabled);
 }
 
+void SetDockedMagnifierEnabled(bool enabled) {
+  Shell::Get()->accessibility_controller()->SetDockedMagnifierEnabledForTesting(
+      enabled);
+}
+
 void EnableSpokenFeedback(bool enabled) {
   Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled(
       enabled, A11Y_NOTIFICATION_NONE);
 }
 
+void EnableSelectToSpeak(bool enabled) {
+  Shell::Get()->accessibility_controller()->SetSelectToSpeakEnabled(enabled);
+}
+
+void EnableDictation(bool enabled) {
+  if (enabled) {
+    Shell::Get()
+        ->accessibility_controller()
+        ->SetDictationAcceleratorDialogAccepted();
+  }
+  Shell::Get()->accessibility_controller()->SetDictationEnabled(enabled);
+}
+
 void EnableHighContrast(bool enabled) {
   Shell::Get()->accessibility_controller()->SetHighContrastEnabled(enabled);
 }
@@ -63,13 +88,29 @@
   Shell::Get()->accessibility_controller()->SetStickyKeysEnabled(enabled);
 }
 
+void EnableSwitchAccess(bool enabled) {
+  Shell::Get()->accessibility_controller()->SetSwitchAccessEnabled(enabled);
+}
+
 }  // namespace
 
-class TrayAccessibilityTest : public AshTestBase {
+class TrayAccessibilityTest : public AshTestBase, public AccessibilityObserver {
  protected:
   TrayAccessibilityTest() = default;
   ~TrayAccessibilityTest() override = default;
 
+  void SetUp() override {
+    AshTestBase::SetUp();
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        switches::kEnableExperimentalAccessibilitySwitchAccess);
+    Shell::Get()->accessibility_controller()->AddObserver(this);
+  }
+
+  void TearDown() override {
+    Shell::Get()->accessibility_controller()->RemoveObserver(this);
+    AshTestBase::TearDown();
+  }
+
   void CreateDetailedMenu() {
     delegate_ = std::make_unique<DetailedViewDelegate>(nullptr);
     detailed_menu_ =
@@ -81,66 +122,70 @@
     delegate_.reset();
   }
 
+  void ClickView(HoverHighlightView* view) {
+    detailed_menu_->OnViewClicked(view);
+  }
+
   // These helpers may change prefs in ash, so they must spin the message loop
   // to wait for chrome to observe the change.
   void ClickSpokenFeedbackOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->spoken_feedback_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->spoken_feedback_view_);
   }
 
   void ClickHighContrastOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->high_contrast_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->high_contrast_view_);
   }
 
   void ClickScreenMagnifierOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->screen_magnifier_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->screen_magnifier_view_);
+  }
+
+  void ClickDockedMagnifierOnDetailMenu() {
+    ClickView(detailed_menu_->docked_magnifier_view_);
   }
 
   void ClickAutoclickOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->autoclick_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->autoclick_view_);
   }
 
   void ClickVirtualKeyboardOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->virtual_keyboard_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->virtual_keyboard_view_);
   }
 
   void ClickLargeMouseCursorOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->large_cursor_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->large_cursor_view_);
   }
 
   void ClickMonoAudioOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->mono_audio_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->mono_audio_view_);
   }
 
   void ClickCaretHighlightOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->caret_highlight_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->caret_highlight_view_);
   }
 
   void ClickHighlightMouseCursorOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->highlight_mouse_cursor_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->highlight_mouse_cursor_view_);
   }
 
   void ClickHighlightKeyboardFocusOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->highlight_keyboard_focus_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->highlight_keyboard_focus_view_);
   }
 
   void ClickStickyKeysOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->sticky_keys_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->sticky_keys_view_);
+  }
+
+  void ClickSwitchAccessOnDetailMenu() {
+    ClickView(detailed_menu_->switch_access_view_);
   }
 
   void ClickSelectToSpeakOnDetailMenu() {
-    HoverHighlightView* view = detailed_menu_->select_to_speak_view_;
-    detailed_menu_->OnViewClicked(view);
+    ClickView(detailed_menu_->select_to_speak_view_);
+  }
+
+  void ClickDictationOnDetailMenu() {
+    ClickView(detailed_menu_->dictation_view_);
   }
 
   bool IsSpokenFeedbackMenuShownOnDetailMenu() const {
@@ -151,6 +196,10 @@
     return detailed_menu_->select_to_speak_view_;
   }
 
+  bool IsDictationShownOnDetailMenu() const {
+    return detailed_menu_->dictation_view_;
+  }
+
   bool IsHighContrastMenuShownOnDetailMenu() const {
     return detailed_menu_->high_contrast_view_;
   }
@@ -159,6 +208,10 @@
     return detailed_menu_->screen_magnifier_view_;
   }
 
+  bool IsDockedMagnifierShownOnDetailMenu() const {
+    return detailed_menu_->docked_magnifier_view_;
+  }
+
   bool IsLargeCursorMenuShownOnDetailMenu() const {
     return detailed_menu_->large_cursor_view_;
   }
@@ -191,6 +244,10 @@
     return detailed_menu_->sticky_keys_view_;
   }
 
+  bool IsSwitchAccessShownOnDetailMenu() const {
+    return detailed_menu_->switch_access_view_;
+  }
+
   // In material design we show the help button but theme it as disabled if
   // it is not possible to load the help page.
   bool IsHelpAvailableOnDetailMenu() {
@@ -204,55 +261,116 @@
            views::Button::STATE_NORMAL;
   }
 
+  // An item is enabled on the detailed menu if it is marked checked for
+  // accessibility and the detailed_menu_'s local state, |enabled_state|, is
+  // enabled. Check that the checked state and detailed_menu_'s local state are
+  // the same.
+  bool IsEnabledOnDetailMenu(bool enabled_state, views::View* view) const {
+    ui::AXNodeData node_data;
+    view->GetAccessibleNodeData(&node_data);
+    bool checked_for_accessibility =
+        node_data.GetCheckedState() == ax::mojom::CheckedState::kTrue;
+    DCHECK(enabled_state == checked_for_accessibility);
+    return enabled_state && checked_for_accessibility;
+  }
+
   bool IsSpokenFeedbackEnabledOnDetailMenu() const {
-    return detailed_menu_->spoken_feedback_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->spoken_feedback_enabled_,
+                                 detailed_menu_->spoken_feedback_view_);
   }
 
   bool IsSelectToSpeakEnabledOnDetailMenu() const {
-    return detailed_menu_->select_to_speak_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->select_to_speak_enabled_,
+                                 detailed_menu_->select_to_speak_view_);
+  }
+
+  bool IsDictationEnabledOnDetailMenu() const {
+    return IsEnabledOnDetailMenu(detailed_menu_->dictation_enabled_,
+                                 detailed_menu_->dictation_view_);
   }
 
   bool IsHighContrastEnabledOnDetailMenu() const {
-    return detailed_menu_->high_contrast_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->high_contrast_enabled_,
+                                 detailed_menu_->high_contrast_view_);
   }
 
   bool IsScreenMagnifierEnabledOnDetailMenu() const {
-    return detailed_menu_->screen_magnifier_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->screen_magnifier_enabled_,
+                                 detailed_menu_->screen_magnifier_view_);
+  }
+
+  bool IsDockedMagnifierEnabledOnDetailMenu() const {
+    return IsEnabledOnDetailMenu(detailed_menu_->docked_magnifier_enabled_,
+                                 detailed_menu_->docked_magnifier_view_);
   }
 
   bool IsLargeCursorEnabledOnDetailMenu() const {
-    return detailed_menu_->large_cursor_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->large_cursor_enabled_,
+                                 detailed_menu_->large_cursor_view_);
   }
 
   bool IsAutoclickEnabledOnDetailMenu() const {
-    return detailed_menu_->autoclick_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->autoclick_enabled_,
+                                 detailed_menu_->autoclick_view_);
   }
 
   bool IsVirtualKeyboardEnabledOnDetailMenu() const {
-    return detailed_menu_->virtual_keyboard_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->virtual_keyboard_enabled_,
+                                 detailed_menu_->virtual_keyboard_view_);
   }
 
   bool IsMonoAudioEnabledOnDetailMenu() const {
-    return detailed_menu_->mono_audio_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->mono_audio_enabled_,
+                                 detailed_menu_->mono_audio_view_);
   }
 
   bool IsCaretHighlightEnabledOnDetailMenu() const {
-    return detailed_menu_->caret_highlight_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->caret_highlight_enabled_,
+                                 detailed_menu_->caret_highlight_view_);
   }
 
   bool IsHighlightMouseCursorEnabledOnDetailMenu() const {
-    return detailed_menu_->highlight_mouse_cursor_enabled_;
+    return IsEnabledOnDetailMenu(
+        detailed_menu_->highlight_mouse_cursor_enabled_,
+        detailed_menu_->highlight_mouse_cursor_view_);
   }
 
   bool IsHighlightKeyboardFocusEnabledOnDetailMenu() const {
-    return detailed_menu_->highlight_keyboard_focus_enabled_;
+    // The highlight_keyboard_focus_view_ is not created when Spoken Feedback
+    // is enabled.
+    if (IsSpokenFeedbackEnabledOnDetailMenu()) {
+      DCHECK(!detailed_menu_->highlight_keyboard_focus_view_);
+      return detailed_menu_->highlight_keyboard_focus_enabled_;
+    }
+    return IsEnabledOnDetailMenu(
+        detailed_menu_->highlight_keyboard_focus_enabled_,
+        detailed_menu_->highlight_keyboard_focus_view_);
   }
 
   bool IsStickyKeysEnabledOnDetailMenu() const {
-    return detailed_menu_->sticky_keys_enabled_;
+    return IsEnabledOnDetailMenu(detailed_menu_->sticky_keys_enabled_,
+                                 detailed_menu_->sticky_keys_view_);
+  }
+
+  bool IsSwitchAccessEnabledOnDetailMenu() const {
+    return IsEnabledOnDetailMenu(detailed_menu_->switch_access_enabled_,
+                                 detailed_menu_->switch_access_view_);
+  }
+
+  const char* GetDetailedViewClassName() {
+    return detailed_menu_->GetClassName();
   }
 
  private:
+  // AccessibilityObserver:
+  void OnAccessibilityStatusChanged() override {
+    // UnifiedAccessibilityDetailedViewController calls
+    // AccessibilityDetailedView::OnAccessibilityStatusChanged. Spoof that
+    // by calling it directly here.
+    if (detailed_menu_)
+      detailed_menu_->OnAccessibilityStatusChanged();
+  }
+
   std::unique_ptr<DetailedViewDelegate> delegate_;
   std::unique_ptr<tray::AccessibilityDetailedView> detailed_menu_;
 
@@ -265,8 +383,10 @@
   CreateDetailedMenu();
   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
   EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu());
+  EXPECT_TRUE(IsDictationShownOnDetailMenu());
   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu());
   EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
   EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHelpAvailableOnDetailMenu());
@@ -277,6 +397,7 @@
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
   EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu());
   CloseDetailMenu();
 
   // Simulate screen lock.
@@ -284,8 +405,10 @@
   CreateDetailedMenu();
   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
   EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu());
+  EXPECT_TRUE(IsDictationShownOnDetailMenu());
   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu());
   EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
   EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
   EXPECT_FALSE(IsHelpAvailableOnDetailMenu());
@@ -296,6 +419,7 @@
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
   EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu());
   CloseDetailMenu();
   UnblockUserSession();
 
@@ -304,8 +428,10 @@
   CreateDetailedMenu();
   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
   EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu());
+  EXPECT_TRUE(IsDictationShownOnDetailMenu());
   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu());
   EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
   EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
   EXPECT_FALSE(IsHelpAvailableOnDetailMenu());
@@ -316,6 +442,7 @@
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
   EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu());
   CloseDetailMenu();
   UnblockUserSession();
 }
@@ -346,9 +473,8 @@
   EXPECT_FALSE(accessibility_controller->high_contrast_enabled());
 
   // Confirms that the check item toggles the magnifier.
-  EXPECT_FALSE(accessibility_controller->high_contrast_enabled());
-
   EXPECT_FALSE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled());
+
   CreateDetailedMenu();
   ClickScreenMagnifierOnDetailMenu();
   EXPECT_TRUE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled());
@@ -357,6 +483,17 @@
   ClickScreenMagnifierOnDetailMenu();
   EXPECT_FALSE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled());
 
+  // Confirms that the check item toggles the docked magnifier.
+  EXPECT_FALSE(Shell::Get()->docked_magnifier_controller()->GetEnabled());
+
+  CreateDetailedMenu();
+  ClickDockedMagnifierOnDetailMenu();
+  EXPECT_TRUE(Shell::Get()->docked_magnifier_controller()->GetEnabled());
+
+  CreateDetailedMenu();
+  ClickDockedMagnifierOnDetailMenu();
+  EXPECT_FALSE(Shell::Get()->docked_magnifier_controller()->GetEnabled());
+
   // Confirms that the check item toggles autoclick.
   EXPECT_FALSE(accessibility_controller->autoclick_enabled());
 
@@ -445,6 +582,17 @@
   ClickStickyKeysOnDetailMenu();
   EXPECT_FALSE(accessibility_controller->sticky_keys_enabled());
 
+  // Confirms that the check item toggles switch access.
+  EXPECT_FALSE(accessibility_controller->switch_access_enabled());
+
+  CreateDetailedMenu();
+  ClickSwitchAccessOnDetailMenu();
+  EXPECT_TRUE(accessibility_controller->switch_access_enabled());
+
+  CreateDetailedMenu();
+  ClickSwitchAccessOnDetailMenu();
+  EXPECT_FALSE(accessibility_controller->switch_access_enabled());
+
   // Confirms that the check item toggles select-to-speak.
   EXPECT_FALSE(accessibility_controller->select_to_speak_enabled());
 
@@ -455,6 +603,27 @@
   CreateDetailedMenu();
   ClickSelectToSpeakOnDetailMenu();
   EXPECT_FALSE(accessibility_controller->select_to_speak_enabled());
+
+  // Confirms that the check item toggles dictation.
+  EXPECT_FALSE(accessibility_controller->dictation_enabled());
+  Shell::Get()
+      ->accessibility_controller()
+      ->SetDictationAcceleratorDialogAccepted();
+
+  CreateDetailedMenu();
+  ClickDictationOnDetailMenu();
+  EXPECT_TRUE(accessibility_controller->dictation_enabled());
+
+  CreateDetailedMenu();
+  ClickDictationOnDetailMenu();
+  EXPECT_FALSE(accessibility_controller->dictation_enabled());
+}
+
+// Trivial test to increase code coverage.
+TEST_F(TrayAccessibilityTest, GetClassName) {
+  CreateDetailedMenu();
+  EXPECT_EQ(tray::AccessibilityDetailedView::kClassName,
+            GetDetailedViewClassName());
 }
 
 class TrayAccessibilityLoginScreenTest : public TrayAccessibilityTest {
@@ -471,8 +640,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -481,6 +652,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling spoken feedback.
@@ -488,8 +660,10 @@
   CreateDetailedMenu();
   EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -498,6 +672,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling spoken feedback.
@@ -505,8 +680,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -515,6 +692,87 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling select to speak.
+  EnableSelectToSpeak(true);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_TRUE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling select to speak.
+  EnableSelectToSpeak(false);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling dictation.
+  EnableDictation(true);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_TRUE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling dictation.
+  EnableDictation(false);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling high contrast.
@@ -522,8 +780,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -532,6 +792,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling high contrast.
@@ -539,8 +800,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -549,15 +812,18 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling full screen magnifier.
-  SetMagnifierEnabled(true);
+  SetScreenMagnifierEnabled(true);
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -566,15 +832,18 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling screen magnifier.
-  SetMagnifierEnabled(false);
+  SetScreenMagnifierEnabled(false);
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -583,6 +852,47 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling docked magnifier.
+  SetDockedMagnifierEnabled(true);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_TRUE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling docked magnifier.
+  SetDockedMagnifierEnabled(false);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling large cursor.
@@ -590,8 +900,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -600,6 +912,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling large cursor.
@@ -607,8 +920,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -617,6 +932,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enable on-screen keyboard.
@@ -624,8 +940,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -634,6 +952,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disable on-screen keyboard.
@@ -641,8 +960,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -651,6 +972,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling mono audio.
@@ -658,8 +980,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -668,6 +992,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling mono audio.
@@ -675,8 +1000,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -685,6 +1012,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling caret highlight.
@@ -692,8 +1020,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -702,6 +1032,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling caret highlight.
@@ -709,8 +1040,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -719,6 +1052,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling highlight mouse cursor.
@@ -726,8 +1060,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -736,6 +1072,7 @@
   EXPECT_TRUE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling highlight mouse cursor.
@@ -743,8 +1080,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -753,6 +1092,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling highlight keyboard focus.
@@ -760,8 +1100,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -770,6 +1112,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling highlight keyboard focus.
@@ -777,8 +1120,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -787,6 +1132,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling sticky keys.
@@ -794,8 +1140,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -804,6 +1152,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling sticky keys.
@@ -811,8 +1160,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -821,12 +1172,56 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling switch access.
+  EnableSwitchAccess(true);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_TRUE(IsSwitchAccessEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling switch access.
+  EnableSwitchAccess(false);
+  CreateDetailedMenu();
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling all of the a11y features.
   EnableSpokenFeedback(true);
+  EnableSelectToSpeak(true);
+  EnableDictation(true);
   EnableHighContrast(true);
-  SetMagnifierEnabled(true);
+  SetScreenMagnifierEnabled(true);
+  SetDockedMagnifierEnabled(true);
   EnableLargeCursor(true);
   EnableVirtualKeyboard(true);
   EnableAutoclick(true);
@@ -835,10 +1230,14 @@
   SetCursorHighlightEnabled(true);
   SetFocusHighlightEnabled(true);
   EnableStickyKeys(true);
+  EnableSwitchAccess(true);
   CreateDetailedMenu();
   EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_TRUE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_TRUE(IsDictationEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_TRUE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -848,12 +1247,16 @@
   // Focus highlighting can't be on when spoken feedback is on
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_TRUE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling all of the a11y features.
   EnableSpokenFeedback(false);
+  EnableSelectToSpeak(false);
+  EnableDictation(false);
   EnableHighContrast(false);
-  SetMagnifierEnabled(false);
+  SetScreenMagnifierEnabled(false);
+  SetDockedMagnifierEnabled(false);
   EnableLargeCursor(false);
   EnableVirtualKeyboard(false);
   EnableAutoclick(false);
@@ -862,10 +1265,14 @@
   SetCursorHighlightEnabled(false);
   SetFocusHighlightEnabled(false);
   EnableStickyKeys(false);
+  EnableSwitchAccess(false);
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -874,6 +1281,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling autoclick.
@@ -881,8 +1289,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -891,6 +1301,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling autoclick.
@@ -898,8 +1309,10 @@
   CreateDetailedMenu();
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDictationEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu());
   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
   EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
@@ -908,6 +1321,7 @@
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
   EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu());
   CloseDetailMenu();
 }
 
diff --git a/ash/system/tray/hover_highlight_view.h b/ash/system/tray/hover_highlight_view.h
index 8d2617d9..8c28b68 100644
--- a/ash/system/tray/hover_highlight_view.h
+++ b/ash/system/tray/hover_highlight_view.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "ash/system/accessibility/tray_accessibility.h"
 #include "ash/system/tray/actionable_view.h"
 #include "ash/system/tray/tray_popup_item_style.h"
 #include "base/bind.h"
@@ -98,6 +99,8 @@
   TriView* tri_view() { return tri_view_; }
 
  private:
+  friend class TrayAccessibilityTest;
+
   // Adds the image and label to the row with the label being styled using
   // |font_style|.
   void DoAddIconAndLabel(const gfx::ImageSkia& image,
diff --git a/ash/system/tray/tray_bubble_view.cc b/ash/system/tray/tray_bubble_view.cc
index 48ea206..991f731 100644
--- a/ash/system/tray/tray_bubble_view.cc
+++ b/ash/system/tray/tray_bubble_view.cc
@@ -351,7 +351,7 @@
 }
 
 bool TrayBubbleView::IsAnchoredToStatusArea() const {
-  return true;
+  return params_.is_anchored_to_status_area;
 }
 
 void TrayBubbleView::StopReroutingEvents() {
diff --git a/ash/system/tray/tray_bubble_view.h b/ash/system/tray/tray_bubble_view.h
index 1bd77b5..f054ec7 100644
--- a/ash/system/tray/tray_bubble_view.h
+++ b/ash/system/tray/tray_bubble_view.h
@@ -83,6 +83,7 @@
     AnchorMode anchor_mode = AnchorMode::kView;
     // Only used if anchor_mode == AnchorMode::kRect.
     gfx::Rect anchor_rect;
+    bool is_anchored_to_status_area = true;
     ShelfAlignment shelf_alignment = ShelfAlignment::kBottom;
     int min_width = 0;
     int max_width = 0;
diff --git a/ash/system/tray/tray_detailed_view.cc b/ash/system/tray/tray_detailed_view.cc
index 911b03e..b4b5aab 100644
--- a/ash/system/tray/tray_detailed_view.cc
+++ b/ash/system/tray/tray_detailed_view.cc
@@ -473,11 +473,13 @@
 }
 
 void TrayDetailedView::CloseBubble() {
-  // Don't close again if we're already closing.
+  // widget may be null in tests, in this case we do not need to do anything.
   views::Widget* widget = GetWidget();
-  if (widget && widget->IsClosed())
+  if (!widget)
     return;
-
+  // Don't close again if we're already closing.
+  if (widget->IsClosed())
+    return;
   delegate_->CloseBubble();
 }
 
diff --git a/base/BUILD.gn b/base/BUILD.gn
index e868138a..bb24f72 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1413,6 +1413,7 @@
       "android/early_trace_event_binding.h",
       "android/event_log.cc",
       "android/event_log.h",
+      "android/feature_list_jni.cc",
       "android/field_trial_list.cc",
       "android/important_file_writer_android.cc",
       "android/int_string_callback.cc",
@@ -3187,6 +3188,7 @@
       "android/java/src/org/chromium/base/CpuFeatures.java",
       "android/java/src/org/chromium/base/EarlyTraceEvent.java",
       "android/java/src/org/chromium/base/EventLog.java",
+      "android/java/src/org/chromium/base/FeatureList.java",
       "android/java/src/org/chromium/base/FieldTrialList.java",
       "android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
       "android/java/src/org/chromium/base/IntStringCallback.java",
diff --git a/base/android/feature_list_jni.cc b/base/android/feature_list_jni.cc
new file mode 100644
index 0000000..d033ed3
--- /dev/null
+++ b/base/android/feature_list_jni.cc
@@ -0,0 +1,16 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/base_jni_headers/FeatureList_jni.h"
+#include "base/feature_list.h"
+
+namespace base {
+namespace android {
+
+static jboolean JNI_FeatureList_IsInitialized(JNIEnv* env) {
+  return !!base::FeatureList::GetInstance();
+}
+
+}  // namespace android
+}  // namespace base
diff --git a/base/android/java/src/org/chromium/base/FeatureList.java b/base/android/java/src/org/chromium/base/FeatureList.java
index 2fac64c..f55b575 100644
--- a/base/android/java/src/org/chromium/base/FeatureList.java
+++ b/base/android/java/src/org/chromium/base/FeatureList.java
@@ -7,11 +7,18 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.MainDex;
+import org.chromium.base.annotations.NativeMethods;
+import org.chromium.base.library_loader.LibraryLoader;
+
 import java.util.Map;
 
 /**
  * Provides shared capabilities for feature flag support.
  */
+@JNINamespace("base::android")
+@MainDex
 public class FeatureList {
     /** Map that stores substitution feature flags for tests. */
     private static @Nullable Map<String, Boolean> sTestFeatures;
@@ -22,6 +29,31 @@
     private FeatureList() {}
 
     /**
+     * @return Whether the native FeatureList has been initialized. If this method returns false,
+     *         none of the methods in this class that require native access should be called (except
+     *         in tests if test features have been set).
+     */
+    public static boolean isInitialized() {
+        return hasTestFeatures() || isNativeInitialized();
+    }
+
+    /**
+     * @return Whether the native FeatureList is initialized or not.
+     */
+    public static boolean isNativeInitialized() {
+        if (!LibraryLoader.getInstance().isInitialized()) return false;
+        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
+        // In that case, accessing it will not immediately fail, but instead cause a crash later
+        // when it is initialized. Return whether the native FeatureList has been initialized,
+        // so the return value can be tested, or asserted for a more actionable stack trace
+        // on failure.
+        //
+        // The FeatureList is however guaranteed to be initialized by the time
+        // AsyncInitializationActivity#finishNativeInitialization is called.
+        return FeatureListJni.get().isInitialized();
+    }
+
+    /**
      * This is called explicitly for instrumentation tests via Features#applyForInstrumentation().
      * Unit tests and Robolectric tests must not invoke this and should rely on the {@link Features}
      * annotations to enable or disable any feature flags.
@@ -75,4 +107,9 @@
         }
         return null;
     }
+
+    @NativeMethods
+    interface Natives {
+        boolean isInitialized();
+    }
 }
diff --git a/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java b/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
index 327b759..8925de0 100644
--- a/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
+++ b/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
@@ -43,11 +43,9 @@
         Assert.assertNull(discardableReference.get());
 
         // The object is not (strongly) reachable anymore, so the weak reference may or may not be
-        // null (it could be if a GC has happened since the pool was drained).
-        // After an explicit GC call it definitely should be null.
-        Runtime.getRuntime().gc();
-
-        Assert.assertNull(weakReference.get());
+        // null (it could be if a GC has happened since the pool was drained). It should be
+        // eligible for garbage collection.
+        Assert.assertTrue(GarbageCollectionTestUtils.canBeGarbageCollected(weakReference));
     }
 
     @Test
@@ -72,11 +70,9 @@
         Assert.assertNull(discardableReference.get());
 
         // The object is not (strongly) reachable anymore, so the weak reference may or may not be
-        // null (it could be if a GC has happened since the pool was drained).
-        // After an explicit GC call it definitely should be null.
-        Runtime.getRuntime().gc();
-
-        Assert.assertNull(weakReference.get());
+        // null (it could be if a GC has happened since the pool was drained). It should be
+        // eligible for garbage collection.
+        Assert.assertTrue(GarbageCollectionTestUtils.canBeGarbageCollected(weakReference));
     }
 
     @Test
@@ -101,11 +97,9 @@
         Assert.assertNull(discardableReference.get());
 
         // The object is not (strongly) reachable anymore, so the weak reference may or may not be
-        // null (it could be if a GC has happened since the pool was drained).
-        // After an explicit GC call it definitely should be null.
-        Runtime.getRuntime().gc();
-
-        Assert.assertNull(weakReference.get());
+        // null (it could be if a GC has happened since the pool was drained). It should be
+        // eligible for garbage collection.
+        Assert.assertTrue(GarbageCollectionTestUtils.canBeGarbageCollected(weakReference));
     }
 
     /**
@@ -129,10 +123,8 @@
         discardableReference = null;
 
         // The object is not (strongly) reachable anymore, so the weak reference may or may not be
-        // null (it could be if a GC has happened since the pool was drained).
-        // After an explicit GC call it definitely should be null.
-        Runtime.getRuntime().gc();
-
-        Assert.assertNull(weakReference.get());
+        // null (it could be if a GC has happened since the pool was drained). It should be
+        // eligible for garbage collection.
+        Assert.assertTrue(GarbageCollectionTestUtils.canBeGarbageCollected(weakReference));
     }
 }
diff --git a/base/test/android/java/src/org/chromium/base/GarbageCollectionTestUtils.java b/base/test/android/java/src/org/chromium/base/GarbageCollectionTestUtils.java
index 2755a1d..4952216 100644
--- a/base/test/android/java/src/org/chromium/base/GarbageCollectionTestUtils.java
+++ b/base/test/android/java/src/org/chromium/base/GarbageCollectionTestUtils.java
@@ -4,8 +4,6 @@
 
 package org.chromium.base;
 
-import android.os.Build;
-
 import java.lang.ref.WeakReference;
 
 /**
@@ -17,8 +15,8 @@
      * Note that {@link #MAX_GC_ITERATIONS} * {@link #GC_SLEEP_TIME} should not be too large,
      * since there are tests asserting objects NOT garbage collected.
      */
-    private final static int MAX_GC_ITERATIONS = 3;
-    private final static long GC_SLEEP_TIME = 100;
+    private static final int MAX_GC_ITERATIONS = 3;
+    private static final long GC_SLEEP_TIME = 10;
 
     /**
      * Do garbage collection and see if an object is released.
@@ -27,8 +25,8 @@
      */
     public static boolean canBeGarbageCollected(WeakReference<?> reference) {
         // Robolectric tests, one iteration is enough.
-        final int iterations = isInRobolectric() ? 1 : MAX_GC_ITERATIONS;
-        final long sleepTime = isInRobolectric() ? 0 : GC_SLEEP_TIME;
+        final int iterations = MAX_GC_ITERATIONS;
+        final long sleepTime = GC_SLEEP_TIME;
         Runtime runtime = Runtime.getRuntime();
         for (int i = 0; i < iterations; i++) {
             runtime.runFinalization();
@@ -45,8 +43,4 @@
 
         return reference.get() == null;
     }
-
-    private static boolean isInRobolectric() {
-        return Build.FINGERPRINT.equals("robolectric");
-    }
 }
diff --git a/build/android/gyp/compile_resources.py b/build/android/gyp/compile_resources.py
index 6ed38475..eb668efe 100755
--- a/build/android/gyp/compile_resources.py
+++ b/build/android/gyp/compile_resources.py
@@ -26,6 +26,7 @@
 import sys
 import tempfile
 import textwrap
+import time
 import zipfile
 from xml.etree import ElementTree
 
@@ -535,12 +536,18 @@
   cwebp_version = subprocess.check_output([webp_binary, '-version']).rstrip()
   cwebp_arguments = ['-mt', '-quiet', '-m', '6', '-q', '100', '-lossless']
 
+  sha1_time = [0]
+  cwebp_time = [0]
+  cache_hits = [0]
+
   def cal_sha1(png_path):
+    start = time.time()
     with open(png_path, 'rb') as f:
       png_content = f.read()
 
-      sha1_hex = hashlib.sha1(png_content).hexdigest()
-      return sha1_hex
+    sha1_hex = hashlib.sha1(png_content).hexdigest()
+    sha1_time[0] += time.time() - start
+    return sha1_hex
 
   def get_converted_image(png_path_dir_tuple):
     png_path, original_dir = png_path_dir_tuple
@@ -553,12 +560,15 @@
     webp_path = os.path.splitext(png_path)[0]
 
     if os.path.exists(webp_cache_path):
+      cache_hits[0] += 1
       os.link(webp_cache_path, webp_path)
     else:
       # We place the generated webp image to webp_path, instead of in the
       # webp_cache_dir to avoid concurrency issues.
+      start = time.time()
       args = [webp_binary, png_path] + cwebp_arguments + ['-o', webp_path]
       subprocess.check_call(args)
+      cwebp_time[0] += time.time() - start
 
       try:
         os.link(webp_path, webp_cache_path)
@@ -572,11 +582,14 @@
         os.path.relpath(png_path, original_dir),
         os.path.relpath(webp_path, original_dir))
 
-  pool.map(
-      get_converted_image,
-      [f for f in png_files if not _PNG_WEBP_EXCLUSION_PATTERN.match(f[0])])
+  png_files = [
+      f for f in png_files if not _PNG_WEBP_EXCLUSION_PATTERN.match(f[0])
+  ]
+  pool.map(get_converted_image, png_files)
   pool.close()
   pool.join()
+  logging.debug('png->webp: cache: %d/%d sha1 time: %.1fms cwebp time: %.1fms',
+                cache_hits[0], len(png_files), sha1_time[0], cwebp_time[0])
 
 
 def _JetifyArchive(dep_path, output_path):
@@ -924,6 +937,7 @@
                          desired_manifest_package_name)
     link_command += ['--stable-ids', build.stable_ids_path]
 
+  logging.debug('Running aapt2 compile (and jetify)')
   partials = _CompileDeps(options.aapt2_path, dep_subdirs, build.temp_dir)
   for partial in partials:
     link_command += ['-R', partial]
diff --git a/build/android/gyp/util/manifest_utils.py b/build/android/gyp/util/manifest_utils.py
index 309230f..3b854d94 100644
--- a/build/android/gyp/util/manifest_utils.py
+++ b/build/android/gyp/util/manifest_utils.py
@@ -138,4 +138,4 @@
       else:
         lines.append(l)
 
-  return '\n'.join(lines)
+  return '\n'.join(lines) + '\n'
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 618d5f6..9fcbfa3 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20200407.0.1
\ No newline at end of file
+0.20200407.1.1
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 618d5f6..9fcbfa3 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20200407.0.1
\ No newline at end of file
+0.20200407.1.1
\ No newline at end of file
diff --git a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
index 609b925b..cf9f0ecb 100644
--- a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
+++ b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
@@ -13,6 +13,7 @@
 #include "base/values.h"
 #include "cc/layers/layer_impl.h"
 #include "cc/layers/picture_layer_impl.h"
+#include "cc/paint/display_item_list.h"
 #include "cc/raster/playback_image_provider.h"
 #include "cc/raster/raster_buffer_provider.h"
 #include "cc/trees/layer_tree_host_impl.h"
@@ -158,6 +159,10 @@
                      rasterize_results_.pixels_rasterized_with_non_solid_color);
   result->SetInteger("pixels_rasterized_as_opaque",
                      rasterize_results_.pixels_rasterized_as_opaque);
+  result->SetInteger("visible_pixels_for_lcd_text",
+                     rasterize_results_.visible_pixels_for_lcd_text);
+  result->SetInteger("visible_pixels_for_non_lcd_text",
+                     rasterize_results_.visible_pixels_for_non_lcd_text);
   result->SetInteger("total_layers", rasterize_results_.total_layers);
   result->SetInteger("total_picture_layers",
                      rasterize_results_.total_picture_layers);
@@ -180,6 +185,14 @@
     return;
   }
 
+  int text_pixels =
+      layer->GetRasterSource()->GetDisplayItemList()->AreaOfDrawText(
+          layer->visible_layer_rect());
+  if (layer->CanUseLCDText())
+    rasterize_results_.visible_pixels_for_lcd_text += text_pixels;
+  else
+    rasterize_results_.visible_pixels_for_non_lcd_text += text_pixels;
+
   FixedInvalidationPictureLayerTilingClient client(layer,
                                                    gfx::Rect(layer->bounds()));
 
@@ -230,6 +243,8 @@
     : pixels_rasterized(0),
       pixels_rasterized_with_non_solid_color(0),
       pixels_rasterized_as_opaque(0),
+      visible_pixels_for_lcd_text(0),
+      visible_pixels_for_non_lcd_text(0),
       total_layers(0),
       total_picture_layers(0),
       total_picture_layers_with_no_content(0),
diff --git a/cc/benchmarks/rasterize_and_record_benchmark_impl.h b/cc/benchmarks/rasterize_and_record_benchmark_impl.h
index be8a6de..5ba3e06 100644
--- a/cc/benchmarks/rasterize_and_record_benchmark_impl.h
+++ b/cc/benchmarks/rasterize_and_record_benchmark_impl.h
@@ -41,6 +41,8 @@
     int pixels_rasterized;
     int pixels_rasterized_with_non_solid_color;
     int pixels_rasterized_as_opaque;
+    int visible_pixels_for_lcd_text;
+    int visible_pixels_for_non_lcd_text;
     base::TimeDelta total_best_time;
     int total_layers;
     int total_picture_layers;
diff --git a/cc/paint/display_item_list.cc b/cc/paint/display_item_list.cc
index 9429fef1..7217e70 100644
--- a/cc/paint/display_item_list.cc
+++ b/cc/paint/display_item_list.cc
@@ -31,27 +31,28 @@
   return true;
 }
 
-void FillTextContent(const PaintOpBuffer* buffer,
-                     std::vector<NodeId>* content) {
+template <typename Function>
+void IterateTextContent(const PaintOpBuffer* buffer, const Function& yield) {
   for (auto* op : PaintOpBuffer::Iterator(buffer)) {
     if (op->GetType() == PaintOpType::DrawTextBlob) {
-      content->push_back(static_cast<DrawTextBlobOp*>(op)->node_id);
+      yield(static_cast<DrawTextBlobOp*>(op));
     } else if (op->GetType() == PaintOpType::DrawRecord) {
-      FillTextContent(static_cast<DrawRecordOp*>(op)->record.get(), content);
+      IterateTextContent(static_cast<DrawRecordOp*>(op)->record.get(), yield);
     }
   }
 }
 
-void FillTextContentByOffsets(const PaintOpBuffer* buffer,
-                              const std::vector<size_t>& offsets,
-                              std::vector<NodeId>* content) {
+template <typename Function>
+void IterateTextContentByOffsets(const PaintOpBuffer* buffer,
+                                 const std::vector<size_t>& offsets,
+                                 const Function& yield) {
   if (!buffer)
     return;
   for (auto* op : PaintOpBuffer::OffsetIterator(buffer, &offsets)) {
     if (op->GetType() == PaintOpType::DrawTextBlob) {
-      content->push_back(static_cast<DrawTextBlobOp*>(op)->node_id);
+      yield(static_cast<DrawTextBlobOp*>(op));
     } else if (op->GetType() == PaintOpType::DrawRecord) {
-      FillTextContent(static_cast<DrawRecordOp*>(op)->record.get(), content);
+      IterateTextContent(static_cast<DrawRecordOp*>(op)->record.get(), yield);
     }
   }
 }
@@ -85,7 +86,23 @@
                                      std::vector<NodeId>* content) const {
   std::vector<size_t> offsets;
   rtree_.Search(rect, &offsets);
-  FillTextContentByOffsets(&paint_op_buffer_, offsets, content);
+  IterateTextContentByOffsets(
+      &paint_op_buffer_, offsets,
+      [content](const DrawTextBlobOp* op) { content->push_back(op->node_id); });
+}
+
+double DisplayItemList::AreaOfDrawText(const gfx::Rect& rect) const {
+  std::vector<size_t> offsets;
+  rtree_.Search(rect, &offsets);
+  double area = 0;
+  IterateTextContentByOffsets(
+      &paint_op_buffer_, offsets, [&area](const DrawTextBlobOp* op) {
+        // This is not fully accurate, e.g. when there is transform operations,
+        // but is good for statistics purpose.
+        SkRect bounds = op->blob->bounds();
+        area += static_cast<double>(bounds.width()) * bounds.height();
+      });
+  return area;
 }
 
 void DisplayItemList::Finalize() {
diff --git a/cc/paint/display_item_list.h b/cc/paint/display_item_list.h
index 3054d27c..1796fc3 100644
--- a/cc/paint/display_item_list.h
+++ b/cc/paint/display_item_list.h
@@ -62,11 +62,15 @@
 
   void Raster(SkCanvas* canvas, ImageProvider* image_provider = nullptr) const;
 
-  // Captures the DrawTextBlobOp within |rect| and returns the associated
-  // NodeId in |content|.
+  // Captures |DrawTextBlobOp|s intersecting |rect| and returns the associated
+  // |NodeId|s in |content|.
   void CaptureContent(const gfx::Rect& rect,
                       std::vector<NodeId>* content) const;
 
+  // Returns the approximate total area covered by |DrawTextBlobOp|s
+  // intersecting |rect|, used for statistics purpose.
+  double AreaOfDrawText(const gfx::Rect& rect) const;
+
   void StartPaint() {
 #if DCHECK_IS_ON()
     DCHECK(!IsPainting());
diff --git a/cc/paint/display_item_list_unittest.cc b/cc/paint/display_item_list_unittest.cc
index f15b5a6..a4dea57b 100644
--- a/cc/paint/display_item_list_unittest.cc
+++ b/cc/paint/display_item_list_unittest.cc
@@ -1132,4 +1132,55 @@
   EXPECT_EQ(8u, list->TotalOpCount());
 }
 
+TEST_F(DisplayItemListTest, AreaOfDrawText) {
+  auto list = base::MakeRefCounted<DisplayItemList>();
+  auto sub_list = base::MakeRefCounted<DisplayItemList>();
+
+  auto text_blob1 = SkTextBlob::MakeFromString("ABCD", SkFont());
+  auto text_blob1_bounds = text_blob1->bounds();
+  auto text_blob1_area = text_blob1_bounds.width() * text_blob1_bounds.height();
+  auto text_blob2 = SkTextBlob::MakeFromString("EFG", SkFont());
+  auto text_blob2_bounds = text_blob2->bounds();
+  auto text_blob2_area = text_blob2_bounds.width() * text_blob2_bounds.height();
+
+  sub_list->StartPaint();
+  sub_list->push<DrawRectOp>(SkRect::MakeWH(100, 200), PaintFlags());
+  sub_list->push<DrawTextBlobOp>(text_blob1, 0, 0, PaintFlags());
+  sub_list->EndPaintOfUnpaired(gfx::Rect());
+  auto record = sub_list->ReleaseAsRecord();
+
+  list->StartPaint();
+  list->push<SaveOp>();
+  list->push<TranslateOp>(100, 100);
+  list->push<DrawRecordOp>(record);
+  list->push<RestoreOp>();
+  list->EndPaintOfUnpaired(gfx::Rect(100, 100, 100, 200));
+
+  list->StartPaint();
+  list->push<SaveOp>();
+  list->push<TranslateOp>(100, 400);
+  list->push<DrawRecordOp>(record);
+  list->push<RestoreOp>();
+  list->EndPaintOfUnpaired(gfx::Rect(100, 400, 100, 200));
+
+  list->StartPaint();
+  list->push<DrawRectOp>(SkRect::MakeWH(100, 100), PaintFlags());
+  list->push<DrawTextBlobOp>(text_blob2, 10, 20, PaintFlags());
+  list->EndPaintOfUnpaired(gfx::Rect(0, 0, 100, 100));
+
+  list->StartPaint();
+  list->push<DrawTextBlobOp>(text_blob2, 400, 100, PaintFlags());
+  list->push<DrawRectOp>(SkRect::MakeXYWH(400, 100, 100, 100), PaintFlags());
+  list->EndPaintOfUnpaired(gfx::Rect(400, 100, 100, 100));
+
+  list->Finalize();
+  // This includes the DrawTextBlobOp in the first DrawRecordOp the the first
+  // direct DrawTextBlobOp.
+  EXPECT_EQ(static_cast<int>(text_blob1_area + text_blob2_area),
+            static_cast<int>(list->AreaOfDrawText(gfx::Rect(0, 0, 200, 200))));
+  // This includes all DrawTextBlobOps.
+  EXPECT_EQ(static_cast<int>(text_blob1_area * 2 + text_blob2_area * 2),
+            static_cast<int>(list->AreaOfDrawText(gfx::Rect(0, 0, 500, 500))));
+}
+
 }  // namespace cc
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index c2448c0..f9e5fdb1 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -2869,7 +2869,6 @@
     "java/src/org/chromium/chrome/browser/omnibox/OmniboxViewUtil.java",
     "java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java",
     "java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java",
-    "java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java",
     "java/src/org/chromium/chrome/browser/page_info/PageInfoController.java",
     "java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewDemoService.java",
     "java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewDemoServiceFactory.java",
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni
index 8afab38a..3138912 100644
--- a/chrome/android/chrome_java_resources.gni
+++ b/chrome/android/chrome_java_resources.gni
@@ -1073,7 +1073,6 @@
   "java/res/layout/compositor_view_holder.xml",
   "java/res/layout/confirm_import_sync_data.xml",
   "java/res/layout/confirm_important_sites_list_row.xml",
-  "java/res/layout/connection_info.xml",
   "java/res/layout/contact_view.xml",
   "java/res/layout/contacts_list_item_view.xml",
   "java/res/layout/contacts_picker_dialog.xml",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index d5eefd8..767e56f 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1216,7 +1216,6 @@
   "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewProperties.java",
   "java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java",
   "java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java",
-  "java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java",
   "java/src/org/chromium/chrome/browser/page_info/PageInfoController.java",
   "java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java",
   "java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 91e1ad3..edbd872 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -11,6 +11,7 @@
   "junit/src/org/chromium/chrome/browser/ShadowIdleHandlerAwareMessageQueue.java",
   "junit/src/org/chromium/chrome/browser/ShortcutHelperTest.java",
   "junit/src/org/chromium/chrome/browser/about_settings/AboutSettingsBridgeTest.java",
+  "junit/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateUnitTest.java",
   "junit/src/org/chromium/chrome/browser/autofill/AutofillUiUtilsTest.java",
   "junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskSchedulerTest.java",
   "junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskTest.java",
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java
index c15ff6b..7f54cbd 100644
--- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java
+++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java
@@ -24,6 +24,7 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.components.page_info.VrHandler;
 import org.chromium.ui.display.DisplayAndroid;
 import org.chromium.ui.display.DisplayAndroidManager;
 
@@ -32,7 +33,7 @@
 import java.util.Set;
 
 /** Delegate to call into VR. */
-public abstract class VrDelegate {
+public abstract class VrDelegate implements VrHandler {
     private static final String TAG = "VrDelegate";
     private static final String VR_BOOT_SYSTEM_PROPERTY = "ro.boot.vr";
     private static final String SAMSUNG_GALAXY_PREFIX = "SM-";
@@ -55,6 +56,7 @@
     public abstract void forceExitVrImmediately();
     public abstract boolean onActivityResultWithNative(int requestCode, int resultCode);
     public abstract void onNativeLibraryAvailable();
+    @Override
     public abstract boolean isInVr();
     public abstract boolean canLaunch2DIntents();
     public abstract boolean onBackPressed();
@@ -141,6 +143,23 @@
 
     public abstract void onSaveInstanceState(Bundle outState);
 
+    @Override
+    public void exitVrAndRun(Runnable r, @VrHandler.UiType int uiType) {
+        assert (isInVr());
+        switch (uiType) {
+            case UiType.CERTIFICATE_INFO:
+                requestToExitVrAndRunOnSuccess(r, UiUnsupportedMode.UNHANDLED_CERTIFICATE_INFO);
+                return;
+            case UiType.CONNECTION_SECURITY_INFO:
+                requestToExitVrAndRunOnSuccess(
+                        r, UiUnsupportedMode.UNHANDLED_CONNECTION_SECURITY_INFO);
+                return;
+            default:
+                assert false : "Unrecognized uiType";
+                return;
+        }
+    }
+
     /* package */ void setSystemUiVisibilityForVr(Activity activity) {
         activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         int flags = activity.getWindow().getDecorView().getSystemUiVisibility();
diff --git a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected
index 31081fd..81a432c 100644
--- a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected
+++ b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected
@@ -1843,4 +1843,4 @@
         android:name="org.chromium.chrome.browser.prerender.ChromePrerenderService"
         tools:ignore="ExportedService"/>
   </application>
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
index e7ecb1a..3bd210f 100644
--- a/chrome/android/java/res/values/dimens.xml
+++ b/chrome/android/java/res/values/dimens.xml
@@ -4,9 +4,6 @@
      found in the LICENSE file. -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
-    <!-- Connection info popup dimensions -->
-    <dimen name="connection_info_padding_thin">16dp</dimen>
-
     <!-- Page Info Popup Dimensions -->
     <dimen name="page_info_popup_padding_sides">16dp</dimen>
     <dimen name="page_info_popup_button_padding_sides">8dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
index b3b7822..1ee7372a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
@@ -39,12 +39,11 @@
 import org.chromium.content_public.common.ResourceRequestBody;
 import org.chromium.ui.base.PageTransition;
 import org.chromium.ui.mojom.WindowOpenDisposition;
-import org.chromium.url.URI;
+import org.chromium.url.GURL;
 import org.chromium.webapk.lib.client.WebApkIdentityServiceClient;
 import org.chromium.webapk.lib.client.WebApkNavigationClient;
 import org.chromium.webapk.lib.client.WebApkValidator;
 
-import java.net.URISyntaxException;
 import java.util.List;
 
 /**
@@ -73,22 +72,18 @@
      * @param postData       Post-data to include in the tab URL's request body.
      */
     @CalledByNative
-    public static void launchTab(final int requestId, boolean incognito, String url,
-            int disposition, String referrerUrl, int referrerPolicy, String extraHeaders,
+    public static void launchTab(final int requestId, boolean incognito, GURL url, int disposition,
+            String referrerUrl, int referrerPolicy, String extraHeaders,
             ResourceRequestBody postData) {
         // Open popup window in custom tab.
         // Note that this is used by PaymentRequestEvent.openWindow().
         if (disposition == WindowOpenDisposition.NEW_POPUP) {
             boolean success = false;
-            try {
-                if (PaymentHandlerCoordinator.isEnabled()) {
-                    success = PaymentRequestImpl.openPaymentHandlerWindow(new URI(url),
-                            (webContents)
-                                    -> onWebContentsForRequestAvailable(requestId, webContents));
-                } else {
-                    success = createPopupCustomTab(requestId, url, incognito);
-                }
-            } catch (URISyntaxException e) { /* Intentionally leave blank, so success is false. */
+            if (PaymentHandlerCoordinator.isEnabled()) {
+                success = PaymentRequestImpl.openPaymentHandlerWindow(url,
+                        (webContents) -> onWebContentsForRequestAvailable(requestId, webContents));
+            } else {
+                success = createPopupCustomTab(requestId, url.getSpec(), incognito);
             }
             if (!success) {
                 PostTask.postTask(UiThreadTaskTraits.DEFAULT,
@@ -97,8 +92,8 @@
             return;
         }
 
-        dispatchLaunch(
-                requestId, incognito, url, referrerUrl, referrerPolicy, extraHeaders, postData);
+        dispatchLaunch(requestId, incognito, url.getSpec(), referrerUrl, referrerPolicy,
+                extraHeaders, postData);
     }
 
     /** Dispatches the launch event. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
index 83e9141e..436d2d1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -16,6 +16,7 @@
 import android.view.View;
 
 import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -83,9 +84,10 @@
     private Callback<BookmarkBridge> mBookmarkBridgeSupplierCallback;
     private boolean mUpdateMenuItemVisible;
     private ShareUtils mShareUtils;
+    @VisibleForTesting
     @IntDef({MenuGroup.INVALID, MenuGroup.PAGE_MENU, MenuGroup.OVERVIEW_MODE_MENU,
             MenuGroup.START_SURFACE_MODE_MENU, MenuGroup.TABLET_EMPTY_MODE_MENU})
-    private @interface MenuGroup {
+    @interface MenuGroup {
         int INVALID = -1;
         int PAGE_MENU = 0;
         int OVERVIEW_MODE_MENU = 1;
@@ -174,8 +176,9 @@
         }
     }
 
-    @Override
-    public void prepareMenu(Menu menu, AppMenuHandler handler) {
+    @VisibleForTesting
+    @MenuGroup
+    int getMenuGroup() {
         // Determine which menu to show.
         @MenuGroup
         int menuGroup = MenuGroup.INVALID;
@@ -196,127 +199,114 @@
                     : MenuGroup.OVERVIEW_MODE_MENU;
         }
         assert menuGroup != MenuGroup.INVALID;
+        return menuGroup;
+    }
 
+    private void setMenuGroupVisibility(@MenuGroup int menuGroup, Menu menu) {
         menu.setGroupVisible(R.id.PAGE_MENU, menuGroup == MenuGroup.PAGE_MENU);
         menu.setGroupVisible(R.id.OVERVIEW_MODE_MENU, menuGroup == MenuGroup.OVERVIEW_MODE_MENU);
         menu.setGroupVisible(
                 R.id.START_SURFACE_MODE_MENU, menuGroup == MenuGroup.START_SURFACE_MODE_MENU);
         menu.setGroupVisible(
                 R.id.TABLET_EMPTY_MODE_MENU, menuGroup == MenuGroup.TABLET_EMPTY_MODE_MENU);
+    }
+
+    @Override
+    public void prepareMenu(Menu menu, AppMenuHandler handler) {
+        int menuGroup = getMenuGroup();
+        setMenuGroupVisibility(menuGroup, menu);
 
         boolean isIncognito = mTabModelSelector.getCurrentModel().isIncognito();
         Tab currentTab = mActivityTabProvider.get();
+
         if (menuGroup == MenuGroup.PAGE_MENU && currentTab != null) {
-            String url = currentTab.getUrlString();
-            boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
-                    || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
-            boolean isFileScheme = url.startsWith(UrlConstants.FILE_URL_PREFIX);
-            boolean isContentScheme = url.startsWith(UrlConstants.CONTENT_URL_PREFIX);
-            boolean shouldShowIconRow = !mIsTablet
-                    || mDecorView.getWidth()
-                            < DeviceFormFactor.getNonMultiDisplayMinimumTabletWidthPx(mContext);
+            preparePageMenu(menu, currentTab, handler, isIncognito);
+        }
+        prepareCommonMenuItems(menu, menuGroup, isIncognito);
+    }
 
-            final boolean isMenuButtonOnTop =
-                    mToolbarManager != null && !mToolbarManager.isMenuFromBottom();
-            shouldShowIconRow &= isMenuButtonOnTop;
+    private void preparePageMenu(
+            Menu menu, Tab currentTab, AppMenuHandler handler, boolean isIncognito) {
+        String url = currentTab.getUrlString();
+        boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
+                || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
+        boolean isFileScheme = url.startsWith(UrlConstants.FILE_URL_PREFIX);
+        boolean isContentScheme = url.startsWith(UrlConstants.CONTENT_URL_PREFIX);
 
-            // Update the icon row items (shown in narrow form factors).
-            menu.findItem(R.id.icon_row_menu_id).setVisible(shouldShowIconRow);
-            if (shouldShowIconRow) {
-                // Disable the "Forward" menu item if there is no page to go to.
-                MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
-                forwardMenuItem.setEnabled(currentTab.canGoForward());
+        // Update the icon row items (shown in narrow form factors).
+        boolean shouldShowIconRow = shouldShowIconRow();
+        menu.findItem(R.id.icon_row_menu_id).setVisible(shouldShowIconRow);
+        if (shouldShowIconRow) {
+            // Disable the "Forward" menu item if there is no page to go to.
+            MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
+            forwardMenuItem.setEnabled(currentTab.canGoForward());
 
-                mReloadMenuItem = menu.findItem(R.id.reload_menu_id);
-                Drawable icon =
-                        AppCompatResources.getDrawable(mContext, R.drawable.btn_reload_stop);
-                DrawableCompat.setTintList(icon,
-                        AppCompatResources.getColorStateList(
-                                mContext, R.color.default_icon_color_tint_list));
-                mReloadMenuItem.setIcon(icon);
-                loadingStateChanged(currentTab.isLoading());
+            mReloadMenuItem = menu.findItem(R.id.reload_menu_id);
+            Drawable icon = AppCompatResources.getDrawable(mContext, R.drawable.btn_reload_stop);
+            DrawableCompat.setTintList(icon,
+                    AppCompatResources.getColorStateList(
+                            mContext, R.color.default_icon_color_tint_list));
+            mReloadMenuItem.setIcon(icon);
+            loadingStateChanged(currentTab.isLoading());
 
-                MenuItem bookmarkMenuItem = menu.findItem(R.id.bookmark_this_page_id);
-                updateBookmarkMenuItem(bookmarkMenuItem, currentTab);
+            MenuItem bookmarkMenuItem = menu.findItem(R.id.bookmark_this_page_id);
+            updateBookmarkMenuItem(bookmarkMenuItem, currentTab);
 
-                MenuItem offlineMenuItem = menu.findItem(R.id.offline_page_id);
-                if (offlineMenuItem != null) {
-                    offlineMenuItem.setEnabled(DownloadUtils.isAllowedToDownloadPage(currentTab));
-                }
+            MenuItem offlineMenuItem = menu.findItem(R.id.offline_page_id);
+            if (offlineMenuItem != null) {
+                offlineMenuItem.setEnabled(shouldEnableDownloadPage(currentTab));
             }
-
-            mUpdateMenuItemVisible =
-                    UpdateMenuItemHelper.getInstance().getUiState().itemState != null;
-            menu.findItem(R.id.update_menu_id).setVisible(mUpdateMenuItemVisible);
-            if (mUpdateMenuItemVisible) {
-                mAppMenuInvalidator = () -> handler.invalidateAppMenu();
-                UpdateMenuItemHelper.getInstance().registerObserver(mAppMenuInvalidator);
-            }
-
-            boolean hasMoreThanOneTab = mTabModelSelector.getTotalTabCount() > 1;
-            menu.findItem(R.id.move_to_other_window_menu_id)
-                    .setVisible(mMultiWindowModeStateDispatcher.isOpenInOtherWindowSupported()
-                            && hasMoreThanOneTab);
-
-            // Don't allow either "chrome://" pages or interstitial pages to be shared.
-            menu.findItem(R.id.share_row_menu_id)
-                    .setVisible(mShareUtils.shouldEnableShare(currentTab));
-
-            ShareHelper.configureDirectShareMenuItem(
-                    mContext, menu.findItem(R.id.direct_share_menu_id));
-
-            boolean isChromeOrInterstitialPage =
-                    isChromeScheme || ((TabImpl) currentTab).isShowingInterstitialPage();
-
-            menu.findItem(R.id.paint_preview_show_id)
-                    .setVisible(CachedFeatureFlags.isEnabled(ChromeFeatureList.PAINT_PREVIEW_DEMO)
-                            && !isChromeOrInterstitialPage && !isIncognito);
-
-            // Disable find in page on the native NTP.
-            menu.findItem(R.id.find_in_page_id)
-                    .setVisible(!currentTab.isNativePage() && currentTab.getWebContents() != null);
-
-            // Prepare translate menu button.
-            prepareTranslateMenuItem(menu, currentTab);
-
-            // Hide 'Add to homescreen' for the following:
-            // * chrome:// pages - Android doesn't know how to direct those URLs.
-            // * incognito pages - To avoid problems where users create shortcuts in incognito
-            //                      mode and then open the webapp in regular mode.
-            // * file:// - After API 24, file: URIs are not supported in VIEW intents and thus
-            //             can not be added to the homescreen.
-            // * content:// - Accessing external content URIs requires the calling app to grant
-            //                access to the resource via FLAG_GRANT_READ_URI_PERMISSION, and that
-            //                is not persisted when adding to the homescreen.
-            // * If creating shortcuts it not supported by the current home screen.
-            boolean canShowHomeScreenMenuItem = ShortcutHelper.isAddToHomeIntentSupported()
-                    && !isChromeScheme && !isFileScheme && !isContentScheme && !isIncognito
-                    && !TextUtils.isEmpty(url);
-            prepareAddToHomescreenMenuItem(menu, currentTab, canShowHomeScreenMenuItem);
-
-            updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
-
-            // Only display reader mode settings menu option if the current page is in reader mode.
-            menu.findItem(R.id.reader_mode_prefs_id)
-                    .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrlString()));
-
-            // Only display the Enter VR button if VR Shell Dev environment is enabled.
-            menu.findItem(R.id.enter_vr_id)
-                    .setVisible(CommandLine.getInstance().hasSwitch(
-                            ChromeSwitches.ENABLE_VR_SHELL_DEV));
         }
 
+        mUpdateMenuItemVisible = shouldShowUpdateMenuItem();
+        menu.findItem(R.id.update_menu_id).setVisible(mUpdateMenuItemVisible);
+        if (mUpdateMenuItemVisible) {
+            mAppMenuInvalidator = () -> handler.invalidateAppMenu();
+            UpdateMenuItemHelper.getInstance().registerObserver(mAppMenuInvalidator);
+        }
+
+        menu.findItem(R.id.move_to_other_window_menu_id).setVisible(shouldShowMoveToOtherWindow());
+
+        // Don't allow either "chrome://" pages or interstitial pages to be shared.
+        menu.findItem(R.id.share_row_menu_id).setVisible(mShareUtils.shouldEnableShare(currentTab));
+
+        ShareHelper.configureDirectShareMenuItem(
+                mContext, menu.findItem(R.id.direct_share_menu_id));
+
+        menu.findItem(R.id.paint_preview_show_id)
+                .setVisible(shouldShowPaintPreview(isChromeScheme, currentTab, isIncognito));
+
+        // Disable find in page on the native NTP.
+        menu.findItem(R.id.find_in_page_id).setVisible(shouldShowFindInPage(currentTab));
+
+        // Prepare translate menu button.
+        prepareTranslateMenuItem(menu, currentTab);
+
+        prepareAddToHomescreenMenuItem(menu, currentTab,
+                shouldShowHomeScreenMenuItem(
+                        isChromeScheme, isFileScheme, isContentScheme, isIncognito, url));
+
+        updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
+
+        // Only display reader mode settings menu option if the current page is in reader mode.
+        menu.findItem(R.id.reader_mode_prefs_id).setVisible(shouldShowReaderModePrefs(currentTab));
+
+        // Only display the Enter VR button if VR Shell Dev environment is enabled.
+        menu.findItem(R.id.enter_vr_id).setVisible(shouldShowEnterVr());
+    }
+
+    private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
         // We have to iterate all menu items since same menu item ID may be associated with more
         // than one menu items.
         boolean isMenuGroupTabsVisible = TabUiFeatureUtilities.isTabGroupsAndroidEnabled()
                 && !DeviceClassManager.enableAccessibilityLayout();
-        boolean isMenuGroupTabsEnabled = mTabModelSelector.getTabModelFilterProvider()
-                                                 .getCurrentTabModelFilter()
-                                                 .getTabsWithNoOtherRelatedTabs()
-                                                 .size()
-                > 1;
-        boolean hasTabs = mTabModelSelector.getTotalTabCount() > 0;
-        boolean hasIncognitoTabs = mTabModelSelector.getModel(true).getCount() > 0;
+        boolean isMenuGroupTabsEnabled = isMenuGroupTabsVisible
+                && mTabModelSelector.getTabModelFilterProvider()
+                                .getCurrentTabModelFilter()
+                                .getTabsWithNoOtherRelatedTabs()
+                                .size()
+                        > 1;
+
         for (int i = 0; i < menu.size(); ++i) {
             MenuItem item = menu.getItem(i);
             int itemGroupId = item.getGroupId();
@@ -336,10 +326,12 @@
                 item.setEnabled(isMenuGroupTabsEnabled);
             }
             if (item.getItemId() == R.id.close_all_tabs_menu_id) {
+                boolean hasTabs = mTabModelSelector.getTotalTabCount() > 0;
                 item.setVisible(!isIncognito);
                 item.setEnabled(hasTabs);
             }
             if (item.getItemId() == R.id.close_all_incognito_tabs_menu_id) {
+                boolean hasIncognitoTabs = mTabModelSelector.getModel(true).getCount() > 0;
                 item.setVisible(isIncognito);
                 item.setEnabled(hasIncognitoTabs);
             }
@@ -349,18 +341,113 @@
         // findItem(...).setEnabled(...)" is not enough here, because of the inflated
         // main_menu.xml contains multiple items with the same id in different groups
         // e.g.: new_incognito_tab_menu_id.
-        disableEnableMenuItem(menu, R.id.new_incognito_tab_menu_id, true,
-                IncognitoUtils.isIncognitoModeEnabled(), IncognitoUtils.isIncognitoModeManaged());
+        disableEnableMenuItem(menu, R.id.new_incognito_tab_menu_id, true, isIncognitoEnabled(),
+                isIncognitoManaged());
+    }
+
+    /**
+     * @param currentTab The currentTab for which the app menu is showing.
+     * @return Whether the reader mode preferences menu item should be displayed.
+     */
+    protected boolean shouldShowReaderModePrefs(@NonNull Tab currentTab) {
+        return DomDistillerUrlUtils.isDistilledPage(currentTab.getUrlString());
+    }
+
+    /**
+     * @param currentTab The currentTab for which the app menu is showing.
+     * @return Whether the {@code currentTab} may be downloaded, indicating whether the download
+     *         page menu item should be enabled.
+     */
+    protected boolean shouldEnableDownloadPage(@NonNull Tab currentTab) {
+        return DownloadUtils.isAllowedToDownloadPage(currentTab);
+    }
+
+    /**
+     * @param currentTab The currentTab for which the app menu is showing.
+     * @return Whether bookmark page menu item should be checked, indicating that the current tab
+     *         is bookmarked.
+     */
+    protected boolean shouldCheckBookmarkStar(@NonNull Tab currentTab) {
+        return sItemBookmarkedForTesting != null ? sItemBookmarkedForTesting
+                                                 : BookmarkBridge.hasBookmarkIdForTab(currentTab);
+    }
+
+    /**
+     * @return Whether the update Chrome menu item should be displayed.
+     */
+    protected boolean shouldShowUpdateMenuItem() {
+        return UpdateMenuItemHelper.getInstance().getUiState().itemState != null;
+    }
+
+    /**
+     * @return Whether the "Move to other window" menu item should be displayed.
+     */
+    protected boolean shouldShowMoveToOtherWindow() {
+        boolean hasMoreThanOneTab = mTabModelSelector.getTotalTabCount() > 1;
+        return mMultiWindowModeStateDispatcher.isOpenInOtherWindowSupported() && hasMoreThanOneTab;
+    }
+
+    /**
+     * @param isChromeScheme Whether URL for the current tab starts with the chrome:// scheme.
+     * @param currentTab The currentTab for which the app menu is showing.
+     * @param isIncognito Whether the currentTab is incognito.
+     * @return Whether the paint preview menu item should be displayed.
+     */
+    protected boolean shouldShowPaintPreview(
+            boolean isChromeScheme, @NonNull Tab currentTab, boolean isIncognito) {
+        boolean isChromeOrInterstitialPage =
+                isChromeScheme || ((TabImpl) currentTab).isShowingInterstitialPage();
+        return CachedFeatureFlags.isEnabled(ChromeFeatureList.PAINT_PREVIEW_DEMO)
+                && !isChromeOrInterstitialPage && !isIncognito;
+    }
+
+    /**
+     * @param currentTab The currentTab for which the app menu is showing.
+     * @return Whether the find in page menu item should be displayed.
+     */
+    protected boolean shouldShowFindInPage(@NonNull Tab currentTab) {
+        return !currentTab.isNativePage() && currentTab.getWebContents() != null;
+    }
+
+    /**
+     * @return Whether the enter VR menu item should be displayed.
+     */
+    protected boolean shouldShowEnterVr() {
+        return CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_VR_SHELL_DEV);
+    }
+
+    /**
+     * @param isChromeScheme Whether URL for the current tab starts with the chrome:// scheme.
+     * @param isFileScheme Whether URL for the current tab starts with the file:// scheme.
+     * @param isContentScheme Whether URL for the current tab starts with the file:// scheme.
+     * @param isIncognito Whether the current tab is incognito.
+     * @param url The URL for the current tab.
+     * @return Whether the homescreen menu item should be displayed.
+     */
+    protected boolean shouldShowHomeScreenMenuItem(boolean isChromeScheme, boolean isFileScheme,
+            boolean isContentScheme, boolean isIncognito, String url) {
+        // Hide 'Add to homescreen' for the following:
+        // * chrome:// pages - Android doesn't know how to direct those URLs.
+        // * incognito pages - To avoid problems where users create shortcuts in incognito
+        //                      mode and then open the webapp in regular mode.
+        // * file:// - After API 24, file: URIs are not supported in VIEW intents and thus
+        //             can not be added to the homescreen.
+        // * content:// - Accessing external content URIs requires the calling app to grant
+        //                access to the resource via FLAG_GRANT_READ_URI_PERMISSION, and that
+        //                is not persisted when adding to the homescreen.
+        // * If creating shortcuts it not supported by the current home screen.
+        return ShortcutHelper.isAddToHomeIntentSupported() && !isChromeScheme && !isFileScheme
+                && !isContentScheme && !isIncognito && !TextUtils.isEmpty(url);
     }
 
     /**
      * Sets the visibility and labels of the "Add to Home screen" and "Open WebAPK" menu items.
      */
     protected void prepareAddToHomescreenMenuItem(
-            Menu menu, Tab currentTab, boolean canShowHomeScreenMenuItem) {
+            Menu menu, Tab currentTab, boolean shouldShowHomeScreenMenuItem) {
         MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id);
         MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id);
-        if (canShowHomeScreenMenuItem) {
+        if (shouldShowHomeScreenMenuItem) {
             Context context = ContextUtils.getApplicationContext();
             long addToHomeScreenStart = SystemClock.elapsedRealtime();
             ResolveInfo resolveInfo =
@@ -428,6 +515,17 @@
         }
     }
 
+    private boolean shouldShowIconRow() {
+        boolean shouldShowIconRow = !mIsTablet
+                || mDecorView.getWidth()
+                        < DeviceFormFactor.getNonMultiDisplayMinimumTabletWidthPx(mContext);
+
+        final boolean isMenuButtonOnTop =
+                mToolbarManager != null && !mToolbarManager.isMenuFromBottom();
+        shouldShowIconRow &= isMenuButtonOnTop;
+        return shouldShowIconRow;
+    }
+
     // Set enabled to be |enable| for all MenuItems with |id| in |menu|.
     // If |managed| is true then the "Managed By Enterprise" icon is shown next to the menu.
     private void disableEnableMenuItem(
@@ -493,10 +591,7 @@
             bookmarkMenuItem.setEnabled(mBookmarkBridge.isEditBookmarksEnabled());
         }
 
-        boolean isBookmarked = sItemBookmarkedForTesting != null
-                ? sItemBookmarkedForTesting
-                : BookmarkBridge.hasBookmarkIdForTab(currentTab);
-        if (isBookmarked) {
+        if (shouldCheckBookmarkStar(currentTab)) {
             bookmarkMenuItem.setIcon(R.drawable.btn_star_filled);
             bookmarkMenuItem.setChecked(true);
             bookmarkMenuItem.setTitleCondensed(mContext.getString(R.string.edit_bookmark));
@@ -523,27 +618,36 @@
         String url = currentTab.getUrlString();
         boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
                 || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
-        // Also hide request desktop site on Reader Mode.
-        boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
 
         boolean itemVisible = canShowRequestDesktopSite
-                && (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
+                && (!isChromeScheme || currentTab.isNativePage())
+                && !shouldShowReaderModePrefs(currentTab);
         requestMenuRow.setVisible(itemVisible);
         if (!itemVisible) return;
 
-        boolean isRds =
+        boolean isRequestDesktopSite =
                 currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent();
         // Mark the checkbox if RDS is activated on this page.
-        requestMenuCheck.setChecked(isRds);
+        requestMenuCheck.setChecked(isRequestDesktopSite);
 
         // This title doesn't seem to be displayed by Android, but it is used to set up
         // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
-        requestMenuLabel.setTitleCondensed(isRds
+        requestMenuLabel.setTitleCondensed(isRequestDesktopSite
                         ? mContext.getString(R.string.menu_request_desktop_site_on)
                         : mContext.getString(R.string.menu_request_desktop_site_off));
     }
 
     @VisibleForTesting
+    boolean isIncognitoEnabled() {
+        return IncognitoUtils.isIncognitoModeEnabled();
+    }
+
+    @VisibleForTesting
+    boolean isIncognitoManaged() {
+        return IncognitoUtils.isIncognitoModeManaged();
+    }
+
+    @VisibleForTesting
     static void setPageBookmarkedForTesting(Boolean bookmarked) {
         sItemBookmarkedForTesting = bookmarked;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
index b6b8b8b..528990df 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
@@ -25,7 +25,6 @@
 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegateImpl;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
 import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider.CustomTabsUiType;
-import org.chromium.chrome.browser.download.DownloadUtils;
 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
 import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
 import org.chromium.chrome.browser.share.ShareHelper;
@@ -179,7 +178,7 @@
 
             MenuItem downloadItem = menu.findItem(R.id.offline_page_id);
             if (downloadItemVisible) {
-                downloadItem.setEnabled(DownloadUtils.isAllowedToDownloadPage(currentTab));
+                downloadItem.setEnabled(shouldEnableDownloadPage(currentTab));
             } else {
                 downloadItem.setVisible(false);
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
index 1f0a1bd7..14c08a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
@@ -47,6 +47,7 @@
 import org.chromium.components.feature_engagement.EventConstants;
 import org.chromium.components.feature_engagement.Tracker;
 import org.chromium.components.omnibox.OmniboxUrlEmphasizer;
+import org.chromium.components.page_info.ConnectionInfoPopup;
 import org.chromium.components.page_info.CookieControlsStatus;
 import org.chromium.components.page_info.CookieControlsView;
 import org.chromium.components.page_info.PageInfoDialog;
@@ -461,7 +462,8 @@
                 runAfterDismiss(() -> {
                     if (!mWebContents.isDestroyed()) {
                         recordAction(PageInfoAction.PAGE_INFO_SECURITY_DETAILS_OPENED);
-                        ConnectionInfoPopup.show(context, mWebContents);
+                        ConnectionInfoPopup.show(context, mWebContents,
+                                context.getModalDialogManager(), VrModuleProvider.getDelegate());
                     }
                 });
             };
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewDemoManager.java b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewDemoManager.java
index 9fb44242..66bd2f5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewDemoManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewDemoManager.java
@@ -10,6 +10,7 @@
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewDemoService;
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewDemoServiceFactory;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabThemeColorHelper;
 import org.chromium.components.paintpreview.player.PlayerManager;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
@@ -47,8 +48,9 @@
         if (success) {
             mPlayerManager = new PlayerManager(mTab.getUrl(), mTab.getContext(),
                     mPaintPreviewDemoService, String.valueOf(mTab.getId()),
-                    PaintPreviewDemoManager.this::onLinkClicked,
-                    safeToShow -> { addPlayerView(safeToShow); });
+                    PaintPreviewDemoManager.this::onLinkClicked, safeToShow -> {
+                        addPlayerView(safeToShow);
+                    }, TabThemeColorHelper.getBackgroundColor(mTab));
         }
         int toastStringRes = success ? R.string.paint_preview_demo_capture_success
                                      : R.string.paint_preview_demo_capture_failure;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
index 20e6435..89985d1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
@@ -8,6 +8,7 @@
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabService;
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabServiceFactory;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabThemeColorHelper;
 import org.chromium.components.paintpreview.player.PlayerManager;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.url.GURL;
@@ -40,8 +41,9 @@
         if (hasCapture) {
             mPlayerManager = new PlayerManager(mTab.getUrl(), mTab.getContext(),
                     mPaintPreviewTabService, String.valueOf(mTab.getId()),
-                    TabbedPaintPreviewPlayer.this::onLinkClicked,
-                    safeToShow -> { addPlayerView(safeToShow, shownCallback); });
+                    TabbedPaintPreviewPlayer.this::onLinkClicked, safeToShow -> {
+                        addPlayerView(safeToShow, shownCallback);
+                    }, TabThemeColorHelper.getBackgroundColor(mTab));
         }
 
         return hasCapture;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
index a8a805ccb..fb063131 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -15,7 +15,6 @@
 
 import org.chromium.base.Log;
 import org.chromium.chrome.browser.ChromeActivity;
-import org.chromium.chrome.browser.customtabs.CustomTabActivity;
 import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVerifyCallback;
 import org.chromium.components.payments.MethodStrings;
 import org.chromium.components.payments.PaymentManifestDownloader;
@@ -23,6 +22,7 @@
 import org.chromium.components.payments.intent.WebPaymentIntentHelper;
 import org.chromium.payments.mojom.PaymentDetailsModifier;
 import org.chromium.payments.mojom.PaymentMethodData;
+import org.chromium.url.GURL;
 import org.chromium.url.URI;
 
 import java.util.ArrayList;
@@ -69,12 +69,6 @@
     /* package */ static final String META_DATA_NAME_OF_SUPPORTED_DELEGATIONS =
             "org.chromium.payment_supported_delegations";
 
-    /*
-     * The ignored payment method identifiers. Payment apps with this payment method identifier are
-     * ignored.
-     */
-    private final Set<String> mIgnoredMethods = new HashSet<>();
-
     private final Set<String> mNonUriPaymentMethods = new HashSet<>();
     private final Set<URI> mUriPaymentMethods = new HashSet<>();
     private final PaymentManifestDownloader mDownloader;
@@ -86,10 +80,13 @@
     private final boolean mIsIncognito;
 
     /**
-     * A map from an app-store app's package name to its billing method. All of the supported
-     * app-store billing method must insert an entry to this map.
+     * The app stores that supports app-store billing methods.
+     *
+     * key: the app-store app's package name, e.g., "com.google.vendor" (Google Play Store).
+     * value: the app-store app's billing method identifier, e.g.,
+     * "https://play.google.com/billing". Only valid GURLs are allowed.
      */
-    private final Map<String, String> mAppStoreBillingMethodMap = new HashMap();
+    private final Map<String, GURL> mAppStores = new HashMap();
 
     /**
      * A mapping from an Android package name to the payment app with that package name. The apps
@@ -173,9 +170,10 @@
             PaymentAppFactoryInterface factory) {
         mDelegate = delegate;
 
-        mIgnoredMethods.add(MethodStrings.GOOGLE_PLAY_BILLING);
-
-        mAppStoreBillingMethodMap.put(PLAY_STORE_PACKAGE_NAME, MethodStrings.GOOGLE_PLAY_BILLING);
+        mAppStores.put(PLAY_STORE_PACKAGE_NAME, new GURL(MethodStrings.GOOGLE_PLAY_BILLING));
+        for (GURL method : mAppStores.values()) {
+            assert method.isValid();
+        }
 
         mDownloader = downloader;
         mWebDataService = webDataService;
@@ -187,19 +185,62 @@
         mIsIncognito = activity != null && activity.getCurrentTabModel().isIncognito();
     }
 
-    private boolean isInTwaInstalledFromAppStore() {
-        ChromeActivity activity =
-                ChromeActivity.fromWebContents(mDelegate.getParams().getWebContents());
-        if (activity == null) return false;
-        if (!(activity instanceof CustomTabActivity)) return false;
-        CustomTabActivity customTabActivity = ((CustomTabActivity) activity);
-        if (!customTabActivity.isInTwaMode()) return false;
-        String twaPackageName = customTabActivity.getTwaPackage();
+    private boolean isInTwaInstalledFromAppStore(ChromeActivity activity) {
+        assert activity != null;
+        String twaPackageName = mPackageManagerDelegate.getTwaPackageName(activity);
         if (twaPackageName == null) return false;
-        String installerPackageName =
-                activity.getPackageManager().getInstallerPackageName(twaPackageName);
+        String installerPackageName = mPackageManagerDelegate.getInstallerPackage(twaPackageName);
         if (installerPackageName == null) return false;
-        return mAppStoreBillingMethodMap.keySet().contains(installerPackageName);
+        return mAppStores.containsKey(installerPackageName);
+    }
+
+    /** Precondition: {@link #isInTwaInstalledFromAppStore} returns true. */
+    private void findAppStoreBillingApp(
+            ChromeActivity activity, List<ResolveInfo> allInstalledPaymentApps) {
+        assert activity != null;
+        // The following asserts are assumed to have been checked in {@link
+        // isInTwaInstalledFromAppStore}.
+        String twaPackageName = mPackageManagerDelegate.getTwaPackageName(activity);
+        assert twaPackageName != null;
+        String installerAppStorePackageName =
+                mPackageManagerDelegate.getInstallerPackage(twaPackageName);
+        assert installerAppStorePackageName != null;
+
+        GURL appStoreBillingUriMethod = mAppStores.get(installerAppStorePackageName);
+        assert appStoreBillingUriMethod != null;
+        assert appStoreBillingUriMethod.isValid();
+        String appStoreBillingMethod = appStoreBillingUriMethod.getSpec();
+        if (!mDelegate.getParams().getMethodData().containsKey(appStoreBillingMethod)) return;
+        ResolveInfo twaApp = findAppWithPackageNameAndSupportedMethod(
+                allInstalledPaymentApps, twaPackageName, appStoreBillingUriMethod);
+        if (twaApp == null) {
+            android.util.Log.d(TAG, "The current TWA cannot handle Payment Request.");
+            return;
+        }
+        onValidPaymentAppForPaymentMethodName(twaApp, appStoreBillingMethod);
+    }
+
+    private ResolveInfo findAppWithPackageNameAndSupportedMethod(
+            List<ResolveInfo> apps, String packageName, GURL uriMethod) {
+        assert packageName != null;
+        assert uriMethod != null;
+        for (int i = 0; i < apps.size(); i++) {
+            ResolveInfo app = apps.get(i);
+            String appPackageName = app.activityInfo.packageName;
+            if (!packageName.equals(appPackageName)) continue;
+            String defaultMethod = app.activityInfo.metaData == null
+                    ? null
+                    : app.activityInfo.metaData.getString(
+                            META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME);
+            GURL defaultUriMethod = new GURL(defaultMethod);
+            if ((uriMethod.isValid()
+                        && getSupportedPaymentMethods(app.activityInfo)
+                                   .contains(uriMethod.getSpec()))
+                    || (defaultUriMethod.isValid() && uriMethod.equals(defaultUriMethod))) {
+                return app;
+            }
+        }
+        return null;
     }
 
     /**
@@ -218,7 +259,7 @@
 
         for (String method : mDelegate.getParams().getMethodData().keySet()) {
             assert !TextUtils.isEmpty(method);
-            if (mIgnoredMethods.contains(method)) continue;
+            if (mAppStores.containsValue(new GURL(method))) continue;
             if (supportedNonUriPaymentMethods.contains(method)) {
                 mNonUriPaymentMethods.add(method);
             } else if (UriUtils.looksLikeUriMethod(method)) {
@@ -245,9 +286,17 @@
             }
         }
 
-        if (isInTwaInstalledFromAppStore()) {
-            // TODO(crbug.com/1064740): the finder would special-case the TWA installed from App
-            // Store to return only the app-store app.
+        // WebContents is possible to attach to different activities on {@link PaymentRequest}
+        // created and shown. Ideally {@link #findAppStoreBillingApp} should have based on the
+        // activity that is used when PaymentRequest is shown. But we intentionally not do that for
+        // the sake of simple design and better performance. Plus, for app store billing case in
+        // particular, it's unusual for a TWA to switch to CCT without destroying JavaScript context
+        // and, consequently, the {@link PaymentRequest} object.
+        ChromeActivity activity =
+                ChromeActivity.fromWebContents(mDelegate.getParams().getWebContents());
+        if (!mDelegate.getParams().requestShippingOrPayerContact() && activity != null
+                && isInTwaInstalledFromAppStore(activity)) {
+            findAppStoreBillingApp(activity, allInstalledPaymentApps);
         }
 
         // All URI methods for which manifests should be downloaded. For example, if merchant
@@ -646,14 +695,14 @@
     }
 
     /**
-     * Ignores the given payment method identifier, so no Android payment apps for this method are
-     * looked up in findAndroidPaymentApps(). Calling this multiple times will union the new payment
-     * methods with the existing set.
+     * Add an app store for testing.
      *
-     * @param ignoredPaymentMethodIdentifier The ignored payment method identifier.
+     * @param packageName The package name of the app store.
+     * @param paymentMethod The payment method identifier of the app store.
      */
     @VisibleForTesting
-    /* package */ void ignorePaymentMethodForTest(String ignoredPaymentMethodIdentifier) {
-        mIgnoredMethods.add(ignoredPaymentMethodIdentifier);
+    /* package */ void addAppStoreForTest(String packageName, GURL paymentMethod) {
+        assert paymentMethod.isValid();
+        mAppStores.put(packageName, paymentMethod);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
index 1eb4ec8f..4cc4de2c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
@@ -20,6 +20,8 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.PackageManagerUtils;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.customtabs.CustomTabActivity;
 
 import java.util.List;
 
@@ -123,4 +125,31 @@
         }
         return resources == null ? null : resources.getStringArray(resourceId);
     }
+
+    /**
+     * Get the package name of an activity if it is a Trusted Web Activity.
+     * @param activity An activity that is intended to check whether its a Trusted Web Activity and
+     *         get the package name from. Not allowed to be null.
+     * @return The package name of a given activity if it is a Trusted Web Activity; null otherwise.
+     */
+    @Nullable
+    public String getTwaPackageName(ChromeActivity activity) {
+        assert activity != null;
+        if (!(activity instanceof CustomTabActivity)) return null;
+        CustomTabActivity customTabActivity = ((CustomTabActivity) activity);
+        if (!customTabActivity.isInTwaMode()) return null;
+        return customTabActivity.getTwaPackage();
+    }
+
+    /**
+     * Get the package name of a specified package's installer app.
+     * @param packageName The package name of the specified package. Not allowed to be null.
+     * @return The package name of the installer app.
+     */
+    @Nullable
+    public String getInstallerPackage(String packageName) {
+        assert packageName != null;
+        return ContextUtils.getApplicationContext().getPackageManager().getInstallerPackageName(
+                packageName);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentAppFactoryParams.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentAppFactoryParams.java
index 49f0b43..3114bb5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentAppFactoryParams.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentAppFactoryParams.java
@@ -95,4 +95,12 @@
     default String getTotalAmountCurrency() {
         return null;
     }
+
+    /**
+     * @return Whether the PaymentRequest is requesting delegation of either shipping or payer
+     *         contact.
+     */
+    default boolean requestShippingOrPayerContact() {
+        return false;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index b84a18b..0bf63b87 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -93,8 +93,8 @@
 import org.chromium.payments.mojom.PaymentShippingOption;
 import org.chromium.payments.mojom.PaymentShippingType;
 import org.chromium.payments.mojom.PaymentValidationErrors;
+import org.chromium.url.GURL;
 import org.chromium.url.Origin;
-import org.chromium.url.URI;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1356,7 +1356,7 @@
      * @return Whether the opening is successful.
      */
     public static boolean openPaymentHandlerWindow(
-            URI url, PaymentHandlerWebContentsObserver paymentHandlerWebContentsObserver) {
+            GURL url, PaymentHandlerWebContentsObserver paymentHandlerWebContentsObserver) {
         return sShowingPaymentRequest != null
                 && sShowingPaymentRequest.openPaymentHandlerWindowInternal(
                         url, paymentHandlerWebContentsObserver);
@@ -1370,10 +1370,10 @@
      * @return Whether the opening is successful.
      */
     private boolean openPaymentHandlerWindowInternal(
-            URI url, PaymentHandlerWebContentsObserver paymentHandlerWebContentsObserver) {
+            GURL url, PaymentHandlerWebContentsObserver paymentHandlerWebContentsObserver) {
         assert mInvokedPaymentApp != null;
         assert mInvokedPaymentApp instanceof ServiceWorkerPaymentApp;
-        assert org.chromium.components.embedder_support.util.Origin.create(url.toString())
+        assert org.chromium.components.embedder_support.util.Origin.create(url.getSpec())
                 .equals(org.chromium.components.embedder_support.util.Origin.create(
                         ((ServiceWorkerPaymentApp) mInvokedPaymentApp).getScope().toString()));
 
@@ -2622,6 +2622,12 @@
         return mRawTotal.amount.currency;
     }
 
+    // PaymentAppFactoryParams implementation.
+    @Override
+    public boolean requestShippingOrPayerContact() {
+        return mRequestShipping || mRequestPayerName || mRequestPayerPhone || mRequestPayerEmail;
+    }
+
     // PaymentAppFactoryDelegate implementation.
     @Override
     public PaymentAppFactoryParams getParams() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java
index 26f9d32..28825bfa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java
@@ -27,7 +27,7 @@
 import org.chromium.ui.base.ViewAndroidDelegate;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
-import org.chromium.url.URI;
+import org.chromium.url.GURL;
 
 /**
  * PaymentHandler coordinator, which owns the component overall, i.e., creates other objects in the
@@ -74,7 +74,7 @@
      * @param uiObserver The {@link PaymentHandlerUiObserver} that observes this Payment Handler UI.
      * @return Whether the payment-handler UI was shown. Can be false if the UI was suppressed.
      */
-    public boolean show(ChromeActivity activity, URI url, boolean isIncognito,
+    public boolean show(ChromeActivity activity, GURL url, boolean isIncognito,
             PaymentHandlerWebContentsObserver webContentsObserver,
             PaymentHandlerUiObserver uiObserver) {
         assert mHider == null : "Already showing payment-handler UI";
@@ -85,7 +85,7 @@
                 ViewAndroidDelegate.createBasicDelegate(webContentView), webContentView,
                 activity.getWindowAndroid(), WebContents.createDefaultInternalsHolder());
         webContentsObserver.onWebContentsInitialized(mWebContents);
-        mWebContents.getNavigationController().loadUrl(new LoadUrlParams(url.toString()));
+        mWebContents.getNavigationController().loadUrl(new LoadUrlParams(url.getSpec()));
 
         mToolbarCoordinator = new PaymentHandlerToolbarCoordinator(activity, mWebContents, url);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
index c25e15d..0e983ba3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java
@@ -180,11 +180,4 @@
         ServiceWorkerPaymentAppBridge.onClosingPaymentAppWindow(mWebContentsRef);
         mHandler.post(mHider);
     }
-
-    @Override
-    public void onToolbarError() {
-        // TODO(maxlg): send an error message to users.
-        ServiceWorkerPaymentAppBridge.onClosingPaymentAppWindow(mWebContentsRef);
-        mHandler.post(mHider);
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java
index 4be8b1a..e76d8ae 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java
@@ -14,7 +14,7 @@
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
-import org.chromium.url.URI;
+import org.chromium.url.GURL;
 
 /**
  * PaymentHandlerToolbar coordinator, which owns the component overall, i.e., creates other objects
@@ -32,9 +32,6 @@
      * Observer for the error of the payment handler toolbar.
      */
     public interface PaymentHandlerToolbarObserver {
-        /** Called when the UI gets an error. */
-        void onToolbarError();
-
         /** Called when the close button is clicked. */
         void onToolbarCloseButtonClicked();
     }
@@ -48,7 +45,7 @@
      * @param observer The observer of this toolbar.
      */
     public PaymentHandlerToolbarCoordinator(
-            ChromeActivity context, WebContents webContents, URI url) {
+            ChromeActivity context, WebContents webContents, GURL url) {
         mWebContents = webContents;
         PropertyModel model = new PropertyModel.Builder(PaymentHandlerToolbarProperties.ALL_KEYS)
                                       .with(PaymentHandlerToolbarProperties.PROGRESS_VISIBLE, true)
@@ -69,7 +66,6 @@
 
     /** Set an observer for PaymentHandlerToolbar. */
     public void setObserver(PaymentHandlerToolbarObserver observer) {
-        mMediator.setObserver(observer);
         mToolbarView.setObserver(observer);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarMediator.java
index f301147..ee0df21 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarMediator.java
@@ -9,11 +9,9 @@
 
 import androidx.annotation.DrawableRes;
 
-import org.chromium.base.Log;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
 import org.chromium.chrome.browser.page_info.PageInfoController;
-import org.chromium.chrome.browser.payments.handler.toolbar.PaymentHandlerToolbarCoordinator.PaymentHandlerToolbarObserver;
 import org.chromium.chrome.browser.ssl.ChromeSecurityStateModelDelegate;
 import org.chromium.components.omnibox.SecurityStatusIcon;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
@@ -22,9 +20,6 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.url.URI;
-
-import java.net.URISyntaxException;
 
 /**
  * PaymentHandlerToolbar mediator, which is responsible for receiving events from the view and
@@ -43,7 +38,6 @@
     /* package */ static final float MINIMUM_LOAD_PROGRESS = 0.05f;
 
     private final PropertyModel mModel;
-    private PaymentHandlerToolbarObserver mObserver;
     /** The handler to delay hiding the progress bar. */
     private Handler mHideProgressBarHandler;
     /** Postfixed with "Ref" to distinguish from mWebContent in WebContentsObserver. */
@@ -68,11 +62,6 @@
         mChromeActivity = chromeActivity;
     }
 
-    /** Set an observer for this class. */
-    /* package */ void setObserver(PaymentHandlerToolbarObserver observer) {
-        mObserver = observer;
-    }
-
     // WebContentsObserver:
     @Override
     public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) {
@@ -94,14 +83,7 @@
     @Override
     public void didFinishNavigation(NavigationHandle navigation) {
         if (!navigation.hasCommitted() || !navigation.isInMainFrame()) return;
-        String url = mWebContentsRef.getVisibleUrl().getSpec();
-        try {
-            mModel.set(PaymentHandlerToolbarProperties.URL, new URI(url));
-        } catch (URISyntaxException e) {
-            Log.e(TAG, "Failed to instantiate a URI with the url \"%s\".", url);
-            assert mObserver != null;
-            mObserver.onToolbarError();
-        }
+        mModel.set(PaymentHandlerToolbarProperties.URL, mWebContentsRef.getVisibleUrl());
         mModel.set(PaymentHandlerToolbarProperties.PROGRESS_VISIBLE, false);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarProperties.java
index 689c556..66996e8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarProperties.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarProperties.java
@@ -9,11 +9,11 @@
 import org.chromium.ui.modelutil.PropertyModel.WritableFloatPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
-import org.chromium.url.URI;
+import org.chromium.url.GURL;
 
 /** PaymentHandlerToolbar UI properties, which fully describe the state of the UI. */
 /* package */ class PaymentHandlerToolbarProperties {
-    /* package */ static final WritableObjectPropertyKey<URI> URL =
+    /* package */ static final WritableObjectPropertyKey<GURL> URL =
             new WritableObjectPropertyKey<>();
 
     /* package */ static final WritableObjectPropertyKey<String> TITLE =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarViewBinder.java
index 21313ca..44ad573 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarViewBinder.java
@@ -20,7 +20,7 @@
             PropertyModel model, PaymentHandlerToolbarView view, PropertyKey propertyKey) {
         if (PaymentHandlerToolbarProperties.URL == propertyKey) {
             String origin = UrlFormatter.formatUrlForSecurityDisplay(
-                    model.get(PaymentHandlerToolbarProperties.URL).toString(),
+                    model.get(PaymentHandlerToolbarProperties.URL),
                     SchemeDisplay.OMIT_HTTP_AND_HTTPS);
             view.mOriginView.setText(origin);
         } else if (PaymentHandlerToolbarProperties.TITLE == propertyKey) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
index 2f14873f..3cc02b2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
@@ -285,7 +285,7 @@
      */
     public boolean isSignInAllowed() {
         return !mFirstRunCheckIsPending && mSignInState == null && mSigninAllowedByPolicy
-                && ChromeSigninController.get().getSignedInUser() == null && isSigninSupported();
+                && mIdentityManager.getPrimaryAccountInfo() == null && isSigninSupported();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/SplashController.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/SplashController.java
index 53d1c65d..6c8de936f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/SplashController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/SplashController.java
@@ -167,10 +167,6 @@
         mParentView.addView(mSplashView);
     }
 
-    public boolean isSplashShowing() {
-        return mSplashView != null;
-    }
-
     @VisibleForTesting
     View getSplashScreenForTests() {
         return mSplashView;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
index 180911ee..afe05fb0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
@@ -157,10 +157,6 @@
         return false;
     }
 
-    protected boolean isInitialized() {
-        return mIsInitialized;
-    }
-
     protected WebappInfo createWebappInfo(Intent intent) {
         if (intent == null) return WebappInfo.createEmpty();
 
@@ -554,10 +550,6 @@
                 getWindowAndroid(), (byte) mWebappInfo.orientation());
     }
 
-    protected boolean isSplashShowing() {
-        return mSplashController.isSplashShowing();
-    }
-
     @Override
     public void onUpdateStateChanged() {}
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java
deleted file mode 100644
index 47f0c475..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-package org.chromium.chrome.browser.webapps;
-
-import androidx.annotation.IntDef;
-
-import org.chromium.components.embedder_support.util.UrlUtilities;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Defines which URLs are inside a web app scope as well as what to do when user navigates to them.
- */
-public class WebappScopePolicy {
-    @IntDef({Type.LEGACY, Type.STRICT})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Type {
-        // Values should be numerated from 0 and can't have gaps.
-        int LEGACY = 0;
-        int STRICT = 1;
-        int NUM_ENTRIES = 2;
-    }
-
-    @IntDef({NavigationDirective.NORMAL_BEHAVIOR,
-            NavigationDirective.IGNORE_EXTERNAL_INTENT_REQUESTS})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface NavigationDirective {
-        // No special handling.
-        int NORMAL_BEHAVIOR = 0;
-        // The navigation should stay in the webapp. External intent handlers should be ignored.
-        int IGNORE_EXTERNAL_INTENT_REQUESTS = 1;
-    }
-
-    /**
-     * @return {@code true} if given {@code url} is in scope of a web app as defined by its
-     *         {@code WebappInfo}, {@code false} otherwise.
-     */
-    public static boolean isUrlInScope(@Type int type, WebappInfo info, String url) {
-        switch (type) {
-            case Type.LEGACY:
-                return UrlUtilities.sameDomainOrHost(info.url(), url, true);
-            case Type.STRICT:
-                return UrlUtilities.isUrlWithinScope(url, info.scopeUrl());
-            default:
-                assert false;
-                return false;
-        }
-    }
-
-    /** Applies the scope policy for navigation to {@link url}. */
-    public static @NavigationDirective int applyPolicyForNavigationToUrl(
-            @Type int type, WebappInfo info, String url) {
-        return isUrlInScope(type, info, url) ? NavigationDirective.IGNORE_EXTERNAL_INTENT_REQUESTS
-                                             : NavigationDirective.NORMAL_BEHAVIOR;
-    }
-}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
index f26badd8..fa582e9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
@@ -22,6 +22,7 @@
 import org.chromium.base.ActivityState;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.chrome.browser.compositor.animation.CompositorAnimationHandler;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.tab.Tab;
@@ -125,6 +126,7 @@
 
     @Test
     @SmallTest
+    @DisabledTest(message = "crbug.com/1068661")
     public void testSwipeNavigateOnRenderedPage() {
         mTestServer = EmbeddedTestServer.createAndStartServer(
                 InstrumentationRegistry.getInstrumentation().getContext());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopupTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopupTest.java
index 97e4ff3..805f8f1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopupTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopupTest.java
@@ -15,8 +15,11 @@
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.vr.VrModuleProvider;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.components.page_info.ConnectionInfoPopup;
+import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 /**
@@ -38,9 +41,11 @@
     @RetryOnFailure
     public void testShow() throws InterruptedException {
         mActivityTestRule.startMainActivityOnBlankPage();
-        TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> ConnectionInfoPopup.show(mActivityTestRule.getActivity(),
-                                mActivityTestRule.getActivity().getActivityTab().getWebContents()));
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            ChromeActivity context = mActivityTestRule.getActivity();
+            WebContents webContents = context.getActivityTab().getWebContents();
+            ConnectionInfoPopup.show(context, webContents, context.getModalDialogManager(),
+                    VrModuleProvider.getDelegate());
+        });
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
index 44cd642..80a2fdd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
@@ -29,6 +29,7 @@
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.payments.mojom.PaymentDetailsModifier;
 import org.chromium.payments.mojom.PaymentMethodData;
+import org.chromium.url.GURL;
 import org.chromium.url.Origin;
 import org.chromium.url.URI;
 
@@ -96,6 +97,7 @@
     private List<PaymentApp> mPaymentApps;
     private boolean mAllPaymentAppsCreated;
     private Map<String, PaymentMethodData> mMethodData;
+    private boolean mRequestShippingOrPayerContact;
 
     // PaymentAppFactoryDelegate implementation.
     @Override
@@ -161,6 +163,12 @@
         return mMethodData;
     }
 
+    // PaymentAppFactoryParams implementation.
+    @Override
+    public boolean requestShippingOrPayerContact() {
+        return mRequestShippingOrPayerContact;
+    }
+
     @Before
     public void setUp() throws Throwable {
         mRule.startMainActivityOnBlankPage();
@@ -371,17 +379,17 @@
         Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
     }
 
-    /** Ignored payment methods should be filtered out. */
+    /** When Chrome is not running in TWA, the app store billing methods should be filtered out. */
     @Test
     @Feature({"Payments"})
-    public void testIgnoredPaymentMethodIdentifier() throws Throwable {
+    public void testIgnoreAppStoreMethodsInNonTwa() throws Throwable {
         Set<String> methods = new HashSet<>();
         methods.add("https://bobpay.com/webpay");
         mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
                 /*signature=*/"01020304050607080900");
 
-        ignorePaymentMethodIdentifierAndFindApps(
-                /*ignoredPaymentMethodIdentifier=*/"https://bobpay.com/webpay", methods);
+        addAppStoreMethodAndFindApps(/*appStorePackageName=*/"com.bobpay",
+                /*appStorePaymentMethod=*/new GURL("https://bobpay.com/webpay"), methods);
 
         Assert.assertTrue("No apps should match the query", mPaymentApps.isEmpty());
     }
@@ -1091,6 +1099,232 @@
     }
 
     /**
+     * The basic test for {@link AndroidPaymentAppFinder#findAndroidPaymentApps} to find a app-store
+     * (e.g., Google Store) billing app.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingApp() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.merchant.twa", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that the TWA only has default app store but no
+     * support the billing method in its Android manifest. The test setting intentionally omits the
+     * setting of the twa's supported methods.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppTwaHasDefaultAppStoreMethod() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.merchant.twa", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that the TWA has support the billing method but no
+     * default method in its manifest. The test setting intentionally set TWA's default method to a
+     * non-store method.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppTwaHasSupportedAppStoreMethod() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa", "an://invalid.url",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.merchant.twa", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that the TWA's installer app store must be the same
+     * as the app store in the payment request. The test setting sets the twa installer app store to
+     * be a different one.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppMustFromSameAppStoreAsTheRequested() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        methods.add("https://bobpay.com/webpay");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.another.appstore");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that the TWA's installer app store must be a
+     * whitelisted one. The test setting sets the twa installer app store to be an unsupported one.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppMustInSupportedAppStore() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://another.playstore.com/billing");
+        methods.add("https://bobpay.com/webpay");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://another.playstore.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://another.playstore.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.another.appstore");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that Chrome must be in TWA to use app store billing.
+     * The test setting intentionally omits the twa mocking.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppMustInTwa() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        methods.add("https://bobpay.com/webpay");
+
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that the payment request must support the app store
+     * billing method to be able to use it. The test setting intentionally omits the app store
+     * billing method in the payment request.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppNotRequested() throws Throwable {
+        Set<String> noRequestedMethod = new HashSet<>();
+        noRequestedMethod.add("https://bobpay.com/webpay");
+
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(noRequestedMethod);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that once when Chrome starts to look for app store
+     * billing app, it ignores all other normal payment apps. The test setting includes a normal
+     * native payment method and play billing method, and expects to see the normal one is ignored.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppIgnoreNonAppStoreBillingApps() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        methods.add("https://bobpay.com/webpay");
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing", /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(methods);
+
+        Assert.assertEquals("2 app should still match the query", 2, mPaymentApps.size());
+        Assert.assertEquals("com.merchant.twa", mPaymentApps.get(0).getIdentifier());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(1).getIdentifier());
+    }
+
+    /**
+     * For finding app store billing app, test that if delegation is requested along with the
+     * app-store billing method, the app-store billing method would be ignore. The test setting
+     * requests the shipping or payer contact delegation.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testFindAppStoreBillingAppDelegationRejectBilling() throws Throwable {
+        Set<String> methods = new HashSet<>();
+        methods.add("https://play.google.com/billing");
+        methods.add("https://bobpay.com/webpay");
+        mRequestShippingOrPayerContact = true;
+        mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
+                "https://play.google.com/billing",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.merchant.twa", new String[] {"https://play.google.com/billing"});
+        mPackageManager.installPaymentApp("BobPay", "com.bobpay", "https://bobpay.com/webpay",
+                /*signature=*/"01020304050607080900");
+        mPackageManager.setStringArrayMetaData(
+                "com.bobpay", new String[] {"https://bobpay.com/webpay"});
+
+        mockTwaAndItsInstaller("com.merchant.twa", "com.android.vending");
+        findApps(methods);
+
+        Assert.assertEquals("1 app should still match the query", 1, mPaymentApps.size());
+        Assert.assertEquals("com.bobpay", mPaymentApps.get(0).getIdentifier());
+    }
+
+    /**
      * If a payment method supports two apps from different origins, both apps should be found.
      * Repeated app look ups should succeed.
      */
@@ -1231,12 +1465,12 @@
     }
 
     private void findApps(Set<String> methodNames) throws Throwable {
-        ignorePaymentMethodIdentifierAndFindApps(
-                /*ignoredPaymentMethodIdentifier=*/null, methodNames);
+        addAppStoreMethodAndFindApps(
+                /*appStorePackageName=*/null, /*appStorePaymentMethod=*/null, methodNames);
     }
 
-    private void ignorePaymentMethodIdentifierAndFindApps(
-            String ignoredPaymentMethodIdentifier, Set<String> methodNames) throws Throwable {
+    private void addAppStoreMethodAndFindApps(String appStorePackageName,
+            GURL appStorePaymentMethod, Set<String> methodNames) throws Throwable {
         mMethodData = buildMethodData(methodNames);
         mRule.runOnUiThread(() -> {
             AndroidPaymentAppFinder finder =
@@ -1244,8 +1478,10 @@
                             new PaymentManifestParser(), mPackageManager,
                             /*delegate=*/AndroidPaymentAppFinderTest.this, /*factory=*/null);
             finder.bypassIsReadyToPayServiceInTest();
-            if (ignoredPaymentMethodIdentifier != null) {
-                finder.ignorePaymentMethodForTest(ignoredPaymentMethodIdentifier);
+            if (appStorePackageName != null) {
+                assert appStorePaymentMethod != null;
+                assert appStorePaymentMethod.isValid();
+                finder.addAppStoreForTest(appStorePackageName, appStorePaymentMethod);
             }
             finder.findAndroidPaymentApps();
         });
@@ -1266,4 +1502,9 @@
         }
         return result;
     }
+
+    private void mockTwaAndItsInstaller(String twaPackageName, String installerPackageName) {
+        mPackageManager.setMockTrustedWebActivity(twaPackageName);
+        mPackageManager.mockInstallerForPackage(twaPackageName, installerPackageName);
+    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/MockPackageManagerDelegate.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/MockPackageManagerDelegate.java
index b17aa6c4..a12ecce 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/MockPackageManagerDelegate.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/MockPackageManagerDelegate.java
@@ -16,6 +16,8 @@
 
 import androidx.annotation.Nullable;
 
+import org.chromium.chrome.browser.ChromeActivity;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -31,6 +33,10 @@
     private final List<ResolveInfo> mServices = new ArrayList<>();
     private final Map<ApplicationInfo, String[]> mResources = new HashMap<>();
 
+    private String mMockTwaPackage;
+    // A map of a package name to its installer's package name.
+    private Map<String, String> mMockInstallerPackageMap = new HashMap<>();
+
     /**
      * Simulates an installed payment app with no supported delegations.
      *
@@ -140,6 +146,27 @@
         mLabels.clear();
     }
 
+    /**
+     * Mock the current package to be a Trust Web Activity package.
+     * @param mockTwaPackage The intended package nam, not allowed to be null.
+     */
+    public void setMockTrustedWebActivity(String mockTwaPackage) {
+        assert mockTwaPackage != null;
+        mMockTwaPackage = mockTwaPackage;
+    }
+
+    /**
+     * Mock the installer of a specified package.
+     * @param packageName The package name that is intended to mock a installer for.
+     * @param installerPackageName The package name intended to be set as the installer of the
+     *         specified package. not allowed to be null.
+     */
+    public void mockInstallerForPackage(String packageName, String installerPackageName) {
+        assert installerPackageName != null;
+        assert packageName != null;
+        mMockInstallerPackageMap.put(packageName, installerPackageName);
+    }
+
     @Override
     public List<ResolveInfo> getActivitiesThatCanRespondToIntentWithMetaData(Intent intent) {
         return mActivities;
@@ -177,4 +204,17 @@
         assert STRING_ARRAY_RESOURCE_ID == resourceId;
         return mResources.get(applicationInfo);
     }
+
+    @Override
+    @Nullable
+    public String getInstallerPackage(String packageName) {
+        return !mMockInstallerPackageMap.isEmpty() ? mMockInstallerPackageMap.get(packageName)
+                                                   : super.getInstallerPackage(packageName);
+    }
+
+    @Override
+    @Nullable
+    public String getTwaPackageName(ChromeActivity activity) {
+        return mMockTwaPackage != null ? mMockTwaPackage : super.getTwaPackageName(activity);
+    }
 }
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateUnitTest.java
new file mode 100644
index 0000000..9501f1b
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateUnitTest.java
@@ -0,0 +1,198 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.appmenu;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+import android.view.Menu;
+import android.view.View;
+import android.widget.PopupMenu;
+
+import org.hamcrest.Matchers;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegateImpl.MenuGroup;
+import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
+import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.toolbar.ToolbarManager;
+import org.chromium.components.embedder_support.util.UrlConstants;
+import org.chromium.content_public.browser.NavigationController;
+import org.chromium.content_public.browser.WebContents;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Unit tests for {@link AppMenuPropertiesDelegateImpl}.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+public class AppMenuPropertiesDelegateUnitTest {
+    @Mock
+    private ActivityTabProvider mActivityTabProvider;
+    @Mock
+    private Tab mTab;
+    @Mock
+    private WebContents mWebContents;
+    @Mock
+    private NavigationController mNavigationController;
+    @Mock
+    private MultiWindowModeStateDispatcher mMultiWindowModeStateDispatcher;
+    @Mock
+    private TabModelSelector mTabModelSelector;
+    @Mock
+    private TabModel mTabModel;
+    @Mock
+    private ToolbarManager mToolbarManager;
+    @Mock
+    private View mDecorView;
+    @Mock
+    private OverviewModeBehavior mOverviewModeBehavior;
+
+    private ObservableSupplierImpl<OverviewModeBehavior> mOverviewModeSupplier =
+            new ObservableSupplierImpl<>();
+    private ObservableSupplierImpl<BookmarkBridge> mBookmarkBridgeSupplier =
+            new ObservableSupplierImpl<>();
+
+    private AppMenuPropertiesDelegateImpl mAppMenuPropertiesDelegate;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mOverviewModeSupplier.set(mOverviewModeBehavior);
+        when(mTab.getWebContents()).thenReturn(mWebContents);
+        when(mWebContents.getNavigationController()).thenReturn(mNavigationController);
+        when(mNavigationController.getUseDesktopUserAgent()).thenReturn(false);
+        when(mToolbarManager.isMenuFromBottom()).thenReturn(false);
+        when(mTabModelSelector.getCurrentModel()).thenReturn(mTabModel);
+
+        mAppMenuPropertiesDelegate = Mockito.spy(new AppMenuPropertiesDelegateImpl(
+                ContextUtils.getApplicationContext(), mActivityTabProvider,
+                mMultiWindowModeStateDispatcher, mTabModelSelector, mToolbarManager, mDecorView,
+                mOverviewModeSupplier, mBookmarkBridgeSupplier));
+    }
+
+    @Test
+    @Config(qualifiers = "sw320dp")
+    public void testShouldShowPageMenu_Phone() {
+        setUpMocksForPageMenu();
+        Assert.assertTrue(mAppMenuPropertiesDelegate.shouldShowPageMenu());
+        Assert.assertEquals(MenuGroup.PAGE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+    }
+
+    @Test
+    @Config(qualifiers = "sw320dp")
+    public void testShouldShowOverviewMenu_Phone() {
+        when(mOverviewModeBehavior.overviewVisible()).thenReturn(true);
+        Assert.assertFalse(mAppMenuPropertiesDelegate.shouldShowPageMenu());
+        Assert.assertEquals(
+                MenuGroup.OVERVIEW_MODE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+    }
+
+    @Test
+    @Config(qualifiers = "sw600dp")
+    public void testShouldShowPageMenu_Tablet() {
+        when(mOverviewModeBehavior.overviewVisible()).thenReturn(false);
+        when(mTabModel.getCount()).thenReturn(1);
+        Assert.assertTrue(mAppMenuPropertiesDelegate.shouldShowPageMenu());
+        Assert.assertEquals(MenuGroup.PAGE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+    }
+
+    @Test
+    @Config(qualifiers = "sw600dp")
+    public void testShouldShowOverviewMenu_Tablet() {
+        when(mOverviewModeBehavior.overviewVisible()).thenReturn(true);
+        when(mTabModel.getCount()).thenReturn(1);
+        Assert.assertFalse(mAppMenuPropertiesDelegate.shouldShowPageMenu());
+        Assert.assertEquals(
+                MenuGroup.OVERVIEW_MODE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+    }
+
+    @Test
+    @Config(qualifiers = "sw600dp")
+    public void testShouldShowOverviewMenu_Tablet_NoTabs() {
+        when(mOverviewModeBehavior.overviewVisible()).thenReturn(false);
+        when(mTabModel.getCount()).thenReturn(0);
+        Assert.assertFalse(mAppMenuPropertiesDelegate.shouldShowPageMenu());
+        Assert.assertEquals(
+                MenuGroup.TABLET_EMPTY_MODE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+    }
+
+    @Test
+    @Config(qualifiers = "sw320dp")
+    public void testPageMenuItems_Phone_Ntp() {
+        setUpMocksForPageMenu();
+        when(mTab.getUrlString()).thenReturn(UrlConstants.NTP_URL);
+        when(mTab.isNativePage()).thenReturn(true);
+
+        Assert.assertEquals(MenuGroup.PAGE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
+        Menu menu = createTestMenu();
+        mAppMenuPropertiesDelegate.prepareMenu(menu, null);
+
+        Integer[] expectedItems = {R.id.icon_row_menu_id, R.id.new_tab_menu_id,
+                R.id.new_incognito_tab_menu_id, R.id.all_bookmarks_menu_id,
+                R.id.recent_tabs_menu_id, R.id.open_history_menu_id, R.id.downloads_menu_id,
+                R.id.request_desktop_site_row_menu_id, R.id.preferences_id, R.id.help_id};
+        assertMenuItemsAreEqual(menu, expectedItems);
+    }
+
+    private void setUpMocksForPageMenu() {
+        when(mActivityTabProvider.get()).thenReturn(mTab);
+        when(mOverviewModeBehavior.overviewVisible()).thenReturn(false);
+        when(mTabModel.isIncognito()).thenReturn(false);
+        doReturn(false).when(mAppMenuPropertiesDelegate).shouldCheckBookmarkStar(any(Tab.class));
+        doReturn(false).when(mAppMenuPropertiesDelegate).shouldEnableDownloadPage(any(Tab.class));
+        doReturn(false).when(mAppMenuPropertiesDelegate).shouldShowReaderModePrefs(any(Tab.class));
+        doReturn(true).when(mAppMenuPropertiesDelegate).isIncognitoEnabled();
+        doReturn(false).when(mAppMenuPropertiesDelegate).isIncognitoManaged();
+    }
+
+    private Menu createTestMenu() {
+        PopupMenu tempMenu = new PopupMenu(ContextUtils.getApplicationContext(), mDecorView);
+        tempMenu.inflate(mAppMenuPropertiesDelegate.getAppMenuLayoutId());
+        Menu menu = tempMenu.getMenu();
+        return menu;
+    }
+
+    private void assertMenuItemsAreEqual(Menu menu, Integer... expectedItems) {
+        List<Integer> actualItems = new ArrayList<>();
+        for (int i = 0; i < menu.size(); i++) {
+            if (menu.getItem(i).isVisible()) {
+                actualItems.add(menu.getItem(i).getItemId());
+            }
+        }
+
+        Assert.assertThat("Populated menu items were:" + getMenuTitles(menu), actualItems,
+                Matchers.containsInAnyOrder(expectedItems));
+    }
+
+    private String getMenuTitles(Menu menu) {
+        StringBuilder items = new StringBuilder();
+        for (int i = 0; i < menu.size(); i++) {
+            if (menu.getItem(i).isVisible()) {
+                items.append("\n").append(menu.getItem(i).getTitle());
+            }
+        }
+        return items.toString();
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
index 96f8e261..faf86aa 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
@@ -26,6 +26,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.stubbing.Answer;
 import org.robolectric.annotation.Config;
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
@@ -242,10 +243,13 @@
         doReturn(account)
                 .when(mIdentityManager)
                 .findExtendedAccountInfoForAccountWithRefreshTokenByEmailAddress(any());
-        // TODO(https://crbug.com/1054780): Mock getPrimaryAccountInfo instead.
-        doReturn(false).when(mIdentityManager).hasPrimaryAccount();
-        doReturn(true).when(mIdentityMutator).setPrimaryAccount(any());
-        doReturn(account).when(mIdentityManager).getPrimaryAccountInfo();
+        doReturn(null).when(mIdentityManager).getPrimaryAccountInfo();
+        Answer<Boolean> setPrimaryAccountAnswer = invocation -> {
+            // From now on getPrimaryAccountInfo should return account.
+            doReturn(account).when(mIdentityManager).getPrimaryAccountInfo();
+            return true;
+        };
+        doAnswer(setPrimaryAccountAnswer).when(mIdentityMutator).setPrimaryAccount(account.getId());
         doNothing().when(mIdentityMutator).reloadAllAccountsFromSystemWithPrimaryAccount(any());
 
         mSigninManager.onFirstRunCheckDone(); // Allow sign-in.
diff --git a/chrome/android/modules/image_editor/image_editor_module.gni b/chrome/android/modules/image_editor/image_editor_module.gni
index 4023fb6..f6db4b29 100644
--- a/chrome/android/modules/image_editor/image_editor_module.gni
+++ b/chrome/android/modules/image_editor/image_editor_module.gni
@@ -20,7 +20,7 @@
   java_deps = [ "//chrome/android/modules/image_editor/internal:java" ]
 
   if (enable_chrome_android_internal) {
-    if (target_cpu == "x86") {
+    if (target_cpu == "x86" || target_cpu == "x64") {
       loadable_modules_32_bit = [ "$_ink_dir/x86/libsketchology_native.so" ]
       loadable_modules_64_bit = [ "$_ink_dir/x86_64/libsketchology_native.so" ]
     } else {
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb
index 3608b425..a4350db0 100644
--- a/chrome/app/resources/chromium_strings_am.xtb
+++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Chromiumን ያብጁትና ይቆጣጠሩት። ዝማኔ ይገኛል።</translation>
 <translation id="6120345080069858279">Chromium ይህን የይለፍ ቃል በእርስዎ የGoogle መለያ ውስጥ ያስቀምጠዋል። ማስታወስ አይኖርብዎትም።</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> አደገኛ ነው፣ ስለዚህ Chromium አግዶታል።</translation>
+<translation id="6134968993075716475">የጥንቃቄ አሰሳ ጠፍቷል። Chromium እንዲያበሩት ይመክራል።</translation>
 <translation id="6212496753309875659">ይህ ኮምፒውተር አስቀድሞ ይበልጥ አዲስ የሆነ የChromium ስሪት አለው። ሶፍትዌሩ የማይሰራ ከሆነ እባክዎ Chromiumን ያራግፉና እንደገና ይሞክሩ።</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium አሁን ዳግም ይጀመራል}=1{Chromium በ1 ሰከንድ ውስጥ ዳግም ይጀመራል}one{Chromium በ# ሰከንዶች ውስጥ ዳግም ይጀመራል}other{Chromium በ# ሰከንዶች ውስጥ ዳግም ይጀመራል}}</translation>
 <translation id="6248213926982192922">Chromium ነባሪውን አሳሽ ያድርጉ።</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb
index 051bb66..1114b64e 100644
--- a/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -5,7 +5,7 @@
 <translation id="1098170124587656448">‏يستطيع Chromium مساعدتك في الحفاظ على أمان معلوماتك من عمليات اختراق البيانات والإضافات الضارة وغيرها من المشاكل.</translation>
 <translation id="1104942323762546749">‏يرغب Chromium في تصدير كلمات المرور، لذا يُرجى كتابة كلمة مرور Windows للسماح بذلك.</translation>
 <translation id="113122355610423240">‏Chromium هو متصفحك التلقائي</translation>
-<translation id="1185134272377778587">‏حول Chromium</translation>
+<translation id="1185134272377778587">‏لمحة عامة عن Chromium</translation>
 <translation id="1396446129537741364">‏يحاول Chromium إظهار كلمات المرور.</translation>
 <translation id="1414495520565016063">‏تم تسجيل دخولك إلى Chromium!</translation>
 <translation id="151962892725702025">‏تعذر على نظام التشغيل Chromium مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation>
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">‏تخصيص Chromium والتحكُّم فيه. هناك تحديث متوفر.</translation>
 <translation id="6120345080069858279">‏سيحفظ Chromium كلمة المرور هذه في حسابك على Google ولن تحتاج تذكّرها.</translation>
 <translation id="6129621093834146363">‏ملف <ph name="FILE_NAME" /> ضار، لذلك فقد حظره Chromium.</translation>
+<translation id="6134968993075716475">‏تم إيقاف "التصفّح الآمن" ويقترح متصفّح Chrome تفعيله.</translation>
 <translation id="6212496753309875659">‏يحتوي هذا الكمبيوتر فعلاً على إصدار أحدث من Chromium. إذا كان البرنامج لا يعمل، فالرجاء إزالة Chromium وإعادة المحاولة.</translation>
 <translation id="6219195342503754812">{0,plural, =0{‏ستتم إعادة تشغيل Chromium الآن}=1{‏ستتم إعادة تشغيل Chromium في غضون ثانية واحدة}two{‏ستتم إعادة تشغيل Chromium في غضون ثانيتين}few{‏ستتم إعادة تشغيل Chromium في غضون # ثوان}many{‏ستتم إعادة تشغيل Chromium في غضون # ثانيةً}other{‏ستتم إعادة تشغيل Chromium في غضون # ثانية}}</translation>
 <translation id="6248213926982192922">‏جعل Chromium المتصفح التلقائي</translation>
@@ -177,7 +178,7 @@
 <translation id="7451052299415159299">‏يحتاج Chromium إلى إذن للوصول إلى الكاميرا من أجل موقع الويب هذا.</translation>
 <translation id="7483335560992089831">‏لا يمكن تثبيت إصدار Chromium ذاته الذي يتم تشغيله حاليًا. يُرجى إغلاق Chromium وإعادة المحاولة.</translation>
 <translation id="753534427205733210">{0,plural, =1{‏ستتم إعادة تشغيل Chromium في غضون دقيقة واحدة}zero{‏ستتم إعادة تشغيل Chromium في غضون # دقيقة}two{‏ستتم إعادة تشغيل Chromium في غضون دقيقتين}few{‏ستتم إعادة تشغيل Chromium في غضون # دقائق}many{‏ستتم إعادة تشغيل Chromium في غضون # دقيقةً}other{‏ستتم إعادة تشغيل Chromium في غضون # دقيقة}}</translation>
-<translation id="7549178288319965365">‏حول نظام التشغيل Chromium</translation>
+<translation id="7549178288319965365">‏لمحة عامة عن نظام التشغيل Chromium</translation>
 <translation id="7561906087460245826">‏محو البيانات من Chromium أيضًا (<ph name="URL" />)</translation>
 <translation id="7585853947355360626">‏في حال عدم عرض إعداد على هذه الصفحة، انتقل إلى <ph name="LINK_BEGIN" />
     إعدادات نظام التشغيل Chromium<ph name="LINK_END" /></translation>
diff --git a/chrome/app/resources/chromium_strings_az.xtb b/chrome/app/resources/chromium_strings_az.xtb
index 57d6be7..a01f2f9e 100644
--- a/chrome/app/resources/chromium_strings_az.xtb
+++ b/chrome/app/resources/chromium_strings_az.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Chromium'u fərdiləşdirin və idarə edin. Güncəlləmə əlçatandır.</translation>
 <translation id="6120345080069858279">Chromium bu parolu Google Hesabında yadda saxlayacaq. Onu yadda saxlamalı olmayacaqsınız.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> təklükəli olduğu üçün Chromium onu blok etdi.</translation>
+<translation id="6134968993075716475">Təhlükəsiz Baxış deaktivdir. Chromium onu aktiv etməyi tövsiyə edir.</translation>
 <translation id="6212496753309875659">Bu kompüterdə Chromium'um daha son versiyası var. Proqram təminatı işləmirsə, Chroimum'u sistemdən silin və yenidən cəhd edin.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium indi yenidən başlayacaq}=1{Chromium 1 saniyəyə yenidən başlayacaq}other{Chromium # saniyəyə yenidən başlayacaq}}</translation>
 <translation id="6248213926982192922">Chromium'u defolt brauzer edin</translation>
diff --git a/chrome/app/resources/chromium_strings_be.xtb b/chrome/app/resources/chromium_strings_be.xtb
index 7efa68d..40ef3e6 100644
--- a/chrome/app/resources/chromium_strings_be.xtb
+++ b/chrome/app/resources/chromium_strings_be.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Наладжвайце Chromium і кіруйце ім. Ёсць абнаўленне.</translation>
 <translation id="6120345080069858279">Chromium захавае гэты пароль у вашым Уліковым запісе Google. Вам не трэба запамінаць яго.</translation>
 <translation id="6129621093834146363">Файл <ph name="FILE_NAME" /> небяспечны, таму Chromium заблакіраваў яго.</translation>
+<translation id="6134968993075716475">"Бяспечны прагляд" выключаны. Chromium рэкамендуе ўключыць гэты рэжым.</translation>
 <translation id="6212496753309875659">На гэтым камп'ютары ўжо ўсталявана навейшая версія Chromium. Калі праграма не працуе, выдаліце Chromium і паўтарыце спробу.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Перазапуск Chromium адбудзецца зараз}=1{Chromium будзе перазапушчаны праз 1 секунду}one{Chromium будзе перазапушчаны праз # секунду}few{Chromium будзе перазапушчаны праз # секунды}many{Chromium будзе перазапушчаны праз # секунд}other{Chromium будзе перазапушчаны праз # секунды}}</translation>
 <translation id="6248213926982192922">Зрабіць Chromium стандартным браўзерам</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index c68e1d9..ff7256e 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Přizpůsobte si prohlížeč Chromium a ovládejte jej. Je k dispozici aktualizace.</translation>
 <translation id="6120345080069858279">Chromium vám toto heslo uloží do účtu Google. Nebudete si ho muset pamatovat.</translation>
 <translation id="6129621093834146363">Soubor <ph name="FILE_NAME" /> je nebezpečný, proto jej prohlížeč Chromium zablokoval.</translation>
+<translation id="6134968993075716475">Bezpečné prohlížení je vypnuté. Chromium doporučuje zapnout ho.</translation>
 <translation id="6212496753309875659">V tomto počítači je již nainstalována novější verze prohlížeče Chromium. Jestliže tento software nefunguje, odinstalujte Chromium a zkuste to znovu.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium se nyní restartuje}=1{Chromium se za 1 sekundu restartuje}few{Chromium se za # sekundy restartuje}many{Chromium se za # sekundy restartuje}other{Chromium se za # sekund restartuje}}</translation>
 <translation id="6248213926982192922">Nastavit Chromium jako výchozí prohlížeč</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index bad9c7c8..72c99e3 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Chromium anpassen und Einstellungen festlegen. Ein Update ist verfügbar.</translation>
 <translation id="6120345080069858279">Chromium speichert dieses Passwort in Ihrem Google-Konto. Sie müssen es sich also nicht merken.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> ist schädlich und wurde daher von Chromium blockiert.</translation>
+<translation id="6134968993075716475">Safe Browsing ist deaktiviert. Es wird empfohlen, diese Funktion zu aktivieren.</translation>
 <translation id="6212496753309875659">Auf diesem Computer befindet sich bereits eine neuere Version von Chromium. Falls die Software nicht funktioniert, deinstallieren Sie Chromium bitte und versuchen Sie es erneut.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium wird jetzt neu gestartet}=1{Chromium wird in einer Sekunde neu gestartet}other{Chromium wird in # Sekunden neu gestartet}}</translation>
 <translation id="6248213926982192922">Chromium als Standardbrowser verwenden</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb
index dda947ab..ab190558 100644
--- a/chrome/app/resources/chromium_strings_es-419.xtb
+++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -124,6 +124,7 @@
 <translation id="6096348254544841612">Personaliza y controla Chromium. Hay una actualización disponible.</translation>
 <translation id="6120345080069858279">Chromium guardará esta contraseña en tu cuenta de Google, por lo que no tendrás que recordarla.</translation>
 <translation id="6129621093834146363">Chromium bloqueó <ph name="FILE_NAME" /> porque es un archivo peligroso.</translation>
+<translation id="6134968993075716475">La Navegación segura está desactivada. Chromium recomienda activarla.</translation>
 <translation id="6212496753309875659">Este equipo ya tiene una versión más reciente de Chromium. Si el software no funciona, desinstala Chromium y vuelve a intentarlo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Se reiniciará Chromium ahora}=1{Se reiniciará Chromium en 1 segundo}other{Se reiniciará Chromium en # segundos}}</translation>
 <translation id="6248213926982192922">Establecer Chromium como navegador predeterminado</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index 58b37676..3c3f083 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Personaliza y controla Chromium. Hay una actualización disponible.</translation>
 <translation id="6120345080069858279">Chromium guardará esta contraseña en tu cuenta de Google para que no tengas que recordarla.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> es peligroso, por lo que Chromium lo ha bloqueado.</translation>
+<translation id="6134968993075716475">La función Navegación Segura está desactivada. Chromium recomienda activarla.</translation>
 <translation id="6212496753309875659">Este ordenador ya cuenta con una versión más reciente de Chromium. Si el software no funciona, desinstala Chromium y vuelve a intentarlo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium se reiniciará ahora}=1{Chromium se reiniciará dentro de 1 segundo}other{Chromium se reiniciará dentro de # segundos}}</translation>
 <translation id="6248213926982192922">Establecer Chromium como navegador predeterminado</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index fd434ba..14dd939 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Kohandage ja juhtige Chromiumi. Saadaval on värskendus.</translation>
 <translation id="6120345080069858279">Chromium salvestab selle parooli teie Google'i kontole. Te ei pea seda meeles pidama.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> on ohtlik, mistõttu Chromium blokeeris selle.</translation>
+<translation id="6134968993075716475">Google'i ohutu sirvimine on välja lülitatud. Chromium soovitab selle sisse lülitada.</translation>
 <translation id="6212496753309875659">Arvutis on juba Chromiumi uuem versioon. Kui tarkvara ei tööta, siis desinstallige Chromium ja proovige uuesti.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium käivitatakse kohe uuesti}=1{Chromium käivitatakse uuesti 1 sekundi pärast}other{Chromium käivitatakse uuesti # sekundi pärast}}</translation>
 <translation id="6248213926982192922">Määra Chromium vaikebrauseriks</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index 1d03115..2e42ab2 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Pertsonalizatu eta kontrolatu Chromium. Eguneratze bat erabilgarri dago.</translation>
 <translation id="6120345080069858279">Chromium-ek Google-ko kontuan gordeko du pasahitz hau. Ez duzu gogoratu beharko.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> arriskutsua da; horregatik, blokeatu egin du Chromium-ek.</translation>
+<translation id="6134968993075716475">Arakatze segurua desaktibatuta dago. Aktibatzea gomendatzen du Chromium-ek.</translation>
 <translation id="6212496753309875659">Ordenagailuak Chromium arakatzailearen bertsio berriagoa du. Softwareak ez badu funtzionatzean, desinstalatu Chromium eta saiatu berriro.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Orain berrabiaraziko da Chromium}=1{1 segundo barru berrabiaraziko da Chromium}other{# segundo barru berrabiaraziko da Chromium}}</translation>
 <translation id="6248213926982192922">Ezarri Chromium arakatzaile lehenetsi gisa</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb
index 5071cfe..873dff5 100644
--- a/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
-<translation id="1065672644894730302">تنظیمات برگزیده شما را نمی‌توان خواند. بعضی ویژگی‌ها ممکن است در دسترس نباشند و تغییرات تنظیمات برگزیده ذخیره نخواهد شد.</translation>
+<translation id="1065672644894730302">اولویت‌های شما را نمی‌توان خواند. بعضی ویژگی‌ها ممکن است در دسترس نباشند و تغییرات تنظیمات برگزیده ذخیره نخواهد شد.</translation>
 <translation id="1098170124587656448">‏Chromium می‌تواند به ایمن ماندن شما در برابر نقض داده، افزونه‌های مخرب، و خطرهای دیگر کمک کند</translation>
 <translation id="1104942323762546749">‏Chromium می‌خواهد گذرواژه‌های شما را صادر کند. برای اجازه به این کار، گذرواژه Windows خود را تایپ کنید.</translation>
 <translation id="113122355610423240">‏Chromium مرورگر پیش‌فرضتان است</translation>
@@ -125,6 +125,7 @@
 <translation id="6096348254544841612">‏سفارشی کردن و کنترل Chromium. به‌روزرسانی‌ در دسترس است.</translation>
 <translation id="6120345080069858279">‏Chromium این گذرواژه را در حساب Google شما ذخیره می‌کند. لازم نیست آن را به خاطر بسپارید.</translation>
 <translation id="6129621093834146363">‏<ph name="FILE_NAME" /> خطرناک است، بنابراین Chromium آن را مسدود کرده است.</translation>
+<translation id="6134968993075716475">‏«مرور ایمن» خاموش است. Chromium توصیه می‌کند آن را روشن کنید.</translation>
 <translation id="6212496753309875659">‏این رایانه در حال حاضر دارای یک نسخه جدیدتر از Chromium است. درصورتی‌که نرم‌افزار کار نمی‌کند، لطفاً Chromium را حذف نصب کنید و دوباره سعی کنید.</translation>
 <translation id="6219195342503754812">{0,plural, =0{‏Chromium هم‌اکنون راه‌اندازی مجدد می‌شود}=1{‏Chromium ‏۱ ثانیه دیگر راه‌اندازی مجدد می‌شود}one{‏Chromium ‏# ثانیه دیگر راه‌اندازی مجدد می‌شود}other{‏Chromium ‏# ثانیه دیگر راه‌اندازی مجدد می‌شود}}</translation>
 <translation id="6248213926982192922">‏Chromium  مرورگر پیش‌فرض شود</translation>
@@ -164,7 +165,7 @@
 <translation id="7223968959479464213">‏مدیر فعالیت‌ها - Chromium</translation>
 <translation id="731644333568559921">‏به‌روزرسانی &amp;سیستم عامل Chromium</translation>
 <translation id="731795002583552498">‏در حال به‌روزرسانی Chromium</translation>
-<translation id="7318036098707714271">‏فایل تنظیمات برگزیده شما خراب یا نامعتبر است. 
+<translation id="7318036098707714271">‏فایل اولویت‌های شما خراب یا نامعتبر است. 
 Chromium قادر به بازیابی تنظیمات شما نیست.</translation>
 <translation id="7337881442233988129">Chromium</translation>
 <translation id="7339898014177206373">پنجرهٔ جدید</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index c0338bd..d6383ea 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Muokkaa ja hallinnoi Chromiumia. Päivitys on saatavilla.</translation>
 <translation id="6120345080069858279">Chromium tallentaa tämän salasanan Google-tilillesi. Sinun ei tarvitse muistaa sitä.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> on vaarallinen, joten Chromium on estänyt sen.</translation>
+<translation id="6134968993075716475">Selaussuoja on pois päältä. Chromium suosittelee laittamaan sen päälle.</translation>
 <translation id="6212496753309875659">Tälle tietokoneelle on jo asennettu Chromiumin uudempi versio. Jos Chromium ei toimi, poista sen asennus ja yritä uudelleen.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium käynnistetään uudelleen nyt}=1{Chromium käynnistetään uudelleen 1 sekunnin kuluttua}other{Chromium käynnistetään uudelleen # sekunnin kuluttua}}</translation>
 <translation id="6248213926982192922">Tee Chromiumista oletusselain</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb
index 2d6a29c7..92f6ea58 100644
--- a/chrome/app/resources/chromium_strings_fil.xtb
+++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">I-customize at kontrolin ang Chromium. May available na update.</translation>
 <translation id="6120345080069858279">Ise-save ng Chromium ang password na ito sa iyong Google Account. Hindi mo na ito kailangang tandaan.</translation>
 <translation id="6129621093834146363">Mapanganib ang <ph name="FILE_NAME" />, kaya na-block ito ng Chromium.</translation>
+<translation id="6134968993075716475">Naka-off ang Ligtas na Pag-browse. Inirerekomenda ng Chromium na i-on ito.</translation>
 <translation id="6212496753309875659">May mas bagong bersyon ng Chromium na ang computer na ito. Kung hindi gumagana ang software, mangyaring i-uninstall ang Chromium at subukang muli.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Muli nang ilulunsad ang Chromium ngayon}=1{Muli nang ilulunsad ang Chromium sa loob ng 1 segundo}one{Muli nang ilulunsad ang Chromium sa loob ng # segundo}other{Muli nang ilulunsad ang Chromium sa loob ng # na segundo}}</translation>
 <translation id="6248213926982192922">Gawing default na browser ang Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb
index c1cdac7..6a931e1 100644
--- a/chrome/app/resources/chromium_strings_fr-CA.xtb
+++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Personnalisez et contrôlez Chromium. Une mise à jour est disponible.</translation>
 <translation id="6120345080069858279">Chromium enregistrera ce mot de passe dans votre compte Google. Vous n'aurez pas à le retenir.</translation>
 <translation id="6129621093834146363">Chromium a bloqué le fichier <ph name="FILE_NAME" />, car il est dangereux.</translation>
+<translation id="6134968993075716475">La navigation sécurisée est désactivée. Chromium vous recommande de l'activer.</translation>
 <translation id="6212496753309875659">Cet ordinateur dispose déjà d'une version plus récente de Chromium. Si le logiciel ne fonctionne pas, veuillez le désinstaller, puis réessayer.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium va redémarrer maintenant}=1{Chromium redémarrera dans 1 seconde}one{Chromium redémarrera dans # seconde}other{Chromium redémarrera dans # secondes}}</translation>
 <translation id="6248213926982192922">Faire de Chromium le navigateur par défaut</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index bd9c88cf..531caec 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -127,6 +127,7 @@
 <translation id="6096348254544841612">Personnalisez et contrôlez Chromium. Une mise à jour est disponible.</translation>
 <translation id="6120345080069858279">Chromium va enregistrer ce mot de passe dans votre compte Google. Vous n'avez pas besoin de le retenir.</translation>
 <translation id="6129621093834146363">Chromium a bloqué <ph name="FILE_NAME" />, car ce fichier est dangereux.</translation>
+<translation id="6134968993075716475">La navigation sécurisée étant désactivée, Chromium vous recommande de l'activer.</translation>
 <translation id="6212496753309875659">Cet ordinateur dispose déjà d'une version plus récente de Chromium. Si le logiciel ne fonctionne pas, veuillez le désinstaller, puis réessayer.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium va être relancé maintenant}=1{Chromium va être relancé dans 1 seconde}one{Chromium va être relancé dans # seconde}other{Chromium va être relancé dans # secondes}}</translation>
 <translation id="6248213926982192922">Définir Chromium en tant que navigateur par défaut</translation>
diff --git a/chrome/app/resources/chromium_strings_gl.xtb b/chrome/app/resources/chromium_strings_gl.xtb
index 10f77fa..587399d 100644
--- a/chrome/app/resources/chromium_strings_gl.xtb
+++ b/chrome/app/resources/chromium_strings_gl.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Personalizar e controlar Chromium. Hai una actualización dispoñible.</translation>
 <translation id="6120345080069858279">Chromium gardará este contrasinal na túa Conta de Google. Non terás que recordalo.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> é perigoso, así que Chromium bloqueouno.</translation>
+<translation id="6134968993075716475">A opción Navegación segura está desactivada. Chromium recomenda activala.</translation>
 <translation id="6212496753309875659">Este ordenador xa conta cunha versión máis recente de Chromium. Se o software non funciona, desinstala Chromium e téntao de novo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium reiniciarase agora}=1{Chromium reiniciarase en 1 segundo}other{Chromium reiniciarase en # segundos}}</translation>
 <translation id="6248213926982192922">Establecer Chromium como navegador predeterminado</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index 01b17512e..a9d2e8ef 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">क्रोमियम को पसंद के मुताबिक बनाएं और नियंत्रित करें. अपडेट उपलब्ध है.</translation>
 <translation id="6120345080069858279">क्रोमियम इस पासवर्ड को आपके Google खाते में सेव कर लेगा. आपको इसे याद रखने की ज़रूरत नहीं है.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> खतरनाक है, इसलिए क्रोमियम ने उसे अवरोधित कर दिया है.</translation>
+<translation id="6134968993075716475">सुरक्षित ब्राउज़िंग की सुविधा बंद है. 'क्रोमियम' इसे चालू करने का सुझाव देता है.</translation>
 <translation id="6212496753309875659">इस कंप्‍यूटर में पहले से क्रोमियम का ज़्यादा नया वर्शन है. अगर सॉफ़्टवेयर काम नहीं कर रहा है, तो कृपया क्रोमियम अनइंस्‍टॉल करें और फिर से प्रयास करें.</translation>
 <translation id="6219195342503754812">{0,plural, =0{क्रोमियम अभी फिर से लॉन्च होगा}=1{क्रोमियम 1 सेकंड में फिर से लॉन्च होगा}one{क्रोमियम # सेकंड में फिर से लॉन्च होगा}other{क्रोमियम # सेकंड में फिर से लॉन्च होगा}}</translation>
 <translation id="6248213926982192922">क्रोमियम को डिफ़ॉल्ट ब्राउज़र बनाएं</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb
index d167592..6ab603e9 100644
--- a/chrome/app/resources/chromium_strings_id.xtb
+++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Sesuaikan dan kontrol Chromium. Update tersedia.</translation>
 <translation id="6120345080069858279">Chromium akan menyimpan sandi ini di Akun Google. Anda tidak perlu mengingatnya.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> berbahaya, sehingga Chromium memblokirnya.</translation>
+<translation id="6134968993075716475">Safe Browsing nonaktif. Chromium merekomendasikan untuk mengaktifkannya.</translation>
 <translation id="6212496753309875659">Komputer ini sudah memiliki versi Chromium yang lebih baru. Jika software tidak bekerja, harap coba uninstal Chromium, lalu cobalah kembali.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium akan diluncurkan ulang sekarang}=1{Chromium akan diluncurkan ulang dalam 1 detik}other{Chromium akan diluncurkan ulang dalam # detik}}</translation>
 <translation id="6248213926982192922">Jadikan Chromium browser default</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index 4351e6d2..ae329be 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Chromium をカスタマイズしてご活用ください。アップデートが利用可能です。</translation>
 <translation id="6120345080069858279">このパスワードは Google アカウントに保存されるため、覚えておく必要はありません。</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> は危険なファイルであるため、Chromium でブロックしました。</translation>
+<translation id="6134968993075716475">セーフ ブラウジングがオフになっています。Chromium はオンにすることをおすすめしています。</translation>
 <translation id="6212496753309875659">新しいバージョンの Chromium が既にインストールされています。ソフトウェアが動作しない場合は、Chromium をアンインストールしてからもう一度お試しください。</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium は今すぐ再起動されます}=1{Chromium は 1 秒後に再起動されます}other{Chromium は # 秒後に再起動されます}}</translation>
 <translation id="6248213926982192922">Chromium を既定のブラウザにする</translation>
diff --git a/chrome/app/resources/chromium_strings_kk.xtb b/chrome/app/resources/chromium_strings_kk.xtb
index 18f3732..721efe47 100644
--- a/chrome/app/resources/chromium_strings_kk.xtb
+++ b/chrome/app/resources/chromium_strings_kk.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Chromium браузерін реттеңіз және басқарыңыз. Жаңартылған нұсқа қолжетімді.</translation>
 <translation id="6120345080069858279">Chromium бұл құпия сөзді Google есептік жазбаңызда сақтайды. Оны есте сақтаудың қажеті жоқ.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> қауіпті болғандықтан, Chromium оны бөгеді.</translation>
+<translation id="6134968993075716475">"Қауіпсіз шолу" функциясы өшірулі. Chromium браузері оны қосуды ұсынады.</translation>
 <translation id="6212496753309875659">Бұл компьютерде жаңа Chromium нұсқасы бұрыннан бар. Бағдарламалық жасақтама жұмыс істемесе, Chromium жойып, әрекетті қайталап көріңіз.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium браузері қазір қайта іске қосылады}=1{Chromium браузері 1 секундтан кейін қайта іске қосылады}other{Chromium браузері # секундтан кейін қайта іске қосылады}}</translation>
 <translation id="6248213926982192922">Әдепкі браузер ретінде Chromium орнату</translation>
diff --git a/chrome/app/resources/chromium_strings_km.xtb b/chrome/app/resources/chromium_strings_km.xtb
index f95d11d9..c1248eaf 100644
--- a/chrome/app/resources/chromium_strings_km.xtb
+++ b/chrome/app/resources/chromium_strings_km.xtb
@@ -129,6 +129,7 @@
 <translation id="6096348254544841612">គ្រប់គ្រង និង​ប្ដូរ Chromium តាម​បំណង។ មាន​កំណែថ្មី​ហើយ។</translation>
 <translation id="6120345080069858279">Chromium នឹង​រក្សាទុក​ពាក្យ​សម្ងាត់នេះ​នៅក្នុង​គណនី Google របស់អ្នក ដូច្នេះអ្នកនឹង​មិនចាំបាច់​ចងចាំ​វាទេ។</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> មានគ្រោះថ្នាក់ ដូច្នេះ Chromium បានរារាំងវា។</translation>
+<translation id="6134968993075716475">បានបិទមុខងាររុករក​ដោយសុវត្ថិភាព​។ Chromium ណែនាំឱ្យ​បើក​មុខងារនេះ។</translation>
 <translation id="6212496753309875659">កុំព្យូទ័រនេះមានកំណែ Chromium ថ្មីជាងនេះរួចហើយ។ ប្រសិនបើកម្មវិធីនេះមិនដំណើរការ សូមលុបការតំឡើង Chromium ហើយព្យាយាមម្តងទៀត។</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium នឹង​ចាប់ផ្តើមឡើងវិញ​ឥឡូវនេះ}=1{Chromium នឹង​ចាប់ផ្ដើមឡើងវិញ​ក្នុងរយៈពេល 1 វិនាទីទៀត}other{Chromium នឹង​ចាប់ផ្ដើមឡើងវិញ​ក្នុងរយៈពេល # វិនាទីទៀត}}</translation>
 <translation id="6248213926982192922">ដាក់ Chromium ជាកម្មវិធីរុករកលំនាំដើម</translation>
diff --git a/chrome/app/resources/chromium_strings_ko.xtb b/chrome/app/resources/chromium_strings_ko.xtb
index 8a0e85d..60da258d 100644
--- a/chrome/app/resources/chromium_strings_ko.xtb
+++ b/chrome/app/resources/chromium_strings_ko.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Chromium을 맞춤설정하고 제어하세요. 업데이트가 출시되었습니다.</translation>
 <translation id="6120345080069858279">Chromium에서 내 Google 계정에 이 비밀번호를 저장하므로 기억하지 않아도 됩니다.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" />은(는) 위험한 파일이므로 Chromium에서 차단했습니다.</translation>
+<translation id="6134968993075716475">세이프 브라우징이 사용 중지되어 있습니다. 사용 설정하는 것이 좋습니다.</translation>
 <translation id="6212496753309875659">컴퓨터에 이미 최신 버전의 Chromium이 있습니다. 소프트웨어가 작동하지 않으면 Chromium의 설치를 제거한 뒤 다시 시도하세요.</translation>
 <translation id="6219195342503754812">{0,plural, =0{곧 Chromium이 다시 시작됩니다}=1{1초 후 Chromium이 다시 시작됩니다}other{#초 후 Chromium이 다시 시작됩니다}}</translation>
 <translation id="6248213926982192922">Chromium을 기본 브라우저로 설정</translation>
diff --git a/chrome/app/resources/chromium_strings_ky.xtb b/chrome/app/resources/chromium_strings_ky.xtb
index 9ecf92f..66b2649 100644
--- a/chrome/app/resources/chromium_strings_ky.xtb
+++ b/chrome/app/resources/chromium_strings_ky.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Chromium'ду ыңгайлаштырып алып, көзөмөлдөңүз. Жаңыртуу бар.</translation>
 <translation id="6120345080069858279">Chromium бул сырсөздү Google аккаунтуңузга сактап коёт. Аны эстеп калуунун кажети жок.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> кооптуу файл болгондуктан, Chromium аны бөгөттөп койду.</translation>
+<translation id="6134968993075716475">Коопсуз серептөө өчүк. Chromium аны күйгүзүүнү сунуштайт.</translation>
 <translation id="6212496753309875659">Бул компьютерде Chromium'дун жаңыраак версиясы мурунтан эле орнотулган. Эгер программа иштебей жатса, Chromium'ду орнотуудан чыгарып, дагы бир жолу аракет кылып көрүңүз.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium азыр кайра иштетилет}=1{Chromium 1 секунддан кийин кайра иштетилет}other{Chromium # секунддан кийин кайра иштетилет}}</translation>
 <translation id="6248213926982192922">Chromium'ду демейки серепчи кылуу</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb
index 63bfac1..2b9616812 100644
--- a/chrome/app/resources/chromium_strings_lv.xtb
+++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Pielāgojiet un pārvaldiet pārlūku Chromium. Ir pieejams atjauninājums.</translation>
 <translation id="6120345080069858279">Pārlūks Chromium saglabās šo paroli jūsu Google kontā. To nav nepieciešams iegaumēt.</translation>
 <translation id="6129621093834146363">Fails <ph name="FILE_NAME" /> ir bīstams, tādēļ Chromium to bloķēja.</translation>
+<translation id="6134968993075716475">Droša pārlūkošana ir izslēgta. Pārlūkā Chromium tiek ieteikts to ieslēgt.</translation>
 <translation id="6212496753309875659">Šim datoram jau ir jaunākā Chromium versija. Ja programmatūra nedarbojas, atinstalējiet pārlūku Chromium un mēģiniet vēlreiz.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Pārlūks Chromium tūlīt tiks restartēts}=1{Pārlūks Chromium pēc 1 sekundes tiks restartēts}zero{Pārlūks Chromium pēc # sekundēm tiks restartēts}one{Pārlūks Chromium pēc # sekundes tiks restartēts}other{Pārlūks Chromium pēc # sekundēm tiks restartēts}}</translation>
 <translation id="6248213926982192922">Padarīt Chromium par noklusējuma pārlūku</translation>
diff --git a/chrome/app/resources/chromium_strings_mn.xtb b/chrome/app/resources/chromium_strings_mn.xtb
index bf5ed01..20de84c 100644
--- a/chrome/app/resources/chromium_strings_mn.xtb
+++ b/chrome/app/resources/chromium_strings_mn.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Chromium-г тохируулж, хянана уу. Шинэчлэх боломжтой.</translation>
 <translation id="6120345080069858279">Chromium энэ нууц үгийг таны Google Бүртгэлд хадгалах тул та үүнийг санах шаардлагагүй.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> аюултай тул үүнийг Chromium блок хийсэн.</translation>
+<translation id="6134968993075716475">Аюулгүй үзэх онцлог унтраалттай байна. Chromium түүнийг асаахыг зөвлөж байна.</translation>
 <translation id="6212496753309875659">Энэ компьютерт Chromium-ийн хамгийн сүүлийн үеийн хувилбар байна. Хэрэв програм ажиллахгүй байвал Chromium-ийг устгаад, дахин суурьлуулж үзнэ үү.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium-г одоо дахин ажиллуулна}=1{Chromium-г 1 секундийн дотор дахин ажиллуулна}other{Chromium-г # секундийн дотор дахин ажиллуулна}}</translation>
 <translation id="6248213926982192922">Chromium-ыг анхдагч вэб хөтөч болгох</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb
index b978773d..d961890 100644
--- a/chrome/app/resources/chromium_strings_no.xtb
+++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Tilpass og kontrollér Chromium. Oppdatering er tilgjengelig.</translation>
 <translation id="6120345080069858279">Chromium lagrer dette passordet i Google-kontoen din, så du trenger ikke å huske det.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> er farlig, så Chromium har blokkert den.</translation>
+<translation id="6134968993075716475">Safe Browsing er slått av. Chromium anbefaler at du slår det på.</translation>
 <translation id="6212496753309875659">Denne datamaskinen har allerede en nyere versjon av Chromium. Hvis programvaren ikke fungerer, må du avinstallere Chromium og prøve på nytt.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium startes på nytt nå}=1{Chromium startes på nytt om 1 sekund}other{Chromium startes på nytt om # sekunder}}</translation>
 <translation id="6248213926982192922">Gjør Chromium til standard nettleser</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb
index edd3af3..b9cbb805 100644
--- a/chrome/app/resources/chromium_strings_ru.xtb
+++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -124,6 +124,7 @@
 <translation id="6096348254544841612">Новая версия Chromium уже вышла!</translation>
 <translation id="6120345080069858279">Этот пароль будет сохранен в аккаунте Google. Вам не нужно его запоминать.</translation>
 <translation id="6129621093834146363">Chromium заблокировал файл <ph name="FILE_NAME" /> как опасный.</translation>
+<translation id="6134968993075716475">Безопасный просмотр отключен. Chromium рекомендует включить его.</translation>
 <translation id="6212496753309875659">На этом компьютере установлена актуальная версия Chromium. Если программа не работает, удалите Chromium и повторите попытку.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium перезапускается}=1{Chromium перезапустится через 1 секунду}one{Chromium перезапустится через # секунду}few{Chromium перезапустится через # секунды}many{Chromium перезапустится через # секунд}other{Chromium перезапустится через # секунды}}</translation>
 <translation id="6248213926982192922">Назначить Chromium браузером по умолчанию</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb
index 8518251b..4d3e9f55 100644
--- a/chrome/app/resources/chromium_strings_sk.xtb
+++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Prispôsobte si prehliadač Chromium a ovládajte ho. K dispozícii je aktualizácia.</translation>
 <translation id="6120345080069858279">Chromium toto heslo uloží do vášho účtu Google. Nebudete si ho musieť pamätať.</translation>
 <translation id="6129621093834146363">Súbor <ph name="FILE_NAME" /> je nebezpečný, a preto ho prehliadač Chromium zablokoval.</translation>
+<translation id="6134968993075716475">Bezpečné prehliadanie je vypnuté. Chromium ho odporúča zapnúť.</translation>
 <translation id="6212496753309875659">Tento počítač už obsahuje novšiu verziu prehliadača Chromium. Ak softvér nefunguje, odinštalujte prehliadač Chromium a skúste to znova.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium sa teraz reštartuje}=1{Chromium sa reštartuje o 1 sekundu}few{Chromium sa reštartuje o # sekundy}many{Chromium sa reštartuje o # sekundy}other{Chromium sa reštartuje o # sekúnd}}</translation>
 <translation id="6248213926982192922">Nastavte Chromium ako svoj predvolený prehliadač</translation>
diff --git a/chrome/app/resources/chromium_strings_sq.xtb b/chrome/app/resources/chromium_strings_sq.xtb
index 30294cb..1036bd86 100644
--- a/chrome/app/resources/chromium_strings_sq.xtb
+++ b/chrome/app/resources/chromium_strings_sq.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Personalizo dhe kontrollo Chromium. Ofrohet përditësim.</translation>
 <translation id="6120345080069858279">Chromium do ta ruajë këtë fjalëkalim në llogarinë tënde të Google. Nuk është nevoja ta mbash mend.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> është i rrezikshëm, prandaj Chromium e ka bllokuar.</translation>
+<translation id="6134968993075716475">"Shfletimi i sigurt" është joaktiv. Chromium rekomandon aktivizimin e tij.</translation>
 <translation id="6212496753309875659">Ky kompjuter e ka tashmë një version më të ri të Chromium. Nëse softueri nuk punon, çinstaloje Chromium dhe provo përsëri.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium do të hapet përsëri tani}=1{Chromium do të hapet përsëri për 1 sekondë}other{Chromium do të hapet përsëri për # sekonda}}</translation>
 <translation id="6248213926982192922">Bëje Chromium, shfletuesin tënd të parazgjedhur</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index e0418f9..6039c92 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">Anpassa och styr Chromium. En uppdatering är tillgänglig.</translation>
 <translation id="6120345080069858279">Det här lösenordet sparas i ditt Google-konto. Du behöver inte komma ihåg det.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> är skadlig och har blockerats av Chromium.</translation>
+<translation id="6134968993075716475">Säker webbsökning har inaktiverats. Du rekommenderas att aktivera funktionen i Chromium.</translation>
 <translation id="6212496753309875659">Det finns redan en nyare version av Chromium på den här datorn. Avinstallera Chromium och försök igen om programvaran inte fungerar.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium startas om nu}=1{Om en sekund startas Chromium om}other{Om # sekunder startas Chromium om}}</translation>
 <translation id="6248213926982192922">Använd Chromium som standardwebbläsare</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb
index 48d2dc1..05d8edf 100644
--- a/chrome/app/resources/chromium_strings_tr.xtb
+++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -124,6 +124,7 @@
 <translation id="6096348254544841612">Chromium'u özelleştirin ve kontrol edin. Güncelleme mevcut.</translation>
 <translation id="6120345080069858279">Chromium, şifrenizi Google Hesabınızda kaydedecek. Bu şekilde şifreyi hatırlamanız gerekmez.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> tehlikeli olduğu için Chromium tarafından engellendi.</translation>
+<translation id="6134968993075716475">Güvenli Tarama kapalı. Chromium bunun açılmasını öneriyor.</translation>
 <translation id="6212496753309875659">Bu bilgisayarda Chromium'un daha yeni bir sürümü de var. Yazılım çalışmıyorsa, Chromium'u kaldırın ve tekrar deneyin.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium şimdi yeniden başlatılacak}=1{Chromium 1 saniye içinde yeniden başlatılacak}other{Chromium # saniye içinde yeniden başlatılacak}}</translation>
 <translation id="6248213926982192922">Chromium varsayılan tarayıcı olsun</translation>
diff --git a/chrome/app/resources/chromium_strings_ur.xtb b/chrome/app/resources/chromium_strings_ur.xtb
index 36c22f6..e6404ec 100644
--- a/chrome/app/resources/chromium_strings_ur.xtb
+++ b/chrome/app/resources/chromium_strings_ur.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">‏Chromium کو حسب ضروت بنائیں اور اسے کنٹرول کریں۔ اپ ڈیٹ دستیاب ہے۔</translation>
 <translation id="6120345080069858279">‏Chromium آپ کے Google اکاؤنٹ میں اس پاس ورڈ کو محفوظ کرے گا۔ آپ کو اسے یاد کرنے کی ضرورت نہیں ہے۔</translation>
 <translation id="6129621093834146363">‏<ph name="FILE_NAME" /> خطرناک ہے، اس لیے Chromium نے اسے مسدود کر دیا ہے۔</translation>
+<translation id="6134968993075716475">‏محفوظ براؤزنگ آف ہے۔ Chromium اسے آن کرنے کی تجویز کرتا ہے۔</translation>
 <translation id="6212496753309875659">‏اس کمپیوٹر پر Chromium کا ایک مزید حالیہ ورژن پہلے سے ہے۔ اگر سافٹ ویئر کام نہیں کر رہا ہے تو براہ کرم Chromium کو ان انسٹال کریں اور دوبارہ کوشش کریں۔</translation>
 <translation id="6219195342503754812">{0,plural, =0{‏ابھی Chromium دوبارہ لانچ ہوگا}=1{‏1 سیکنڈ میں Chromium دوبارہ لانچ ہوگا}other{‏# سیکنڈ میں Chromium دوبارہ لانچ ہوگا}}</translation>
 <translation id="6248213926982192922">‏Chromium کو ڈیفالٹ براؤزر بنائیں</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb
index 384cc0c8..a189155 100644
--- a/chrome/app/resources/chromium_strings_vi.xtb
+++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">Tùy chỉnh và kiểm soát Chromium. Đã có bản cập nhật.</translation>
 <translation id="6120345080069858279">Chromium sẽ lưu mật khẩu này trong Tài khoản Google của bạn. Bạn sẽ không phải nhớ mật khẩu này.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> nguy hiểm, do đó Chromium đã chặn tệp.</translation>
+<translation id="6134968993075716475">Tính năng Duyệt web an toàn đang tắt. Bạn nên bật tính năng này trên Chromium.</translation>
 <translation id="6212496753309875659">Máy tính này đã có phiên bản Chromium mới hơn. Nếu phần mềm không hoạt động, hãy gỡ cài đặt Chromium và thử lại.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium sẽ khởi động lại ngay bây giờ}=1{Chromium sẽ khởi động lại sau 1 giây}other{Chromium sẽ khởi động lại sau # giây}}</translation>
 <translation id="6248213926982192922">Đặt Chromium làm trình duyệt mặc định</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb
index f3c19d70..3d49319 100644
--- a/chrome/app/resources/chromium_strings_zh-CN.xtb
+++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">有可用的更新。欢迎自定义和控制 Chromium。</translation>
 <translation id="6120345080069858279">Chromium 会将此密码保存在您的 Google 帐号中,因此您不必记住它。</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> 存在危险,因此 Chromium 已将其拦截。</translation>
+<translation id="6134968993075716475">“安全浏览”功能已关闭。Chromium 建议开启它。</translation>
 <translation id="6212496753309875659">此计算机已安装了更高版本的 Chromium。如果软件无法正常运行,请卸载 Chromium 并重试。</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium 将立即重新启动}=1{Chromium 将在 1 秒后重新启动}other{Chromium 将在 # 秒后重新启动}}</translation>
 <translation id="6248213926982192922">将 Chromium 设置为默认浏览器</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-HK.xtb b/chrome/app/resources/chromium_strings_zh-HK.xtb
index bc94c831..056e4c7 100644
--- a/chrome/app/resources/chromium_strings_zh-HK.xtb
+++ b/chrome/app/resources/chromium_strings_zh-HK.xtb
@@ -128,6 +128,7 @@
 <translation id="6096348254544841612">自訂和管理 Chromium。有可用的更新。</translation>
 <translation id="6120345080069858279">Chromium 會將此密碼儲存在您的 Google 帳戶內,您無需記住。</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> 不安全,因此 Chromium 已封鎖此檔案。</translation>
+<translation id="6134968993075716475">「安全瀏覽」功能已停用。Chromium 建議啟用此功能。</translation>
 <translation id="6212496753309875659">這部電腦已安裝較新的 Chromium 版本。如果軟件無法工作,請解除安裝 Chromium,然後再試一次。</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium 將立即重新啟動}=1{Chromium 將於 1 秒後重新啟動}other{Chromium 將於 # 秒後重新啟動}}</translation>
 <translation id="6248213926982192922">將 Chromium 設為預設瀏覽器</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb
index c02f934..723673c 100644
--- a/chrome/app/resources/chromium_strings_zh-TW.xtb
+++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -126,6 +126,7 @@
 <translation id="6096348254544841612">有可用的更新,歡迎自訂及控制 Chromium。</translation>
 <translation id="6120345080069858279">Chromium 會將這組密碼儲存至你的 Google 帳戶,你不須記住密碼。</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> 並不安全,因此遭到 Chromium 封鎖。</translation>
+<translation id="6134968993075716475">安全瀏覽功能已停用。Chromium 建議啟用這項功能。</translation>
 <translation id="6212496753309875659">這台電腦已安裝較新的 Chromium 版本。如果軟體無法順利運作,請解除安裝 Chromium,然後再試一次。</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium 將立即重新啟動}=1{Chromium 將在 1 秒後重新啟動}other{Chromium 將在 # 秒後重新啟動}}</translation>
 <translation id="6248213926982192922">將 Chromium 設為預設瀏覽器</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 908e0ef2..9a7725f 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Wysig kaart</translation>
 <translation id="2154710561487035718">Kopieer URL</translation>
 <translation id="2155772377859296191">Lyk soos <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Jy kan help om Veiligblaai te verbeter deur sekere stelselinligting en bladsyinhoud na Google te stuur.</translation>
 <translation id="2156294658807918600">Dienswerker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Gebruik 'n Dell-dokstasie wat ontwerp is om saam met hierdie Chromebook te gebruik om bykomende kenmerke te kry.</translation>
 <translation id="215753907730220065">Gaan by Volskerm uit</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">Herlaai program</translation>
 <translation id="2327492829706409234">Aktiveer program</translation>
 <translation id="2329597144923131178">Meld aan om jou boekmerke, geskiedenis, wagwoorde en ander instellings op al jou toestelle te kry.</translation>
-<translation id="2330607597130465898">Geen beskerming nie</translation>
 <translation id="2332131598580221120">Bekyk in winkel</translation>
 <translation id="2332192922827071008">Maak voorkeure oop</translation>
 <translation id="2332742915001411729">Stel terug na verstek</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sinkronisering werk tans nie. Probeer weer aanmeld.</translation>
 <translation id="3493486281776271508">Internetverbinding word vereis</translation>
 <translation id="3493881266323043047">Geldigheid</translation>
-<translation id="3494155060718700400">Beskerm jou nie teen gevaarlike webwerwe, aflaaie en uitbreidings nie (nie aanbeveel nie). Jy sal steeds Veiligblaai-beskerming in ander Google-dienste, soos Gmail en Search, kry waar dit beskikbaar is.</translation>
 <translation id="3494769164076977169">Vra wanneer 'n werf probeer om lêers outomaties af te laai ná die eerste lêer (aanbeveel)</translation>
 <translation id="3495660573538963482">Google Assistent-instellings</translation>
 <translation id="3496213124478423963">Zoem uit</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Die volgende werwe word gekeer om jou ligging op hierdie bladsy na te spoor:</translation>
 <translation id="49226369361073053">{0,plural, =0{Dateer toestel nou op}=1{Dateer toestel binne 1 sekonde op}other{Dateer toestel binne # sekondes op}}</translation>
 <translation id="492299503953721473">Verwyder Android-programme</translation>
-<translation id="4923279099980110923">Ja, ek wil help</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Jou poorte sal hier verskyn</translation>
 <translation id="4925542575807923399">Die administrateur vir hierdie rekening vereis dat hierdie rekening die eerste een moet wees waarby in 'n veelvuldige aanmeldsessie aangemeld word.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Kies private sleutellêer.</translation>
 <translation id="5363109466694494651">Kragwas en stel terug</translation>
 <translation id="5365881113273618889">Die vouer wat jy gekies het, bevat sensitiewe lêers. Is jy seker jy wil permanente skryftoegang tot hierdie vouer aan "<ph name="APP_NAME" />" verleen?</translation>
-<translation id="5367091008316207019">Lees tans lêer …</translation>
 <translation id="5368720394188453070">Jou foon is gesluit. Ontsluit dit om in te gaan.</translation>
 <translation id="5368779022775404937">Meld aan by <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktiveer muisversnelling</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> dag gelede aktief</translation>
 <translation id="8986362086234534611">Vergeet</translation>
 <translation id="8986494364107987395">Stuur gebruikstatistiek en omvalverslae outomaties na Google</translation>
-<translation id="8986651757229422279">Dit sal alle data en webkoekies uitvee wat deur <ph name="ORIGIN_NAME" /> en sy geïnstalleerde program geberg is.</translation>
 <translation id="8987927404178983737">Maand</translation>
 <translation id="8991520179165052608">Werf kan jou mikrofoon gebruik</translation>
 <translation id="899403249577094719">Netscape-sertifikaatbasis se URL</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index b9251a5..7975dea 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">በ<ph name="APP" /> ውስጥ ክፈት</translation>
 <translation id="2120297377148151361">እንቅስቃሴ እና መስተጋብሮች</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> ታግዷል</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{ኩኪዎች ታግደዋል}=1{ኩኪዎች ታግደዋል፣ 1 አልተካተተም}one{ኩኪዎች ታግደዋል፣ {COUNT} አልተካተቱም}other{ኩኪዎች ታግደዋል፣ {COUNT} አልተካተቱም}}</translation>
 <translation id="2121825465123208577">መጠን ቀይር</translation>
 <translation id="2122305276694332719">ወደ ተደበቀ አውታረ መረብ በራስ ሰር ማገናኘት ሌሎች የእርስዎን መሣሪያ እና አንዳንድ የአውታረ መረብ ቅንብሮችን እንዲመለከቱ ይፈቅድላቸዋል እንዲሁም የሚመከር አይደለም።</translation>
 <translation id="2123766928840368256">የተለየ ፋይል ይምረጡ</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">ካርትን ያርትዑ</translation>
 <translation id="2154710561487035718">URL ቅዳ</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ይመስላል</translation>
-<translation id="2156283799932971644">አንዳንድ የሥርዓት መረጃ እና የገጽ ይዘትን ወደ Google በመላክ የጥንቃቄ አሰሳን ለማሻሻል እንዲቻል ማገዝ ይችላሉ።</translation>
 <translation id="2156294658807918600">አገልግሎት ሠራተኛ፦ <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ተጨማሪ ባሕሪያትን ለማግኘት፣ ከዚህ Chromebook ጋር እንዲሠራ የተዘጋጀውን የ Dell ተከላ ጣቢያ ይጠቀሙ።</translation>
 <translation id="215753907730220065">ከሙሉ ገጽ ዕይታ ውጣ</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;መተግበሪያን ዳግም ጫን</translation>
 <translation id="2327492829706409234">መተግበሪያን አንቃ</translation>
 <translation id="2329597144923131178">የእርስዎን ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት ወደ መለያ ይግቡ።</translation>
-<translation id="2330607597130465898">ጥበቃ የለም</translation>
 <translation id="2332131598580221120">በመደብር ውስጥ ይመልከቱ</translation>
 <translation id="2332192922827071008">ምርጫዎችን ክፈት</translation>
 <translation id="2332742915001411729">ወደ ነባሪ ዳግም አስጀምር</translation>
@@ -1870,7 +1869,6 @@
 <translation id="3492788708641132712">ስምረት እየሰራ አይደለም። እንደገና ለመግባት ይሞክሩ።</translation>
 <translation id="3493486281776271508">የበየነ መረብ ግንኙነት ያስፈልጋል</translation>
 <translation id="3493881266323043047">ተገቢነት</translation>
-<translation id="3494155060718700400">እርስዎን አደገኛ ከሆኑ የድር ጣቢያዎች፣ ማውረዶች እና ቅጥያዎች አይጠብቀዎትም (የማይመከር)። አሁንም የሚገኝ በሆነበት ጊዜ እንደ Gmail እና ፍለጋ ባሉ ሌሎች የGoogle አገልግሎቶች ላይ የጥንቃቄ አሰሳ ጥበቃን ያገኛሉ።</translation>
 <translation id="3494769164076977169">አንድ ጣቢያ ከመጀመሪያው ፋይል በኋላ በራስ-ሰር ፋይሎችን ለማውረድ ሲሞክር ይጠይቅ (የሚመከር)</translation>
 <translation id="3495660573538963482">የGoogle ረዳት ቅንብሮች</translation>
 <translation id="3496213124478423963">አሳንስ</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">የሚከተለሉት ጣቢያዎች በዚህ ገጽ ላይ አካባቢዎን ከመከታተል ታግደዋል፦</translation>
 <translation id="49226369361073053">{0,plural, =0{አሁን መሣሪያን ያዘምኑ}=1{በ1 ሰከንድ ውስጥ መሣሪያን ያዘምኑ}one{በ# ሰከንዶች ውስጥ መሣሪያን ያዘምኑ}other{በ# ሰከንዶች ውስጥ መሣሪያን ያዘምኑ}}</translation>
 <translation id="492299503953721473">የAndroid መተግበሪያዎችን አስወግድ</translation>
-<translation id="4923279099980110923">አዎ፣ ማገዝ እፈልጋለሁ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">የእርስዎ ወደቦች እዚህ ይታያሉ</translation>
 <translation id="4925542575807923399">የዚህ መለያ አስተዳዳሪ በአንድ ባለብዙ መለያ መግቢያ ክፍለ-ጊዜ ላይ ይህ መለያ መጀምሪያ እንዲገባ ይፈልጋል።</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">የግል ቁልፍ ፋይል ይምረጡ።</translation>
 <translation id="5363109466694494651">Powerwash አድርግ እና አድህር</translation>
 <translation id="5365881113273618889">የመረጡት አቃፊ ሊጎዱ የሚችሉ ፋይሎች አሉት። እርግጠኛ ነዎት ዘላቂ የዚህ አቃፊ የመጻፍ መዳረሻ ለ«<ph name="APP_NAME" />» መስጠት ይፈልጋሉ?</translation>
-<translation id="5367091008316207019">ፋይል በማንበብ ላይ..</translation>
 <translation id="5368720394188453070">የእርስዎ ስልክ ተቆልፏል። ለመግባት ያስከፍቱት።</translation>
 <translation id="5368779022775404937">ወደ <ph name="REALM" /> ይግቡ</translation>
 <translation id="5369491905435686894">የመዳፊት ማፍጠኛን አንቃ</translation>
@@ -5963,7 +5959,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ቀን በፊት ንቁ ነበር</translation>
 <translation id="8986362086234534611">እርሳ</translation>
 <translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation>
-<translation id="8986651757229422279">ይህ በ<ph name="ORIGIN_NAME" /> እና የተጫነው መተግበሪያ የተከማቹ ሁሉንም ውሂብ እና ኩኪዎች ያጠፋል።</translation>
 <translation id="8987927404178983737">ወር</translation>
 <translation id="8991520179165052608">ጣቢያ የእርስዎን ማይክሮፎን መጠቀም ይችላል</translation>
 <translation id="899403249577094719">የNetscape ሰርቲፊኬት መሰረት</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 35dd8a8..bb3d8a2e 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">فتح في <ph name="APP" /></translation>
 <translation id="2120297377148151361">النشاط والتفاعلات</translation>
 <translation id="2120639962942052471">تم حظر إذن <ph name="PERMISSION" />.</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{تم حظر ملفات تعريف الارتباط.}=1{تم حظر ملفات تعريف الارتباط باستثناء ملف واحد.}two{تم حظر ملفات تعريف الارتباط باستثناء ملفَّين ({COUNT}).}few{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفات.}many{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفًا.}other{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملف.}}</translation>
 <translation id="2121825465123208577">تغيير الحجم</translation>
 <translation id="2122305276694332719">يسمح الاتصال تلقائيًا بشبكة مخفية للمستخدمين الآخرين رؤية جهازك وبعض إعدادات الشبكة، ولا ننصح بذلك.</translation>
 <translation id="2123766928840368256">اختيار ملف آخر</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">تعديل البطاقة</translation>
 <translation id="2154710561487035718">‏نسخ عنوان URL</translation>
 <translation id="2155772377859296191">‏تبدو كـ <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">‏يمكنك المساعدة في تحسين التصفُّح الآمن عن طريق إرسال بعض معلومات النظام ومحتوى الصفحة إلى Google.</translation>
 <translation id="2156294658807918600">مشغّل الخدمات: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">‏للحصول على ميزات إضافية، يُرجى استخدام محطة إرساء Dell المصمّمة للعمل مع جهاز Chromebook هذا.</translation>
 <translation id="215753907730220065">إنهاء وضع ملء الشاشة</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;إعادة تحميل التطبيق</translation>
 <translation id="2327492829706409234">تفعيل التطبيق</translation>
 <translation id="2329597144923131178">سجّل الدخول للحصول على الإشارات المرجعية، والسجل، وكلمات المرور، والإعدادات الأخرى على كل أجهزتك.</translation>
-<translation id="2330607597130465898">بلا حماية</translation>
 <translation id="2332131598580221120">عرض في المتجر</translation>
 <translation id="2332192922827071008">فتح الإعدادات المفضَّلة</translation>
 <translation id="2332742915001411729">إعادة الضبط على الإعداد التلقائي</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">المزامنة لا تعمل. حاول تسجيل الدخول مرة أخرى.</translation>
 <translation id="3493486281776271508">الاتصال بالإنترنت مطلوب</translation>
 <translation id="3493881266323043047">الصلاحية</translation>
-<translation id="3494155060718700400">‏لا يوفّر لك هذا الوضع حماية من الإضافات أو عمليات التنزيل أو المواقع الإلكترونية الضارة (غير مُستحسَن). وستظل تستفيد من ميزة "التصفُّح الآمن" متى أمكن في خدمات Google الأخرى، مثل Gmail و"بحث Google".</translation>
 <translation id="3494769164076977169">طلب الإذن عند محاولة أحد المواقع تنزيل الملفات تلقائيًا بعد الملف الأول (مستحسن)</translation>
 <translation id="3495660573538963482">‏إعدادات مساعد Google</translation>
 <translation id="3496213124478423963">تصغير</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">تم حظر تتبع المواقع التالية لموقعك في هذه الصفحة:</translation>
 <translation id="49226369361073053">{0,plural, =0{تحديث الجهاز الآن}=1{تحديث الجهاز خلال ثانية واحدة}two{تحديث الجهاز خلال ثانيتَين}few{تحديث الجهاز خلال # ثوانٍ}many{تحديث الجهاز خلال # ثانية}other{تحديث الجهاز خلال # ثانية}}</translation>
 <translation id="492299503953721473">‏إزالة تطبيقات Android</translation>
-<translation id="4923279099980110923">نعم، أريد تقديم المساعدة</translation>
 <translation id="4924352752174756392">12 ضعفًا</translation>
 <translation id="4925320384394644410">ستظهر المنافذ هنا.</translation>
 <translation id="4925542575807923399">يحتاج مشرف هذا الحساب أن يكون هذا الحساب الأول في تسجيل الدخول إلى جلسة دخول متعدد.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">حدد ملف المفتاح الخاص.</translation>
 <translation id="5363109466694494651">إجراء المحو الكامل والعودة</translation>
 <translation id="5365881113273618889">يتضمَّن المجلَّد الذي اخترته ملفات حساسة. هل تريد بالتأكيد منح "<ph name="APP_NAME" />" إمكانية الوصول الدائم للكتابة في هذا المجلَّد؟</translation>
-<translation id="5367091008316207019">جارٍ قراءة الملف..</translation>
 <translation id="5368720394188453070">هاتفك مغلق. ألغ قفله للدخول.</translation>
 <translation id="5368779022775404937">تسجيل الدخول إلى <ph name="REALM" /></translation>
 <translation id="5369491905435686894">تفعيل تسريع الماوس</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">نشط قبل <ph name="DEVICE_LAST_ACTIVATED_TIME" /> يوم</translation>
 <translation id="8986362086234534611">حذف</translation>
 <translation id="8986494364107987395">‏إرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation>
-<translation id="8986651757229422279">سيؤدي هذا إلى محو جميع البيانات وملفات تعريف الارتباط المُخزّنة من خلال<ph name="ORIGIN_NAME" /> وتطبيقها المثبّت.</translation>
 <translation id="8987927404178983737">شهر</translation>
 <translation id="8991520179165052608">يمكن لموقع الويب استخدام الميكروفون.</translation>
 <translation id="899403249577094719">‏عنوان URL الأساسي لشهادة Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 2ddd3e5d..f26b09891 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">কাৰ্ড সম্পাদনা কৰক</translation>
 <translation id="2154710561487035718">URL প্ৰতিলিপি কৰক</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> যেন লাগিছে</translation>
-<translation id="2156283799932971644">আপুনি Googleলৈ ছিষ্টেমৰ কিছু তথ্য আৰু পৃষ্ঠাৰ সমল পঠিয়াই সুৰক্ষিত ব্ৰাউজিং উন্নত কৰাত সহায় কৰিব পাৰে।</translation>
 <translation id="2156294658807918600">সেৱা কৰ্মী: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">অতিৰিক্ত সুবিধাসমূহ পাবলৈ এই Chromebookৰ সৈতে কাম কৰিবলৈ ডিজাইন কৰা এটা Dell ড’কিং ষ্টেচন ব্যৱহাৰ কৰক।</translation>
 <translation id="215753907730220065">পূৰ্ণ স্ক্ৰীণৰ পৰা বাহিৰ হওক</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">এপ্ &amp;পুনৰ ল’ড কৰক</translation>
 <translation id="2327492829706409234">এপ্‌ সক্ষম কৰক</translation>
 <translation id="2329597144923131178">আপোনাৰ সকলো ডিভাইচত বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু অন্য ছেটিংসমূহ পাবৰ বাবে ছাইন ইন কৰক।</translation>
-<translation id="2330607597130465898">কোনো সুৰক্ষা নাই</translation>
 <translation id="2332131598580221120">ষ্ট’ৰত চাওক</translation>
 <translation id="2332192922827071008">অগ্ৰাধিকাৰ খোলক</translation>
 <translation id="2332742915001411729">ডিফ’ল্টলৈ ৰিছেট কৰক</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">ছিংক কৰা সুবিধাটোৱে কাম কৰা নাই। পুনৰ ছাইন ইন কৰি চেষ্টা কৰক।</translation>
 <translation id="3493486281776271508">ইণ্টাৰনেট সংযোগৰ আৱশ্যক</translation>
 <translation id="3493881266323043047">ব্যৱহাৰৰ সময়সীমা</translation>
-<translation id="3494155060718700400">আপোনাক বিপজ্জনক ৱেবছাইটসমূহ, ডাউনল'ডসমূহ আৰু এক্সটেনশ্বনসমূহৰ পৰা সুৰক্ষা প্ৰদান নকৰে (চুপাৰিছ কৰা নহয়)। আপুনি সুৰক্ষিত ব্ৰাউজিঙৰ সুৰক্ষাৰ সুবিধাটো উপলব্ধ হোৱা Gmail আৰু Searchৰ দৰে অন্য Google সেৱাসমূহত তথাপি এই সুবিধাটো পাব।</translation>
 <translation id="3494769164076977169">কোনো ছাইটে প্ৰথম ফাইলটো ডাউনল’ড হোৱাৰ পাছত স্বয়ংক্ৰিয়ভাৱে ফাইলসমূহ ডাউনল’ড কৰিব বিচাৰিলে অনুমতি লওক(চুপাৰিছ কৰা)</translation>
 <translation id="3495660573538963482">Google Assistantৰ ছেটিংসমূহ</translation>
 <translation id="3496213124478423963">সংকোচন কৰক</translation>
@@ -2916,7 +2913,6 @@
 <translation id="4920887663447894854">এই পৃষ্ঠাটোত আপোনাৰ অৱস্থান ট্ৰেক কৰাৰপৰা এই ছাইটবোৰক অৱৰোধ কৰা হৈছে:</translation>
 <translation id="49226369361073053">{0,plural, =0{এতিয়াই ডিভাইচটো আপডে’ট কৰক}=1{১ ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation>
 <translation id="492299503953721473">Android এপ্‌বোৰ আঁতৰাওক</translation>
-<translation id="4923279099980110923">হয়, মই সহায় কৰিব বিচাৰোঁ</translation>
 <translation id="4924352752174756392">১২x</translation>
 <translation id="4925320384394644410">আপোনাৰ প’র্টসমূহ ইয়াত দেখা যাব</translation>
 <translation id="4925542575807923399">এই একাউণ্টৰ প্ৰশাসকে এই একাউণ্টটো একাধিকবাৰ ছাইন-ইন কৰা কোনো ছেশ্বনত প্ৰথমে ছাইন ইন কৰাটো বিচাৰে।</translation>
@@ -3230,7 +3226,6 @@
 <translation id="5362741141255528695">চাবিৰ ব্যক্তিগত ফাইল বাছনি কৰক।</translation>
 <translation id="5363109466694494651">পাৱাৰৱাশ্ব কৰি পূৰ্বাৱস্থালৈ নিয়ক</translation>
 <translation id="5365881113273618889">আপুনি বাছনি কৰা ফ’ল্ডাৰটোত সংবেদনশীল ফাইল আছে। আপুনি "<ph name="APP_NAME" />$1"ক এই ফ’ল্ডাৰটোত লিখাৰ স্থায়ীভাৱে অনুমতি দিব বিচাৰে বুলি নিশ্চিতনে?</translation>
-<translation id="5367091008316207019">ফাইলটো পঢ়ি থকা হৈছে..</translation>
 <translation id="5368720394188453070">আপোনাৰ ফ’নটো লক হ’ল। এণ্টাৰ কৰিবলৈ এইটো আনলক কৰক।</translation>
 <translation id="5368779022775404937"><ph name="REALM" />লৈ ছাইন ইন কৰক</translation>
 <translation id="5369491905435686894">মাউছৰ এক্সিলাৰেশ্বন সক্ষম কৰক</translation>
@@ -5946,7 +5941,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> দিনৰ পূর্বে সক্ৰিয় আছিল</translation>
 <translation id="8986362086234534611">পাহৰক</translation>
 <translation id="8986494364107987395">স্বয়ংক্ৰিয়ভাৱে Googleলৈ ব্যৱহাৰৰ পৰিসংখ্যা আৰু ক্ৰেশ্ব ৰিপ’ৰ্ট পঠিয়াওক</translation>
-<translation id="8986651757229422279">এইটোৱে <ph name="ORIGIN_NAME" /> আৰু ইয়াৰ ইনষ্টল হৈ থকা এপ্‌টোৱে ষ্ট’ৰ কৰা সকলো ডেটা আৰু কুকি মচিব।</translation>
 <translation id="8987927404178983737">মাহ</translation>
 <translation id="8991520179165052608">ছাইটে আপোনাৰ ডিভাইচৰ মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰিব পাৰে</translation>
 <translation id="899403249577094719">Netscape প্ৰমাণপত্ৰ ভিত্তিক URL</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 01f3572..3f6d88c 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -822,6 +822,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> tətbiqində açın</translation>
 <translation id="2120297377148151361">Fəaliyyət və əlaqələr</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> bloklanıb</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Kukilər bloklanıb}=1{Kukilər bloklanıb, 1 istisna var}other{Kukilər bloklanıb, {COUNT} istisna var}}</translation>
 <translation id="2121825465123208577">Ölçüsünü dəyişin</translation>
 <translation id="2122305276694332719">Gizlədilmiş şəbəkəyə avtomatik qoşulduqda başqaları cihaz və şəbəkə ayarlarınızı görəcək. Bu, tövsiyə edilmir.</translation>
 <translation id="2123766928840368256">Başqa fayl seçin</translation>
@@ -855,7 +856,6 @@
 <translation id="2154484045852737596">Kartı redaktə edin</translation>
 <translation id="2154710561487035718">Linki Kopyalayın</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Bəzi sistem məlumatı və səhifə kontentini Google'a göndərməklə Güvənli Axtarışı təkmilləşdirin.</translation>
 <translation id="2156294658807918600">Xidmət İşçisi: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Əlavə funksiyalar əldə etmək məqsədilə bu Chromebook üçün hazırlanmış Dell dok stansiyasını işlədin.</translation>
 <translation id="215753907730220065">Tam Ekrandan Çıxın</translation>
@@ -987,7 +987,6 @@
 <translation id="2326931316514688470">Tətbiqi yenidən yükləyin</translation>
 <translation id="2327492829706409234">Tətbiqi aktiv edin</translation>
 <translation id="2329597144923131178">Bütün cihazlarınızda əlfəcin, tarixçə, parol və digər ayarları əldə etmək üçün daxil olun.</translation>
-<translation id="2330607597130465898">Qoruma yoxdur</translation>
 <translation id="2332131598580221120">Marketdə baxın</translation>
 <translation id="2332192922827071008">Tərcihləri Açın</translation>
 <translation id="2332742915001411729">Defolta sıfırlayın</translation>
@@ -1866,7 +1865,6 @@
 <translation id="3492788708641132712">Sinxronizasiya işləmir. Yenidən daxil olmağa çalışın</translation>
 <translation id="3493486281776271508">İnternet bağlantısı tələb edilir</translation>
 <translation id="3493881266323043047">Doğrulama</translation>
-<translation id="3494155060718700400">Sizi təhlükəli veb sayt, endirmə və ya artırmalardan qorumur (tövsiyə edilmir). Hələ də Gmail və Axtarış kimi digər Google xidmətlərində mümkün olduğu qədər Təhlükəsiz Baxış qoruması əldə edəcəksiniz.</translation>
 <translation id="3494769164076977169">İlk fayldan sonra sayt faylları avtomatik endirməyə çalışanda icazə alsın (tövsiyə olunur)</translation>
 <translation id="3495660573538963482">Google Assistent ayarları</translation>
 <translation id="3496213124478423963">Kiçildin</translation>
@@ -2915,7 +2913,6 @@
 <translation id="4920887663447894854">Bu saytlar məkanınızı bu səhifədə izləməkdən məhrum olublar:</translation>
 <translation id="49226369361073053">{0,plural, =0{Cihazı indi güncəlləyin}=1{Cihazı 1 saniyə ərzində güncəlləyin}other{Cihazı # saniyə ərzində güncəlləyin}}</translation>
 <translation id="492299503953721473">Android tətbiqlərini silin</translation>
-<translation id="4923279099980110923">Bəli, kömək etmək istəyirəm</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portlarınız burada görünəcək</translation>
 <translation id="4925542575807923399">Bu hesabın administratoru istəyir ki, çoxsaylı hesab girişi sessiyalarında bu hesaba giriş birinci edilsin.</translation>
@@ -3229,7 +3226,6 @@
 <translation id="5362741141255528695">Xüsusi açar faylını seçin.</translation>
 <translation id="5363109466694494651">Fabrik sıfırlaması edin və geri qayarın</translation>
 <translation id="5365881113273618889">Seçdiyiniz qovluqda həssas fayllar var. "<ph name="APP_NAME" />" tətbiqi üçün bu qovluğa həmişəlik yazı girişi icazə vermək istədiyinizə əminsiniz?</translation>
-<translation id="5367091008316207019">Fayl oxunur..</translation>
 <translation id="5368720394188453070">Telefonunuz kilidlənib. Daxil etmək üçün kiliddən çıxarılıb.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> domeninə daxil olun</translation>
 <translation id="5369491905435686894">Maus sürətini aktiv edin</translation>
@@ -5949,7 +5945,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> gün öncə aktiv olub</translation>
 <translation id="8986362086234534611">Unudun</translation>
 <translation id="8986494364107987395">Google'a istifadəçi statistikalarını və qəza raportlarını avtomatik göndərin</translation>
-<translation id="8986651757229422279">Bununla <ph name="ORIGIN_NAME" /> tərəfindən saxlanılan bütün data, kukilər və oradakı quraşdırılmış tətbiq silinəcək.</translation>
 <translation id="8987927404178983737">Ay</translation>
 <translation id="8991520179165052608">Sayt mikrofonu paylaşa bilər</translation>
 <translation id="899403249577094719">Netscape Sertifikat Base URL</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index d566476..ed3e1d6 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Адкрыць у праграме <ph name="APP" /></translation>
 <translation id="2120297377148151361">Дзеянні і ўзаемадзеянні</translation>
 <translation id="2120639962942052471">Блакіроўка (<ph name="PERMISSION" />)</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Файлы cookie заблакіраваны}=1{Файлы cookie заблакіраваны, 1 выключэнне}one{Файлы cookie заблакіраваны, {COUNT} выключэнне}few{Файлы cookie заблакіраваны, {COUNT} выключэнні}many{Файлы cookie заблакіраваны, {COUNT} выключэнняў}other{Файлы cookie заблакіраваны, {COUNT} выключэння}}</translation>
 <translation id="2121825465123208577">Змяніць памер</translation>
 <translation id="2122305276694332719">Аўтаматычнае падключэнне да схаванай сеткі дазваляе іншым бачыць вашу прыладу і некаторыя налады сеткі, а таму не рэкамендуецца.</translation>
 <translation id="2123766928840368256">Выберыце іншы файл</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Рэдагаваць картку</translation>
 <translation id="2154710561487035718">Скапіраваць URL-адрас</translation>
 <translation id="2155772377859296191">Здаецца, <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Вы можаце дапамагчы палепшыць "Бяспечны прагляд", адпраўляючы ў Google пэўную сістэмную інфармацыю і змесціва старонак.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Каб карыстацца дадатковымі функцыямі, знайдзіце док-станцыю Dell, сумяшчальную з гэтым Chromebook.</translation>
 <translation id="215753907730220065">Выключыць поўнаэкранны рэжым</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Перазагрузіць праграму</translation>
 <translation id="2327492829706409234">Уключыць праграму</translation>
 <translation id="2329597144923131178">Каб закладкі, гісторыя, паролі і іншыя налады былі даступнымі на ўсіх вашых прыладах, увайдзіце ў сістэму.</translation>
-<translation id="2330607597130465898">Без абароны</translation>
 <translation id="2332131598580221120">Прагледзець у краме</translation>
 <translation id="2332192922827071008">Адкрыць параметры</translation>
 <translation id="2332742915001411729">Скінуць налады да стандартных значэнняў</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Сінхранізацыя не працуе. Увайдзіце яшчэ раз.</translation>
 <translation id="3493486281776271508">Патрабуецца падключэнне да інтэрнэту</translation>
 <translation id="3493881266323043047">Тэрмін дзеяння</translation>
-<translation id="3494155060718700400">Не абараняе ад небяспечных вэб-сайтаў, спамповак і пашырэнняў (не рэкамендуецца). Вы застаняцеся пад абаронай Бяспечнага прагляду пры карыстанні іншымі сэрвісамі Google, у якіх ён даступны, такімі як Gmail і Пошук.</translation>
 <translation id="3494769164076977169">Пытацца, калі сайт спрабуе пасля першага файла аўтаматычна спампаваць яшчэ файлы (рэкамендуецца)</translation>
 <translation id="3495660573538963482">Налады Памочніка Google</translation>
 <translation id="3496213124478423963">Паменшыць маштаб</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Наступным сайтам быў заблакіраваны доступ да адсочвання вашага месцазнаходжання праз гэту старонку:</translation>
 <translation id="49226369361073053">{0,plural, =0{Перазапусціце прыладу зараз}=1{Перазапусціце прыладу на працягу 1 секунды}one{Перазапусціце прыладу на працягу # секунды}few{Перазапусціце прыладу на працягу # секунд}many{Перазапусціце прыладу на працягу # секунд}other{Перазапусціце прыладу на працягу # секунды}}</translation>
 <translation id="492299503953721473">Выдаліць праграмы Android</translation>
-<translation id="4923279099980110923">Так, я хачу дапамагчы</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Вашы парты з'явяцца тут</translation>
 <translation id="4925542575807923399">Адміністратар гэтага ўліковага запісу патрабуе, каб у сеансе з уваходам у некалькі ўліковых запісаў гэты ўліковы запіс быў першым.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Выберыце файл закрытага ключа.</translation>
 <translation id="5363109466694494651">Скінуць налады функцыяй Powerwash і вярнуцца да старой версіі</translation>
 <translation id="5365881113273618889">Выбраная папка змяшчае канфідэнцыяльныя файлы. Даць праграме "<ph name="APP_NAME" />" пастаянны доступ на запіс у гэту папку?</translation>
-<translation id="5367091008316207019">Ідзе чытанне файла…</translation>
 <translation id="5368720394188453070">Ваш тэлефон заблакіраваны. Каб увайсці, разблакіруйце яго.</translation>
 <translation id="5368779022775404937">Уваход у дамен <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Уключыць паскарэнне мышы</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">Апошнія дзеянні: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> сут таму</translation>
 <translation id="8986362086234534611">Забыць</translation>
 <translation id="8986494364107987395">Аўтаматычна адпраўляць у Google статыстыку выкарыстання і справаздачы аб збоях</translation>
-<translation id="8986651757229422279">Будуць выдалены файлы cookie і даныя, захаваныя сайтам <ph name="ORIGIN_NAME" />, а таксама ўсталяваная ім праграма.</translation>
 <translation id="8987927404178983737">Месяц</translation>
 <translation id="8991520179165052608">Сайт можа выкарыстоўваць ваш мікрафон</translation>
 <translation id="899403249577094719">Базавы URL-адрас сертыфіката Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index afe42ff..c5f09f5 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">Редактиране на картата</translation>
 <translation id="2154710561487035718">Копиране на URL адреса</translation>
 <translation id="2155772377859296191">Разделителната способност е <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Можете да помогнете за подобряването на Безопасно сърфиране, като ни изпращате системна информация и част от съдържанието на страниците.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">За да получите още функции, използвайте докинг станция от Dell, предназначена да работи с този Chromebook.</translation>
 <translation id="215753907730220065">Изход от цял екран</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Презареждане на приложението</translation>
 <translation id="2327492829706409234">Активиране на приложението</translation>
 <translation id="2329597144923131178">Влезте в профила си и получете своите отметки, история, пароли и др. настройки на всички у-ва.</translation>
-<translation id="2330607597130465898">Без защита</translation>
 <translation id="2332131598580221120">Преглед в магазина</translation>
 <translation id="2332192922827071008">Отваряне на предпочитанията</translation>
 <translation id="2332742915001411729">Възстановяване на настройката по подразбиране</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">Синхронизирането не работи. Опитайте отново да влезете в профила си.</translation>
 <translation id="3493486281776271508">Необходима е връзка с интернет</translation>
 <translation id="3493881266323043047">Валидност</translation>
-<translation id="3494155060718700400">Няма защита срещу опасни уебсайтове, изтеглени файлове и разширения (не се препоръчва). Пак ще получавате защита посредством Безопасно сърфиране в други услуги на Google, където функцията се поддържа – например Gmail и Търсене.</translation>
 <translation id="3494769164076977169">Извеждане на запитване, когато сайт опита да изтегли автоматично повече от един файл (препоръчително)</translation>
 <translation id="3495660573538963482">Настройки на Google Асистент</translation>
 <translation id="3496213124478423963">Намаляване</translation>
@@ -2922,7 +2919,6 @@
 <translation id="4920887663447894854">Следните сайтове бяха блокирани от проследяване на местоположението ви на тази страница:</translation>
 <translation id="49226369361073053">{0,plural, =0{Актуализирайте устройството сега}=1{Актуализирайте устройството в рамките на 1 секунда}other{Актуализирайте устройството в рамките на # секунди}}</translation>
 <translation id="492299503953721473">Премахване на приложенията за Android</translation>
-<translation id="4923279099980110923">Да, искам да помогна</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Портовете ще се покажат тук</translation>
 <translation id="4925542575807923399">Този администратор изисква профилът му да е първият, в който да се влезе, при сесия с централизиран вход.</translation>
@@ -3236,7 +3232,6 @@
 <translation id="5362741141255528695">Изберете файла с личен ключ.</translation>
 <translation id="5363109466694494651">Powerwash и възстановяване</translation>
 <translation id="5365881113273618889">Избраната от вас папка съдържа поверителни файлове. Наистина ли искате да предоставите на <ph name="APP_NAME" /> постоянен достъп за записване в тази папка?</translation>
-<translation id="5367091008316207019">Файлът се чете...</translation>
 <translation id="5368720394188453070">Телефонът ви е заключен. Отключете го, за да влезете.</translation>
 <translation id="5368779022775404937">Влизане в домейна <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Активиране на ускоряването на мишката</translation>
@@ -5301,7 +5296,7 @@
 <translation id="8118488170956489476"><ph name="BEGIN_LINK" />Браузърът се управлява<ph name="END_LINK" /> от организацията ви</translation>
 <translation id="8118860139461251237">Управление на изтеглянията ви</translation>
 <translation id="811942868379260654"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /> и др.</translation>
-<translation id="8120715633374652536">Мястото в хранилището на устройството ви е малко. За използването на Plugin VM e необходимo свободно място от поне <ph name="MINIMUM_SPACE" />. Препоръчва се да разполагате с над <ph name="RECOMMENDED_SPACE" />. За да освободите място, изтрийте файлове от хранилището на устройството.</translation>
+<translation id="8120715633374652536">Мястото в хранилището на устройството ви е малко. За използването на Plugin VM e необходимо свободно място от поне <ph name="MINIMUM_SPACE" />. Препоръчва се да разполагате с над <ph name="RECOMMENDED_SPACE" />. За да освободите място, изтрийте файлове от хранилището на устройството.</translation>
 <translation id="8123590694679414600">Данните бяха шифровани с пропуска ви за синхронизиране на
 <ph name="TIME" />. Това не включва начините на плащане и адресите от Google Pay.</translation>
 <translation id="81238879832906896">Жълто-бяло цвете</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Активно преди <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ден</translation>
 <translation id="8986362086234534611">Забравяне</translation>
 <translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation>
-<translation id="8986651757229422279">Всички данни и „бисквитки“, съхранявани от <ph name="ORIGIN_NAME" />, и инсталираното приложение ще бъдат изчистени.</translation>
 <translation id="8987927404178983737">Месец</translation>
 <translation id="8991520179165052608">Сайтът може да използва микрофона ви</translation>
 <translation id="899403249577094719">Основен URL адрес на сертификат на Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index aaf9ef2..22fbcd39 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -859,7 +859,6 @@
 <translation id="2154484045852737596">কার্ড সম্পাদনা করুন</translation>
 <translation id="2154710561487035718">ইউআরএল কপি করুন</translation>
 <translation id="2155772377859296191">মনে হচ্ছে <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">সিস্টেমের কিছু তথ্য এবং পৃষ্ঠার কন্টেন্ট Google-কে পাঠানোর মাধ্যমে আপনি নিরাপদ ব্রাউজিং আরও ভাল করতে পারেন।</translation>
 <translation id="2156294658807918600">পরিষেবা কর্মী: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">অতিরিক্ত ফিচার পেতে, এই Chromebook-এর সাথে মানানসই একটি Dell-এর ডকিং স্টেশন ব্যবহার করুন।</translation>
 <translation id="215753907730220065">পূর্ণ স্ক্রীণ বন্ধ করুন</translation>
@@ -991,7 +990,6 @@
 <translation id="2326931316514688470">&amp;অ্যাপ্লিকেশান আবার লোড করুন</translation>
 <translation id="2327492829706409234">অ্যাপ্লিকেশন সক্ষম করুন</translation>
 <translation id="2329597144923131178">আপনার সকল ডিভাইসে আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংস পেতে সাইন-ইন করুন।</translation>
-<translation id="2330607597130465898">কোনও সুরক্ষা নেই</translation>
 <translation id="2332131598580221120">দোকানে দেখুন</translation>
 <translation id="2332192922827071008">অভিরুচি খুলুন</translation>
 <translation id="2332742915001411729">ডিফল্টে রিসেট করুন</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">সিঙ্ক কাজ করছে না। আবার সাইন ইন করার চেষ্টা করুন।</translation>
 <translation id="3493486281776271508">ইন্টারনেট কানেকশন প্রয়োজন</translation>
 <translation id="3493881266323043047">বৈধতা</translation>
-<translation id="3494155060718700400">আপনার ডিভাইসকে ক্ষতিকর ওয়েবসাইট, ডাউনলোড এবং এক্সটেনশন থেকে সুরক্ষিত রাখে না (সাজেস্ট করা হয়নি)। তবে আপনি Gmail এবং Search-এর মতো অন্যান্য Google পরিষেবায়, যেখানে উপলভ্য সেখানে Safe Browsing-এর সুরক্ষা পাবেন।</translation>
 <translation id="3494769164076977169">যখন একটি সাইট প্রথম ফাইলের পর অটোমেটিক ফাইলগুলি ডাউনলোড করতে চেষ্টা করে তখন জিজ্ঞাসা করবে (প্রস্তাবিত)</translation>
 <translation id="3495660573538963482">Google অ্যাসিস্ট্যান্ট সেটিংস</translation>
 <translation id="3496213124478423963">জুম কমান</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">এই পৃষ্ঠাতে আপনার লোকেশন নির্ধারণ করার জন্য নিম্নলিখিত সাইটগুলি অবরুদ্ধ করা হয়েছে:</translation>
 <translation id="49226369361073053">{0,plural, =0{এখনই ডিভাইস আপডেট করুন}=1{১ সেকেন্ডের মধ্যে ডিভাইস আপডেট করুন}one{# সেকেন্ডের মধ্যে ডিভাইস আপডেট করুন}other{# সেকেন্ডের মধ্যে ডিভাইস আপডেট করুন}}</translation>
 <translation id="492299503953721473">Android অ্যাপ্লিকেশানগুলি সরান</translation>
-<translation id="4923279099980110923">হ্যাঁ, আমি সাহায্য করতে চাই</translation>
 <translation id="4924352752174756392">১২x</translation>
 <translation id="4925320384394644410">আপনার পোর্টগুলি এখানে দেখা যাবে</translation>
 <translation id="4925542575807923399">এই অ্যাকাউন্টের অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টটিকে একাধিক সাইন-ইন সেশনের প্রথম সাইন-ইন করে থাকা অ্যাকাউন্ট হিসেবে রাখতে চায়৷</translation>
@@ -3234,7 +3230,6 @@
 <translation id="5362741141255528695">ব্যক্তিগত কী ফাইল নির্বাচন করুন৷</translation>
 <translation id="5363109466694494651">পাওয়ারওয়াশ এবং প্রত্যাবর্তন করুন</translation>
 <translation id="5365881113273618889">আপনি যে ফোল্ডার বেছে নিয়েছেন সেটিতে সংবেদনশীল ফাইল আছে। আপনি কি "<ph name="APP_NAME" />"-কে স্থায়ীভাবে লেখার অ্যাক্সেস দেওয়ার ব্যাপারে নিশ্চিত?</translation>
-<translation id="5367091008316207019">ফাইল পড়া হচ্ছে..</translation>
 <translation id="5368720394188453070">আপনার ফোন লক করা আছে৷ লিখতে আনলক করুন৷</translation>
 <translation id="5368779022775404937"><ph name="REALM" />-এ সাইন-ইন করুন</translation>
 <translation id="5369491905435686894">মাউস অ্যাক্সিলারেশন বিকল্পটি চালু করুন</translation>
@@ -5960,7 +5955,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> দিন আগে ব্যবহার করা হয়েছে</translation>
 <translation id="8986362086234534611">ভুলে যান</translation>
 <translation id="8986494364107987395">ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি স্বয়ংক্রিয়ভাবে Google-এ পাঠান</translation>
-<translation id="8986651757229422279">এটি <ph name="ORIGIN_NAME" />-এর স্টোর করা সমস্ত ডেটা ও কুকি এবং ইনস্টল করা অ্যাপকে মুছে দেবে।</translation>
 <translation id="8987927404178983737">মাস</translation>
 <translation id="8991520179165052608">সাইটটি আপনার মাইক্রোফোন ব্যবহার করতে পারে</translation>
 <translation id="899403249577094719">Netscape সার্টিফিকেট বেস ইউআরএল</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 52ea5b0..9631040 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Uredi karticu</translation>
 <translation id="2154710561487035718">Kopiranje URL-a</translation>
 <translation id="2155772377859296191">Izgleda kao <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Možete nam pomoći da unaprijedimo Sigurno pregledanje slanjem nekih sistemskih informacija i sadržaja stranica Googleu.</translation>
 <translation id="2156294658807918600">Serviser: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Za dodatne funkcije, koristite Dell priključnu stanicu koja je namijenjena za rad s ovim Chromebookom.</translation>
 <translation id="215753907730220065">Izađi iz prikaza preko cijelog ekrana</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Ponovo učitaj aplikaciju</translation>
 <translation id="2327492829706409234">Omogući aplikaciju</translation>
 <translation id="2329597144923131178">Prijavite se da biste imali svoje oznake, povijest, zaporke i druge postavke na svim svojim uređajima.</translation>
-<translation id="2330607597130465898">Bez zaštite</translation>
 <translation id="2332131598580221120">Prikaži u trgovini</translation>
 <translation id="2332192922827071008">Otvori preference</translation>
 <translation id="2332742915001411729">Vrati na zadano</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sinhronizacija ne funkcionira. Pokušajte se ponovo prijaviti.</translation>
 <translation id="3493486281776271508">Potrebna je internetska veza</translation>
 <translation id="3493881266323043047">Valjanost</translation>
-<translation id="3494155060718700400">Ne štiti vas od opasnih web lokacija, preuzimanja i ekstenzija (nije preporučeno). I dalje ćete dobijati zaštitu Sigurno pregledanje, tamo gdje je dostupna, na drugim Googleovim uslugama kao što su Gmail i Pretraživanje.</translation>
 <translation id="3494769164076977169">Pitaj kada web lokacija pokuša automatski preuzeti fjalove nakon prvog fajla (preporučeno)</translation>
 <translation id="3495660573538963482">Postavke Google Asistenta</translation>
 <translation id="3496213124478423963">Umanji</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Sljedeće web-lokacije blokirane su u praćenju vaše lokacije na ovoj web-stranici:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ažuriraj uređaj sada}=1{Ažurirajte uređaj u roku od 1 sekunde}one{Ažurirajte uređaj u roku od # sekunde}few{Ažurirajte uređaj u roku od # sekunde}other{Ažurirajte uređaj u roku od # sekundi}}</translation>
 <translation id="492299503953721473">Ukloni Android aplikacije</translation>
-<translation id="4923279099980110923">Da, želim pomoći</translation>
 <translation id="4924352752174756392">12 x</translation>
 <translation id="4925320384394644410">Vaši priključci će se pojaviti ovdje</translation>
 <translation id="4925542575807923399">Administrator ovog računa traži da se prvi prijavi na račun u sesiji višestruke prijave.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Odaberite fajl privatnog ključa.</translation>
 <translation id="5363109466694494651">Powerwash i vraćanje</translation>
 <translation id="5365881113273618889">Folder koji ste odabrali sadrži osjetljive fajlove. Jeste li sigurni da aplikaciji "<ph name="APP_NAME" />" želite dodijeliti trajni pristup za pisanje u ovom folderu?</translation>
-<translation id="5367091008316207019">Čitanje fajla…</translation>
 <translation id="5368720394188453070">Vaš telefon je zaključan. Otključajte ga za ulazak.</translation>
 <translation id="5368779022775404937">Prijava na domenu <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzavanje miša</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Aktivan prije <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dana</translation>
 <translation id="8986362086234534611">Zaboravi</translation>
 <translation id="8986494364107987395">Automatski šaljite statistiku korištenja i izvještaje o padovima aplikacije Googleu</translation>
-<translation id="8986651757229422279">Ovim će se obrisati svi podaci i kolačići koje je pohranila web lokacija <ph name="ORIGIN_NAME" /> i njena instalirana aplikacija.</translation>
 <translation id="8987927404178983737">Mjesec</translation>
 <translation id="8991520179165052608">Web lokacija može koristiti vaš mikrofon</translation>
 <translation id="899403249577094719">Osnovni URL Netscape certifikata</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 59cde37..665b896 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Edita la targeta</translation>
 <translation id="2154710561487035718">Copia l'URL</translation>
 <translation id="2155772377859296191">Resolució: <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Per ajudar a millorar Navegació segura, envia a Google algunes dades del sistema i contingut de les pàgines.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Per obtenir funcions addicionals, fes servir una base de connexió Dell que funcioni amb aquest Chromebook.</translation>
 <translation id="215753907730220065">Surt de la pantalla completa</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Tornar a carregar l'aplicació</translation>
 <translation id="2327492829706409234">Activa l'aplicació</translation>
 <translation id="2329597144923131178">Inicieu la sessió per tenir adreces d'interès, historial, contrasenyes i altres opcions de configuració en tots els dispositius.</translation>
-<translation id="2330607597130465898">Sense protecció</translation>
 <translation id="2332131598580221120">Mostra a la botiga</translation>
 <translation id="2332192922827071008">Obre les preferències</translation>
 <translation id="2332742915001411729">Restableix als valors predeterminats</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">La sincronització no funciona. Torna a iniciar la sessió.</translation>
 <translation id="3493486281776271508">Cal tenir connexió a Internet</translation>
 <translation id="3493881266323043047">Validesa</translation>
-<translation id="3494155060718700400">No et protegeix contra llocs web, baixades ni extensions perillosos (opció no recomanada). Continuaràs obtenint protecció mitjançant Navegació segura, sempre que estigui disponible, en altres serveis de Google, com ara Gmail i la Cerca.</translation>
 <translation id="3494769164076977169">Pregunta'm quan un lloc provi de baixar fitxers automàticament després del primer fitxer (opció recomanada)</translation>
 <translation id="3495660573538963482">Configuració de l'Assistent de Google</translation>
 <translation id="3496213124478423963">Redueix</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">Els llocs següents han bloquejat el seguiment de la vostra ubicació en aquesta pàgina:</translation>
 <translation id="49226369361073053">{0,plural, =0{Actualitza el dispositiu ara}=1{Actualitza el dispositiu en 1 segon}other{Actualitza el dispositiu en # segons}}</translation>
 <translation id="492299503953721473">Suprimeix les aplicacions per a Android</translation>
-<translation id="4923279099980110923">Sí, vull contribuir-hi</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Els ports es mostraran aquí</translation>
 <translation id="4925542575807923399">L'administrador d'aquest compte requereix que sigui el primer compte que iniciï la sessió en una sessió amb inici de sessió múltiple.</translation>
@@ -3235,7 +3231,6 @@
 <translation id="5362741141255528695">Seleccioneu el fitxer de clau privada.</translation>
 <translation id="5363109466694494651">Fes un Powerwash i canvia a la versió anterior</translation>
 <translation id="5365881113273618889">La carpeta que has seleccionat conté fitxers confidencials. Confirmes que vols concedir a "<ph name="APP_NAME" />" accés d'escriptura permanent en aquesta carpeta?</translation>
-<translation id="5367091008316207019">S'està llegint el fitxer...</translation>
 <translation id="5368720394188453070">El telèfon està bloquejat. Desbloquegeu-lo per accedir-hi.</translation>
 <translation id="5368779022775404937">Inicia la sessió a <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activa l'acceleració del ratolí</translation>
@@ -5962,7 +5957,6 @@
 <translation id="8985264973231822211">Actiu fa <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dia</translation>
 <translation id="8986362086234534611">Oblida</translation>
 <translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation>
-<translation id="8986651757229422279">Amb aquesta acció s'esborraran totes les dades i galetes emmagatzemades per <ph name="ORIGIN_NAME" /> i per la seva aplicació instal·lada.</translation>
 <translation id="8987927404178983737">Mes</translation>
 <translation id="8991520179165052608">El lloc web pot utilitzar el micròfon</translation>
 <translation id="899403249577094719">URL base de certificat de Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index c12d639..44d763a 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Otevřít v aplikaci <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktivita a interakce</translation>
 <translation id="2120639962942052471">Zablokované oprávnění: <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Soubory cookie jsou blokovány}=1{Soubory cookie jsou blokovány, 1 výjimka}few{Soubory cookie jsou blokovány, {COUNT} výjimky}many{Soubory cookie jsou blokovány, {COUNT} výjimky}other{Soubory cookie jsou blokovány, {COUNT} výjimek}}</translation>
 <translation id="2121825465123208577">Změnit velikost</translation>
 <translation id="2122305276694332719">Automatické připojování ke skryté síti umožňuje ostatním uživatelům zobrazit vaše zařízení a některá vaše nastavení sítě a nedoporučujeme jej.</translation>
 <translation id="2123766928840368256">Vybrat jiný soubor</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Úprava karty</translation>
 <translation id="2154710561487035718">Kopírovat adresu URL</translation>
 <translation id="2155772377859296191">Vypadá jako <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Můžete pomoci zlepšit Bezpečné vyhledávání tím, že budete část informací o systému a obsahu stránek odesílat do Googlu.</translation>
 <translation id="2156294658807918600">Pracovní proces služby: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Chcete-li získat další funkce, použijte dokovací stanici Dell kompatibilní s tímto Chromebookem.</translation>
 <translation id="215753907730220065">Ukončit režim celé obrazovky</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">Znovu načíst &amp;aplikaci</translation>
 <translation id="2327492829706409234">Aktivovat aplikaci</translation>
 <translation id="2329597144923131178">Přihlaste se a synchronizujte záložky, historii, hesla a další nastavení do všech svých zařízení.</translation>
-<translation id="2330607597130465898">Bez ochrany</translation>
 <translation id="2332131598580221120">Zobrazit v obchodu</translation>
 <translation id="2332192922827071008">Otevřít nastavení</translation>
 <translation id="2332742915001411729">Výchozí nastavení</translation>
@@ -1870,7 +1869,6 @@
 <translation id="3492788708641132712">Synchronizace nefunguje. Zkuste se přihlásit znovu.</translation>
 <translation id="3493486281776271508">Je potřeba připojení k internetu</translation>
 <translation id="3493881266323043047">Platnost</translation>
-<translation id="3494155060718700400">Nebudete chráněni před nebezpečnými weby, soubory ke stažení ani rozšířeními (nedoporučujeme). V jiných službách Google, v nichž je ochrana pomocí Bezpečného prohlížení k dispozici (např. Gmail a Vyhledávání), ji budete mít i nadále.</translation>
 <translation id="3494769164076977169">Zeptat se po stažení prvního souboru, když se web pokouší stahovat soubory automaticky (doporučeno)</translation>
 <translation id="3495660573538963482">Nastavení Asistenta Google</translation>
 <translation id="3496213124478423963">Oddálit</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">Těmto webům bylo na této stránce zakázáno sledování vaší polohy.</translation>
 <translation id="49226369361073053">{0,plural, =0{Ihned zařízení aktualizujte}=1{Do jedné sekundy zařízení aktualizujte}few{Do # sekund zařízení aktualizujte}many{Do # sekundy zařízení aktualizujte}other{Do # sekund zařízení aktualizujte}}</translation>
 <translation id="492299503953721473">Odstranit aplikace Android</translation>
-<translation id="4923279099980110923">Ano, chci pomoci</translation>
 <translation id="4924352752174756392">12×</translation>
 <translation id="4925320384394644410">Zde se budou zobrazovat vaše porty</translation>
 <translation id="4925542575807923399">Správce tohoto účtu vyžaduje, aby se tento účet v relaci multiprofilu přihlásil jako první.</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">Vyberte soubor soukromého klíče.</translation>
 <translation id="5363109466694494651">Obnovit pomocí funkce Powerwash a vrátit předchozí verzi</translation>
 <translation id="5365881113273618889">Vybraná složka obsahuje citlivé soubory. Opravdu chcete aplikaci <ph name="APP_NAME" /> udělit trvalý přístup k zápisu do této složky?</translation>
-<translation id="5367091008316207019">Čtení souboru..</translation>
 <translation id="5368720394188453070">Telefon je uzamčen. Chcete-li pokračovat, odemkněte jej.</translation>
 <translation id="5368779022775404937">Přihlaste se do domény <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Zapnout zrychlení myši</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">Aktivní před <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dny</translation>
 <translation id="8986362086234534611">Odstranit</translation>
 <translation id="8986494364107987395">Automaticky posílat společnosti Google statistiky používání a zprávy o selhání</translation>
-<translation id="8986651757229422279">Tímto vymažete všechny soubory cookie a data, která uložil web <ph name="ORIGIN_NAME" /> nebo jeho nainstalovaná aplikace.</translation>
 <translation id="8987927404178983737">Měsíc</translation>
 <translation id="8991520179165052608">Web může použít mikrofon</translation>
 <translation id="899403249577094719">Základní adresa URL certifikátu Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 58e9ba3..9a21ee94 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Rediger kort</translation>
 <translation id="2154710561487035718">Kopier webadresse</translation>
 <translation id="2155772377859296191">Ligner <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Du kan hjælpe med at forbedre Beskyttet browsing ved at sende nogle systemoplysninger og noget sideindhold til Google.</translation>
 <translation id="2156294658807918600">Scripttjeneste: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Hvis du vil have yderligere funktioner, skal du bruge en Dell-dockingstation, som er udviklet til at fungere sammen med denne Chromebook.</translation>
 <translation id="215753907730220065">Afslut fuld skærm</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Genindlæs app</translation>
 <translation id="2327492829706409234">Aktivér app</translation>
 <translation id="2329597144923131178">Log ind for at hente bogmærker, historik, adgangskoder og andre indstillinger på alle dine enheder.</translation>
-<translation id="2330607597130465898">Ingen beskyttelse</translation>
 <translation id="2332131598580221120">Vis i Webshop</translation>
 <translation id="2332192922827071008">Åbn præferencer</translation>
 <translation id="2332742915001411729">Nulstil til standard</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Synkronisering virker ikke. Prøv at logge ind igen.</translation>
 <translation id="3493486281776271508">Kræver internetforbindelse</translation>
 <translation id="3493881266323043047">Gyldighed</translation>
-<translation id="3494155060718700400">Beskytter dig ikke mod skadelige websites, downloads eller udvidelser (anbefales ikke). Du er stadig beskyttet med Beskyttet browsing i andre Google-tjenester som f.eks. Gmail og Søgning, hvor dette er tilgængeligt.</translation>
 <translation id="3494769164076977169">Spørg, når et website automatisk forsøger at downloade flere filer efter den første fil (anbefales)</translation>
 <translation id="3495660573538963482">Indstillinger for Google Assistent</translation>
 <translation id="3496213124478423963">Zoom ud</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Følgende websites kan ikke spore din placering på denne side:</translation>
 <translation id="49226369361073053">{0,plural, =0{Genstart enheden nu}=1{Genstart enheden inden for 1 sekund}one{Genstart enheden inden for # sekund}other{Genstart enheden inden for # sekunder}}</translation>
 <translation id="492299503953721473">Fjern Android-apps</translation>
-<translation id="4923279099980110923">Ja. Jeg vil gerne hjælpe</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Dine porte vises her</translation>
 <translation id="4925542575807923399">Kontoadministratoren kræver, at denne konto er den første konto, der logges ind på, i en session med samlet login fra flere konti.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Vælg privat nøglefil.</translation>
 <translation id="5363109466694494651">Powerwash, og vend tilbage</translation>
 <translation id="5365881113273618889">Den valgte mappe indeholder følsomme filer. Er du sikker på, at du vil give "<ph name="APP_NAME" />" permanent skriveadgang til denne mappe?</translation>
-<translation id="5367091008316207019">Læser fil...</translation>
 <translation id="5368720394188453070">Din telefon er låst. Lås den op for at få adgang.</translation>
 <translation id="5368779022775404937">Log ind på <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktivér acceleration af mus</translation>
@@ -5964,7 +5959,6 @@
 <translation id="8985264973231822211">Aktiv for <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dag siden</translation>
 <translation id="8986362086234534611">Glem</translation>
 <translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation>
-<translation id="8986651757229422279">Dette rydder alle data og cookies, der er gemt af <ph name="ORIGIN_NAME" /> og de apps, den har installeret.</translation>
 <translation id="8987927404178983737">Måned</translation>
 <translation id="8991520179165052608">Websitet kan anvende din mikrofon</translation>
 <translation id="899403249577094719">Webadresse for Netscape-certifikatbase</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 76445c1..6bc1f00 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">In <ph name="APP" /> öffnen</translation>
 <translation id="2120297377148151361">Aktivitäten und Interaktionen</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> blockiert</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookies sind blockiert}=1{Cookies sind blockiert, 1 Ausnahme}other{Cookies sind blockiert, {COUNT} Ausnahmen}}</translation>
 <translation id="2121825465123208577">Größe anpassen</translation>
 <translation id="2122305276694332719">Wenn automatisch eine Verbindung zu einem verborgenen Netzwerk hergestellt wird, können andere Ihr Gerät sowie einige Netzwerkeinstellungen sehen. Dies wird nicht empfohlen.</translation>
 <translation id="2123766928840368256">Andere Datei auswählen</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">Karte bearbeiten</translation>
 <translation id="2154710561487035718">URL kopieren</translation>
 <translation id="2155772377859296191">Auflösung <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Sie können uns dabei helfen, Safe Browsing weiter zu verbessern, indem Sie einige Systeminformationen und Seiteninhalte an Google senden.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Verwenden Sie eine für dieses Chromebook entwickelte Dockingstation von Dell, um zusätzliche Funktionen nutzen zu können.</translation>
 <translation id="215753907730220065">Vollbildmodus aus</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">App &amp;neu laden</translation>
 <translation id="2327492829706409234">App aktivieren</translation>
 <translation id="2329597144923131178">Melden Sie sich an, um Ihre Lesezeichen, Ihren Verlauf, Ihre Passwörter und andere Einstellungen auf allen Ihren Geräten aufzurufen.</translation>
-<translation id="2330607597130465898">Kein Safe Browsing</translation>
 <translation id="2332131598580221120">Im Store ansehen</translation>
 <translation id="2332192922827071008">Einstellungen öffnen</translation>
 <translation id="2332742915001411729">Auf Standardeinstellungen zurücksetzen</translation>
@@ -1867,7 +1866,6 @@
 <translation id="3492788708641132712">Die Synchronisierung funktioniert nicht. Melden Sie sich noch einmal an.</translation>
 <translation id="3493486281776271508">Es ist eine Internetverbindung erforderlich</translation>
 <translation id="3493881266323043047">Gültigkeit</translation>
-<translation id="3494155060718700400">Kein Schutz vor schädlichen Websites, Downloads und Erweiterungen (nicht empfohlen). Sofern verfügbar, sind Sie in anderen Google-Diensten, wie Gmail und der Google-Suche, weiterhin durch Safe Browsing geschützt.</translation>
 <translation id="3494769164076977169">Nachfragen, wenn eine Website versucht, Dateien nach der ersten Datei automatisch herunterzuladen (empfohlen)</translation>
 <translation id="3495660573538963482">Google Assistant-Einstellungen</translation>
 <translation id="3496213124478423963">Verkleinern</translation>
@@ -2918,7 +2916,6 @@
 <translation id="4920887663447894854">Die folgenden Websites dürfen Ihren Standort auf dieser Seite nicht verfolgen:</translation>
 <translation id="49226369361073053">{0,plural, =0{Gerät jetzt neu starten}=1{Gerät innerhalb von 1 Sekunde neu starten}other{Gerät innerhalb von # Sekunden neu starten}}</translation>
 <translation id="492299503953721473">Android-Apps entfernen</translation>
-<translation id="4923279099980110923">Ja, ich möchte helfen.</translation>
 <translation id="4924352752174756392">12-fach</translation>
 <translation id="4925320384394644410">Hier werden Ihre Ports angezeigt</translation>
 <translation id="4925542575807923399">Der Administrator dieses Kontos hat festgelegt, dass dieses Konto in einer Sitzung mit Mehrfachanmeldung das erste angemeldete Konto sein muss.</translation>
@@ -3232,7 +3229,6 @@
 <translation id="5362741141255528695">Datei mit privatem Schlüssel wählen</translation>
 <translation id="5363109466694494651">Powerwash durchführen und zurücksetzen</translation>
 <translation id="5365881113273618889">Der ausgewählte Ordner enthält vertrauliche Dateien. Möchten Sie <ph name="APP_NAME" /> wirklich dauerhaft Schreibzugriff auf diesen Ordner gewähren?</translation>
-<translation id="5367091008316207019">Datei wird gelesen...</translation>
 <translation id="5368720394188453070">Ihr Telefon ist gesperrt. Entsperren Sie es, um fortzufahren.</translation>
 <translation id="5368779022775404937">Anmelden bei <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Mausbeschleunigung aktivieren</translation>
@@ -5957,7 +5953,6 @@
 <translation id="8985264973231822211">Vor <ph name="DEVICE_LAST_ACTIVATED_TIME" /> Tagen aktiv</translation>
 <translation id="8986362086234534611">Entfernen</translation>
 <translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation>
-<translation id="8986651757229422279">Dadurch werden alle von <ph name="ORIGIN_NAME" /> und der zugehörigen installierten App gespeicherten Daten und Cookies gelöscht.</translation>
 <translation id="8987927404178983737">Monat</translation>
 <translation id="8991520179165052608">Die Website kann Ihr Mikrofon verwenden</translation>
 <translation id="899403249577094719">Basis-URL für Netscape-Zertifikate</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 121e227..39d73dda 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Επεξεργασία κάρτας</translation>
 <translation id="2154710561487035718">Αντιγραφή διεύθυνσης URL</translation>
 <translation id="2155772377859296191">Θα εμφανίζεται ως <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Μπορείτε να συμβάλετε στη βελτίωση της Ασφαλούς περιήγησης στέλνοντας ορισμένες πληροφορίες συστήματος και περιεχόμενο σελίδων στην Google.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Για επιπλέον λειτουργίες, χρησιμοποιήστε μια βάση σύνδεσης Dell που έχει σχεδιαστεί για χρήση με αυτό το Chromebook.</translation>
 <translation id="215753907730220065">Έξοδος από πλήρη οθόνη</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">Ε&amp;πανάληψη φόρτωσης εφαρμογής</translation>
 <translation id="2327492829706409234">Ενεργοποίηση εφαρμογής</translation>
 <translation id="2329597144923131178">Συνδεθείτε για χρήση σελιδοδεικτών, ιστορικού, κωδ.πρόσβ. κ.λπ. σε όλες τις συσκευές.</translation>
-<translation id="2330607597130465898">Χωρίς προστασία</translation>
 <translation id="2332131598580221120">Προβολή στο Web Store</translation>
 <translation id="2332192922827071008">Άνοιγμα προτιμήσεων</translation>
 <translation id="2332742915001411729">Επαναφορά προεπιλογής</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Ο συγχρονισμός δεν λειτουργεί. Δοκιμάστε να συνδεθείτε ξανά.</translation>
 <translation id="3493486281776271508">Απαιτείται σύνδεση στο διαδίκτυο.</translation>
 <translation id="3493881266323043047">Εγκυρότητα</translation>
-<translation id="3494155060718700400">Δεν σας προστατεύει από επικίνδυνους ιστοτόπους, λήψεις και επεκτάσεις (δεν συνιστάται). Θα εξακολουθείτε να λαμβάνετε προστασία από την Ασφαλή περιήγηση, όπου είναι διαθέσιμη, σε άλλες Υπηρεσίες Google, όπως το Gmail και η Αναζήτηση.</translation>
 <translation id="3494769164076977169">Να γίνεται ερώτηση όταν ένας ιστότοπος προσπαθεί να κατεβάσει αυτόματα αρχεία μετά το πρώτο αρχείο (συνιστάται)</translation>
 <translation id="3495660573538963482">Ρυθμίσεις του Βοηθού Google</translation>
 <translation id="3496213124478423963">Σμίκρυνση</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Οι ακόλουθοι ιστότοποι έχουν αποκλειστεί από την παρακολούθηση της τοποθεσίας σας σε αυτήν τη σελίδα.</translation>
 <translation id="49226369361073053">{0,plural, =0{Ενημέρωση συσκευής τώρα}=1{Ενημέρωση συσκευής εντός 1 δευτερολέπτου}other{Ενημέρωση συσκευής εντός # δευτερολέπτων}}</translation>
 <translation id="492299503953721473">Κατάργηση εφαρμογών Android</translation>
-<translation id="4923279099980110923">Ναι, θέλω να βοηθήσω</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Οι θύρες σας θα εμφανίζονται εδώ</translation>
 <translation id="4925542575807923399">Ο διαχειριστής αυτού του λογαριασμού απαιτεί ο συγκεκριμένος λογαριασμός να είναι ο πρώτος λογαριασμός που συνδέεται σε μια περίοδο σύνδεσης πολλαπλών συνδέσεων.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Επιλέξτε το αρχείο ιδιωτικού κλειδιού.</translation>
 <translation id="5363109466694494651">Powerwash και Επαναφορά</translation>
 <translation id="5365881113273618889">Ο φάκελος που επιλέξατε περιέχει ευαίσθητα αρχεία. Είστε βέβαιοι ότι θέλετε να παραχωρήσετε στο "<ph name="APP_NAME" />" μόνιμη πρόσβαση εγγραφής σε αυτόν τον φάκελο;</translation>
-<translation id="5367091008316207019">Ανάγνωση αρχείου…</translation>
 <translation id="5368720394188453070">Το τηλέφωνό σας είναι κλειδωμένο. Ξεκλειδώστε το για να εισέλθετε.</translation>
 <translation id="5368779022775404937">Συνδεθείτε στο <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ενεργοποίηση επιτάχυνσης ποντικιού</translation>
@@ -5962,7 +5957,6 @@
 <translation id="8985264973231822211">Ενεργή πριν από <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ημέρα</translation>
 <translation id="8986362086234534611">Διαγραφή από τη μνήμη</translation>
 <translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation>
-<translation id="8986651757229422279">Με αυτήν την ενέργεια θα διαγραφούν όλα τα δεδομένα και τα cookie που έχουν αποθηκευτεί από το <ph name="ORIGIN_NAME" /> και την εγκατεστημένη εφαρμογή του.</translation>
 <translation id="8987927404178983737">Μήνας</translation>
 <translation id="8991520179165052608">Ο ιστότοπος μπορεί να χρησιμοποιήσει το μικρόφωνό σας</translation>
 <translation id="899403249577094719">Βασική διεύθυνση URL πιστοποιητικού Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 748e061..3c88b526 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Edit card</translation>
 <translation id="2154710561487035718">Copy URL</translation>
 <translation id="2155772377859296191">Looks like <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">You can help improve Safe Browsing by sending some system information and page content to Google.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">To get additional features, use a Dell docking station designed to work with this Chromebook.</translation>
 <translation id="215753907730220065">Exit Full Screen</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Reload app</translation>
 <translation id="2327492829706409234">Enable app</translation>
 <translation id="2329597144923131178">Sign in to get your bookmarks, history, passwords and other settings on all your devices</translation>
-<translation id="2330607597130465898">No protection</translation>
 <translation id="2332131598580221120">View in store</translation>
 <translation id="2332192922827071008">Open preferences</translation>
 <translation id="2332742915001411729">Reset to default</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sync isn’t working. Try signing in again.</translation>
 <translation id="3493486281776271508">Internet connection required</translation>
 <translation id="3493881266323043047">Validity</translation>
-<translation id="3494155060718700400">Does not protect you against dangerous websites, downloads and extensions (not recommended). You’ll still get Safe Browsing protection, where available, in other Google services, like Gmail and Search.</translation>
 <translation id="3494769164076977169">Ask when a site tries to download files automatically after the first file (recommended)</translation>
 <translation id="3495660573538963482">Google Assistant settings</translation>
 <translation id="3496213124478423963">Zoom Out</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">The following sites have been blocked from tracking your location on this page:</translation>
 <translation id="49226369361073053">{0,plural, =0{Update device now}=1{Update device within 1 second}other{Update device within # seconds}}</translation>
 <translation id="492299503953721473">Remove Android apps</translation>
-<translation id="4923279099980110923">Yes, I want to help</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Your ports will appear here</translation>
 <translation id="4925542575807923399">The administrator for this account requires this account to be the first signed-in account in a multiple sign-in session.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Select private key file.</translation>
 <translation id="5363109466694494651">Powerwash and Revert</translation>
 <translation id="5365881113273618889">The folder that you selected contains sensitive files. Are you sure that you want to grant '<ph name="APP_NAME" />' permanent write access to this folder?</translation>
-<translation id="5367091008316207019">Reading file..</translation>
 <translation id="5368720394188453070">Your phone is locked. Unlock it to enter.</translation>
 <translation id="5368779022775404937">Sign in to <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Enable mouse acceleration</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Active <ph name="DEVICE_LAST_ACTIVATED_TIME" /> day ago</translation>
 <translation id="8986362086234534611">Forget</translation>
 <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation>
-<translation id="8986651757229422279">This will clear all data and cookies stored by <ph name="ORIGIN_NAME" /> and its installed app.</translation>
 <translation id="8987927404178983737">Month</translation>
 <translation id="8991520179165052608">Site can use your microphone</translation>
 <translation id="899403249577094719">Netscape Certificate Base URL</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 6328e7e..177ebccc 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">Abrir en <ph name="APP" /></translation>
 <translation id="2120297377148151361">Interacciones y actividad</translation>
 <translation id="2120639962942052471">Se bloqueó <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Se bloquearon las cookies}=1{Se bloquearon las cookies; hay 1 excepción}other{Se bloquearon las cookies; hay {COUNT} excepciones}}</translation>
 <translation id="2121825465123208577">Ajustar tamaño</translation>
 <translation id="2122305276694332719">Si permites que tu dispositivo se conecte a una red oculta de forma automática, otras personas podrán ver tu dispositivo y algunas opciones de configuración de red, lo cual no es recomendable.</translation>
 <translation id="2123766928840368256">Elegir otro archivo</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">Editar tarjeta</translation>
 <translation id="2154710561487035718">Copiar URL</translation>
 <translation id="2155772377859296191">Resolución: <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Para mejorar la Navegación segura, envía información del sistema y contenido de la página a Google.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Para obtener más funciones, usa una estación de conexión Dell diseñada para funcionar con esta Chromebook.</translation>
 <translation id="215753907730220065">Salir de pantalla completa</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Volver a cargar la aplicación</translation>
 <translation id="2327492829706409234">Habilitar aplicación</translation>
 <translation id="2329597144923131178">Accede a tu cuenta para ver los favoritos, el historial, las contraseñas y otras opciones de configuración en todos los dispositivos.</translation>
-<translation id="2330607597130465898">Sin protección</translation>
 <translation id="2332131598580221120">Ver en Chrome Web Store</translation>
 <translation id="2332192922827071008">Abrir preferencias</translation>
 <translation id="2332742915001411729">Restablecer configuración de zoom predeterminada</translation>
@@ -1868,7 +1867,6 @@
 <translation id="3492788708641132712">La sincronización no está funcionando. Vuelve a acceder a tu cuenta.</translation>
 <translation id="3493486281776271508">Se requiere una conexión a Internet</translation>
 <translation id="3493881266323043047">Validez</translation>
-<translation id="3494155060718700400">No te protege contra descargas, extensiones ni sitios web peligrosos (no se recomienda). Seguirás teniendo la protección (donde esté disponible) de la Navegación segura en otros servicios de Google, como Gmail y la Búsqueda.</translation>
 <translation id="3494769164076977169">Preguntarme cuando un sitio intente descargar archivos automáticamente después del primer archivo (recomendado)</translation>
 <translation id="3495660573538963482">Configuración del Asistente de Google</translation>
 <translation id="3496213124478423963">Alejar</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">Se bloquearon los siguientes sitios para que no puedan rastrear tu ubicación en esta página:</translation>
 <translation id="49226369361073053">{0,plural, =0{Actualiza el dispositivo ahora}=1{Actualiza el dispositivo en el transcurso de 1 segundo}other{Actualiza el dispositivo en el transcurso de # segundos}}</translation>
 <translation id="492299503953721473">Quitar las apps de Android</translation>
-<translation id="4923279099980110923">Sí, quiero ayudar</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Aquí aparecerán tus puertos</translation>
 <translation id="4925542575807923399">El administrador de esta cuenta requiere que sea la primera a la que se acceda al crear una sesión de acceso múltiple.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">Seleccionar archivo de clave privada.</translation>
 <translation id="5363109466694494651">Utilizar la función Powerwash y revertir</translation>
 <translation id="5365881113273618889">La carpeta seleccionada contiene archivos confidenciales. ¿Confirmas que deseas otorgar a "<ph name="APP_NAME" />" acceso de escritura permanente a esta carpeta?</translation>
-<translation id="5367091008316207019">Leyendo el archivo...</translation>
 <translation id="5368720394188453070">El teléfono está bloqueado. Desbloquéalo para ingresar.</translation>
 <translation id="5368779022775404937">Acceder a <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Habilitar la aceleración del mouse</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">Activo hace <ph name="DEVICE_LAST_ACTIVATED_TIME" /> día</translation>
 <translation id="8986362086234534611">Borrar</translation>
 <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
-<translation id="8986651757229422279">Esta acción borrará todos los datos y cookies que almacenó <ph name="ORIGIN_NAME" /> y su app instalada.</translation>
 <translation id="8987927404178983737">Mes</translation>
 <translation id="8991520179165052608">El sitio puede usar el micrófono</translation>
 <translation id="899403249577094719">URL base del certificado Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 767bf85..f4df806 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Abrir en <ph name="APP" /></translation>
 <translation id="2120297377148151361">Actividad e interacciones</translation>
 <translation id="2120639962942052471">Bloqueado: <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Se han bloqueado las cookies}=1{Se han bloqueado las cookies (1 excepción)}other{Se han bloqueado las cookies ({COUNT} excepciones)}}</translation>
 <translation id="2121825465123208577">Modificar tamaño</translation>
 <translation id="2122305276694332719">Conectarse automáticamente a una red oculta permite que otros usuarios vean tu dispositivo y parte de tu configuración de red, por lo que no es recomendable.</translation>
 <translation id="2123766928840368256">Elegir un archivo diferente</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Editar tarjeta</translation>
 <translation id="2154710561487035718">Copiar URL</translation>
 <translation id="2155772377859296191">Resolución de <ph name="WIDTH" />x<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Puedes ayudar a mejorar la Navegación Segura enviando a Google información sobre el sistema y contenido de las páginas.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Si quieres obtener funciones adicionales, usa una base Dell que se haya diseñado para funcionar con este Chromebook.</translation>
 <translation id="215753907730220065">Desactivar pantalla completa</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Volver a cargar aplicación</translation>
 <translation id="2327492829706409234">Habilitar aplicación</translation>
 <translation id="2329597144923131178">Accede para ver marcadores, historial, contraseñas y otros en dispos.</translation>
-<translation id="2330607597130465898">Sin protección</translation>
 <translation id="2332131598580221120">Ver en Chrome Web Store</translation>
 <translation id="2332192922827071008">Abrir las preferencias</translation>
 <translation id="2332742915001411729">Restablecer predeterminado</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">La sincronización no funciona. Prueba a iniciar sesión de nuevo.</translation>
 <translation id="3493486281776271508">Se necesita conexión a Internet</translation>
 <translation id="3493881266323043047">Validez</translation>
-<translation id="3494155060718700400">No te protege frente a descargas, extensiones y sitios web peligrosos (no recomendado). Seguirás disfrutando de protección con la función Navegación Segura, si está disponible, en otros servicios de Google, como Gmail y la Búsqueda.</translation>
 <translation id="3494769164076977169">Preguntar cuando un sitio intente descargar archivos automáticamente después del primer archivo (recomendado)</translation>
 <translation id="3495660573538963482">Ajustes del Asistente de Google</translation>
 <translation id="3496213124478423963">Alejar</translation>
@@ -2921,7 +2919,6 @@
 <translation id="4920887663447894854">Los sitios que se indican a continuación se han bloqueado para evitar que puedan hacer un seguimiento de tu ubicación en esta página:</translation>
 <translation id="49226369361073053">{0,plural, =0{Actualizar dispositivo ahora}=1{Actualizar dispositivo dentro de 1 segundo}other{Actualizar dispositivo dentro de # segundos}}</translation>
 <translation id="492299503953721473">Quitar aplicaciones de Android</translation>
-<translation id="4923279099980110923">Sí, quiero ayudar</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Tus puertos aparecerán aquí</translation>
 <translation id="4925542575807923399">El administrador de esta cuenta requiere que esta cuenta sea la primera en la que se inicie sesión cuando se cree una sesión de inicio de sesión múltiple.</translation>
@@ -3235,7 +3232,6 @@
 <translation id="5362741141255528695">Selecciona un archivo de clave privada.</translation>
 <translation id="5363109466694494651">Powerwash y cambio a versión anterior</translation>
 <translation id="5365881113273618889">La carpeta que has seleccionado contiene archivos confidenciales. ¿Seguro que quieres conceder a "<ph name="APP_NAME" />" acceso de escritura permanente a esta carpeta?</translation>
-<translation id="5367091008316207019">Leyendo archivo...</translation>
 <translation id="5368720394188453070">Tu teléfono está bloqueado. Desbloquéalo para acceder.</translation>
 <translation id="5368779022775404937">Inicia sesión en <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Habilitar la aceleración del ratón</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">Activo hace <ph name="DEVICE_LAST_ACTIVATED_TIME" /> día</translation>
 <translation id="8986362086234534611">Dejar de recordar</translation>
 <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
-<translation id="8986651757229422279">Se borrarán todos los datos y las cookies guardados por <ph name="ORIGIN_NAME" /> y su aplicación instalada.</translation>
 <translation id="8987927404178983737">Mes</translation>
 <translation id="8991520179165052608">El sitio web puede usar tu micrófono</translation>
 <translation id="899403249577094719">URL base de certificado de Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 213dd3e..3785dfb 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Avamine rakenduses <ph name="APP" /></translation>
 <translation id="2120297377148151361">Tegevused ja interaktsioonid</translation>
 <translation id="2120639962942052471">Blokeeriti <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Küpsisefailid on blokeeritud}=1{Küpsisefailid on blokeeritud; 1 erand}other{Küpsisefailid on blokeeritud; {COUNT} erandit}}</translation>
 <translation id="2121825465123208577">Muuda suurust</translation>
 <translation id="2122305276694332719">Automaatne ühendamine peidetud võrguga võimaldab teistel näha teie seadet ja teatud võrguseadeid, seepärast ei soovita me seda kasutada.</translation>
 <translation id="2123766928840368256">Vali muu fail</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Kaardi muutmine</translation>
 <translation id="2154710561487035718">Kopeeri URL</translation>
 <translation id="2155772377859296191">Näib kui <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Võite aidata ohutut sirvimist täiustada, saates Google'ile süsteemiteavet ja lehesisu.</translation>
 <translation id="2156294658807918600">Teenuse töötleja: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Lisafunktsioonidele juurdepääsu saamiseks kasutage Delli dokkimisjaama, mis on mõeldud kasutamiseks selle Chromebookiga.</translation>
 <translation id="215753907730220065">Täisekraanilt väljumine</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Laadi rakendus uuesti</translation>
 <translation id="2327492829706409234">Luba rakendus</translation>
 <translation id="2329597144923131178">Logige sisse, et tuua kõikidesse seadmetesse järjehoidjad, ajalugu, paroolid ja muud seaded.</translation>
-<translation id="2330607597130465898">Kaitse puudub</translation>
 <translation id="2332131598580221120">Poes kuvamine</translation>
 <translation id="2332192922827071008">Ava eelistused</translation>
 <translation id="2332742915001411729">Lähtesta vaikeseadetele</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Sünkroonimine ei tööta. Proovige uuesti sisse logida.</translation>
 <translation id="3493486281776271508">Vaja on Interneti-ühendust</translation>
 <translation id="3493881266323043047">Kehtivus</translation>
-<translation id="3494155060718700400">Ei kaitse teid ohtlike veebisaitide, allalaadimiste ega laienduste eest (pole soovitatav). Google'i ohutu sirvimine kaitseb teid siiski muudes Google'i teenustes, kus see saadaval on (nt Gmail ja Otsing).</translation>
 <translation id="3494769164076977169">Küsi, kui sait proovib pärast esimest faili faile automaatselt alla laadida (soovitatav)</translation>
 <translation id="3495660573538963482">Google'i assistendi seaded</translation>
 <translation id="3496213124478423963">Vähenda</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Sellel lehel on järgmiseid saite blokeeritud nii, et need ei saa teie asukohta jälgida:</translation>
 <translation id="49226369361073053">{0,plural, =0{Värskendage seadet kohe}=1{Värskendage seadet 1 sekundi jooksul}other{Värskendage seadet # sekundi jooksul}}</translation>
 <translation id="492299503953721473">Eemalda Androidi rakendused</translation>
-<translation id="4923279099980110923">Jah, soovin aidata</translation>
 <translation id="4924352752174756392">12-kordne</translation>
 <translation id="4925320384394644410">Teie pordid kuvatakse siin</translation>
 <translation id="4925542575807923399">Selle konto administraator nõuab, et mitmesse kontosse sisselogimisega seansil logitaks esmalt sisse sellesse kontosse.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Privaatvõtme faili valimine.</translation>
 <translation id="5363109466694494651">Powerwash ja ennistamine</translation>
 <translation id="5365881113273618889">Teie valitud kaust sisaldab tundlikke faile. Kas soovite kindlasti anda rakendusele „<ph name="APP_NAME" />” selle kausta jaoks püsiva kirjutusõiguse?</translation>
-<translation id="5367091008316207019">Faili lugemine ...</translation>
 <translation id="5368720394188453070">Teie telefon on lukus. Avage see sisenemiseks.</translation>
 <translation id="5368779022775404937">Logige sisse saidile <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Luba hiire kiirendi</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">Aktiivne <ph name="DEVICE_LAST_ACTIVATED_TIME" /> päev tagasi</translation>
 <translation id="8986362086234534611">Unusta</translation>
 <translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation>
-<translation id="8986651757229422279">See kustutab kõik saidi <ph name="ORIGIN_NAME" /> ning selle installitud rakenduse salvestatud andmed ja küpsisefailid.</translation>
 <translation id="8987927404178983737">kuu</translation>
 <translation id="8991520179165052608">Sait saab kasutada teie mikrofoni</translation>
 <translation id="899403249577094719">Netscape'i sertifikaadi baas-URL</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 232244e..0d948d0 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Ireki <ph name="APP" /> aplikazioan</translation>
 <translation id="2120297377148151361">Jarduerak eta interakzioak</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> blokeatu da</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookieak blokeatuta daude}=1{Cookieak blokeatuta daude, salbuespen batekin}other{Cookieak blokeatuta daude, {COUNT} salbuespenekin}}</translation>
 <translation id="2121825465123208577">Aldatu tamaina</translation>
 <translation id="2122305276694332719">Automatikoki konektatzen bazara ezkutuko sare batera, zure gailua eta sarearen zenbait ezarpen ikusi ahalko dituzte besteek, eta hori ez da komeni.</translation>
 <translation id="2123766928840368256">Aukeratu beste fitxategi bat</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Editatu txartela</translation>
 <translation id="2154710561487035718">Kopiatu URLa</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> dirudi</translation>
-<translation id="2156283799932971644">Arakatze segurua hobetzen lagun dezakezu sistemari eta webgunearen edukiei buruzko informazioa Google-ra bidaliz.</translation>
 <translation id="2156294658807918600">Zerbitzuko langilea: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Eginbide gehiago lortzeko, erabili Chromebook honekin funtzionatzeko diseinatu den Dell-eko oinarri bat.</translation>
 <translation id="215753907730220065">Irten pantaila osotik</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Kargatu berriro aplikazioa</translation>
 <translation id="2327492829706409234">Gaitu aplikazioa</translation>
 <translation id="2329597144923131178">Hasi saioa laster-markak, historia, pasahitzak eta bestelakoak gailu guztietan izateko.</translation>
-<translation id="2330607597130465898">Babesik gabe</translation>
 <translation id="2332131598580221120">Ikusi dendan</translation>
 <translation id="2332192922827071008">Ireki hobespenak</translation>
 <translation id="2332742915001411729">Berrezarri balio lehenetsiak</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Sinkronizazioa ez dabil. Hasi berriro saioa.</translation>
 <translation id="3493486281776271508">Interneteko konexioa behar da</translation>
 <translation id="3493881266323043047">Balio-aldia</translation>
-<translation id="3494155060718700400">Ez zaitu babesten webgune, deskarga eta luzapen kaltegarrien aurka (ez da gomendatzen). Erabilgarri dagoenean, arakatze seguruaren babesa jasotzen jarraituko duzu Google-ren beste zerbitzu batzuetan (Gmail-en eta Bilaketa zerbitzuan, esaterako).</translation>
 <translation id="3494769164076977169">Galdetu aplikazio bat lehen fitxategiaren ondoren beste fitxategi batzuk automatikoki deskargatzen saiatzen denean (gomendatua)</translation>
 <translation id="3495660573538963482">Google-ren Laguntzailea eginbidearen ezarpenak</translation>
 <translation id="3496213124478423963">Txikitu</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Orrian duzun kokapenaren jarraipena egiteko aukera blokeatu zaie webgune hauei:</translation>
 <translation id="49226369361073053">{0,plural, =0{Eguneratu gailua orain}=1{Eguneratu gailua segundo bateko epean}other{Eguneratu gailua # segundoko epean}}</translation>
 <translation id="492299503953721473">Kendu Android-erako aplikazioak</translation>
-<translation id="4923279099980110923">Bai, lagundu egin nahi dut</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Zure atakak hemen agertuko dira</translation>
 <translation id="4925542575807923399">Saio-hasiera anitzeko saioetan, saioa hasten duen lehen kontua hau izatea eskatzen du kontu honen administratzaileak.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Hautatu gako-fitxategi pribatua.</translation>
 <translation id="5363109466694494651">Berrezarri fabrikako ezarpenak eta leheneratu</translation>
 <translation id="5365881113273618889">Kontuzko fitxategiak ditu hautatu duzun karpetak. Ziur "<ph name="APP_NAME" />" aplikazioari karpeta horretan idazteko behin betiko baimena eman nahi diozula?</translation>
-<translation id="5367091008316207019">Fitxategia irakurtzen…</translation>
 <translation id="5368720394188453070">Telefonoa blokeatuta dago. Desblokea ezazu sartzeko.</translation>
 <translation id="5368779022775404937">Hasi saioa <ph name="REALM" /> domeinuan</translation>
 <translation id="5369491905435686894">Gaitu saguaren erabilera bizkortua</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">Aktibo duela <ph name="DEVICE_LAST_ACTIVATED_TIME" /> egun</translation>
 <translation id="8986362086234534611">Ahaztu</translation>
 <translation id="8986494364107987395">Bidali automatikoki erabilera-estatistikak eta hutsegite-txostenak Google-ra</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> webguneak eta hark instalatutako aplikazioak gorde dituzten datu eta cookie guztiak garbituko dira.</translation>
 <translation id="8987927404178983737">Hilabetea</translation>
 <translation id="8991520179165052608">Webguneak mikrofonoa erabil dezake</translation>
 <translation id="899403249577094719">Netscape ziurtagiriaren oinarrizko URLa</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index b3f0de1b..b1e71a0 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">باز کردن در <ph name="APP" /></translation>
 <translation id="2120297377148151361">فعالیت و تعاملات</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> مسدود شده است</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{کوکی‌ها مسدود شده‌اند}=1{کوکی‌ها مسدود شده‌اند، ۱ استثنا}one{کوکی‌ها مسدود شده‌اند، {COUNT} استثنا}other{کوکی‌ها مسدود شده‌اند، {COUNT} استثنا}}</translation>
 <translation id="2121825465123208577">تغییر اندازه</translation>
 <translation id="2122305276694332719">اتصال خودکار به شبکه‌ای پنهان به دیگران امکان می‌دهد دستگاه و برخی تنظیمات شبکه‌تان را ببینند، و توصیه نمی‌شود.</translation>
 <translation id="2123766928840368256">فایل دیگری را انتخاب کنید</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">ویرایش کارت</translation>
 <translation id="2154710561487035718">کپی نشانی وب</translation>
 <translation id="2155772377859296191">‏‎<ph name="WIDTH" /> × <ph name="HEIGHT" />‎ به‌نظر می‌رسد</translation>
-<translation id="2156283799932971644">‏می‌توانید با ارسال برخی از اطلاعات سیستم و محتوای صفحه به Google، به بهبود «مرور ایمن» کمک کنید.</translation>
 <translation id="2156294658807918600">عامل خدماتی: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">‏برای دریافت ویژگی‌های اضافی، از ایستگاه پایه اتصال Dell که برای کار با این Chromebook طراحی شده است، استفاده کنید.</translation>
 <translation id="215753907730220065">خروج از حالت تمام صفحه</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">&amp;تازه‌سازی برنامه</translation>
 <translation id="2327492829706409234">فعال کردن برنامه</translation>
 <translation id="2329597144923131178">برای دریافت نشانک‌ها، سابقه، گذرواژه‌ها و سایر تنظیماتتان در همه دستگاه‌ها، وارد سیستم شوید.</translation>
-<translation id="2330607597130465898">بدون محافظت</translation>
 <translation id="2332131598580221120">مشاهده در فروشگاه</translation>
 <translation id="2332192922827071008">باز کردن اولویت‌ها</translation>
 <translation id="2332742915001411729">بازنشانی روی موارد پیش‌فرض</translation>
@@ -1868,7 +1867,6 @@
 <translation id="3492788708641132712">همگام‌سازی کار نمی‌کند. دوباره به سیستم وارد شوید.</translation>
 <translation id="3493486281776271508">به اتصال اینترنت نیاز است</translation>
 <translation id="3493881266323043047">اعتبار</translation>
-<translation id="3494155060718700400">‏از شما دربرابر افزونه‌ها، بارگیری‌ها، و وب‌سایت‌های خطرناک محافظت نمی‌کند (توصیه نمی‌شود). درصورت وجود، همچنان ویژگی حفاظتی «مرور ایمن» را در سرویس‌های دیگر Google مثل Gmail و «جستجو» دریافت می‌کنید.</translation>
 <translation id="3494769164076977169">وقتی سایتی تلاش می‌کند بعد از اولین فایل، فایل‌ها را به‌طور خودکار بارگیری کند سؤال شود (توصیه می‌شود)</translation>
 <translation id="3495660573538963482">‏تنظیمات «دستیار Google»</translation>
 <translation id="3496213124478423963">‏Zoom Out (دورنمایی)</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">از ردیابی مکان شما در این صفحه توسط سایت‌های زیر جلوگیری شده است:</translation>
 <translation id="49226369361073053">{0,plural, =0{همین حالا دستگاه را به‌روزرسانی کنید}=1{دستگاه را تا ۱ ثانیه دیگر به‌روزرسانی کنید}one{دستگاه را تا # ثانیه دیگر به‌روزرسانی کنید}other{دستگاه را تا # ثانیه دیگر به‌روزرسانی کنید}}</translation>
 <translation id="492299503953721473">‏حذف برنامه‌های Android</translation>
-<translation id="4923279099980110923">بله می‌خواهم کمک کنم</translation>
 <translation id="4924352752174756392">۱۲ برابر</translation>
 <translation id="4925320384394644410">درگاه‌های شما اینجا ظاهر خواهند شد</translation>
 <translation id="4925542575807923399">سرپرست این حساب لازم می‌داند که این حساب اولین حسابی باشد که در جلسه چندگانه ورود به سیستم وارد سیستم شده باشد.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">فایل کلید خصوصی را انتخاب کنید.</translation>
 <translation id="5363109466694494651">‏Powerwash و برگرداندن</translation>
 <translation id="5365881113273618889">پوشه‌ای که انتخاب کرده‌اید حاوی فایل‌های حساسی است. آیا مطمئنید می‌خواهید به «<ph name="APP_NAME" />» دسترسی دائم نوشتن این پوشه را بدهید؟</translation>
-<translation id="5367091008316207019">درحال خواندن فایل ...</translation>
 <translation id="5368720394188453070">تلفنتان قفل است. برای وارد شدن قفل آن را باز کنید.</translation>
 <translation id="5368779022775404937">به سیستم <ph name="REALM" /> وارد شوید</translation>
 <translation id="5369491905435686894">فعال کردن شتاب‌دهنده موشواره</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">آخرین فعالیت: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> روز قبل</translation>
 <translation id="8986362086234534611">فراموش شود</translation>
 <translation id="8986494364107987395">‏ارسال خودکار آمار کاربرد و گزارش‌های خرابی به Google</translation>
-<translation id="8986651757229422279">با این کار همه داده‌ها و کوکی‌های ذخیره‌شده توسط <ph name="ORIGIN_NAME" /> و برنامه‌های نصب‌شده آن پاک می‌شود.</translation>
 <translation id="8987927404178983737">ماه</translation>
 <translation id="8991520179165052608">سایت می‌تواند از میکروفن شما استفاده کند</translation>
 <translation id="899403249577094719">‏نشانی وب گواهی Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index a38bf9c7..e940520 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Avaa sovelluksessa <ph name="APP" /></translation>
 <translation id="2120297377148151361">Toiminnot ja vuorovaikutukset</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> estetty</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Evästeet on estetty}=1{Evästeet on estetty, 1 poikkeus}other{Evästeet on estetty, {COUNT} poikkeusta}}</translation>
 <translation id="2121825465123208577">Muuta kokoa</translation>
 <translation id="2122305276694332719">Automaattinen yhdistäminen piilotettuihin verkkoihin antaa muiden nähdä laitteesi ja joitain verkkoasetuksia. Sitä ei suositella.</translation>
 <translation id="2123766928840368256">Valitse toinen tiedosto</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Muokkaa korttia</translation>
 <translation id="2154710561487035718">Kopioi URL-osoite</translation>
 <translation id="2155772377859296191">Näyttää olevan <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Voit auttaa meitä kehittämään selaussuojaa lähettämällä automaattisesti tiettyjä järjestelmän tietoja ja sivun sisältöjä Googlelle.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Jos haluat lisäominaisuuksia, käytä Dell-telinettä, joka on suunniteltu yhteensopivaksi tämän Chromebookin kanssa.</translation>
 <translation id="215753907730220065">Poistu koko näytön tilasta</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Lataa sovellus uudelleen</translation>
 <translation id="2327492829706409234">Ota sovellus käyttöön</translation>
 <translation id="2329597144923131178">Kirjaudu ja käytä kirjanm., historiaa, salasan. ja muita asetuksia kaikissa laitteissasi.</translation>
-<translation id="2330607597130465898">Ei suojausta</translation>
 <translation id="2332131598580221120">Näytä Web Storessa</translation>
 <translation id="2332192922827071008">Siirry valintoihin</translation>
 <translation id="2332742915001411729">Palauta oletusarvo</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Synkronointi ei onnistu. Yritä kirjautua uudelleen sisään.</translation>
 <translation id="3493486281776271508">Edellyttää internetyhteyttä</translation>
 <translation id="3493881266323043047">Voimassaolo</translation>
-<translation id="3494155060718700400">Ei suojaa sinua vaarallisilta sivustoilta, latauksilta tai laajennuksilta (ei suositella). Voit silti käyttää Selaussuojaa muissa Googlen palveluissa, joissa se on saatavilla, kuten Gmailissa ja Haussa.</translation>
 <translation id="3494769164076977169">Kysy aina sivuston yrittäessä ladata tiedostoja automaattisesti ensimmäisen tiedoston jälkeen (suositus)</translation>
 <translation id="3495660573538963482">Google Assistantin asetukset</translation>
 <translation id="3496213124478423963">Loitonna</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">Seuraavia sivustoja on estetty käyttämästä sijaintiasi tällä sivulla:</translation>
 <translation id="49226369361073053">{0,plural, =0{Päivitä laite nyt}=1{Päivitä laite 1 sekunnin kuluessa}other{Päivitä laite # sekunnin kuluessa}}</translation>
 <translation id="492299503953721473">Poista Android-sovellukset</translation>
-<translation id="4923279099980110923">Kyllä, haluan auttaa</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Porttisi näkyvät täällä</translation>
 <translation id="4925542575807923399">Tämän tilin järjestelmänvalvoja edellyttää, että tämä tili on ensimmäinen sisään kirjautuva tili useiden tilien istunnossa.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">Valitse yksityinen avaintiedosto.</translation>
 <translation id="5363109466694494651">Suorita Powerwash ja palauta</translation>
 <translation id="5365881113273618889">Valitsemasi kansio sisältää arkaluontoisia tiedostoja. Haluatko varmasti, että <ph name="APP_NAME" /> saa pysyvän kirjoitusoikeuden tähän kansioon?</translation>
-<translation id="5367091008316207019">Luetaan tiedostoa...</translation>
 <translation id="5368720394188453070">Puhelimesi on lukittu. Avaa lukitus käyttääksesi sitä.</translation>
 <translation id="5368779022775404937">Kirjaudu sisään kohteeseen <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ota käyttöön hiiren nopeuttaminen</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211">Aktiivinen <ph name="DEVICE_LAST_ACTIVATED_TIME" /> päivä sitten</translation>
 <translation id="8986362086234534611">Unohda</translation>
 <translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation>
-<translation id="8986651757229422279">Tämä tyhjentää kaiken datan ja kaikki evästeet, jotka <ph name="ORIGIN_NAME" /> ja sen asennettu sovellus on tallentanut.</translation>
 <translation id="8987927404178983737">Kuukausi</translation>
 <translation id="8991520179165052608">Sivusto voi käyttää mikrofoniasi</translation>
 <translation id="899403249577094719">Netscape-varmenteen URL-osoite</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 97d7e43a..87d2e6d 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Buksan sa <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktibidad at mga pakikipag-ugnayan</translation>
 <translation id="2120639962942052471">Na-block ang <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Naka-block ang cookies}=1{Naka-block ang cookies, may 1 exception}one{Naka-block ang cookies, may {COUNT} exception}other{Naka-block ang cookies, may {COUNT} na exception}}</translation>
 <translation id="2121825465123208577">Baguhin ang laki</translation>
 <translation id="2122305276694332719">Ang awtomatikong pagkonekta sa nakatagong network ay nagbibigay-daan sa ibang tao na makita ang iyong device at ibang setting ng network, at hindi ito inirerekomenda.</translation>
 <translation id="2123766928840368256">Pumili ng ibang file</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">I-edit ang card</translation>
 <translation id="2154710561487035718">Kopyahin ang URL</translation>
 <translation id="2155772377859296191">Mukhang <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Makakatulong ka sa pagpapahusay ng Ligtas na Pag-browse sa pamamagitan ng pagpapadala ng ilang impormasyon ng system at content ng page sa Google.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Para makakuha ng karagdagang feature, gumamit ng istasyon ng pag-dock ng Dell na idinisenyo para gumana sa Chromebook na ito.</translation>
 <translation id="215753907730220065">Umalis sa Full Screen</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">I-&amp;reload ang app</translation>
 <translation id="2327492829706409234">Paganahin ang app</translation>
 <translation id="2329597144923131178">Mag-sign in upang makuha ang iyong mga bookmark, history, password at ibang mga setting sa lahat ng iyong device.</translation>
-<translation id="2330607597130465898">Walang proteksyon</translation>
 <translation id="2332131598580221120">Tingnan sa store</translation>
 <translation id="2332192922827071008">Buksan ang Mga Kagustuhan</translation>
 <translation id="2332742915001411729">I-reset sa default</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Hindi gumagana ang pag-sync. Subukang mag-sign in muli.</translation>
 <translation id="3493486281776271508">Kailangan ng koneksyon sa internet</translation>
 <translation id="3493881266323043047">Pagkakabisa</translation>
-<translation id="3494155060718700400">Hindi ka pinoprotektahan laban sa mga mapanganib na website, download, at extension (hindi inirerekomenda). Magkakaroon ka pa rin ng proteksyon ng Ligtas na Pag-browse, kung available, sa iba pang serbisyo ng Google, tulad ng Gmail at Search.</translation>
 <translation id="3494769164076977169">Magtanong kapag sinusubukan ng isang site na awtomatikong mag-download ng mga file pagkatapos ng unang file (inirerekomenda)</translation>
 <translation id="3495660573538963482">Mga setting ng Google Assistant</translation>
 <translation id="3496213124478423963">Zoom Out</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Hinarangan ang sumusunod na mga site mula sa pagsubaybay ng iyong lokasyon sa pahinang ito:</translation>
 <translation id="49226369361073053">{0,plural, =0{I-update ang device ngayon}=1{I-update ang device sa loob ng 1 segundo}one{I-update ang device sa loob ng # segundo}other{I-update ang device sa loob ng # na segundo}}</translation>
 <translation id="492299503953721473">Alisin ang mga Android app</translation>
-<translation id="4923279099980110923">Oo, gusto kong makatulong</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Lalabas dito ang iyong mga port</translation>
 <translation id="4925542575807923399">Kinakailangan ng administrator sa account na ito na ang account na ito ang unang i-sign in na account sa isang session ng multiple na pag-sign in.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Piliin ang file ng private na key.</translation>
 <translation id="5363109466694494651">I-Powerwash at I-revert</translation>
 <translation id="5365881113273618889">Naglalaman ng mga sensitibong file ang pinili mong folder. Sigurado ka bang gusto mong bigyan ang "<ph name="APP_NAME" />" ng permanenteng access sa pag-write sa folder na ito?</translation>
-<translation id="5367091008316207019">Binabasa ang file..</translation>
 <translation id="5368720394188453070">Naka-lock ang iyong telepono. I-unlock ito upang makapasok.</translation>
 <translation id="5368779022775404937">Mag-sign in sa <ph name="REALM" /></translation>
 <translation id="5369491905435686894">I-enable ang pag-accelerate ng mouse</translation>
@@ -5964,7 +5960,6 @@
 <translation id="8985264973231822211">Aktibo <ph name="DEVICE_LAST_ACTIVATED_TIME" /> araw ang nakalipas</translation>
 <translation id="8986362086234534611">Kalimutan</translation>
 <translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation>
-<translation id="8986651757229422279">Iki-clear nito ang lahat ng data at cookies na na-store ng <ph name="ORIGIN_NAME" /> at ang na-install na app nito.</translation>
 <translation id="8987927404178983737">Buwan</translation>
 <translation id="8991520179165052608">Maaaring gamitin ng site ang iyong mikropono</translation>
 <translation id="899403249577094719">URL ng Netscape Certificate Base</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index a229d4bc..0dcad09 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation>
 <translation id="2120297377148151361">Activité et interactions</translation>
 <translation id="2120639962942052471">Bloqué <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Les témoins sont bloqués}=1{Les témoins sont bloqués, 1 exception}one{Les témoins sont bloqués, avec {COUNT} exception}other{Les témoins sont bloqués, avec {COUNT} exceptions}}</translation>
 <translation id="2121825465123208577">Redimensionner</translation>
 <translation id="2122305276694332719">La connexion automatique à un réseau masqué permet aux autres personnes de voir votre appareil et certains paramètres réseau, et n'est pas recommandée.</translation>
 <translation id="2123766928840368256">Choisir un autre fichier</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Modifier la carte</translation>
 <translation id="2154710561487035718">Copier l'URL</translation>
 <translation id="2155772377859296191">Semblable à <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Vous pouvez contribuer à l'amélioration de la navigation sécurisée en envoyant des informations système et le contenu de la page à Google.</translation>
 <translation id="2156294658807918600">Service Worker : <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Pour obtenir des fonctionnalités supplémentaires, servez-vous d'une station d'accueil Dell conçue pour être utilisée avec ce Chromebook.</translation>
 <translation id="215753907730220065">Quitter le mode plein écran</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">Actua&amp;liser l'application</translation>
 <translation id="2327492829706409234">Activer l'application</translation>
 <translation id="2329597144923131178">Connectez-vous pour synchroniser favoris, historique, mots de passe et autres sur vos appareils.</translation>
-<translation id="2330607597130465898">Aucune protection</translation>
 <translation id="2332131598580221120">Afficher dans la boutique</translation>
 <translation id="2332192922827071008">Ouvrir les préférences</translation>
 <translation id="2332742915001411729">Rétablir la valeur par défaut</translation>
@@ -1872,7 +1871,6 @@
 <translation id="3492788708641132712">La synchronisation ne fonctionne pas. Essayez de vous connecter à nouveau.</translation>
 <translation id="3493486281776271508">Une connexion Internet est requise</translation>
 <translation id="3493881266323043047">Validité</translation>
-<translation id="3494155060718700400">Ce mode ne vous protège pas contre les téléchargements, les extensions ni les sites Web dangereux (non recommandé). Vous profitez toujours de la protection de navigation sécurisée, lorsqu'elle est offerte, dans d'autres services Google, comme Gmail et la recherche.</translation>
 <translation id="3494769164076977169">Me demander lorsqu'un site tente de télécharger des fichiers automatiquement après le premier fichier (recommandé)</translation>
 <translation id="3495660573538963482">Paramètres de l'Assistant Google</translation>
 <translation id="3496213124478423963">Zoom arrière</translation>
@@ -2923,7 +2921,6 @@
 <translation id="4920887663447894854">Le suivi de votre position géographique sur cette page a été bloqué pour les sites suivants :</translation>
 <translation id="49226369361073053">{0,plural, =0{Mettre à jour l'appareil maintenant}=1{Mettre à jour l'appareil d'ici 1 seconde}one{Mettre à jour l'appareil d'ici # seconde}other{Mettre à jour l'appareil d'ici # secondes}}</translation>
 <translation id="492299503953721473">Supprimer les applications Android</translation>
-<translation id="4923279099980110923">Signaler un fichier potentiellement malveillant</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Vos ports s'afficheront ici</translation>
 <translation id="4925542575807923399">L'administrateur pour ce compte l'a configuré de sorte qu'il doit être le premier compte à connecter lors de sessions de connexion multicompte.</translation>
@@ -3237,7 +3234,6 @@
 <translation id="5362741141255528695">Sélectionnez le fichier de clé privée.</translation>
 <translation id="5363109466694494651">Activer Powerwash et Rétablir</translation>
 <translation id="5365881113273618889">Le dossier que vous avez sélectionné contient des fichiers confidentiels. Voulez-vous vraiment accorder à « <ph name="APP_NAME" /> » un accès d'écriture permanent à ce dossier?</translation>
-<translation id="5367091008316207019">Lecture du fichier en cours…</translation>
 <translation id="5368720394188453070">Votre téléphone est verrouillé. Déverrouillez-le pour entrer.</translation>
 <translation id="5368779022775404937">Connectez-vous à <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activer l'accélération de la souris</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">Actif il y a <ph name="DEVICE_LAST_ACTIVATED_TIME" /> jour</translation>
 <translation id="8986362086234534611">Supprimer</translation>
 <translation id="8986494364107987395">Envoyer automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation>
-<translation id="8986651757229422279">Cette action effacera toutes les données et tous les témoins stockés par <ph name="ORIGIN_NAME" /> et son application installée.</translation>
 <translation id="8987927404178983737">Mois</translation>
 <translation id="8991520179165052608">Le site peut utiliser votre microphone</translation>
 <translation id="899403249577094719">URL de base du certificat Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 1f4e0c4..eef41a4 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation>
 <translation id="2120297377148151361">Activité et interactions</translation>
 <translation id="2120639962942052471">Autorisation "<ph name="PERMISSION" />" bloquée</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Les cookies sont bloqués}=1{Les cookies sont bloqués, 1 exception}one{Cookies are blocked, {COUNT} exceptions}other{Les cookies sont bloqués, {COUNT} exceptions}}</translation>
 <translation id="2121825465123208577">Redimensionner</translation>
 <translation id="2122305276694332719">La connexion automatique à un réseau masqué permet à d'autres personnes de voir votre appareil, ainsi que certains paramètres du réseau, ce qui n'est pas recommandé.</translation>
 <translation id="2123766928840368256">Choisir un autre fichier</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Modifier la carte</translation>
 <translation id="2154710561487035718">Copier l'URL</translation>
 <translation id="2155772377859296191">La résolution est de <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Vous pouvez nous aider à améliorer la navigation sécurisée en nous envoyant des informations système et du contenu de pages.</translation>
 <translation id="2156294658807918600">Service worker : <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Pour bénéficier de fonctionnalités supplémentaires, utilisez une station d'accueil Dell compatible avec ce Chromebook.</translation>
 <translation id="215753907730220065">Quitter le mode plein écran</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Actualiser l'application</translation>
 <translation id="2327492829706409234">Activer l'application</translation>
 <translation id="2329597144923131178">Connectez-vous pour synchroniser favoris, historique, mots de passe et autres sur vos appareils. </translation>
-<translation id="2330607597130465898">Aucune protection</translation>
 <translation id="2332131598580221120">Afficher dans la boutique</translation>
 <translation id="2332192922827071008">Ouvrir les préférences</translation>
 <translation id="2332742915001411729">Rétablir le thème par défaut</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">La synchronisation ne fonctionne pas. Essayez de vous reconnecter.</translation>
 <translation id="3493486281776271508">Connexion Internet requise</translation>
 <translation id="3493881266323043047">Validité</translation>
-<translation id="3494155060718700400">Ce mode ne vous protège pas contre les téléchargements, les extensions ni les sites Web dangereux (son utilisation est déconseillée). Le cas échéant, vous bénéficierez toujours de la protection offerte par la navigation sécurisée dans d'autres services Google, tels que Gmail et la recherche.</translation>
 <translation id="3494769164076977169">Me demander lorsque le téléchargement automatique de fichiers est requis sur un site après le premier fichier (recommandé)</translation>
 <translation id="3495660573538963482">Paramètres de l'Assistant Google</translation>
 <translation id="3496213124478423963">Zoom arrière</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Le suivi de votre position géographique sur cette page a été bloqué pour les sites suivants :</translation>
 <translation id="49226369361073053">{0,plural, =0{Mettre à jour l'appareil maintenant}=1{Mettre à jour l'appareil d'ici 1 seconde}one{Mettre à jour l'appareil d'ici # seconde}other{Mettre à jour l'appareil d'ici # secondes}}</translation>
 <translation id="492299503953721473">Supprimer les applications Android</translation>
-<translation id="4923279099980110923">Je souhaite apporter mon aide</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Vos ports s'afficheront ici</translation>
 <translation id="4925542575807923399">L'administrateur de ce compte a configuré ce dernier de sorte qu'il soit le premier compte à être connecté lors de sessions de connexion multicompte.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Sélectionnez le fichier de clé privée.</translation>
 <translation id="5363109466694494651">Powerwash et rétablir</translation>
 <translation id="5365881113273618889">Le dossier que vous avez sélectionné contient des fichiers sensibles. Voulez-vous vraiment accorder à "<ph name="APP_NAME" />" un accès en écriture permanent à ce dossier ?</translation>
-<translation id="5367091008316207019">Lecture du fichier en cours…</translation>
 <translation id="5368720394188453070">Votre téléphone est verrouillé. Déverrouillez-le pour y accéder.</translation>
 <translation id="5368779022775404937">Se connecter à <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activer l'accélération du curseur</translation>
@@ -5963,7 +5959,6 @@
 <translation id="8985264973231822211">Actif il y a <ph name="DEVICE_LAST_ACTIVATED_TIME" /> jour</translation>
 <translation id="8986362086234534611">Retirer</translation>
 <translation id="8986494364107987395">Envoie automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation>
-<translation id="8986651757229422279">L'ensemble des données et des cookies stockés par <ph name="ORIGIN_NAME" />, ainsi que l'application installée correspondante, seront effacés.</translation>
 <translation id="8987927404178983737">Mois</translation>
 <translation id="8991520179165052608">Le site peut utiliser votre micro</translation>
 <translation id="899403249577094719">URL de base du certificat Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 782c78e..f775d67b 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -825,6 +825,7 @@
 <translation id="2119349053129246860">Abrir na aplicación <ph name="APP" /></translation>
 <translation id="2120297377148151361">Actividade e interaccións</translation>
 <translation id="2120639962942052471">Bloqueouse o permiso: <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Bloqueáronse as cookies}=1{Bloqueáronse as cookies (1 excepción)}other{Bloqueáronse as cookies ({COUNT} excepcións)}}</translation>
 <translation id="2121825465123208577">Cambiar tamaño</translation>
 <translation id="2122305276694332719">Ao conectarte automaticamente a unha rede oculta, outros usuarios poden ver o teu dispositivo e parte da configuración de rede. Por iso esta opción non é recomendable.</translation>
 <translation id="2123766928840368256">Escoller un ficheiro diferente</translation>
@@ -858,7 +859,6 @@
 <translation id="2154484045852737596">Editar tarxeta</translation>
 <translation id="2154710561487035718">Copiar o URL</translation>
 <translation id="2155772377859296191">A resolución parece de <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Podes axudar a mellorar a Navegación segura enviando información sobre o sistema e o contido das páxinas a Google.</translation>
 <translation id="2156294658807918600">Traballador de servizos: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Para gozar de funcións adicionais, utiliza unha base de Dell deseñada para funcionar con este Chromebook.</translation>
 <translation id="215753907730220065">Saír do modo de pantalla completa</translation>
@@ -990,7 +990,6 @@
 <translation id="2326931316514688470">Vo&amp;lver cargar aplicación</translation>
 <translation id="2327492829706409234">Activar aplicación</translation>
 <translation id="2329597144923131178">Inicia sesión para ter os marcadores, o historial, os contrasinais e o resto da túa configuración en todos os teus dispositivos.</translation>
-<translation id="2330607597130465898">Sen protección</translation>
 <translation id="2332131598580221120">Ver na tenda</translation>
 <translation id="2332192922827071008">Abrir preferencias</translation>
 <translation id="2332742915001411729">Restablecer valores predeterminados</translation>
@@ -1870,7 +1869,6 @@
 <translation id="3492788708641132712">A sincronización non funciona. Proba a volver iniciar sesión.</translation>
 <translation id="3493486281776271508">É necesaria unha conexión a Internet</translation>
 <translation id="3493881266323043047">Validez</translation>
-<translation id="3494155060718700400">Non te protexe contra sitios web, descargas e extensións perigosos (non recomendado). Continuarás dispoñendo da protección da Navegación segura, sempre que estea dispoñible, noutros servizos de Google, como Gmail e a Busca.</translation>
 <translation id="3494769164076977169">Preguntar cando un sitio tente descargar ficheiros automaticamente despois do primeiro ficheiro (recomendado)</translation>
 <translation id="3495660573538963482">Configuración do Asistente de Google</translation>
 <translation id="3496213124478423963">Afastar</translation>
@@ -2921,7 +2919,6 @@
 <translation id="4920887663447894854">Os sitios que se indican a continuación bloqueáronse para evitar que poidan facer un seguimento da túa localización nesta páxina:</translation>
 <translation id="49226369361073053">{0,plural, =0{Actualiza o dispositivo agora}=1{Actualiza o dispositivo en 1 segundo}other{Actualiza o dispositivo en # segundos}}</translation>
 <translation id="492299503953721473">Eliminar aplicacións de Android</translation>
-<translation id="4923279099980110923">Si, quero axudar</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Os teus portos aparecerán aquí</translation>
 <translation id="4925542575807923399">O administrador desta conta require que esta conta sexa a primeira na que se inicie sesión cando se cree unha sesión de inicio de sesión múltiple.</translation>
@@ -3235,7 +3232,6 @@
 <translation id="5362741141255528695">Seleccionar ficheiro de clave privada.</translation>
 <translation id="5363109466694494651">Levar a cabo un Powerwash e reverter</translation>
 <translation id="5365881113273618889">O cartafol que seleccionaches contén ficheiros confidenciais. Seguro que queres conceder a <ph name="APP_NAME" /> acceso de lectura permanente a este cartafol?</translation>
-<translation id="5367091008316207019">Lendo ficheiro...</translation>
 <translation id="5368720394188453070">O teléfono está bloqueado. Desbloquéao para acceder.</translation>
 <translation id="5368779022775404937">Iniciar sesión en <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activar aceleración do rato</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211">Dispositivo activo hai <ph name="DEVICE_LAST_ACTIVATED_TIME" /> día</translation>
 <translation id="8986362086234534611">Borrar</translation>
 <translation id="8986494364107987395">Enviar estatísticas de uso e informes de erros a Google automaticamente</translation>
-<translation id="8986651757229422279">Ao realizar esta acción, borraranse todos os datos e as cookies que almacenase <ph name="ORIGIN_NAME" /> e a súa aplicación instalada.</translation>
 <translation id="8987927404178983737">Mes</translation>
 <translation id="8991520179165052608">O sitio pode usar o teu micrófono</translation>
 <translation id="899403249577094719">URL de base de certificado de Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 09abd69..c3b9162 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -855,7 +855,6 @@
 <translation id="2154484045852737596">કાર્ડમાં ફેરફાર કરો</translation>
 <translation id="2154710561487035718">URL ની કૉપિ કરો</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> જેવું લાગે છે</translation>
-<translation id="2156283799932971644">Googleને અમુક સિસ્ટમ માહિતી અને પેજ કન્ટેન્ટ મોકલીને તમે સલામત બ્રાઉઝિંગ બહેતર બનાવવામાં સહાય કરી શકો છો.</translation>
 <translation id="2156294658807918600">સર્વિસ વર્કર: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">વધારાની સુવિધાઓ મેળવવા માટે, આ Chromebookમાં કામ કરવા માટે ડિઝાઇન કરવામાં આવેલા Dell ડૉકિંગ સ્ટેશનનો ઉપયોગ કરો.</translation>
 <translation id="215753907730220065">પૂર્ણ સ્ક્રીનથી બહાર નીકળો</translation>
@@ -987,7 +986,6 @@
 <translation id="2326931316514688470">ઍપ્લિકેશન &amp;ફરીથી લોડ કરો</translation>
 <translation id="2327492829706409234">ઍપ ચાલુ કરો</translation>
 <translation id="2329597144923131178">તમારા તમામ ઉપકરણો પર તમારા બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ મેળવવા માટે સાઇન ઇન કરો.</translation>
-<translation id="2330607597130465898">સુરક્ષા વિના</translation>
 <translation id="2332131598580221120">સ્ટોરમાં જુઓ</translation>
 <translation id="2332192922827071008">પસંદગીઓ ખોલો</translation>
 <translation id="2332742915001411729">ડિફોલ્ટ પર ફરીથી સેટ કરો</translation>
@@ -1867,7 +1865,6 @@
 <translation id="3492788708641132712">સમન્વયન કામ કરી રહ્યું નથી. ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો.</translation>
 <translation id="3493486281776271508">ઇન્ટરનેટ કનેક્શન આવશ્યક છે</translation>
 <translation id="3493881266323043047">માન્યતા</translation>
-<translation id="3494155060718700400">જોખમકારક વેબસાઇટ, ડાઉનલોડ અને એક્સ્ટેંશન સામે તમારું રક્ષણ કરતું નથી (સુઝાવ આપવામાં આવતો નથી). Gmail અને Search જેવી Googleની અન્ય સેવાઓમાં, જ્યાં ઉપલબ્ધ હોય, ત્યાં તમને હજી પણ Safe Browsing સંરક્ષણ મળશે.</translation>
 <translation id="3494769164076977169">પ્રથમ ફાઇલ પછી જ્યારે સાઇટ આપમેળે ફાઇલો ડાઉનલોડ કરવાનો પ્રયાસ કરે ત્યારે પૂછો (ભલામણ કરેલ)</translation>
 <translation id="3495660573538963482">Google સહાયકની સેટિંગ્સ</translation>
 <translation id="3496213124478423963">ઝૂમ ઘટાડો</translation>
@@ -2918,7 +2915,6 @@
 <translation id="4920887663447894854">નીચેની સાઇટ્સને આ પૃષ્ઠ પર તમારા સ્થાનને ટ્રેક કરવાથી અવરોધિત કરી છે:</translation>
 <translation id="49226369361073053">{0,plural, =0{ડિવાઇસ હમણાં અપડેટ કરો}=1{ડિવાઇસ 1 સેકન્ડમાં અપડેટ કરો}one{ડિવાઇસ # સેકન્ડમાં અપડેટ કરો}other{ડિવાઇસ # સેકન્ડમાં અપડેટ કરો}}</translation>
 <translation id="492299503953721473">Android ઍપ્લિકેશનો દૂર કરો</translation>
-<translation id="4923279099980110923">હા, હું સહાય કરવા માંગુ છું</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">તમારા પોર્ટ અહીં દેખાશે</translation>
 <translation id="4925542575807923399">આ એકાઉન્ટના એડમિન માટે જરૂરી છે કે આ એકાઉન્ટ એકથી વધુ સાઇન ઇન સત્રમાં પ્રથમ સાઇન ઇન કરેલ એકાઉન્ટ હોય.</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5362741141255528695">ખાનગી કી ફાઇલ પસંદ કરો.</translation>
 <translation id="5363109466694494651">Powerwash કરો અને ઉલટાવો</translation>
 <translation id="5365881113273618889">તમે પસંદ કરેલું ફોલ્ડર સંવેદનશીલ ફાઇલો ધરાવે છે. શું તમે ખરેખર "<ph name="APP_NAME" />"ને આ ફોલ્ડરની કાયમી લખવાનો ઍક્સેસ આપવા માંગો છો?</translation>
-<translation id="5367091008316207019">ફાઇલ વાંચી રહ્યાં છીએ..</translation>
 <translation id="5368720394188453070">તમારો ફોન લૉક કરેલો છે. દાખલ કરવા માટે તેને અનલૉક કરો.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> માં સાઇન ઇન કરો</translation>
 <translation id="5369491905435686894">માઉસનું ઍક્સલરેશન ચાલુ કરો</translation>
@@ -5954,7 +5949,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> દિવસ પહેલાં સક્રિય</translation>
 <translation id="8986362086234534611">ભૂલી ગયા</translation>
 <translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રૅશ રિપોર્ટ Googleને ઑટોમૅટિક રીતે મોકલો</translation>
-<translation id="8986651757229422279">આનાથી <ph name="ORIGIN_NAME" /> અને તેની ઇન્સ્ટૉલ કરેલી ઍપ દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation>
 <translation id="8987927404178983737">મહિનો</translation>
 <translation id="8991520179165052608">સાઇટ તમારા માઇક્રોફોનનો ઉપયોગ કરી શકે છે</translation>
 <translation id="899403249577094719">નેટસ્કેપ પ્રમાણપત્ર બેઝ URL</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 726345e..08a9fa7 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> में खोलें</translation>
 <translation id="2120297377148151361">गतिविधि और इंटरैक्शन</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> को ब्लॉक किया गया है</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{कुकी ब्लॉक की गई हैं}=1{कुकी ब्लॉक की गई हैं, 1 अपवाद}one{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}other{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}}</translation>
 <translation id="2121825465123208577">आकार बदलें</translation>
 <translation id="2122305276694332719">दिखाई न देने वाले नेटवर्क से अपने आप जुड़ने से दूसरे लोग आपके डिवाइस और कुछ नेटवर्क सेटिंग को देख सकते हैं. ऐसा करने का सुझाव नहीं दिया जाता.</translation>
 <translation id="2123766928840368256">कोई दूसरी फ़ाइल चुनें</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">कार्ड में बदलाव करें</translation>
 <translation id="2154710561487035718">URL की कॉपी बनाएं</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जैसा लगता है</translation>
-<translation id="2156283799932971644">आप Google को कुछ 'सिस्टम जानकारी' और 'पेज सामग्री' भेजकर 'सुरक्षित ब्राउज़िंग' को बेहतर बना सकते हैं.</translation>
 <translation id="2156294658807918600">सर्विस वर्कर: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ज़्यादा सुविधाएं पाने के लिए, ऐसा Dell डॉकिंग स्टेशन इस्तेमाल करें जिसे इस Chromebook के साथ काम करने के लिए बनाया गया हो.</translation>
 <translation id="215753907730220065">फ़ुल स्क्रीन से बाहर निकलें</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">और ऐप्लिकेशन रीलोड करें</translation>
 <translation id="2327492829706409234">ऐप्लिकेशन चालू करें</translation>
 <translation id="2329597144923131178">अपने सभी डिवाइस पर बुकमार्क, इतिहास, पासवर्ड और दूसरी तरह की सेटिंग पाने के लिए साइन इन करें</translation>
-<translation id="2330607597130465898">कोई सुरक्षा नहीं</translation>
 <translation id="2332131598580221120">स्टोर में देखें</translation>
 <translation id="2332192922827071008">'प्राथमिकताएं' खोलें</translation>
 <translation id="2332742915001411729">डिफ़ॉल्ट पर रीसेट करें</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">सिंक काम नहीं कर रहा है. फिर से प्रवेश करने का प्रयास करें.</translation>
 <translation id="3493486281776271508">इंटरनेट कनेक्शन ज़रूरी है</translation>
 <translation id="3493881266323043047">मान्यता</translation>
-<translation id="3494155060718700400">इस मोड में आपको नुकसान पहुंचाने वाली वेबसाइटों, डाउनलोड, और एक्सटेंशन से सुरक्षा नहीं मिलती है (हम इसका सुझाव नहीं देते हैं). Gmail और Search जैसी दूसरी Google की सेवाओं में आपको अब भी सुरक्षित ब्राउज़िंग की सुरक्षा मिल सकती है.</translation>
 <translation id="3494769164076977169">जब कोई साइट पहली फ़ाइल के बाद फ़ाइलों को अपने आप डाउनलोड करने का प्रयास करे, तो पूछें (सुझाये गये) </translation>
 <translation id="3495660573538963482">Google Assistant सेटिंग</translation>
 <translation id="3496213124478423963">ज़ूम आउट</translation>
@@ -2921,7 +2919,6 @@
 <translation id="4920887663447894854">निम्न साइटों को इस पेज पर आपकी स्थिति ट्रैक करने से अवरोधित कर दिया गया है:</translation>
 <translation id="49226369361073053">{0,plural, =0{डिवाइस को अभी अपडेट करें}=1{डिवाइस को 1 सेकंड में अपडेट करें}one{डिवाइस को # सेकंड में अपडेट करें}other{डिवाइस को # सेकंड में अपडेट करें}}</translation>
 <translation id="492299503953721473">Android ऐप्लिकेशन निकालें</translation>
-<translation id="4923279099980110923">हां, मुझे सहायता चाहिए</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">आपके पोर्ट यहां दिखेंगे</translation>
 <translation id="4925542575807923399">इस खाते के एडमिन के लिए यह ज़रूरी है कि किसी एक से ज़्यादा साइन-इन वाले सत्र में यह खाता पहला साइन इन खाता हो.</translation>
@@ -3235,7 +3232,6 @@
 <translation id="5362741141255528695">निजी कुंजी फ़ाइल को चुनें.</translation>
 <translation id="5363109466694494651">पावरवॉश करें और वापस लाएं</translation>
 <translation id="5365881113273618889">आपने जो फ़ोल्डर चुना है उसमें संवेदनशील फ़ाइलें हैं. क्या आप वाकई "<ph name="APP_NAME" />" को इस फ़ोल्डर में लिखने का ऐक्सेस हमेशा के लिए देना चाहते हैं?</translation>
-<translation id="5367091008316207019">फ़ाइल पढ़ी जा रही है..</translation>
 <translation id="5368720394188453070">आपका फ़ोन लॉक हो गया है. प्रवेश करने के लिए उसे अनलॉक करें.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> में साइन इन करें</translation>
 <translation id="5369491905435686894">माउस की रफ़्तार बढ़ाने की सुविधा चालू करें</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिन पहले चालू था</translation>
 <translation id="8986362086234534611">भूल जाएं</translation>
 <translation id="8986494364107987395">इस्तेमाल के आंकड़े और खराबी रिपोर्ट अपने आप Google को भेजें</translation>
-<translation id="8986651757229422279">इससे <ph name="ORIGIN_NAME" /> का सेव किया गया पूरा डेटा, कुकी, और इंस्टॉल किया गया ऐप्लिकेशन मिट जाएगा.</translation>
 <translation id="8987927404178983737">माह</translation>
 <translation id="8991520179165052608">साइट आपके माइक्रोफ़ोन का इस्तेमाल कर सकती है</translation>
 <translation id="899403249577094719">Netscape प्रमाणपत्र आधार URL</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index fc190055..2077a4ae 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Uredite karticu</translation>
 <translation id="2154710561487035718">Kopiraj URL</translation>
 <translation id="2155772377859296191">Izgleda kao <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Možete pomoći da se Sigurno pregledavanje poboljša tako što ćete Googleu slati neke podatke o sustavu i sadržaj web-stranice.</translation>
 <translation id="2156294658807918600">Uslužni alat: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Za biste dobili dodatne značajke, upotrijebite priključnu stanicu Dell namijenjenu za ovaj Chromebook.</translation>
 <translation id="215753907730220065">Napusti potpuni ekran</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Ponovo učitaj aplikaciju</translation>
 <translation id="2327492829706409234">Omogući aplikaciju</translation>
 <translation id="2329597144923131178">Prijavite se da biste imali svoje oznake, povijest, zaporke i druge postavke na svim svojim uređajima.</translation>
-<translation id="2330607597130465898">Nema zaštite</translation>
 <translation id="2332131598580221120">Pogledaj u web-trgovini</translation>
 <translation id="2332192922827071008">Otvori Postavke</translation>
 <translation id="2332742915001411729">Vrati na zadano</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sinkronizacija ne funkcionira. Pokušajte se prijaviti ponovo.</translation>
 <translation id="3493486281776271508">Potrebna je internetska veza</translation>
 <translation id="3493881266323043047">Valjanost</translation>
-<translation id="3494155060718700400">Ne štiti vas od opasnih web-lokacija, preuzimanja i proširenja (ne preporučuje se). Bez obzira na to i gdje je primjenjivo, u drugim Googleovim uslugama, kao što su Gmail i Pretraživanje, dobit ćete zaštitu Sigurno pregledavanje.</translation>
 <translation id="3494769164076977169">Pitaj me kad web-lokacija pokuša automatski preuzeti datoteke nakon prve datoteke (preporučeno)</translation>
 <translation id="3495660573538963482">Postavke Google asistenta</translation>
 <translation id="3496213124478423963">Smanji</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Sljedeće web-lokacije blokirane su u praćenju vaše lokacije na ovoj web-stranici:</translation>
 <translation id="49226369361073053">{0,plural, =0{Odmah ažurirajte uređaj}=1{Ažurirajte uređaj u roku od jedne sekunde}one{Ažurirajte uređaj u roku od # sekunde}few{Ažurirajte uređaj u roku od # sekunde}other{Ažurirajte uređaj u roku od # sekundi}}</translation>
 <translation id="492299503953721473">Ukloni Android aplikacije</translation>
-<translation id="4923279099980110923">Da, želim pomoći</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Ovdje će se pojaviti vaši priključci</translation>
 <translation id="4925542575807923399">Administrator ovog računa zahtijeva da u sesiji s višestrukom prijavom ovaj račun bude prvi prijavljen.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Odaberite datoteku s osobnim ključem.</translation>
 <translation id="5363109466694494651">Powerwash i vraćanje u prethodno stanje</translation>
 <translation id="5365881113273618889">Mapa koju ste odabrali sadrži osjetljive datoteke. Jeste li sigurni da želite dodijeliti aplikaciji "<ph name="APP_NAME" />" trajni pristup za zapisivanje za tu mapu?</translation>
-<translation id="5367091008316207019">Čitanje datoteke...</translation>
 <translation id="5368720394188453070">Vaš je telefon zaključan. Otključajte ga da biste mu pristupili.</translation>
 <translation id="5368779022775404937">Prijavite se na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzanje miša</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Aktivan prije <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dana</translation>
 <translation id="8986362086234534611">Zaboravi</translation>
 <translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation>
-<translation id="8986651757229422279">Izbrisat će se svi podaci i kolačići koje je spremila web-lokacija <ph name="ORIGIN_NAME" /> i njezina instalirana aplikacija.</translation>
 <translation id="8987927404178983737">Mjesec</translation>
 <translation id="8991520179165052608">Web-lokacija može upotrebljavati vaš mikrofon</translation>
 <translation id="899403249577094719">Osnovni URL Netscape certifikata</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 04baff8c..b9c316c 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Kártya szerkesztése</translation>
 <translation id="2154710561487035718">URL másolása</translation>
 <translation id="2155772377859296191">Megjelenés: <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Ön is segíthet a Biztonságos Böngészés fejlesztésében, ha elküld bizonyos rendszer-információkat és oldaltartalmakat a Google-nak.</translation>
 <translation id="2156294658807918600">Szolgáltatás-munkavégző: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Ha további funkciókhoz is hozzá szeretne férni, használjon olyan Dell dokkolóállomást, amelyet ehhez a Chromebookhoz terveztek.</translation>
 <translation id="215753907730220065">Kilépés a teljes képernyős módból</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">Alkalmazás új&amp;ratöltése</translation>
 <translation id="2327492829706409234">Alkalmazás engedélyezése</translation>
 <translation id="2329597144923131178">Jelentkezzen be, hogy könyvjelzőit, előzményeit, jelszavait és más beállításait az összes eszközén elérje.</translation>
-<translation id="2330607597130465898">Nincs védelem</translation>
 <translation id="2332131598580221120">Megtekintés az áruházban</translation>
 <translation id="2332192922827071008">A beállítások megnyitása</translation>
 <translation id="2332742915001411729">Visszaállítás az alapértékre</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">A szinkronizálás nem működik. Próbáljon meg újra bejelentkezni.</translation>
 <translation id="3493486281776271508">Internetkapcsolatra van szükség</translation>
 <translation id="3493881266323043047">Érvényesség</translation>
-<translation id="3494155060718700400">Nem védi Önt a veszélyes webhelyek, letöltések és bővítmények ellen (nem ajánlott). Ahol lehetséges (más Google-szolgáltatásokban, például a Gmailben és a Keresőben) továbbra is megkapja a Biztonságos Böngészés által nyújtott védelmet.</translation>
 <translation id="3494769164076977169">Kérdezzen rá, ha egy webhely automatikusan próbál letölteni fájlokat az első fájl után (ajánlott)</translation>
 <translation id="3495660573538963482">Google Segéd-beállítások</translation>
 <translation id="3496213124478423963">Kicsinyítés</translation>
@@ -2922,7 +2919,6 @@
 <translation id="4920887663447894854">A következő webhelyek nem figyelhetik a tartózkodási helyét ezen az oldalon:</translation>
 <translation id="49226369361073053">{0,plural, =0{Frissítse az eszközt most}=1{1 másodpercen belül frissítse az eszközt}other{# másodpercen belül frissítse az eszközt}}</translation>
 <translation id="492299503953721473">Android-alkalmazások eltávolítása</translation>
-<translation id="4923279099980110923">Igen, szeretnék segíteni</translation>
 <translation id="4924352752174756392">12×</translation>
 <translation id="4925320384394644410">Itt jelennek majd meg a portok</translation>
 <translation id="4925542575807923399">A fiók rendszergazdája megköveteli, hogy ez a fiók legyen az első bejelentkezett fiók a többfiókos bejelentkezés munkamenete során.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Válasszon ki privátkulcs-fájlt.</translation>
 <translation id="5363109466694494651">Powerwash művelet és visszaállítás</translation>
 <translation id="5365881113273618889">A kiválasztott mappa bizalmas fájlokat tartalmaz. Biztosan állandó írási hozzáférést szeretne adni a(z) „<ph name="APP_NAME" />” alkalmazásnak a mappához?</translation>
-<translation id="5367091008316207019">Fájl olvasása..</translation>
 <translation id="5368720394188453070">A telefon zárolva van. Oldja fel a belépéshez.</translation>
 <translation id="5368779022775404937">Bejelentkezés itt: <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Az egér gyorsításának engedélyezése</translation>
@@ -5964,7 +5959,6 @@
 <translation id="8985264973231822211">Aktív <ph name="DEVICE_LAST_ACTIVATED_TIME" /> nappal ezelőtt</translation>
 <translation id="8986362086234534611">Elfelejt</translation>
 <translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation>
-<translation id="8986651757229422279">Ezzel törli a(z) <ph name="ORIGIN_NAME" /> és a telepített alkalmazásai által tárolt összes adatot és cookie-t.</translation>
 <translation id="8987927404178983737">hónap</translation>
 <translation id="8991520179165052608">A webhely használhatja a mikrofonját</translation>
 <translation id="899403249577094719">Netscape tanúsítvány - alap URL</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index bead75a..7326c03 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Քարտի փոփոխություն</translation>
 <translation id="2154710561487035718">Պատճենել URL-ը</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" />x<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Դուք կարող եք ավելի լավը դարձնել Ապահով դիտարկումը՝ ուղարկելով համակարգի մասին որոշ տեղեկություններ և էջերի բովանդակություն Google-ին։</translation>
 <translation id="2156294658807918600">Service Worker՝ <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Լրացուցիչ գործառույթների համար օգտագործեք այս Chromebook-ի համար նախատեսված Dell դոկ-կայան:</translation>
 <translation id="215753907730220065">Ելնել լիաէկրան ռեժիմից</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Վերաբեռնել հավելվածը</translation>
 <translation id="2327492829706409234">Միացնել հավելվածը</translation>
 <translation id="2329597144923131178">Մուտք գործեք՝ ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու այլ կարգավորումները ձեր բոլոր սարքերում համաժամացնելու համար:</translation>
-<translation id="2330607597130465898">Պաշտպանություն չկա</translation>
 <translation id="2332131598580221120">Դիտել խանութում</translation>
 <translation id="2332192922827071008">Բացել կարգավորումները</translation>
 <translation id="2332742915001411729">Վերադարձ կանխադրվածին</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Համաժամացումը չի աշխատում։ Փորձեք նորից մուտք գործել։</translation>
 <translation id="3493486281776271508">Պահանջվում է իներնետ կապ</translation>
 <translation id="3493881266323043047">Վավերականություն</translation>
-<translation id="3494155060718700400">Չի պաշտպանում վտանգավոր կայքերից, ընդլայնումներից և ներբեռնումներից (խորհուրդ չի տրվում)։ Անվտանգ դիտարկումը նախկինի պես կաշխատի Google-ի այլ ծառայություններում (եթե հասանելի է), օրինակ՝ Gmail-ում կամ Որոնում ծառայությունում։</translation>
 <translation id="3494769164076977169">Հարցնել, երբ կայքն ուզում է ավտոմատ ֆայլեր ներբեռնել առաջին ֆայլից հետո (հանձնարարելի)</translation>
 <translation id="3495660573538963482">Google Օգնականի կարգավորումներ</translation>
 <translation id="3496213124478423963">Zoom Out</translation>
@@ -2924,7 +2921,6 @@
 <translation id="4920887663447894854">Հետևյալ կայքերն արգելափակվել են՝ այս էջում ձեր տեղադրությունը հետագծելու համար՝</translation>
 <translation id="49226369361073053">{0,plural, =0{Թարմացրեք սարքը հիմա}=1{Թարմացրեք սարքը 1 վայրկյանից}one{Թարմացրեք սարքը # վայրկյանից}other{Թարմացրեք սարքը # վայրկյանից}}</translation>
 <translation id="492299503953721473">Հեռացնել Android հավելվածները</translation>
-<translation id="4923279099980110923">Այո, ուզում եմ օգնել</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Ձեր միացքները կհայտնվեն այստեղ</translation>
 <translation id="4925542575807923399">Այս հաշվի ադմինիստրատորը պահանջում է, որ այս հաշիվը լինի առաջին մուտքգործած հաշիվը բազմակի մուտքի աշխատաշրջանում:</translation>
@@ -3240,7 +3236,6 @@
 <translation id="5362741141255528695">Ընտրեք մասնավոր բանալու ֆայլը:</translation>
 <translation id="5363109466694494651">Powerwash և վերադարձ</translation>
 <translation id="5365881113273618889">Ձեր ընտրած պանակը պարունակում է վտանգավոր ֆայլեր: Ուզո՞ւմ եք <ph name="APP_NAME" /> հավելվածին այս պանակ մշտական մուտքի իրավունք տալ:</translation>
-<translation id="5367091008316207019">Ֆայլը կարդացվում է…</translation>
 <translation id="5368720394188453070">Ձեր հեռախոսը կողպված է: Մտնելու համար ապակողպեք այն:</translation>
 <translation id="5368779022775404937">Մուտք գործեք <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Միացնել մկնիկի արագացումը</translation>
@@ -5964,7 +5959,6 @@
 <translation id="8985264973231822211">Ակտիվ է եղել <ph name="DEVICE_LAST_ACTIVATED_TIME" /> օր առաջ</translation>
 <translation id="8986362086234534611">Հեռացնել</translation>
 <translation id="8986494364107987395">Ավտոմատ Google-ին ուղարկել օգտագործման վիճակագրությունները և խափանումների մասին հաշվետվությունները</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> կայքի և դրա տեղադրած հավելվածի կողմից պահված բոլոր տվյալներն ու քուքիները կջնջվեն։</translation>
 <translation id="8987927404178983737">Ամիս</translation>
 <translation id="8991520179165052608">Կայքը կարող է օգտագործել ձեր խոսափողը</translation>
 <translation id="899403249577094719">Netscape-ի վկայագրերի բազայի URL</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 623e569..8774ec5 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Buka di <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktivitas dan interaksi</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> diblokir</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookie diblokir}=1{Cookie diblokir, 1 pengecualian}other{Cookie diblokir, {COUNT} pengecualian}}</translation>
 <translation id="2121825465123208577">Ubah ukuran</translation>
 <translation id="2122305276694332719">Menghubungkan ke jaringan tersembunyi secara otomatis akan memungkinkan orang lain melihat perangkat Anda dan beberapa setelan jaringan, sehingga tindakan ini tidak direkomendasikan.</translation>
 <translation id="2123766928840368256">Pilih file yang berbeda</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Edit kartu</translation>
 <translation id="2154710561487035718">Salin URL</translation>
 <translation id="2155772377859296191">Sepertinya <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Anda dapat membantu menyempurnakan Safe Browsing dengan mengirimkan sebagian informasi sistem dan konten halaman ke Google.</translation>
 <translation id="2156294658807918600">Pekerja Layanan: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Untuk mendapatkan fitur tambahan, gunakan stasiun dok Dell yang didesain untuk berfungsi dengan Chromebook ini.</translation>
 <translation id="215753907730220065">Keluar dari Tampilan Layar Penuh</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Muat ulang aplikasi</translation>
 <translation id="2327492829706409234">Aktifkan aplikasi</translation>
 <translation id="2329597144923131178">Login untuk mendapatkan bookmark, histori, sandi, dan setelan Anda lainnya di semua perangkat.</translation>
-<translation id="2330607597130465898">Tidak ada perlindungan</translation>
 <translation id="2332131598580221120">Lihat di toko</translation>
 <translation id="2332192922827071008">Buka Preferensi</translation>
 <translation id="2332742915001411729">Setel ulang ke default</translation>
@@ -1869,7 +1868,6 @@
 <translation id="3492788708641132712">Sinkronisasi tidak berjalan. Coba masuk lagi.</translation>
 <translation id="3493486281776271508">Diperlukan sambungan Internet</translation>
 <translation id="3493881266323043047">Validitas</translation>
-<translation id="3494155060718700400">Tidak melindungi Anda terhadap situs, download, dan ekstensi berbahaya (tidak direkomendasikan). Anda akan tetap mendapatkan perlindungan Safe Browsing, jika tersedia, di layanan Google lainnya, seperti Gmail dan Penelusuran.</translation>
 <translation id="3494769164076977169">Tanyakan saat situs mencoba mendownload file secara otomatis setelah file pertama (disarankan)</translation>
 <translation id="3495660573538963482">Setelan Asisten Google</translation>
 <translation id="3496213124478423963">Perkecil</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">Situs berikut telah dicekal agar tidak melacak lokasi Anda pada halaman ini:</translation>
 <translation id="49226369361073053">{0,plural, =0{Update perangkat sekarang}=1{Update perangkat dalam 1 detik}other{Update perangkat dalam # detik}}</translation>
 <translation id="492299503953721473">Hapus aplikasi Android</translation>
-<translation id="4923279099980110923">Ya, saya ingin membantu</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Port Anda akan muncul di sini</translation>
 <translation id="4925542575807923399">Administrator akun ini mewajibkan akun ini untuk menjadi akun masuk pertama dalam sesi fitur masuk banyak akun.</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">Pilih file kunci pribadi.</translation>
 <translation id="5363109466694494651">Powerwash dan Kembalikan</translation>
 <translation id="5365881113273618889">Folder yang Anda pilih berisi file sensitif. Yakin ingin memberi "<ph name="APP_NAME" />" akses tulis permanen ke folder ini?</translation>
-<translation id="5367091008316207019">Membaca file..</translation>
 <translation id="5368720394188453070">Ponsel terkunci. Buka kunci untuk masuk.</translation>
 <translation id="5368779022775404937">Login ke <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktifkan akselerasi mouse</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211">Aktif <ph name="DEVICE_LAST_ACTIVATED_TIME" /> hari yang lalu</translation>
 <translation id="8986362086234534611">Lupakan</translation>
 <translation id="8986494364107987395">Kirim statistik penggunaan dan laporan error ke Google secara otomatis</translation>
-<translation id="8986651757229422279">Ini akan menghapus semua data dan cookie yang disimpan oleh <ph name="ORIGIN_NAME" /> dan aplikasi yang terinstal di dalamnya.</translation>
 <translation id="8987927404178983737">Bulan</translation>
 <translation id="8991520179165052608">Situs dapat menggunakan mikrofon</translation>
 <translation id="899403249577094719">Netscape Certificate Base URL</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 29b18d5..f4d4c11 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Breyta korti</translation>
 <translation id="2154710561487035718">Afrita vefslóð</translation>
 <translation id="2155772377859296191">Virðist vera <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Þú getur hjálpað til við að bæta örugga vefnotkun með því að senda kerfisupplýsingar og efni síðu til Google.</translation>
 <translation id="2156294658807918600">Þjónustuaðili: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Til að fá viðbótareiginleika skaltu nota Dell-dokku sem er hönnuð fyrir þessa Chromebook tölvu.</translation>
 <translation id="215753907730220065">Hætta að nota allan skjáinn</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">Endu&amp;rhlaða forrit</translation>
 <translation id="2327492829706409234">Virkja forrit</translation>
 <translation id="2329597144923131178">Skráðu þig inn til að fá bókamerkin þín, ferilinn, aðgangsorð og aðrar stillingar í öll tækin þín.</translation>
-<translation id="2330607597130465898">Engin vörn</translation>
 <translation id="2332131598580221120">Skoða í verslun</translation>
 <translation id="2332192922827071008">Opna kjörstillingar</translation>
 <translation id="2332742915001411729">Endurstilla á sjálfgefið</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Samstilling virkar ekki. Prófaðu að skrá þig inn aftur.</translation>
 <translation id="3493486281776271508">Nettenging er nauðsynleg</translation>
 <translation id="3493881266323043047">Gildi</translation>
-<translation id="3494155060718700400">Ver þig ekki fyrir hættulegum vefsvæðum, niðurhali og viðbótum (ekki er mælt með þessu). Þú munt áfram geta notað örugga vefskoðun, þar sem hún er í boði, í annarri þjónustu Google á borð við Gmail og leit.</translation>
 <translation id="3494769164076977169">Spyrja þegar vefsvæði reynir að sækja skrár sjálfkrafa eftir fyrstu skrána (ráðlagt)</translation>
 <translation id="3495660573538963482">Stillingar Google hjálparans</translation>
 <translation id="3496213124478423963">Minnka aðdrátt</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Eftirfarandi vefsvæðum hefur verið meinað að rekja staðsetningu þína á þessari síðu:</translation>
 <translation id="49226369361073053">{0,plural, =0{Uppfærðu tækið núna}=1{Uppfærðu tækið innan einnar sekúndu}one{Uppfærðu tækið innan # sekúndu}other{Uppfærðu tækið innan # sekúndna}}</translation>
 <translation id="492299503953721473">Fjarlægja Android forrit</translation>
-<translation id="4923279099980110923">Já, ég vil hjálpa</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Gáttirnar þínar birtast hér</translation>
 <translation id="4925542575807923399">Stjórnandi þessa reiknings krefst þess að reikningurinn sé fyrsti innskráði reikningurinn í lotu fyrir margar innskráningar.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Veldu einkalykilsskrá.</translation>
 <translation id="5363109466694494651">Djúphreinsa og færa í fyrra horf</translation>
 <translation id="5365881113273618889">Mappan sem þú valdir inniheldur viðkvæmar skrár. Ertu viss um að þú viljir veita „<ph name="APP_NAME" />“ varanlegan skrifaðgang að þessari möppu?</translation>
-<translation id="5367091008316207019">Les skrá...</translation>
 <translation id="5368720394188453070">Síminn er læstur. Taktu hann úr lás til að komast inn.</translation>
 <translation id="5368779022775404937">Skráðu þig inn á <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Virkja vélbúnaðarhröðun músar</translation>
@@ -5962,7 +5957,6 @@
 <translation id="8985264973231822211">Virkt fyrir <ph name="DEVICE_LAST_ACTIVATED_TIME" /> degi</translation>
 <translation id="8986362086234534611">Gleyma</translation>
 <translation id="8986494364107987395">Senda sjálfkrafa talnagögn um notkun og tilkynningar um hrun til Google</translation>
-<translation id="8986651757229422279">Þetta hreinsar öll gögn og fótspor sem <ph name="ORIGIN_NAME" /> og uppsett forrit þess hafa vistað.</translation>
 <translation id="8987927404178983737">Mánuður</translation>
 <translation id="8991520179165052608">Vefsvæði getur notað hljóðnemann þinn</translation>
 <translation id="899403249577094719">Grunnslóð Netscape-vottorðs</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 7bc87288..24ffd1e 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Modifica la carta</translation>
 <translation id="2154710561487035718">Copia URL</translation>
 <translation id="2155772377859296191">Risoluzione di <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Puoi contribuire a migliorare la Navigazione sicura, grazie all'invio di informazioni di sistema e contenuti delle pagine a Google.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Per avere a disposizione funzionalità aggiuntive, usa una dock station Dell progettata per supportare questo Chromebook.</translation>
 <translation id="215753907730220065">Esci da schermo intero</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Ricarica app</translation>
 <translation id="2327492829706409234">Attiva applicazione</translation>
 <translation id="2329597144923131178">Accedi per visualizzare i tuoi Preferiti, la cronologia, le password e altre impostazioni su tutti i tuoi dispositivi.</translation>
-<translation id="2330607597130465898">Nessuna protezione</translation>
 <translation id="2332131598580221120">Visualizza nello store</translation>
 <translation id="2332192922827071008">Apri Preferenze</translation>
 <translation id="2332742915001411729">Ripristina impostazioni predefinite</translation>
@@ -1871,7 +1869,6 @@
 <translation id="3492788708641132712">La sincronizzazione non funziona. Riprova ad accedere.</translation>
 <translation id="3493486281776271508">È necessaria una connessione a Internet</translation>
 <translation id="3493881266323043047">Validità</translation>
-<translation id="3494155060718700400">Non ti protegge da siti web, download ed estensioni pericolosi (opzione non consigliata). Riceverai ancora la protezione di Navigazione sicura, se disponibile, in altri servizi Google, come Gmail e Ricerca.</translation>
 <translation id="3494769164076977169">Chiedi conferma quando un sito tenta di scaricare automaticamente file dopo il primo file (opzione consigliata)</translation>
 <translation id="3495660573538963482">Impostazioni dell'Assistente Google</translation>
 <translation id="3496213124478423963">Riduci</translation>
@@ -2922,7 +2919,6 @@
 <translation id="4920887663447894854">Il monitoraggio della tua posizione da parte dei seguenti siti è stato bloccato su questa pagina:</translation>
 <translation id="49226369361073053">{0,plural, =0{Aggiorna ora il dispositivo}=1{Aggiorna il dispositivo entro 1 secondo}other{Aggiorna il dispositivo entro # secondi}}</translation>
 <translation id="492299503953721473">Rimuovi app Android</translation>
-<translation id="4923279099980110923">Sì, desidero dare il mio contributo</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Le tue porte verranno visualizzate qui</translation>
 <translation id="4925542575807923399">L'amministratore di questo account richiede che questo account sia il primo account registrato in una sessione con accesso simultaneo.</translation>
@@ -3236,7 +3232,6 @@
 <translation id="5362741141255528695">Seleziona il file della chiave privata.</translation>
 <translation id="5363109466694494651">Esegui Powerwash e ripristina</translation>
 <translation id="5365881113273618889">La cartella che hai selezionato contiene file sensibili. Vuoi concedere a "<ph name="APP_NAME" />" accesso di scrittura permanente a questa cartella?</translation>
-<translation id="5367091008316207019">Lettura del file in corso...</translation>
 <translation id="5368720394188453070">Il telefono è stato bloccato. Sbloccalo per accedere.</translation>
 <translation id="5368779022775404937">Accedi a <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Attiva l'accelerazione del mouse</translation>
@@ -5961,7 +5956,6 @@
 <translation id="8985264973231822211">Attivo <ph name="DEVICE_LAST_ACTIVATED_TIME" /> giorno fa</translation>
 <translation id="8986362086234534611">Elimina</translation>
 <translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e rapporti sugli arresti anomali</translation>
-<translation id="8986651757229422279">Verranno cancellati tutti i dati e i cookie memorizzati da <ph name="ORIGIN_NAME" /> e la relativa app installata.</translation>
 <translation id="8987927404178983737">Mese</translation>
 <translation id="8991520179165052608">Il sito può usare il microfono</translation>
 <translation id="899403249577094719">URL di base certificato Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index b703a4c..a3cd1722 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">עריכת כרטיס</translation>
 <translation id="2154710561487035718">העתק כתובת אתר</translation>
 <translation id="2155772377859296191">‏נראה כמו <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">‏על-ידי שליחה של חלק מפרטי המערכת ותוכן הדפים אל Google, אפשר לעזור בשיפור של 'גלישה בטוחה'.</translation>
 <translation id="2156294658807918600">‏קובץ שירות (service worker): <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">‏כדי להשתמש בתכונות נוספות, יש להשתמש בתחנת עגינה של Dell שתוכננה לפעול עם ה-Chromebook הזה.</translation>
 <translation id="215753907730220065">צא ממסך מלא</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">&amp;טען אפליקציה מחדש</translation>
 <translation id="2327492829706409234">הפעל יישום</translation>
 <translation id="2329597144923131178">יש להיכנס כדי לקבל גישה אל הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות בכל המכשירים שברשותך.</translation>
-<translation id="2330607597130465898">ללא הגנה</translation>
 <translation id="2332131598580221120">הצג בחנות</translation>
 <translation id="2332192922827071008">פתיחת ההעדפות</translation>
 <translation id="2332742915001411729">אפס לברירת המחדל</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">הסנכרון לא פועל. נסה להיכנס שוב.</translation>
 <translation id="3493486281776271508">דרוש חיבור לאינטרנט</translation>
 <translation id="3493881266323043047">תוקף</translation>
-<translation id="3494155060718700400">‏אין הגנה מפני הורדות, תוספים ואתרים מסוכנים (לא מומלץ). גלישה בטוחה עדיין תגן עליך בשירותים אחרים של Google שבהם היא זמינה, כמו Gmail והחיפוש.</translation>
 <translation id="3494769164076977169">שאל כאשר אתר מנסה להוריד קבצים באופן אוטומטי לאחר הקובץ הראשון (מומלץ)</translation>
 <translation id="3495660573538963482">‏ההגדרות של Google Assistant</translation>
 <translation id="3496213124478423963">התרחק</translation>
@@ -2921,7 +2918,6 @@
 <translation id="4920887663447894854">האתרים הבאים נחסמו ממעקב אחר המיקום שלך בדף זה:</translation>
 <translation id="49226369361073053">{0,plural, =0{יש לעדכן את המכשיר עכשיו}=1{יש לעדכן את המכשיר תוך שנייה אחת}two{יש לעדכן את המכשיר תוך # שניות}many{יש לעדכן את המכשיר תוך # שניות}other{יש לעדכן את המכשיר תוך # שניות}}</translation>
 <translation id="492299503953721473">‏הסר אפליקציות Android</translation>
-<translation id="4923279099980110923">כן, אני רוצה לעזור</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">היציאות שלך יופיעו כאן</translation>
 <translation id="4925542575807923399">מנהל המערכת עבור החשבון הזה דורש שהחשבון הזה יהיה הראשון שיבצעו עבורו כניסה בעת כניסה עם מספר חשבונות</translation>
@@ -3235,7 +3231,6 @@
 <translation id="5362741141255528695">בחר קובץ מפתח פרטי.</translation>
 <translation id="5363109466694494651">‏בצע Powerwash וחזור לגרסה הקודמת</translation>
 <translation id="5365881113273618889">התיקייה שבחרת מכילה קבצים רגישים. האפליקציה <ph name="APP_NAME" /> תקבל הרשאת כתיבה קבועה לתיקייה הזו. להמשיך?</translation>
-<translation id="5367091008316207019">קורא את הקובץ..</translation>
 <translation id="5368720394188453070">הטלפון שלך נעול. בטל את הנעילה כדי להיכנס.</translation>
 <translation id="5368779022775404937">כניסה אל <ph name="REALM" /></translation>
 <translation id="5369491905435686894">הפעלת האצה של עכבר</translation>
@@ -5962,7 +5957,6 @@
 <translation id="8985264973231822211">שימוש אחרון: לפני יום אחד (<ph name="DEVICE_LAST_ACTIVATED_TIME" />)</translation>
 <translation id="8986362086234534611">שכח</translation>
 <translation id="8986494364107987395">‏שליחה אוטומטית של דוחות קריסה וסטטיסטיקות שימוש ל-Google</translation>
-<translation id="8986651757229422279">‏הפעולה הזו תמחק את כל הנתונים וקובצי ה-Cookie שאוחסנו על-ידי <ph name="ORIGIN_NAME" /> ואת האפליקציה שהותקנה ממקור זה.</translation>
 <translation id="8987927404178983737">חודש</translation>
 <translation id="8991520179165052608">האתר רשאי להשתמש במיקרופון</translation>
 <translation id="899403249577094719">‏כתובת אתר בסיסית של אישור Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 470f45a7..7ae4135 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> で開く</translation>
 <translation id="2120297377148151361">アクティビティと操作</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />をブロック</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookie がブロックされています}=1{Cookie がブロックされています(1 件の例外)}other{Cookie がブロックされています({COUNT} 件の例外)}}</translation>
 <translation id="2121825465123208577">サイズを変更</translation>
 <translation id="2122305276694332719">非公開ネットワークに自動接続すると、お使いのデバイスと一部のネットワーク設定が他のユーザーに公開されます。そのためこの設定はおすすめしません。</translation>
 <translation id="2123766928840368256">別のファイルを選択</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">カードを編集</translation>
 <translation id="2154710561487035718">URL をコピー</translation>
 <translation id="2155772377859296191">表示上のサイズ: <ph name="WIDTH" />x<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">一部のシステム情報とページのコンテンツを Google に送信して、セーフ ブラウジングの改善にご協力ください。</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">すべての機能を利用できるようにするには、この Chromebook に対応した Dell のドッキング ステーションを使用してください。</translation>
 <translation id="215753907730220065">全画面表示を終了</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">アプリを再読み込み(&amp;R)</translation>
 <translation id="2327492829706409234">アプリを有効にする</translation>
 <translation id="2329597144923131178">ログインすると、お使いのどのデバイスでも同じブックマーク、履歴、パスワード、その他の設定を利用できるようになります。</translation>
-<translation id="2330607597130465898">保護なし</translation>
 <translation id="2332131598580221120">ストアで見る</translation>
 <translation id="2332192922827071008">設定を開く</translation>
 <translation id="2332742915001411729">デフォルトに戻す</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">同期が機能していません。もう一度ログインしてみてください。</translation>
 <translation id="3493486281776271508">インターネット接続が必要です</translation>
 <translation id="3493881266323043047">有効期間</translation>
-<translation id="3494155060718700400">危険なウェブサイト、ダウンロード、拡張機能から保護しません(推奨されません)。セーフ ブラウジングによる保護については、Gmail や Google 検索といった他の Google サービスで利用可能な場合は引き続き保護されます。</translation>
 <translation id="3494769164076977169">サイトが最初のファイルに続いて他のファイルを自動的にダウンロードしようとする際に確認する(推奨)</translation>
 <translation id="3495660573538963482">Google アシスタントの設定</translation>
 <translation id="3496213124478423963">縮小</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">以下のサイトは、このページ内であなたの現在地を追跡できないようブロックされています:</translation>
 <translation id="49226369361073053">{0,plural, =0{今すぐデバイスを更新してください}=1{1 秒以内にデバイスを更新してください}other{# 秒以内にデバイスを更新してください}}</translation>
 <translation id="492299503953721473">Android アプリを削除</translation>
-<translation id="4923279099980110923">はい、協力します</translation>
 <translation id="4924352752174756392">12 倍</translation>
 <translation id="4925320384394644410">ポートはここに表示されます</translation>
 <translation id="4925542575807923399">このアカウントの管理者が、マルチ ログイン セッションにおいて最初にこのアカウントにログインすることを要件としています。</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">秘密鍵ファイルを選択します。</translation>
 <translation id="5363109466694494651">Powerwash を実行して以前のバージョンに戻す</translation>
 <translation id="5365881113273618889">選択したフォルダには、機密ファイルが含まれています。このフォルダに対する永続的な書き込みアクセス権を「<ph name="APP_NAME" />」に付与してもよろしいですか?</translation>
-<translation id="5367091008316207019">ファイルを読み取っています...</translation>
 <translation id="5368720394188453070">スマートフォンがロックされています。ログインするにはロックを解除してしてください。</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> にログインしてください</translation>
 <translation id="5369491905435686894">マウス アクセラレーションを有効にする</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">最終同期: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> 日前</translation>
 <translation id="8986362086234534611">削除</translation>
 <translation id="8986494364107987395">使用統計データと障害レポートを Google に自動送信します</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> により保存されたすべてのデータと Cookie、インストールされたアプリが削除されます。</translation>
 <translation id="8987927404178983737">月</translation>
 <translation id="8991520179165052608">サイトにマイクの使用が許可されています</translation>
 <translation id="899403249577094719">Netscape 証明書基本 URL</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 99b86fc..2d737ba5 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">ბარათის რედაქტირება</translation>
 <translation id="2154710561487035718">დააკოპიე URL</translation>
 <translation id="2155772377859296191">როგორც ჩანს, გარჩევადობა არის <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">შეუწყვეთ ხელი Safe Browsing-ის გაუმჯობესებას სისტემის გარკვეული ინფორმაციასა და გვერდების კონტენტის Google-ისთვის გაგზავნით.</translation>
 <translation id="2156294658807918600">სერვისის დამმუშავებელი: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">დამატებითი ფუნქციებით სარგებლობისთვის გამოიყენეთ Dell-ის სამაგრი, რომელიც შექმნილია ამ Chromebook-თან მუშაობისთვის.</translation>
 <translation id="215753907730220065">სრულეკრანიანი რეჟიმიდან გამოსვლა</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">პროგრამის ხე&amp;ლახლა ჩატვირთვა</translation>
 <translation id="2327492829706409234">პროგრამის ჩართვა</translation>
 <translation id="2329597144923131178">შედით სისტემაში თქვენი სანიშნეების, ისტორიის, პაროლების და სხვა პარამეტრების ყველა თქვენს მოწყობილობაში მისაღებად.</translation>
-<translation id="2330607597130465898">დაცვის გარეშე</translation>
 <translation id="2332131598580221120">მაღაზიაში ნახვა</translation>
 <translation id="2332192922827071008">პარამეტრების გახსნა</translation>
 <translation id="2332742915001411729">დააბრუნეთ ნაგულისხმევზე</translation>
@@ -1871,7 +1869,6 @@
 <translation id="3492788708641132712">სინქრონიზაცია არ მუშაობს. ცადეთ სისტემაში ხელახლა შესვლა.</translation>
 <translation id="3493486281776271508">საჭიროა ინტერნეტ-კავშირი</translation>
 <translation id="3493881266323043047">მოქმედების ვადა</translation>
-<translation id="3494155060718700400">არ დაგიცავთ სახიფათო ვებსაიტებისგან, ჩამოტვირთვებისა და გაფართოებებისგან (არ არის რეკომენდებული). Safe Browsing-ის დაცვით (ხელმისაწვდომობის მიხედვით) მაინც ისარგებლებთ სხვა Google სერვისებში, როგორიცაა Gmail თუ Search.</translation>
 <translation id="3494769164076977169">იკითხეთ, როცა საიტი ცდილობს ფაილების ავტომატურად ჩამოტვირთვას პირველი ფაილის შემდეგ (რეკომენდირებულია)</translation>
 <translation id="3495660573538963482">Google ასისტენტის პარამეტრები</translation>
 <translation id="3496213124478423963">მასშტაბის დაპატარავება</translation>
@@ -2922,7 +2919,6 @@
 <translation id="4920887663447894854">შემდეგი საიტები დაბლოკილია ამ გვერდზე თქვენი მდებარეობის თვალთვალისგან:</translation>
 <translation id="49226369361073053">{0,plural, =0{განაახლეთ მოწყობილობა ახლავე}=1{განაახლეთ მოწყობილობა 1 წამის განმავლობაში}other{განაახლეთ მოწყობილობა # წამის განმავლობაში}}</translation>
 <translation id="492299503953721473">Android-ის აპების ამოშლა</translation>
-<translation id="4923279099980110923">დიახ, მინდა დაგეხმაროთ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">აქ გამოჩნდება თქვენი პორტები</translation>
 <translation id="4925542575807923399">ამ ანგარიშის ადმინისტრატორს მოეთხოვება რომ ეს ანგარიში იყოს მრავალჯერადი შესვლის სესიის პირველი ანგარიში.</translation>
@@ -3236,7 +3232,6 @@
 <translation id="5362741141255528695">აირჩიეთ პირადი გასაღების ფაილი.</translation>
 <translation id="5363109466694494651">Powerwash-ის განხორციელება და წინა ვერსიის დაბრუნება</translation>
 <translation id="5365881113273618889">თქვენ მიერ არჩეული საქაღალდე შეიცავს კონფიდენციალურ ფაილებს. ნამდვილად გსურთ, მიანიჭოთ „<ph name="APP_NAME" />“-ს ამ საქაღალდეში ჩაწერის მუდმივი ნებართვა?</translation>
-<translation id="5367091008316207019">ფაილის კითხვა…</translation>
 <translation id="5368720394188453070">ტელეფონი დაბლოკილია. განბლოკვისათვის შეიყვანეთ.</translation>
 <translation id="5368779022775404937"><ph name="REALM" />-ში შესვლა</translation>
 <translation id="5369491905435686894">მაუსის აჩქარების ჩართვა</translation>
@@ -5960,7 +5955,6 @@
 <translation id="8985264973231822211">აქტიური იყო <ph name="DEVICE_LAST_ACTIVATED_TIME" /> დღის წინ</translation>
 <translation id="8986362086234534611">დავიწყება</translation>
 <translation id="8986494364107987395">გამოყენების სტატისტიკისა და შეცდომების შესახებ მოხსენებების ავტომატური გაგზავნა Google-ში</translation>
-<translation id="8986651757229422279">ეს მოქმედება გაასუფთავებს <ph name="ORIGIN_NAME" />-ისა და მისი დაინსტალირებული აპების მიერ შენახულ ყველა მონაცემსა და ქუქი-ჩანაწერს.</translation>
 <translation id="8987927404178983737">თვე</translation>
 <translation id="8991520179165052608">საიტს შეუძლია თქვენი მიკროფონის გამოყენება</translation>
 <translation id="899403249577094719">Netscape სერტიფიკატის ბაზის URL</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index a55f0334..2b7a2b1c 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> қолданбасынан ашу</translation>
 <translation id="2120297377148151361">Белсенділік және өзара әрекеттер</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> бөгелді.</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookie файлдары бөгелді}=1{Cookie файлдары бөгелді (1 ерекше жағдай)}other{Cookie файлдары бөгелді ({COUNT} ерекше жағдай)}}</translation>
 <translation id="2121825465123208577">Өлшемін өзгерту</translation>
 <translation id="2122305276694332719">Жасырын желіге автоматты түрде қосылсаңыз, басқалар сіздің құрылғыңызды және кейбір желілік параметрлеріңізді көре алады. Сондықтан жасырын желіге автоматты түрде қосылмағаныңыз жөн.</translation>
 <translation id="2123766928840368256">Басқа файлды таңдау</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">Карта мәліметін өңдеу</translation>
 <translation id="2154710561487035718">URL сілтемесін көшіру</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> болып көрінеді</translation>
-<translation id="2156283799932971644">Кейбір жүйе ақпаратын және бет мазмұнын Google-ға жіберу арқылы Safe Browsing қызметін жақсартуға көмектесе аласыз.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Қосымша функцияларды пайдалану үшін осы Chromebook құрылғысымен жұмыс істеуге арналған қондыру станциясын пайдаланыңыз.</translation>
 <translation id="215753907730220065">Толық экраннан шығу</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">Қолданбаны &amp;қайта жүктеу</translation>
 <translation id="2327492829706409234">Қолданбаны қосу</translation>
 <translation id="2329597144923131178">Барлық құрылғыларда бетбелгілеріңізді, журналыңызды, құпия сөздеріңізді және басқа параметрлеріңізді алу үшін кіріңіз.</translation>
-<translation id="2330607597130465898">Қорғалмаған</translation>
 <translation id="2332131598580221120">Дүкенде көру</translation>
 <translation id="2332192922827071008">Жеке параметрлерді ашу</translation>
 <translation id="2332742915001411729">Әдепкі параметрлерге қайта орнату</translation>
@@ -1148,7 +1147,7 @@
 <translation id="2523184218357549926">Кірген беттердің URL мекенжайларын Google-ға жібереді</translation>
 <translation id="2526277209479171883">Орнату және жалғастыру</translation>
 <translation id="2526590354069164005">Жұмыс үстелі</translation>
-<translation id="2526619973349913024">Жаңартуды тексеру</translation>
+<translation id="2526619973349913024">Жаңа нұсқасының бар-жоғын тексеру</translation>
 <translation id="2527167509808613699">Байланыстың кез келген түрі</translation>
 <translation id="2532589005999780174">Жоғары контраст режимі</translation>
 <translation id="253434972992662860">&amp;Кідірту</translation>
@@ -1868,7 +1867,6 @@
 <translation id="3492788708641132712">Синхрондалып жатқан жоқ. Жүйеге қайта кіріп көріңіз.</translation>
 <translation id="3493486281776271508">Интернет байланысы керек.</translation>
 <translation id="3493881266323043047">Жарамдылық</translation>
-<translation id="3494155060718700400">Қауіпті веб-сайттардан, жүктелетін файлдардан және кеңейтімдерден қорғамайды (ұсынылмайды). Gmail және Search сияқты басқа Google қызметтерінде "Қауіпсіз шолу" қорғаныс функциясын пайдаланатын боласыз.</translation>
 <translation id="3494769164076977169">Сайт бірінші файлдан кейін файлдарды автоматты түрде жүктеуге әрекет еткенде сұрау (ұсынылған)</translation>
 <translation id="3495660573538963482">Google Assistant параметрлері</translation>
 <translation id="3496213124478423963">Кішірейту</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">Келесі сайттар мына бетте орналасқан жеріңізді бақылаудан тыйылған:</translation>
 <translation id="49226369361073053">{0,plural, =0{Құрылғыны қазір жаңарту керек}=1{Құрылғыны 1 секундта жаңарту керек}other{Құрылғыны # секундта жаңарту керек}}</translation>
 <translation id="492299503953721473">Android қолданбаларын өшіру</translation>
-<translation id="4923279099980110923">Иә, көмектескім келеді</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Порттар осы жерде көрсетіледі.</translation>
 <translation id="4925542575807923399">Бұл есептік жазбаның әкімшісі есептік жазбаның көп кіру сеансында алғашқы жүйеге кірген есептік жазба болуын талап етеді.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">Жеке негізгі файлды таңдаңыз.</translation>
 <translation id="5363109466694494651">Powerwash және Қайтару</translation>
 <translation id="5365881113273618889">Сіз таңдаған қалтада құпия файлдар бар. "<ph name="APP_NAME" />" қолданбасына қалтадағы деректерді тұрақты жазу мүмкіндігін бергіңіз келе ме?</translation>
-<translation id="5367091008316207019">Файл оқылуда…</translation>
 <translation id="5368720394188453070">Телефоныңыз құлыптаулы. Кіру үшін оның құлпын ашыңыз.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> сайтына кіріңіз</translation>
 <translation id="5369491905435686894">Тінтуір жылдамдатқышын іске қосу</translation>
@@ -5958,7 +5954,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> күн бұрын қосылған.</translation>
 <translation id="8986362086234534611">Ұмыту</translation>
 <translation id="8986494364107987395">Қолданыс статистикасы мен жаңылыс туралы есептерді Google компаниясына автоматты түрде жіберу</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> және ол орнатқан қолданба сақтаған деректер мен cookie файлдарының барлығы өшіріледі.</translation>
 <translation id="8987927404178983737">Ай</translation>
 <translation id="8991520179165052608">Сайт микрофонды пайдалана алады</translation>
 <translation id="899403249577094719">Netscape сертификатының негізгі URL мекенжайы</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index db760d4..f6e0ef2 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">បើកនៅក្នុង <ph name="APP" /></translation>
 <translation id="2120297377148151361">សកម្មភាព និងអន្តរ​កម្ម</translation>
 <translation id="2120639962942052471">បាន​ទប់ស្កាត់ <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{បាន​ទប់ស្កាត់​ខូគី​}=1{បានទប់ស្កាត់ខូគី ដោយមានការលើកលែង 1}other{បាន​ទប់ស្កាត់​ខូគី ដោយមាន​ការលើកលែង {COUNT}}}</translation>
 <translation id="2121825465123208577">ប្ដូរទំហំ</translation>
 <translation id="2122305276694332719">ការតភ្ជាប់ទៅបណ្ដាញដែលបានលាក់ដោយស្វ័យប្រវត្តិ​​អាចឱ្យអ្នកដទៃ​អាចមើលឃើញការកំណត់បណ្ដាញមួយចំនួន​ និងឧបករណ៍​របស់អ្នក ដូច្នេះយើង​សូមណែនាំមិន​ឱ្យធ្វើការតភ្ជាប់​ទេ។</translation>
 <translation id="2123766928840368256">ជ្រើសរើស​ឯកសារ​ផ្សេង</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">កែសម្រួលកាត</translation>
 <translation id="2154710561487035718">ចម្លង URL</translation>
 <translation id="2155772377859296191">មើល​ទៅដូចជា <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">អ្នក​អាច​ជួយកែលម្អ​​ការ​រុករក​ដោយ​សុវត្ថិភាព​ដោយ​ផ្ញើ​ព័ត៌មាន​ប្រព័ន្ធ និង​ខ្លឹមសារ​ទំព័រមួយ​ចំនួន​ទៅ Google ។</translation>
 <translation id="2156294658807918600">បុគ្គលិក​បម្រើសេវាកម្ម៖ <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ដើម្បីទទួលបាន​មុខងារបន្ថែម សូមប្រើឧបករណ៍ភ្ជាប់ Dell​ ដែលរចនាឡើងសម្រាប់ដំណើរការជាមួយ​ Chromebook នេះ។</translation>
 <translation id="215753907730220065">ចាកចេញពីអេក្រង់ពេញ</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">ដំណើរការកម្មវិធីឡើងវិញ</translation>
 <translation id="2327492829706409234">បើកដំណើរការកម្មវិធី</translation>
 <translation id="2329597144923131178">ចូលគណនីដើម្បីទទួលយកចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់ផ្សេងទៀតរបស់អ្នកទៅលើឧបករណ៍ទាំងអស់របស់អ្នក។</translation>
-<translation id="2330607597130465898">គ្មាន​ការការពារ​ទេ</translation>
 <translation id="2332131598580221120">មើលនៅក្នុងហាង</translation>
 <translation id="2332192922827071008">បើក​ចំណូលចិត្ត</translation>
 <translation id="2332742915001411729">កំណត់ទៅលំនាំដើមឡើងវិញ</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">សមកាលកម្មមិនដំណើរការទេ សូមសាកល្បងចូលគណនីម្តងទៀត។</translation>
 <translation id="3493486281776271508">តម្រូវឱ្យមាន​ការតភ្ជាប់អ៊ីនធឺណិត</translation>
 <translation id="3493881266323043047">សុពលភាព</translation>
-<translation id="3494155060718700400">មិន​ការពារអ្នក​ពី​គេហទំព័រ ការទាញយក និង​កម្មវិធីបន្ថែម​ដែលមានគ្រោះថ្នាក់​ទេ (មិនណែនាំ)។ អ្នក​នឹង​នៅតែ​ទទួលបាន​ការការពារ​ការរុករក​ដោយសុវត្ថិភាព (ប្រសិនបើមាន) នៅក្នុង​សេវាកម្ម Google ផ្សេងទៀត​ដូចជា Gmail និង​កម្មវិធីស្វែងរកជាដើម។</translation>
 <translation id="3494769164076977169">សួរនៅពេលគេហទំព័រព្យាយាមទាញយកឯកសារដោយស្វ័យប្រវត្តិ បន្ទាប់ពីឯកសារដំបូង (បានណែនាំ)</translation>
 <translation id="3495660573538963482">ការកំណត់ Google ជំនួយការ</translation>
 <translation id="3496213124478423963">បង្រួម</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">គេហទំព័រខាងក្រោមត្រូវបានរារាំងពីការតាមដានទីតាំងរបស់អ្នកនៅលើទំព័រនេះ៖</translation>
 <translation id="49226369361073053">{0,plural, =0{ដំឡើងកំណែ​ឧបករណ៍​ឥឡូវនេះ}=1{ដំឡើងកំណែ​ឧបករណ៍​ក្នុងរយៈពេល 1 វិនាទី​ទៀត}other{ដំឡើងកំណែ​ឧបករណ៍​ក្នុងរយៈពេល # វិនាទី​ទៀត}}</translation>
 <translation id="492299503953721473">យកកម្មវិធី Android ចេញ</translation>
-<translation id="4923279099980110923">បាទ/ចាស ខ្ញុំចង់ជួយ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ច្រករបស់អ្នកនឹងបង្ហាញនៅទីនេះ</translation>
 <translation id="4925542575807923399">អ្នកគ្រប់គ្រងគណនីនេះតម្រូវឲ្យគណនីនេះជាគណនីចូលមុននៅក្នុងវេនចូលច្រើនគណនី។</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">ជ្រើសរើសឯកសារសោឯកជន</translation>
 <translation id="5363109466694494651">Powerwash និងការត្រលប់</translation>
 <translation id="5365881113273618889">ថតដែលអ្នក​បានជ្រើសរើស​មានឯកសាររសើប។ តើអ្នកប្រាកដថា​ចង់អនុញ្ញាតឱ្យ "<ph name="APP_NAME" />" ចូលសរសេរ​លើ​ថត​នេះជាអចិន្ត្រៃយ៍ដែរទេ?</translation>
-<translation id="5367091008316207019">កំពុងអានឯកសារ..</translation>
 <translation id="5368720394188453070">ទូរស័ព្ទរបស់អ្នកបានចាក់សោ។ ដោះសោវាដើម្បីចូល។</translation>
 <translation id="5368779022775404937">ចូល​ទៅ​កាន់ <ph name="REALM" /></translation>
 <translation id="5369491905435686894">បើក​ការបង្កើន​ល្បឿន​កណ្ដុរ</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">ដំណើរការ <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ថ្ងៃមុន</translation>
 <translation id="8986362086234534611">បំភ្លេច</translation>
 <translation id="8986494364107987395">ផ្ញើស្ថិតិការប្រើប្រាស់ និងរបាយការណ៍ការគាំងទៅ Google ដោយស្វ័យប្រវត្តិ</translation>
-<translation id="8986651757229422279">សកម្មភាពភាពនេះនឹង​សម្អាត​ទិន្នន័យ និងខូគីទាំងអស់​ដែលបានរក្សាទុកដោយ <ph name="ORIGIN_NAME" /> និងកម្មវិធីដែលវាបានដំឡើង។</translation>
 <translation id="8987927404178983737">ខែ</translation>
 <translation id="8991520179165052608">ទំព័រ​អាចប្រើ​មីក្រូហ្វូន​របស់អ្នកបាន</translation>
 <translation id="899403249577094719">URL វិញ្ញាបនប័ត្រគោល Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 5876fdd..9275b0e 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">ಕಾರ್ಡ್ ಎಡಿಟ್ ಮಾಡಿ</translation>
 <translation id="2154710561487035718">URL ನಕಲಿಸಿ</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ನಂತೆ ತೋರುತ್ತಿದೆ</translation>
-<translation id="2156283799932971644">ಸಿಸ್ಟಂ ಕುರಿತು ಕೆಲವೊಂದು ಮಾಹಿತಿಯನ್ನು ಮತ್ತು ಪುಟದ ವಿಷಯವನ್ನು Google ಗೆ ಕಳುಹಿಸುವ ಮೂಲಕ, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಸುಧಾರಿಸಲು ನೀವು ಸಹಾಯ ಮಾಡಬಹುದು.</translation>
 <translation id="2156294658807918600">ಸೇವಾ ಕಾರ್ಯಕರ್ತ: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ಹೆಚ್ಚುವರಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪಡೆಯಲು, ಈ Chromebook ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ Dell ಡಾಕಿಂಗ್ ಸ್ಟೇಷನ್ ಒಂದನ್ನು ಬಳಸಿ.</translation>
 <translation id="215753907730220065">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">ಅಪ್ಲಿಕೇಶನ್ &amp;ಮರುಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="2327492829706409234">ಅಪ್ಲಿಕೇಶನ್ ಸಕ್ರಿಯಗೊಳಿಸು</translation>
 <translation id="2329597144923131178">ನಿಮ್ಮ ಎಲ್ಲ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
-<translation id="2330607597130465898">ಯಾವುದೇ ರಕ್ಷಣೆಯಿಲ್ಲ</translation>
 <translation id="2332131598580221120">ಸ್ಟೋರ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ</translation>
 <translation id="2332192922827071008">ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="2332742915001411729">ಡೀಫಾಲ್ಟ್‌ಗೆ ಮರುಹೊಂದಿಸಿ</translation>
@@ -1871,7 +1869,6 @@
 <translation id="3492788708641132712">ಸಿಂಕ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಸೈನ್‌ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="3493486281776271508">ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕದ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="3493881266323043047">ವಾಯಿದೆ</translation>
-<translation id="3494155060718700400">ಅಪಾಯಕಾರಿ ವೆಬ್‌ಸೈಟ್‌ಗಳು, ಡೌನ್‌ಲೋಡ್‌ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ವಿರುದ್ಧ ನಿಮಗೆ ರಕ್ಷಣೆ ನೀಡುವುದಿಲ್ಲ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿಲ್ಲ). Gmail ಮತ್ತು Search ನಂತಹ ಲಭ್ಯವಿರುವ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ, ನೀವು ಈಗಲೂ ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ರಕ್ಷಣೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.</translation>
 <translation id="3494769164076977169">ಮೊದಲ ಫೈಲ್‌ ಬಳಿಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈಟ್‌ವೊಂದು ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="3495660573538963482">Google ಸಹಾಯಕ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="3496213124478423963">ಝೂಮ್ ಔಟ್</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">ಈ ಪುಟದಲ್ಲಿ ನಿಮ್ಮ ಸ್ಥಾನವನ್ನು ನಿಗಾ ಇರಿಸದಂತೆ ಮುಂದಿನ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation>
 <translation id="49226369361073053">{0,plural, =0{ಈಗಲೇ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}=1{1 ಸೆಕೆಂಡ್ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}one{# ಸೆಕೆಂಡ್‌ಗಳ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}other{# ಸೆಕೆಂಡ್‌ಗಳ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}}</translation>
 <translation id="492299503953721473">Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕು</translation>
-<translation id="4923279099980110923">ಹೌದು, ನಾನು ಸಹಾಯ ಮಾಡಬೇಕೆಂದಿದ್ದೇನೆ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ನಿಮ್ಮ ಪೋರ್ಟ್‌ಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ</translation>
 <translation id="4925542575807923399">ಬಹು ಸೈನ್ ಇನ್ ಸೆಷನ್‌ನಲ್ಲಿ ಈ ಖಾತೆಯನ್ನು ಮೊದಲಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾದ ಖಾತೆಯು ಅಗತ್ಯವಿರುತ್ತದೆ ಎಂದು ಈ ಖಾತೆಯ ನಿರ್ವಾಹಕರಿಗೆ ಅಗತ್ಯವಿರುತ್ತದೆ.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">ಖಾಸಗಿ ಕೀಲಿ ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ.</translation>
 <translation id="5363109466694494651">ಪವರ್‌ವಾಶ್ ಮತ್ತು ಹಿಂದಿರುಗಿಸು</translation>
 <translation id="5365881113273618889">ನೀವು ಆಯ್ಕೆ ಮಾಡಿದ ಫೋಲ್ಡ‌ರ್‌ನಲ್ಲಿ ಸೂಕ್ಷ್ಮವಾದ ಫೈಲ್‌ಗಳಿವೆ. ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಬರೆಯಲು "<ph name="APP_NAME" />" ಗೆ ಶಾಶ್ವತ ಪ್ರವೇಶ ಒದಗಿಸಲು ನೀವು ಖಂಡಿತವಾಗಿಯೂ ಬಯಸುತ್ತೀರಾ?</translation>
-<translation id="5367091008316207019">ಓದುತ್ತಿರುವ ಫೈಲ್..</translation>
 <translation id="5368720394188453070">ನಿಮ್ಮ ಫೋನ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಪ್ರವೇಶಿಸಲು ಅದನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> ಗೆ ಸೈನ್‌ಇನ್ ಮಾಡಿ</translation>
 <translation id="5369491905435686894">ಮೌಸ್ ವೇಗವರ್ಧನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ದಿನದ ಹಿಂದೆ ಸಕ್ರಿಯ</translation>
 <translation id="8986362086234534611">ಮರೆತುಹೋಗು</translation>
 <translation id="8986494364107987395">ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಮತ್ತು ಕ್ರಾಶ್ ವರದಿಗಳನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರವಾನಿಸು</translation>
-<translation id="8986651757229422279">ಇದು <ph name="ORIGIN_NAME" /> ಮತ್ತು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾದ ಅದರ ಆ್ಯಪ್ ಮೂಲಕ ಸಂಗ್ರಹಿಸಲಾದ ಎಲ್ಲಾ ಡೇಟಾ ಮತ್ತು ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ.</translation>
 <translation id="8987927404178983737">ತಿಂಗಳು</translation>
 <translation id="8991520179165052608">ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಸೈಟ್‌ ಬಳಸಿಕೊಳ್ಳಬಹುದು</translation>
 <translation id="899403249577094719">Netscape ಪ್ರಮಾಣಪತ್ರ ಆಧಾರ URL</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 077a844..5f8ae28 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860"><ph name="APP" />에서 열기</translation>
 <translation id="2120297377148151361">활동 및 상호작용</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> 권한이 차단됨</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{쿠키가 차단됨}=1{쿠키가 차단됨, 예외 1개}other{쿠키가 차단됨, 예외 {COUNT}개}}</translation>
 <translation id="2121825465123208577">크기 조정</translation>
 <translation id="2122305276694332719">숨겨진 네트워크에 자동 연결하면 다른 사용자가 내 기기 및 일부 네트워크 설정을 볼 수 있으므로 권장되지 않습니다.</translation>
 <translation id="2123766928840368256">다른 파일 선택</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">카드 수정</translation>
 <translation id="2154710561487035718">URL 복사</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" />x<ph name="HEIGHT" />처럼 보입니다.</translation>
-<translation id="2156283799932971644">일부 시스템 정보와 페이지 콘텐츠를 Google로 전송하여 세이프 브라우징을 개선하도록 도와주세요.</translation>
 <translation id="2156294658807918600">서비스 워커: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">추가 기능을 사용하려면 이 Chromebook과 호환되는 Dell 도킹 스테이션을 사용하세요.</translation>
 <translation id="215753907730220065">전체화면 종료</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">앱 새로고침(&amp;R)</translation>
 <translation id="2327492829706409234">앱 사용</translation>
 <translation id="2329597144923131178">로그인하면 모든 기기에서 북마크, 방문 기록, 비밀번호, 기타 설정을 사용할 수 있습니다.</translation>
-<translation id="2330607597130465898">보호되지 않음</translation>
 <translation id="2332131598580221120">스토어에서 보기</translation>
 <translation id="2332192922827071008">환경설정 열기</translation>
 <translation id="2332742915001411729">기본 설정으로 돌아가기</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">동기화가 작동하지 않습니다. 다시 로그인하세요.</translation>
 <translation id="3493486281776271508">인터넷에 연결되어 있어야 합니다.</translation>
 <translation id="3493881266323043047">유효성</translation>
-<translation id="3494155060718700400">위험한 웹사이트, 다운로드 항목 또는 확장 프로그램으로부터 사용자를 보호하지 않습니다(권장하지 않음). Gmail, Google 검색과 같은 다른 Google 서비스에서는 가능한 경우 세이프 브라우징 보호가 계속 제공됩니다.</translation>
 <translation id="3494769164076977169">사이트에서 첫 파일 다운로드 후 자동으로 파일을 다운로드하려고 할 때 확인(권장)</translation>
 <translation id="3495660573538963482">Google 어시스턴트 설정</translation>
 <translation id="3496213124478423963">축소</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">이 페이지에서 사용자 위치 추적이 차단된 사이트는 다음과 같습니다.</translation>
 <translation id="49226369361073053">{0,plural, =0{지금 기기 업데이트}=1{1초 내 기기 업데이트}other{#초 내 기기 업데이트}}</translation>
 <translation id="492299503953721473">Android 앱 삭제</translation>
-<translation id="4923279099980110923">네, 돕고 싶습니다.</translation>
 <translation id="4924352752174756392">12배</translation>
 <translation id="4925320384394644410">포트가 여기에 표시됩니다</translation>
 <translation id="4925542575807923399">이 계정이 멀티 로그인 세션에서 처음으로 로그인하는 계정이 되도록 계정 관리자가 요청합니다.</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">비공개 키 파일을 선택합니다.</translation>
 <translation id="5363109466694494651">Powerwash 및 되돌리기</translation>
 <translation id="5365881113273618889">선택한 폴더에 민감한 파일이 포함되어 있습니다. 이 폴더에 '<ph name="APP_NAME" />' 영구 쓰기 액세스 권한을 부여하시겠습니까?</translation>
-<translation id="5367091008316207019">파일 읽는 중..</translation>
 <translation id="5368720394188453070">휴대전화가 잠겨있습니다. 이용하려면 기기를 잠금 해제하세요.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> 로그인</translation>
 <translation id="5369491905435686894">마우스 가속 사용</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" />일 전에 사용</translation>
 <translation id="8986362086234534611">저장 안함</translation>
 <translation id="8986494364107987395">사용 통계 및 비정상 종료 보고서를 Google에 자동으로 전송합니다.</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" />에서 저장한 모든 데이터와 쿠키 및 설치된 앱이 삭제됩니다.</translation>
 <translation id="8987927404178983737">월</translation>
 <translation id="8991520179165052608">사이트에서 마이크를 사용할 수 있습니다.</translation>
 <translation id="899403249577094719">Netscape Certificate Base URL</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index f31ccd5c..ffd70d7 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> колдонмосунда ачуу</translation>
 <translation id="2120297377148151361">Серепчидеги аракеттер</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> – бөгөттөлгөн</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookie файлдары бөгөттөлдү}=1{Cookie файлдары бөгөттөлдү. 1 өзгөчө учур бар}other{Cookie файлдары бөгөттөлдү. {COUNT} өзгөчө учур бар}}</translation>
 <translation id="2121825465123208577">Өлчөмүн өзгөртүү</translation>
 <translation id="2122305276694332719">Жашырылган тармакка автоматтык түрдө туташуу түзмөгүңүздү жана тармактын айрым жөндөөлөрүн башкаларга көрсөтүп турат, андыктан аны колдонуу сунушталбайт.</translation>
 <translation id="2123766928840368256">Башка файлды тандоо</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Карточканы түзөтүү</translation>
 <translation id="2154710561487035718">URL көчүрүү</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> сыяктуу көрүнөт</translation>
-<translation id="2156283799932971644">Айрым тутумдун маалыматын жана барактын мазмунун Google'га жөнөтүү менен Коопсуз серептөөнү жакшыртууга жардам бересиз.</translation>
 <translation id="2156294658807918600">Кызмат иштеткичи: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Кошумча функцияларын колдонуу үчүн, ушул Chromebook менен иштөөгө арналган Dell док станциясын колдонуңуз.</translation>
 <translation id="215753907730220065">Толук экран режиминен чыгуу</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Колдонмону кайра жүктөө</translation>
 <translation id="2327492829706409234">Колдонмону иштетүү</translation>
 <translation id="2329597144923131178">Бардык түзмөктөрүңүздөн кыстармаларды, таржымалды, сырсөздөрдү жана башка жөндөөлөрүңүздү алуу үчүн аккаунтка кириңиз.</translation>
-<translation id="2330607597130465898">Коопсуздук корголгон жок</translation>
 <translation id="2332131598580221120">Дүкөндөн карап көрүү</translation>
 <translation id="2332192922827071008">Жеке параметрлерди ачуу</translation>
 <translation id="2332742915001411729">Демейкиге кайтаруу</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Шайкештирүү иштебей жатат. Аккаунтка кайра кирип көрүңүз.</translation>
 <translation id="3493486281776271508">Интернет байланышы талап кылынат</translation>
 <translation id="3493881266323043047">Жарактуулук</translation>
-<translation id="3494155060718700400">Кооптуу вебсайттардан, жүктөлүп алынган файлдардан жана кеңейтүүлөрдөн коргобойт (сунушталбайт). Gmail жана Издөө сыяктуу Google'дун башка кызматтарында мүмкүн болгондо Коопсуз серептөө иштетилет.</translation>
 <translation id="3494769164076977169">Сайт биринчи файлдан кийин калган файлдарды автоматтык түрдө жүктөп алууга аракет кылганда суроо (сунушталат)</translation>
 <translation id="3495660573538963482">Google Жардамчынын жөндөөлөрү</translation>
 <translation id="3496213124478423963">Кичирейтүү</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Төмөнкү сайттарга бул барактагы жайгашкан жериңизге көз салууга тыюу салынды:</translation>
 <translation id="49226369361073053">{0,plural, =0{Түзмөктү азыр жаңыртыңыз}=1{Түзмөктү 1 секунддун ичинде жаңыртыңыз}other{Түзмөктү # секунддун ичинде жаңыртыңыз}}</translation>
 <translation id="492299503953721473">Android колдонмолорун алып салуу</translation>
-<translation id="4923279099980110923">Ооба, жардам бергим келет</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Оюкчалар ушул жерде көрүнөт</translation>
 <translation id="4925542575807923399">Бул аккаунтунун администратору анын бир нече профиль сеансындагы аккаунтка биринчи кирген каттоо эсеби болушун талап кылат.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Жеке ачкыч файлын тандоо.</translation>
 <translation id="5363109466694494651">Жууп салуу жана кайтуу</translation>
 <translation id="5365881113273618889">Тандалган папкада купуя файлдар бар. "<ph name="APP_NAME" />" колдонмосуна бул папканы тоскоолдуксуз ачып, ичиндегилерин окуу мүмкүнчүлүгүн бергиңиз келеби?</translation>
-<translation id="5367091008316207019">Файл окулууда…</translation>
 <translation id="5368720394188453070">Телефонуңуз кулпуланган. Кирүү үчүн анын кулпусун ачыңыз.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> аккаунтка кириңиз</translation>
 <translation id="5369491905435686894">Чычканды ылдамдаткычты иштетүү</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">Акыркы аракеттер: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> күн мурун</translation>
 <translation id="8986362086234534611">Унутуу</translation>
 <translation id="8986494364107987395">Google'га автоматтык түрдө колдонуу статистикасы жана каталар жөнүндө кабар берүү.</translation>
-<translation id="8986651757229422279">Ушуну менен <ph name="ORIGIN_NAME" /> сакталган бардык маалымат жана cookie-файлдары, ошондой эле ал орноткон колдонмо тазаланат.</translation>
 <translation id="8987927404178983737">Ай</translation>
 <translation id="8991520179165052608">Сайт микрофонуңузду колдоно алат</translation>
 <translation id="899403249577094719">Netscape тастыктама негизинин URL</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index eecfba9..ca2cdaf 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -858,7 +858,6 @@
 <translation id="2154484045852737596">ແກ້ໄຂບັດ</translation>
 <translation id="2154710561487035718">ກັອບ​ປີ້ URL</translation>
 <translation id="2155772377859296191">ຄວາມລະອຽດ <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">ທ່ານສາມາດຊ່ວຍປັບປຸງ Safe Browsing ໄດ້ໂດຍການສົ່ງບາງຂໍ້ມູນລະບົບ ແລະ ເນື້ອຫາໃນໜ້າໃຫ້ Google.</translation>
 <translation id="2156294658807918600">ພະນັກງານບໍລິການ: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ເພື່ອຮັບຄຸນສົມບັດເພີ່ມເຕີມ, ກະລຸນາໃຊ້ສະຖານີແທ່ນສາກ Dell ທີ່ຖືກອອກແບບມາໃຫ້ໃຊ້ໄດ້ກັບ Chromebook ນີ້.</translation>
 <translation id="215753907730220065">ອອກຈາກເຕັມໜ້າຈໍ</translation>
@@ -990,7 +989,6 @@
 <translation id="2326931316514688470">ໂຫຼດ​ແອັບ​ໃໝ່</translation>
 <translation id="2327492829706409234">ເປີດໃຊ້ງານແອັບ</translation>
 <translation id="2329597144923131178">ລົງຊື່ເຂົ້າເພື່ອເອົາບຸກມາກຄ໌​, ປະ​ຫວັດ​, ລະ​ຫັດ​ຜ່ານ​, ແລະ​ ການ​ຕັ້ງ​ຄ່າ​ອື່ນຂອງ​ທ່ານຢູ່ເທິງທຸກ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​.</translation>
-<translation id="2330607597130465898">ບໍ່ມີການປົກປ້ອງ</translation>
 <translation id="2332131598580221120">ເບິ່ງ​ຢູ່​ໃນ​ຮ້ານ</translation>
 <translation id="2332192922827071008">ເປີດການຕັ້ງຄ່າ</translation>
 <translation id="2332742915001411729">ຕັ້ງຄ່າເປັນມາດຕະຖານຄືນໃໝ່</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">ການຊິ້ງຂໍ້ມູນໃຊ້ບໍ່ໄດ້. ລອງເຂົ້າສູ່ລະບົບອີກຄັ້ງ.</translation>
 <translation id="3493486281776271508">ຈຳເປັນຕ້ອງເຊື່ອມຕໍ່ອິນເຕີເນັດ</translation>
 <translation id="3493881266323043047">ຄວາມ​ຖືກຕ້ອງ</translation>
-<translation id="3494155060718700400">ບໍ່ປົກປ້ອງທ່ານຈາກເວັບໄຊ, ການດາວໂຫຼດ ແລະ ສ່ວນຂະຫຍາຍທີ່ເປັນອັນຕະລາຍ (ບໍ່ແນະນຳ). ທ່ານຈະຍັງໄດ້ຮັບການປົກປ້ອງ Safe Browsing, ຢູ່ບ່ອນທີ່ໃຊ້ໄດ້, ຢູ່ໃນການບໍລິການອື່ນຂອງ Google ເຊັ່ນ: Gmail ແລະ ຊອກຫາ.</translation>
 <translation id="3494769164076977169">ຖາມເມື່ອເວັບໄຊທ໌ພະຍາຍາມດາວໂຫຼດໄຟລ໌ອັດຕະໂນມັດ ຫຼັງຈາກໄຟລ໌ທໍາອິດແລ້ວ (ແນະນໍາ)</translation>
 <translation id="3495660573538963482">ການຕັ້ງຄ່າຜູ້ຊ່ວຍ Google</translation>
 <translation id="3496213124478423963">ຊູມອອກ</translation>
@@ -2921,7 +2918,6 @@
 <translation id="4920887663447894854">ເວັບໄຊທ໌ຕໍ່ໄປນີ້ຖືກບລັອກຈາກການຕິດຕາມທີ່ຕັ້ງຂອງທ່ານຢູ່ໃນໜ້ານີ້:</translation>
 <translation id="49226369361073053">{0,plural, =0{ອັບເດດອຸປະກອນຕອນນີ້}=1{ອັບເດດອຸປະກອນພາຍໃນ 1 ວິນາທີ}other{ອັບເດດອຸປະກອນພາຍໃນ # ວິນາທີ}}</translation>
 <translation id="492299503953721473">ລຶບແອັບ Android ອອກ</translation>
-<translation id="4923279099980110923">ແມ່ນ​ແລ້ວ​, ຂ້ອຍຕ້ອງການ​ຊ່ວຍ​ເຫຼືອ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ຜອດຂອງທ່ານຈະປາກົດຢູ່ບ່ອນນີ້</translation>
 <translation id="4925542575807923399">ຜູ້ຄຸ້ມຄອງບັນຊີນີ້ຕ້ອງການບັນຊີນີ້ໃຫ້ເປັນບັນຊີລົງຊື່ເຂົ້າ​ໃຊ້ທໍາອິດຢູ່ໃນຊ່ວງ​ເວລາ​ເຂົ້າລະບົບຫຼາຍອັນ.</translation>
@@ -3235,7 +3231,6 @@
 <translation id="5362741141255528695">ໄຟລ​໌​ປຸ່ມສ່ວນຕົວ.</translation>
 <translation id="5363109466694494651">Powerwash ແລະກັບຄືນ</translation>
 <translation id="5365881113273618889">ໂຟນເດີທີ່ທ່ານເລືອກປະກອບມີໄຟລ໌ທີ່ລະອຽດອ່ອນ. ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການໃຫ້ສິດເຂົ້າຂຽນຢ່າງຖາວອນໃນໂຟນເດີນີ້ແກ່ "<ph name="APP_NAME" />"?</translation>
-<translation id="5367091008316207019">ກໍາລັງອ່ານໄຟລ​໌​..</translation>
 <translation id="5368720394188453070">ໂທ​ລະ​ສັບ​ຂອງ​ທ່ານ​ຖືກ​ລັອກ. ປົດ​ລັອກ​ມັນ​ເພື່ອ​ປ້ອນ​ເຂົ້າ.</translation>
 <translation id="5368779022775404937">ເຂົ້າສູ່ລະບົບ <ph name="REALM" /></translation>
 <translation id="5369491905435686894">ເປີດນຳໃຊ້ການເລັ່ງຄວາມໄວເມົ້າ</translation>
@@ -5959,7 +5954,6 @@
 <translation id="8985264973231822211">ເປີດນຳໃຊ້ເມື່ອ <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ກ່ອນ</translation>
 <translation id="8986362086234534611">ລືມ</translation>
 <translation id="8986494364107987395">ສົ່ງສະຖິຕິການໃຊ້ ແລະລາຍງານກາ​ນຂັດຂ້ອງໄປຫາ Google ໂດຍອັດຕະໂນມັດ</translation>
-<translation id="8986651757229422279">ນີ້ຈະລຶບລ້າງຂໍ້ມູນ ແລະ ຄຸກກີ້ທັງໝົດທີ່ເກັບໄວ້ໂດຍ <ph name="ORIGIN_NAME" /> ແລະ ແອັບທີ່ຕິດຕັ້ງຂອງມັນ.</translation>
 <translation id="8987927404178983737">ເດືອນ</translation>
 <translation id="8991520179165052608">ເວັບໄຊສາມາດໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານໄດ້</translation>
 <translation id="899403249577094719">URL ຖານໃບຢັ້ງຢືນ Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 878d43b..f85ea8a 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Kortelės informacijos redagavimas</translation>
 <translation id="2154710561487035718">Kopijuoti URL adresą</translation>
 <translation id="2155772377859296191">Atrodo kaip <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Galite padėti tobulinti Saugų naršymą siųsdami tam tikrą sistemos informaciją ir puslapių turinį „Google“.</translation>
 <translation id="2156294658807918600">Pagalbinis „JavaScript“ failas: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Norėdami naudotis papildomomis funkcijomis, naudokite „Dell“ doką, sukurtą specialiai šiam „Chromebook“.</translation>
 <translation id="215753907730220065">Išeiti iš viso ekrano režimo</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Įkelti programą iš naujo</translation>
 <translation id="2327492829706409234">Įgalinti programą</translation>
 <translation id="2329597144923131178">Pris. ir pas. žymių, ist., slapt. bei kitų nust. duom. visuose įreng.</translation>
-<translation id="2330607597130465898">Apsaugos nėra</translation>
 <translation id="2332131598580221120">Žiūrėti parduotuvėje</translation>
 <translation id="2332192922827071008">Atidarykite nuostatas</translation>
 <translation id="2332742915001411729">Nustatyti iš naujo numatytąjį</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sinchronizavimas neveikia. Bandykite prisijungti dar kartą.</translation>
 <translation id="3493486281776271508">Reikalingas interneto ryšys</translation>
 <translation id="3493881266323043047">Galiojimas</translation>
-<translation id="3494155060718700400">Neapsaugo jūsų nuo pavojingų svetainių, atsisiuntimų ar plėtinių (nerekomenduojama). Kai yra galimybė, vis tiek gausite saugaus naršymo pranešimus kitose „Google“ paslaugose, pvz., „Gmail“ ir paieškoje.</translation>
 <translation id="3494769164076977169">Paklausti, kai svetainė bando atsisiųsti failus automatiškai po pirmo failo (rekomenduojama)</translation>
 <translation id="3495660573538963482">„Google“ padėjėjo nustatymai</translation>
 <translation id="3496213124478423963">Tolinti</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Šios svetainės buvo užblokuotos, kad nebūtų galima šiame puslapyje stebėti jūsų vietovės:</translation>
 <translation id="49226369361073053">{0,plural, =0{Įrenginio atnaujinimas dabar}=1{Įrenginio atnaujinimas po 1 sekundės}one{Įrenginio atnaujinimas po # sekundės}few{Įrenginio atnaujinimas po # sekundžių}many{Įrenginio atnaujinimas po # sekundės}other{Įrenginio atnaujinimas po # sekundžių}}</translation>
 <translation id="492299503953721473">Pašalinti „Android“ programas</translation>
-<translation id="4923279099980110923">Taip, noriu padėti</translation>
 <translation id="4924352752174756392">12 k.</translation>
 <translation id="4925320384394644410">Čia bus rodomi jūsų prievadai</translation>
 <translation id="4925542575807923399">Šios paskyros administratorius reikalauja, kad kelių paskyrų sesijoje pirmiausia būtų prisijungta naudojant šią paskyrą.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Pasirinkti asmeninio rakto failą.</translation>
 <translation id="5363109466694494651">Įvykdyti „Powerwash“ ir versijos grąžinimo funkcijas</translation>
 <translation id="5365881113273618889">Pasirinktame aplanke yra neskelbtinų failų. Ar tikrai norite „<ph name="APP_NAME" />“ suteikti nuolatinę šio aplanko rašymo prieigą?</translation>
-<translation id="5367091008316207019">Skaitomas failas...</translation>
 <translation id="5368720394188453070">Telefonas užrakintas. Norėdami įeiti, atrakinkite jį.</translation>
 <translation id="5368779022775404937">Prisijunkite prie <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Įgalinti pelės spartinimą</translation>
@@ -5964,7 +5959,6 @@
 <translation id="8985264973231822211">Aktyvus prieš <ph name="DEVICE_LAST_ACTIVATED_TIME" /> d.</translation>
 <translation id="8986362086234534611">Pamiršti</translation>
 <translation id="8986494364107987395">Automatiškai siųsti naudojimo statistiką ir strigčių ataskaitas „Google“</translation>
-<translation id="8986651757229422279">Bus išvalyti visi <ph name="ORIGIN_NAME" /> ir įdiegtos programos saugomi duomenys ir slapukai.</translation>
 <translation id="8987927404178983737">Mėnuo</translation>
 <translation id="8991520179165052608">Svetainė gali naudoti jūsų mikrofoną</translation>
 <translation id="899403249577094719">„Netscape“ sertifikatų bazės URL</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index a26ea0e..7459983 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Atvērt lietotnē <ph name="APP" /></translation>
 <translation id="2120297377148151361">Darbības un mijiedarbības</translation>
 <translation id="2120639962942052471">Bloķēta atļauja “<ph name="PERMISSION" />”</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Sīkfaili ir bloķēti}=1{Sīkfaili ir bloķēti (1 izņēmums)}zero{Sīkfaili ir bloķēti ({COUNT} izņēmumu)}one{Sīkfaili ir bloķēti ({COUNT} izņēmums)}other{Sīkfaili ir bloķēti ({COUNT} izņēmumi)}}</translation>
 <translation id="2121825465123208577">Mainīt lielumu</translation>
 <translation id="2122305276694332719">Automātiska pieslēgšanās paslēptam tīklam ļauj citiem redzēt jūsu ierīci un dažus tīkla iestatījumus, taču tas nav ieteicams.</translation>
 <translation id="2123766928840368256">Izvēlēties citu failu</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Kartes informācijas rediģēšana</translation>
 <translation id="2154710561487035718">Kopēt URL</translation>
 <translation id="2155772377859296191">Noteiktā izšķirtspēja: <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Varat palīdzēt uzlabot Drošo pārlūkošanu, nosūtot noteiktu sistēmas informāciju un lapas saturu Google serveriem.</translation>
 <translation id="2156294658807918600">Pakalpojumu skripts: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Lai varētu izmantot papildu funkcijas, lietojiet Dell dokstaciju, kas paredzēta darbam ar šo Chromebook datoru.</translation>
 <translation id="215753907730220065">Iziet no pilnekrāna režīma</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Atkārtoti ielādēt lietotni</translation>
 <translation id="2327492829706409234">Iespējot lietotni</translation>
 <translation id="2329597144923131178">Pierakstieties, lai grāmatzīmes, vēsture, paroles u.c. būtu pieejamas visās jūsu ierīcēs.</translation>
-<translation id="2330607597130465898">Nav aizsardzības</translation>
 <translation id="2332131598580221120">Skatīt veikalā</translation>
 <translation id="2332192922827071008">Atvērt preferences</translation>
 <translation id="2332742915001411729">Atiestatīt noklusējuma iestatījumus</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Sinhronizācija nedarbojas. Mēģiniet pierakstīties vēlreiz.</translation>
 <translation id="3493486281776271508">Nepieciešams interneta savienojums</translation>
 <translation id="3493881266323043047">Derīgums</translation>
-<translation id="3494155060718700400">Netiek nodrošināta aizsardzība pret bīstamām vietnēm, lejupielādēm un paplašinājumiem (nav ieteicams). Jūs joprojām saņemsiet drošas pārlūkošanas aizsardzību, ja tā ir pieejama, citos Google pakalpojumos, piemēram, Gmail un Meklēšana.</translation>
 <translation id="3494769164076977169">Jautāt, ja vietne mēģina automātiski lejupielādēt failus pēc pirmā faila (ieteicams)</translation>
 <translation id="3495660573538963482">Google asistenta iestatījumi</translation>
 <translation id="3496213124478423963">Tālināt</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Šīs vietnes ir bloķētas un nevar izsekot jūsu atrašanās vietu šajā lapā:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ierīce tūlīt jāatjaunina}=1{Ierīces atjaunināšana jāsāk 1 sekundes laikā}zero{Ierīces atjaunināšana jāsāk # sekunžu laikā}one{Ierīces atjaunināšana jāsāk # sekundes laikā}other{Ierīces atjaunināšana jāsāk # sekunžu laikā}}</translation>
 <translation id="492299503953721473">Noņemt Android lietotnes</translation>
-<translation id="4923279099980110923">Jā, es vēlos palīdzēt</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Jūsu porti tiks rādīti šeit.</translation>
 <translation id="4925542575807923399">Šī konta administrators ir noteicis, ka vairākkārtējas pierakstīšanās sesijā šis ir pirmais konts, kurā jāpierakstās.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Atlasiet privātās atslēgas failu.</translation>
 <translation id="5363109466694494651">Powerwash un atjaunošana</translation>
 <translation id="5365881113273618889">Atlasītajā mapē ir iekļauti sensitīvi faili. Vai tiešām vēlaties piešķirt lietotnei <ph name="APP_NAME" /> pastāvīgu rakstīšanas piekļuvi šai mapei?</translation>
-<translation id="5367091008316207019">Notiek faila lasīšana...</translation>
 <translation id="5368720394188453070">Jūsu tālrunis ir bloķēts. Lai tajā ieietu, atbloķējiet to.</translation>
 <translation id="5368779022775404937">Pierakstieties vietnē <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Iespējot peles paātrinātāju</translation>
@@ -5961,7 +5957,6 @@
 <translation id="8985264973231822211">Aktīva pirms <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dienas</translation>
 <translation id="8986362086234534611">Aizmirst</translation>
 <translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation>
-<translation id="8986651757229422279">Tādējādi tiks notīrīti visi vietnes <ph name="ORIGIN_NAME" /> un tās instalētās lietotnes saglabātie dati un sīkfaili.</translation>
 <translation id="8987927404178983737">Mēnesis</translation>
 <translation id="8991520179165052608">Vietne var izmantot jūsu mikrofonu.</translation>
 <translation id="899403249577094719">Netscape sertifikāta Base URL</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 423d9bd..5473e6e4 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Уредете ја картичката</translation>
 <translation id="2154710561487035718">Копирај URL</translation>
 <translation id="2155772377859296191">Изгледа како <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Може да помогнете да се подобри „Безбедното прелистување“ преку испраќање некои системски информации и содржини од страници до Google.</translation>
 <translation id="2156294658807918600">Услужен работник: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">За да добиете дополнителни функции, користете приклучна станица од Dell што е дизајнирана да работи со овој Chromebook.</translation>
 <translation id="215753907730220065">Излези од цел екран</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Вчитај ја апликацијата повторно</translation>
 <translation id="2327492829706409234">Вклучи апликација</translation>
 <translation id="2329597144923131178">Најавете се за да ги добиете обележувачите, историјата, лозинките и другите поставки на сите ваши уреди.</translation>
-<translation id="2330607597130465898">Без заштита</translation>
 <translation id="2332131598580221120">Прикажи во продавница</translation>
 <translation id="2332192922827071008">Отвори ги „Поставките“</translation>
 <translation id="2332742915001411729">Ресетирај на стандардна вредност</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Синхронизацијата не функционира. Обидете се да се најавите повторно.</translation>
 <translation id="3493486281776271508">Потребна е интернет-врска</translation>
 <translation id="3493881266323043047">Важност</translation>
-<translation id="3494155060718700400">Не ве заштитува од опасни веб-сајтови, преземања или екстензии (не се препорачува). Сѐ уште ќе имате заштита со „Безбедно прелистување“, каде што е достапно, во другите услуги на Google, како Gmail и „Пребарување“.</translation>
 <translation id="3494769164076977169">Прашај кога локација се обидува автоматски да преземе датотеки по првата датотека (препорачано)</translation>
 <translation id="3495660573538963482">Поставки за „Помошникот на Google“</translation>
 <translation id="3496213124478423963">Одзумирај</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Следниве локации беа блокирани да не ја следат вашата локација на оваа страница:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ажурирајте го уредот веднаш}=1{Ажурирајте го уредот во рок од 1 секунда}one{Ажурирајте го уредот во рок од # секунда}other{Ажурирајте го уредот во рок од # секунди}}</translation>
 <translation id="492299503953721473">Отстрани ги апликациите за Android</translation>
-<translation id="4923279099980110923">Да, сакам да помогнам</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Вашите порти ќе се појават тука</translation>
 <translation id="4925542575807923399">Администраторот на оваа сметка бара таа да биде првата пријавена сметка во сесија со повеќе пријавувања.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Избери датотека со приватен клуч.</translation>
 <translation id="5363109466694494651">Фабрички ресетирај и врати</translation>
 <translation id="5365881113273618889">Папката што ја избравте содржи чувствителни датотеки. Дали сигурно сакате да ѝ доделите на <ph name="APP_NAME" /> постојан пристап за пишување во оваа папка?</translation>
-<translation id="5367091008316207019">Читање на датотеката...</translation>
 <translation id="5368720394188453070">Вашиот телефон е заклучен. Отклучете го за да влезете.</translation>
 <translation id="5368779022775404937">Најавете се на <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Овозможи забрзување на глувчето</translation>
@@ -5679,7 +5674,7 @@
 <translation id="8645920082661222035">Предвидува опасни настани и ве предупредува пред да се случат</translation>
 <translation id="8647834505253004544">Неважечка веб-адреса</translation>
 <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> или <ph name="RE_SCAN_LINK" /></translation>
-<translation id="8648544143274677280"><ph name="SITE_NAME" /> сака да: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" />и друго</translation>
+<translation id="8648544143274677280"><ph name="SITE_NAME" /> сака да: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> и друго</translation>
 <translation id="8650543407998814195">Иако веќе не може да пристапувате до стариот профил, сѐ уште може да го отстраните.</translation>
 <translation id="8651585100578802546">Принуди повторно вчитување на страницата</translation>
 <translation id="8652400352452647993">Грешка на екстензијата на пакетот</translation>
@@ -5901,7 +5896,7 @@
 <translation id="8895454554629927345">Список со обележувачи</translation>
 <translation id="8896022254727357590">PIN-кодот мора да содржи најмалку 4 знаци</translation>
 <translation id="8898786835233784856">Избери нова картичка</translation>
-<translation id="8898822736010347272">Испраќа URL-адреси од некои страници што ги посетувате, ограничени податоци за системот и некои содржини од страниците во Google за да помогне да се откријат нови закани и да се заштитата сите на интернет.</translation>
+<translation id="8898822736010347272">Испраќа URL-адреси до Google од некои страници што ги посетувате, како и ограничени податоци за системот и некои содржини од страниците за да помогне да се откријат нови закани и да се заштитат сите на интернет.</translation>
 <translation id="8898840733695078011">Јачина на сигнал</translation>
 <translation id="8899851313684471736">Отвори ја врската во нов &amp;прозорец</translation>
 <translation id="8902667442496790482">Отвори ги поставките за „Изберете за говор“</translation>
@@ -5965,7 +5960,6 @@
 <translation id="8985264973231822211">Активен пред <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ден</translation>
 <translation id="8986362086234534611">Заборави</translation>
 <translation id="8986494364107987395">Автоматски испрати статистика за користење и извештаи за падови до Google</translation>
-<translation id="8986651757229422279">Ова ќе ги избрише сите податоци и колачиња складирани од <ph name="ORIGIN_NAME" /> и инсталираните апликации.</translation>
 <translation id="8987927404178983737">Месец</translation>
 <translation id="8991520179165052608">Сајтот може да го користи микрофонот</translation>
 <translation id="899403249577094719">Основен URL за сертификат на Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index f684c6b..5b0e71aa 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -856,7 +856,6 @@
 <translation id="2154484045852737596">കാർഡ് എഡിറ്റ് ചെയ്യുക</translation>
 <translation id="2154710561487035718">URL പകര്‍ത്തുക</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> പോലെ തോന്നുന്നു</translation>
-<translation id="2156283799932971644">ചില സിസ്‌റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും Google-ന് അയച്ച്, സുരക്ഷിത ബ്രൗസിംഗ് മെച്ചപ്പെടുത്താൻ നിങ്ങൾക്ക് സഹായിക്കാനാകും.</translation>
 <translation id="2156294658807918600">സർവീസ് വർക്കർ: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">അധിക ഫീച്ചറുകൾ ലഭിക്കാൻ, ഈ Chromebook-ൽ പ്രവർത്തിക്കുന്നതിനായി രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്ന Dell ഡോക്കിംഗ് സ്‌റ്റേഷൻ ഉപയോഗിക്കുക.</translation>
 <translation id="215753907730220065">പൂര്‍‌ണ്ണ സ്‌ക്രീനില്‍‌ നിന്ന് പുറത്തുകടക്കുക</translation>
@@ -988,7 +987,6 @@
 <translation id="2326931316514688470">ആപ്പ് &amp;വീണ്ടും ലോഡ് ചെയ്യുക</translation>
 <translation id="2327492829706409234">ആപ്പ് പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="2329597144923131178">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്‌മാർക്കുകളും ചരിത്രവും മറ്റ് ക്രമീകരണവും ലഭിക്കാൻ സൈൻ ഇൻ ചെയ്യുക.</translation>
-<translation id="2330607597130465898">പരിരക്ഷയില്ല</translation>
 <translation id="2332131598580221120">സ്റ്റോറിൽ കാണുക</translation>
 <translation id="2332192922827071008">മുൻഗണനകൾ തുറക്കുക</translation>
 <translation id="2332742915001411729">ഡിഫോൾട്ടിലേക്ക് റീസെറ്റ് ചെയ്യുക</translation>
@@ -1868,7 +1866,6 @@
 <translation id="3492788708641132712">സമന്വയം പ്രവർത്തിക്കുന്നില്ല. വീണ്ടും സൈൻ ഇൻ ചെയ്യുന്നത് പരീക്ഷിച്ചുനോക്കൂ.</translation>
 <translation id="3493486281776271508">ഇന്റർനെറ്റ് കണക്ഷൻ ആവശ്യമാണ്</translation>
 <translation id="3493881266323043047">സാധുത</translation>
-<translation id="3494155060718700400">അപകടകരമായ വെബ്‌സൈറ്റുകൾ, ഡൗൺലോഡുകൾ, വിപുലീകരണങ്ങൾ എന്നിവയിൽ നിന്ന് നിങ്ങളെ പരിരക്ഷിക്കില്ല (ശുപാർശ ചെയ്യുന്നില്ല). Gmail, Search പോലുള്ള മറ്റ് Google സേവനങ്ങളിൽ ഉള്ള സുരക്ഷിത ബ്രൗസിംഗ് പരിരക്ഷ നിങ്ങൾക്ക് തുടർന്നും ലഭിക്കും.</translation>
 <translation id="3494769164076977169">ആദ്യത്തെ ഫയലിനുശേഷം ഒരു സൈറ്റ് ഫയലുകൾ സ്വയമേവ ഡൗൺലോഡ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ ആവശ്യപ്പെടുക (ശുപാർശ ചെയ്യുന്നു)</translation>
 <translation id="3495660573538963482">Google അസിസ്‌റ്റന്റ് ക്രമീകരണം</translation>
 <translation id="3496213124478423963">സൂം ഔട്ട് ചെയ്യുക</translation>
@@ -2918,7 +2915,6 @@
 <translation id="4920887663447894854">ഈ പേജിലെ നിങ്ങളുടെ സ്ഥാനം ട്രാക്കുചെയ്യുന്നതില്‍‌ നിന്നും ഇനിപ്പറയുന്ന സൈറ്റുകളെ തടഞ്ഞു:</translation>
 <translation id="49226369361073053">{0,plural, =0{ഉപകരണം ഇപ്പോൾ അപ്‌ഡേറ്റ് ചെയ്യുക}=1{ഒരു സെക്കൻഡിനുള്ളിൽ ഉപകരണം അപ്‌ഡേറ്റ് ചെയ്യുക}other{# സെക്കൻഡിനുള്ളിൽ ഉപകരണം അപ്‌ഡേറ്റ് ചെയ്യുക}}</translation>
 <translation id="492299503953721473">Android ആപ്പുകൾ നീക്കംചെയ്യുക</translation>
-<translation id="4923279099980110923">അതെ, ഞാൻ സഹായിക്കാൻ താൽപ്പര്യപ്പെടുന്നു</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">നിങ്ങളുടെ പോർട്ടുകൾ ഇവിടെ ദൃശ്യമാകും</translation>
 <translation id="4925542575807923399">ഈ അക്കൗണ്ട് ഒന്നിലധികം സൈൻ ഇൻ സെഷനിൽ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ആദ്യ അക്കൗണ്ട് ആയിരിക്കാൻ ഈ അക്കൗണ്ടിനായുള്ള അഡ്‌മിനിസ്‌ട്രേറ്റർ ആവശ്യപ്പെടുന്നു.</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5362741141255528695">സ്വകാര്യ കീ ഫയല്‍‌ തിരഞ്ഞെടുക്കുക.</translation>
 <translation id="5363109466694494651">പവർവാഷുചെയ്‌‌‌ത് പഴയപടിയാക്കുക</translation>
 <translation id="5365881113273618889">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഫോൾഡറിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഫയലുകൾ അടങ്ങിയിരിക്കുന്നു. ഈ ഫോൾഡറിലേക്ക് "<ph name="APP_NAME" />" എന്നതിന് റൈറ്റ് ചെയ്യാനുള്ള ശാശ്വതമായ ആക്‌സസ് അനുവദിക്കണമെന്ന് ഉറപ്പാണോ?</translation>
-<translation id="5367091008316207019">ഫയൽ റീഡുചെയ്യുന്നു..</translation>
 <translation id="5368720394188453070">നിങ്ങളുടെ ഫോൺ ലോക്കായിരിക്കുമ്പോൾ. പ്രവേശിക്കുന്നതിന് അത് അൺലോക്ക് ചെയ്യുക.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> എന്നതിൽ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="5369491905435686894">മൗസ് ആക്‌സിലറേഷൻ പ്രവർത്തനക്ഷമമാക്കുക</translation>
@@ -5959,7 +5954,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ദിവസം മുമ്പ് സജീവമായിരുന്നു</translation>
 <translation id="8986362086234534611">മറന്നു</translation>
 <translation id="8986494364107987395">Google ലേക്ക് സ്വയമേവ ഉപയോഗ വിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്‍ട്ടുകളും അയയ്ക്കുക</translation>
-<translation id="8986651757229422279">ഇത് <ph name="ORIGIN_NAME" /> എന്നതും ഇതിന്റെ ഇൻസ്‌റ്റാൾ ചെയ്തിരിക്കുന്ന ആപ്പുകളും സംഭരിച്ചിട്ടുള്ള എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും.</translation>
 <translation id="8987927404178983737">മാസം</translation>
 <translation id="8991520179165052608">സൈറ്റിന് നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കാനാകും</translation>
 <translation id="899403249577094719">നെറ്റ്‌സ്‌കേപ്പ് സര്‍‌ട്ടിഫിക്കറ്റ് ബേസ് URL</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index c97a1ab..0b6cdae 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -822,6 +822,7 @@
 <translation id="2119349053129246860"><ph name="APP" />-д нээх</translation>
 <translation id="2120297377148151361">Үйл ажиллагаа болон харилцан үйлчлэл</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />-г блоклосон</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Күүкиг блоклосон}=1{1-ээс бусад күүкиг блоклосон}other{{COUNT}-с бусад күүкиг блоклосон}}</translation>
 <translation id="2121825465123208577">Хэмжээг өөрчлөх</translation>
 <translation id="2122305276694332719">Нуусан сүлжээнд автоматаар холбогдсоноор бусдад таны төхөөрөмж болон зарим сүлжээний тохиргоог харахыг зөвшөөрөх бөгөөд үүнийг зөвлөдөггүй.</translation>
 <translation id="2123766928840368256">Өөр файл сонгох</translation>
@@ -855,7 +856,6 @@
 <translation id="2154484045852737596">Картыг засах</translation>
 <translation id="2154710561487035718">URL-ийг хуул</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> юм шиг харагдаж байна</translation>
-<translation id="2156283799932971644">Та Google-д зарим системийн мэлээлэл болон хуудасны агуулгыг илгээснээр Аюулгүй Хайлтыг сайжруулахад туслах боломжтой.</translation>
 <translation id="2156294658807918600">Үйлчилгээний ажилтан: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Нэмэлт онцлогийг авахын тулд энэ Chromebook-тэй ажиллахад зориулсан Dell холбогч станцыг ашиглана уу.</translation>
 <translation id="215753907730220065">Дэлгэц дүүрэн харах горимоос гарах</translation>
@@ -987,7 +987,6 @@
 <translation id="2326931316514688470">Аппыг дахин ачаалла</translation>
 <translation id="2327492829706409234">Аппликейшнийг идэвхжүүл</translation>
 <translation id="2329597144923131178">Өөрийн төхөөрөмж дээрх хавчуурга, түүх, бусад тохиргоог авахын тулд нэвтэрнэ үү.</translation>
-<translation id="2330607597130465898">Хамгаалалтгүй</translation>
 <translation id="2332131598580221120">Дэлгүүрт харах</translation>
 <translation id="2332192922827071008">Тохиргоог нээх</translation>
 <translation id="2332742915001411729">Өгөгдмөл горимыг дахин тохируулах</translation>
@@ -1866,7 +1865,6 @@
 <translation id="3492788708641132712">Синк ажиллахгүй байна. Дахин нэвтрэхээр оролдоно уу.</translation>
 <translation id="3493486281776271508">Интернэт холболт шаардлагатай</translation>
 <translation id="3493881266323043047">Хүчинтэй хугацаа</translation>
-<translation id="3494155060718700400">Аюултай вэб сайт, татаж авсан файл болон өргөтгөлөөс таныг хамгаалахгүй (зөвлөдөггүй). Гэхдээ та Аюулгүй үзэх хамгаалалтыг Gmail, Хайлт зэрэг Google-н боломжтой бусад үйлчилгээнд авсан хэвээр байна.</translation>
 <translation id="3494769164076977169">Эхний файлыг татаж авсны дараа сайт автоматиар бусад файлуудыг татах оролдлого хийвэл мэдэгд (зөвлөж байна)</translation>
 <translation id="3495660573538963482">Google туслахын тохиргоо</translation>
 <translation id="3496213124478423963">Багасгаж харах</translation>
@@ -2916,7 +2914,6 @@
 <translation id="4920887663447894854">Дараах сайтуудыг таны байршлын тухай мэдээг авахыг оролдсон тул блоклосон болно. Үүнд:</translation>
 <translation id="49226369361073053">{0,plural, =0{Төхөөрөмжийг одоо шинэчилнэ үү}=1{Төхөөрөмжийг 1 секундийн дотор шинэчилнэ үү}other{Төхөөрөмжийг # секундийн дотор шинэчилнэ үү}}</translation>
 <translation id="492299503953721473">Андройд апп-г устгах</translation>
-<translation id="4923279099980110923">Тийм ээ, би туслахыг хүсч байна</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Таны портууд энд харагдана</translation>
 <translation id="4925542575807923399">Энэ хаягийг хариуцсан ажилтан нь олон хаягаар зэрэг нэвтрэх тохиолдолд зөвхөн энэ хаягаар түрүүлж нэвтэрсний дараагаар бусад хаягт нэвтрэх боломжтой байхаар тохируулсан байна.</translation>
@@ -3230,7 +3227,6 @@
 <translation id="5362741141255528695">Хувийн түлхүүр файлыг сонго</translation>
 <translation id="5363109466694494651">Powerwash болон Revert</translation>
 <translation id="5365881113273618889">Таны сонгосон фолдерт эмзэг файл агуулсан байна. Та "<ph name="APP_NAME" />"-д энэ фолдерыг бичих хандалтыг бүрмөсөн өгөхдөө итгэлтэй байна уу?</translation>
-<translation id="5367091008316207019">Файлыг уншиж байна..</translation>
 <translation id="5368720394188453070">Таны утас түгжигдсэн байна. Нэвтрэхийн тулд утсаа нээнэ үү.</translation>
 <translation id="5368779022775404937"><ph name="REALM" />-д нэвтрэх</translation>
 <translation id="5369491905435686894">Хулганын хурдасгуурыг идэвхжүүлэх</translation>
@@ -5950,7 +5946,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> өдрийн өмнө идэвхтэй</translation>
 <translation id="8986362086234534611">Мартах</translation>
 <translation id="8986494364107987395">Google рүү хэрэглээний статистик мэдээ болон алдаа ослын тайланг автоматаар илгээ</translation>
-<translation id="8986651757229422279">Энэ нь <ph name="ORIGIN_NAME" />-н хадгалсан бүх өгөгдөл, күүки болон суулгасан аппыг устгах болно.</translation>
 <translation id="8987927404178983737">Сар</translation>
 <translation id="8991520179165052608">Сайт таны микрофоныг ашиглах боломжтой</translation>
 <translation id="899403249577094719">Нетскейп гэрчилгээнд суурилсан холбоос</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 002e70f..e2193dc7 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -858,7 +858,6 @@
 <translation id="2154484045852737596">कार्ड संपादित करा</translation>
 <translation id="2154710561487035718">URL कॉपी करा</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> सारखे दिसते</translation>
-<translation id="2156283799932971644">सुरक्षित ब्राउझिंगमध्ये सुधारणा करण्यासाठी तुम्ही Google ला काही सिस्टम माहिती आणि पेज आशय पाठवून मदत करू शकता.</translation>
 <translation id="2156294658807918600">सेवा कर्मचारी: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">अतिरिक्त वैशिष्‍ट्ये मिळवण्यासाठी, या Chromebook सोबत काम करणारे Dell डॉक स्टेशन वापरा.</translation>
 <translation id="215753907730220065">पूर्ण स्क्रीनमधून निर्गमन करा</translation>
@@ -990,7 +989,6 @@
 <translation id="2326931316514688470">&amp;अ‍ॅप रीलोड करा</translation>
 <translation id="2327492829706409234">अ‍ॅप सुरू करा</translation>
 <translation id="2329597144923131178">आपल्‍या सर्व डिव्‍हाइसेस वरील तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्‍यासाठी साइन इन करा.</translation>
-<translation id="2330607597130465898">संरक्षण नाही</translation>
 <translation id="2332131598580221120">स्टोअर मध्ये पहा</translation>
 <translation id="2332192922827071008">प्राधान्ये उघडा</translation>
 <translation id="2332742915001411729">डीफॉल्टवर रीसेट करा</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">संकालन कार्य करत नाही. पुन्हा साइन इन करण्याचा प्रयत्न करा.</translation>
 <translation id="3493486281776271508">इंटरनेट कनेक्शन आवश्यक आहे</translation>
 <translation id="3493881266323043047">वैधता</translation>
-<translation id="3494155060718700400">धोकादायक वेबसाइट, डाउनलोड आणि एक्स्टेंशनपासून तुमचे संरक्षण करत नाही (शिफारस केली जात नाही). तुम्हाला तरीही Gmail आणि Search यांसारख्या इतर Google सेवांमध्ये, उपलब्ध असेल तेथे, सुरक्षित ब्राउझिंग संरक्षण मिळेल.</translation>
 <translation id="3494769164076977169">प्रथम फायलीनंतर जेव्हा एखादी साइट फायली आपोआप डाउनलोड करण्याचा प्रयत्न करते तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="3495660573538963482">Google साहाय्यक सेटिंग्ज</translation>
 <translation id="3496213124478423963">झूम कमी करा</translation>
@@ -2919,7 +2916,6 @@
 <translation id="4920887663447894854">या पेजवर तुमचे स्थान ट्रॅक करण्यापासून खालील साइट अवरोधित केल्या गेल्या आहेत:</translation>
 <translation id="49226369361073053">{0,plural, =0{डिव्हाइस आता अपडेट करा}=1{डिव्हाइस एका सेकंदाच्या आत अपडेट करा}other{डिव्हाइस # सेकंदांच्या आत अपडेट करा}}</translation>
 <translation id="492299503953721473">Android ॲप्स काढून टाका</translation>
-<translation id="4923279099980110923">होय, मी मदत घेऊ इच्छितो</translation>
 <translation id="4924352752174756392">१२x</translation>
 <translation id="4925320384394644410">तुमच्या पोस्ट येथे दिसतील</translation>
 <translation id="4925542575807923399">या खात्याच्या ॲडमिनिस्ट्रेटरला हे खाते एका एकाहून अधिक साइन इन सेशनमधील प्रथम साइन इन केलेले खाते असणे आवश्यक आहे.</translation>
@@ -3233,7 +3229,6 @@
 <translation id="5362741141255528695">खासगी की फाइल निवडा.</translation>
 <translation id="5363109466694494651">Powerwash करा आणि परत करा</translation>
 <translation id="5365881113273618889">तुम्ही निवडलेल्या फोल्डरमध्ये संवेदनशील फायली आहेत. तुम्हाला नक्की "<ph name="APP_NAME" />" ला या फोल्डरचा कायमचा राइट अ‍ॅक्सेस द्यायचा आहे का?</translation>
-<translation id="5367091008316207019">फाईल वाचत आहे..</translation>
 <translation id="5368720394188453070">तुमचा फोन लॉक केला आहे. प्रविष्‍ट करण्‍यासाठी तो अनलॉक करा.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> मध्ये साइन इन करा</translation>
 <translation id="5369491905435686894">माउस अ‍ॅक्सिलरेशन सुरू करा</translation>
@@ -5959,7 +5954,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिवसापूर्वी ॲक्टिव्ह होते</translation>
 <translation id="8986362086234534611">विसरा</translation>
 <translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवा</translation>
-<translation id="8986651757229422279">हे <ph name="ORIGIN_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी व त्याचे इंस्टॉल केलेले ॲप साफ करेल.</translation>
 <translation id="8987927404178983737">महिना</translation>
 <translation id="8991520179165052608">साइट तुमचा मायक्रोफोन वापरू शकते</translation>
 <translation id="899403249577094719">Netscape सर्टिफिकेट मूळ URL</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 72eb601..320ef25 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Edit kad</translation>
 <translation id="2154710561487035718">Salin URL</translation>
 <translation id="2155772377859296191">Kelihatan seperti <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Anda boleh membantu dalam meningkatkan Penyemakan Imbas Selamat dengan menghantar beberapa maklumat sistem dan kandungan halaman kepada Google.</translation>
 <translation id="2156294658807918600">Pekerja Perkhidmatan: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Gunakan stesen dok Dell yang direka khusus untuk Chromebook ini untuk mendapatkan ciri tambahan.</translation>
 <translation id="215753907730220065">Keluar Daripada Skrin Penuh</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Muat semula apl</translation>
 <translation id="2327492829706409234">Dayakan apl</translation>
 <translation id="2329597144923131178">Log masuk untuk mendapatkan penanda halaman, sejarah, kata laluan dan tetapan lain pada semua peranti anda.</translation>
-<translation id="2330607597130465898">Tiada perlindungan</translation>
 <translation id="2332131598580221120">Lihat di gedung</translation>
 <translation id="2332192922827071008">Buka Pilihan</translation>
 <translation id="2332742915001411729">Tetapkan semula kepada lalai</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Penyegerakan tidak berfungsi. Cuba log masuk semula.</translation>
 <translation id="3493486281776271508">Sambungan Internet diperlukan</translation>
 <translation id="3493881266323043047">Kesahihan</translation>
-<translation id="3494155060718700400">Tidak melindungi anda daripada tapak web, muat turun dan sambungan yang berbahaya (tidak disyorkan). Anda akan mendapat perlindungan Penyemakan Imbas Selamat, jika tersedia, dalam perkhidmatan Google yang lain, seperti Gmail dan Carian.</translation>
 <translation id="3494769164076977169">Tanya apabila tapak cuba memuat turun fail secara automatik selepas fail pertama (disyorkan)</translation>
 <translation id="3495660573538963482">Tetapan Google Assistant</translation>
 <translation id="3496213124478423963">Zum Keluar</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Tapak berikut telah disekat daripada menjejaki lokasi anda pada halaman ini:</translation>
 <translation id="49226369361073053">{0,plural, =0{Kemas kini peranti sekarang}=1{Kemas kini peranti dalam masa 1 saat}other{Kemas kini peranti dalam masa # saat}}</translation>
 <translation id="492299503953721473">Alih keluar apl Android</translation>
-<translation id="4923279099980110923">Ya, saya ingin membantu</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Port anda akan dipaparkan di sini</translation>
 <translation id="4925542575807923399">Pentadbir akaun ini memerlukan akaun ini menjadi akaun dilog masuk yang pertama dalam sesi berbilang log masuk.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Pilih fail kunci persendirian.</translation>
 <translation id="5363109466694494651">Powerwash dan Berbalik</translation>
 <translation id="5365881113273618889">Folder yang anda pilih mengandungi fail sensitif. Adakah anda pasti anda mahu memberi "<ph name="APP_NAME" />" akses tulis kekal kepada folder ini?</translation>
-<translation id="5367091008316207019">Membaca fail..</translation>
 <translation id="5368720394188453070">Telefon anda dikunci. Buka kuncinya untuk masuk.</translation>
 <translation id="5368779022775404937">Log masuk ke <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Dayakan pemecutan tetikus</translation>
@@ -5964,7 +5959,6 @@
 <translation id="8985264973231822211">Aktif <ph name="DEVICE_LAST_ACTIVATED_TIME" /> hari yang lalu</translation>
 <translation id="8986362086234534611">Lupa</translation>
 <translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation>
-<translation id="8986651757229422279">Tindakan ini akan mengosongkan semua data dan kuki yang disimpan oleh <ph name="ORIGIN_NAME" /> dan apl yang dipasang.</translation>
 <translation id="8987927404178983737">Bulan</translation>
 <translation id="8991520179165052608">Tapak boleh menggunakan mikrofon anda</translation>
 <translation id="899403249577094719">URL Tapak Sijil Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index b4688a5..333bdca3 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -37,6 +37,7 @@
 <translation id="1041263367839475438">ရနိုင်သော စက်များ</translation>
 <translation id="1042174272890264476">သင်၏ ကွန်ပျူတာထဲတွင်ပါ <ph name="SHORT_PRODUCT_NAME" />၏ RLZ စာကြည့်တိုက် ထည့်သွင်းပြီး ဖြစ်သည်။ RLZ က တစ်ဦးတည်းပိုင် မဟုတ်သော၊ ကိုယ်ပိုင် မဟုတ်သော ထောက်ပြရနိုင်သည့် တဲဘ်ကို သတ်မှတ်ပေးလျက် မြှင့်တင်ရေး အစီအစဉ် တစ်ခုက လှုံ့ဆော်ပေးလိုက်သည့် ရှာဖွေမှုုများ နှင့် <ph name="SHORT_PRODUCT_NAME" /> သုံးစွဲမှုုကို တိုင်းထွာပေးသည်။ ထို တံဆိပ်များမှာ တခါတရံ <ph name="PRODUCT_NAME" /> ထဲက Google ရှာဖွေမှု မေးမြန်းချက်များထဲမှာ ပါလာတတ်ကြသည်။</translation>
 <translation id="1043818413152647937">ဤအက်ပ်များမှ ဒေတာများကိုလည်း ရှင်းထုတ်မလား။</translation>
+<translation id="1045448422538531528">အုပ်စုသို့ ထည့်ရန်</translation>
 <translation id="1046635659603195359">နောက်စက်တစ်ခုတွင် သင့် Google Assistant သုံး၍ Voice Match ကို စနစ်ထည့်သွင်းပြီးပုံ ရပါသည်။ ဤစက်တွင် အသံနမူနာပုံစံတစ်ခု ပြုလုပ်ရန် ယခင်သွင်းထားသည့် အသံများကို အသုံးပြုနိုင်ပါသည်။ ၎င်းက တစ်မိနစ်ခန့်သာ ကြာနိုင်ပါသည်။</translation>
 <translation id="104710386808485638">Linux ပြန်စမလား။</translation>
 <translation id="1047431265488717055">လင့် စာ&amp;သားကို ကူးယူပါ</translation>
@@ -66,6 +67,7 @@
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
 <translation id="1079766198702302550">ကင်မရာအား ရယူသုံးမှုကို အမြဲတမ်း ပိတ်ဆို့ရန်</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> က သင်၏ Chrome ဆက်တင်များကို ၎င်းတို့၏ မူရင်းများဆီသို့ ပြန်ညှိယူလိုနေသည်။ ၎င်းက သင်၏ ပင်မ စာမျက်နှာ၊ တဘ် စာမျက်နှာ အသစ် နှင့် ရှာဖွေရေး အင်ဂျင်ကို ပြန်ညှိပေးလျက်၊ သင်၏ နောက်ဆက်တွဲများကို ပိတ်လိုက်ကာ တဘ်အားလုံးတို့ကို ပင်ဖြုတ်ပစ်လိမ့်မည်။ ထို့အပြင် ၎င်းသည်၊ ကူးကီးများ၊ အကြောင်းအရာများ နှင့် ဆိုက်ဒေတာကဲ့သို့၊ ယာယီ နှင့် ကက်ရ်ှ ဒေတာကိုပါ ရှင်းလင်းပစ်မည်။</translation>
+<translation id="1084096383128641877">ဤစကားဝှက်ကို ဖယ်ရှားခြင်းဖြင့် <ph name="DOMAIN" /> ရှိ သင့်အကောင့်ကို ဖျက်မည်မဟုတ်ပါ။ အခြားသူများ၏ ရန်မှကာကွယ်ရန် သင့်စကားဝှက်ကို ပြောင်းပါ သို့မဟုတ် <ph name="DOMAIN_LINK" /> ရှိ သင့်အကောင့်ကို ဖျက်ပါ။</translation>
 <translation id="1084824384139382525">လင့်ခ်လိပ်စာကူးယူရန်</translation>
 <translation id="1085697365578766383">ပကတိအသွင်စက်စနစ် စတင်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="1090126737595388931">မည်သည့် နောက်ခံ အက်ပ်ပွင့်နေခြင်း မရှိပါ</translation>
@@ -200,6 +202,7 @@
 <translation id="1259152067760398571">မနေ့က လုံခြုံရေး စစ်ဆေးခဲ့သည်</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> ရှိ ပေါ့ပ်အပ်များနှင့် တစ်ဆင့်ပြန်ညွှန်ပြခြင်းများကို အမြဲခွင့်ပြုရန်</translation>
 <translation id="126156426083987769">သရုပ်ပြမုဒ်စက်ပစ္စည်း လိုင်စင်များတွင် ပြဿနာရှိနေသည်။</translation>
+<translation id="1263490604593716556">အကောင့်ကို <ph name="FIRST_PARENT_EMAIL" /> နှင့် <ph name="SECOND_PARENT_EMAIL" /> က စီမံပါသည်။ ဤစက်ရှိ ပင်မအကောင့်မှထွက်ရန် ဖန်သားပြင်ပေါ်ရှိ အချိန်ကို နှိပ်ပါ။ ပေါ်လာသည့် မီနူးတွင် "ထွက်ရန်" ကို နှိပ်ပါ။</translation>
 <translation id="126710816202626562">ဘာသာပြန် ဘာသာစကား၊</translation>
 <translation id="126768002343224824">၁၆ ဆ</translation>
 <translation id="1272079795634619415">ရပ်ရန်</translation>
@@ -861,7 +864,6 @@
 <translation id="2154484045852737596">ကတ်ကို တည်းဖြတ်ပါ</translation>
 <translation id="2154710561487035718">URL ကူးယူရန်</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ဟု ယူဆရပါသည်</translation>
-<translation id="2156283799932971644">အချို့သော စနစ်အချက်အလက်များနှင့် စာမျက်နှာ အကြောင်းအရာများကို Google သို့ ပို့ခြင်းဖြင့် 'ဘေးကင်းလုံခြုံစွာ အင်တာနက်အသုံးပြုခြင်း' ပိုမိုကောင်းမွန်လာစေရန် ကူညီနိုင်ပါသည်။</translation>
 <translation id="2156294658807918600">ဝန်ဆောင်မှု ဆောင်ရွက်စနစ်− <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">နောက်ထပ်ဝန်ဆောင်မှုများ ရရှိရန် ဤ Chromebook နှင့်တွဲသုံးရန် ထုတ်လုပ်ထားသော Dell အထိုင်စက်ကို အသုံးပြုပါ။</translation>
 <translation id="215753907730220065">မျက်နှာပြင် အပြည့်မှ ထွက်ရန်</translation>
@@ -875,6 +877,7 @@
 <translation id="2172784515318616985">ရှေ့ဆက်ရန်</translation>
 <translation id="2173302385160625112">သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ</translation>
 <translation id="2173801458090845390">ဤစက်ပစ္စည်းသို့ လိုအပ်ချက် ID ကို ထည့်ရန်</translation>
+<translation id="2174948148799307353">အကောင့်ကို <ph name="PARENT_EMAIL" /> က စီမံပါသည်။ ဤစက်ရှိ ပင်မအကောင့်မှထွက်ရန် ဖန်သားပြင်ပေါ်ရှိ အချိန်ကို နှိပ်ပါ။ ပေါ်လာသည့် မီနူးတွင် "ထွက်ရန်" ကို နှိပ်ပါ။</translation>
 <translation id="2175607476662778685">အမြန် ဖွင့်တင်ရေး ဘား</translation>
 <translation id="217576141146192373">ပုံနှိပ်စက်ကို ထည့်၍မရပါ။ သင့်ပုံနှိပ်စက်၏ စီစဉ်သတ်မှတ်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="2177950615300672361">Incognito တဲပ်: <ph name="TAB_NAME" /></translation>
@@ -993,7 +996,6 @@
 <translation id="2326931316514688470">အက်ပ်ကို ပြန်စရန်</translation>
 <translation id="2327492829706409234">အက်ပ်ကို ဖွင့်ထားရန်</translation>
 <translation id="2329597144923131178">သင့်စာညှပ်များ၊ မှတ်တမ်း၊ စကားဝှက်များနှင့် အခြား ဆက်တင်များအား သင်၏ ကိရိယာများ အားလုံးတွင် ရရှိရန် လက်မှတ်ထိုး ဝင်ပါ</translation>
-<translation id="2330607597130465898">ကာကွယ်မှု မရှိပါ</translation>
 <translation id="2332131598580221120">စတိုးမှာ ကြည့်ရန်</translation>
 <translation id="2332192922827071008">စနစ်သတ်မှတ်ချက်များ ဖွင့်ရန်</translation>
 <translation id="2332742915001411729">ပုံသေသို့ ပြန်လည်သတ်မှတ်</translation>
@@ -1482,6 +1484,7 @@
 <translation id="2948300991547862301"><ph name="PAGE_TITLE" /> သို့သွား</translation>
 <translation id="29488703364906173">ခေတ်မီသည့် ဝဘ် အတွက် တည်ဆောင်ပေးထားသည့် မြန်သော၊ လွယ်ကူသော၊ လုံခြုံသော ဝဘ် ဘရောင်ဇာ။</translation>
 <translation id="2949289451367477459">တည်နေရာကို အသုံးပြုပါ။ တည်နေရာ ခွင့်ပြုချက်ပါဝင်သည့် အက်ပ်နှင့် ဝန်ဆောင်မှုများအား ဤစက်၏ တည်နေရာကို အသုံးပြုခွင့်ပေးပါ။ Google သည် တည်နေရာအချက်အလက်များကို အခါအားလျော်စွာ စုဆောင်းနိုင်ပြီး တည်နေရာ ပိုမိုတိကျလာစေရန်နှင့် တည်နေရာအခြေခံသည့် ဝန်ဆောင်မှုများ ကောင်းမွန်လာစေရန် ၎င်းဒေတာများကို အမည်မဖော်ဘဲ အသုံးပြုသွားပါမည်။ <ph name="BEGIN_LINK1" />ပိုမိုလေ့လာရန်<ph name="END_LINK1" /></translation>
+<translation id="2950666755714083615">စာရင်းသွင်းရန်</translation>
 <translation id="2956070239128776395">အပိုင်းကို ထည့်သွင်းထားသည့် အုပ်စု- <ph name="ERROR_LINE" /></translation>
 <translation id="2957117904572187936">သင့်စက်ပစ္စည်းပေါ်ရှိ ဖိုင် သို့မဟုတ် ဖိုင်တွဲများတွင် မည်သည့်ဝဘ်ဆိုက်ကိုမျှ တည်းဖြတ်ခွင့်မပြုပါနှင့်</translation>
 <translation id="2958721676848865875">နောက်ဆက်တွဲ သိမ်းဆည်းမှု သတိပေးချက်</translation>
@@ -1606,6 +1609,7 @@
 <translation id="3139925690611372679">မူရင်းအဝါရောင်ချန်နယ်ပုံ</translation>
 <translation id="3141318088920353606">နားထောင်နေသည်…</translation>
 <translation id="3141917231319778873">"<ph name="DEVICE_NAME" />" သည်လက်ရှိတောင်းဆိုမှုကို မထောက်ပံ့ပါ။</translation>
+<translation id="3142562627629111859">အုပ်စုအသစ်</translation>
 <translation id="3143515551205905069">စင့်ခ်လုပ်ခြင်း ပယ်ဖျက်ရန်</translation>
 <translation id="3143754809889689516">အစမှ ကစားရန်</translation>
 <translation id="3144647712221361880">လင့်ကို ...အဖြစ် ဖွင့်ပါ</translation>
@@ -1630,6 +1634,7 @@
 <translation id="3159493096109238499">ဝါညိုနု</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (စက်ပစ္စည်းကို အသုံးပြုထားသည်)</translation>
 <translation id="3161522574479303604">ဘာသာစကားများ အားလုံး</translation>
+<translation id="3162853326462195145">ကျောင်းအကောင့်</translation>
 <translation id="3162899666601560689">သင်၏ဝဘ်ကြည့်ရှုမှု ပိုကောင်းမွန်စေရန် ဥပမာအားဖြင့် အမြဲလက်မှတ်ထိုးဝင်ထားရန် သို့မဟုတ် ဈေးခြင်းတောင်းထဲရှိ အရာများ မှတ်ထားရန်တို့အတွက် ဝဘ်ဆိုက်များက ကွတ်ကီးများကို အသုံးပြုနိုင်သည်</translation>
 <translation id="3163201441334626963">အမည်မသိပစ္စည်း <ph name="PRODUCT_ID" /> သည် ရောင်းသူ <ph name="VENDOR_ID" /> မှဖြစ်၏</translation>
 <translation id="3164329792803560526">ဤတဘ်ကို <ph name="APP_NAME" /> သို့ မျှဝေနေသည်</translation>
@@ -1793,6 +1798,7 @@
 <translation id="3396800784455899911">"လက်ခံပြီး ရှေ့ဆက်ရန်" ခလုတ်ကို နှိပ်ခြင်းဖြင့် ဤ Google ဝန်ဆောင်မှုများအတွက် အထက်ဖော်ပြပါ စီမံဆောင်ရွက်မှုများကို သဘောတူရာရောက်ပါသည်။</translation>
 <translation id="3399432415385675819">အကြောင်းကြားချက်များကို ပိတ်ထားပါမည်</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ဟာ့ဇ်) - တစ်ခုနှင့်တစ်ခု ထပ်ထားသည်</translation>
+<translation id="3402585168444815892">'သရုပ်ပြမုဒ်' တွင် စာရင်းသွင်းနေသည်</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />၊ <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">ဤဝဘ်ဆိုက်အတွက် မည်သည့်စကားဝှက်မျှ သိမ်းမထားပါ</translation>
 <translation id="3405664148539009465">ဖေါင့်များ စိတ်ကြိုက်ပြင်ဆင်ရန်</translation>
@@ -1854,6 +1860,7 @@
 <translation id="3468999815377931311">Android ဖုန်း</translation>
 <translation id="3470442499439619530">ဒီအသုံးပြုသူကို ဖယ်ရှားပစ်ရန်</translation>
 <translation id="3471876058939596279">ဗီဒီယိုအတွက် HDMI နှင့် USB Type-C ပို့တ်များကို တစ်ပြိုင်နက် အသုံးပြု၍မရပါ။ အခြား ဗီဒီယိုပို့တ်ကို အသုံးပြုပါ။</translation>
+<translation id="3473241910002674503">တက်ဘလက်မုဒ်တွင် ခလုတ်များဖြင့် ပင်မစာမျက်နှာသို့ သွားခြင်း၊ နောက်ပြန်သွားခြင်းနှင့် အက်ပ်များပြောင်းခြင်းတို့ ပြုလုပ်နိုင်သည်။</translation>
 <translation id="3473479545200714844">မျက်နှာပြင် ပုံချဲ့ပေးသူ</translation>
 <translation id="3475843873335999118">ဝမ်းနည်းပါသည်။ သင်၏ လက်ဗွေကို မသိရှိပါ။ စကားဝှက်ကို ထည့်ပါ။</translation>
 <translation id="3476303763173086583">အသုံးပြုမှုနှင့် အမှားရှာဖွေမှုဒေတာ ပို့ပါ။ အမှားရှာဖွေမှု၊ စက်ပစ္စည်းနှင့်အက်ပ် အသုံးပြုမှုဒေတာများကို Google သို့ အလိုအလျောက်ပို့၍ သင့်ကလေး၏ Android အသုံးပြုမှု ပိုမိုကောင်းမွန်လာစေရန် ကူညီပါ။ ၎င်းကို အသုံးပြု၍ သင့်ကလေး မည်သူမည်ဝါဖြစ်ကြောင်း ထုတ်ဖော်သွားမည် မဟုတ်ဘဲ စနစ်နှင့် အက်ပ်တည်ငြိမ်မှု၊ အခြား တိုးတက်ပြင်ဆင်မှုများအတွက် အသုံးပြုသွားပါမည်။ စုစည်းထားသော ဒေတာအချို့က Google အက်ပ်နှင့် Android ဆော့ဖ်ဝဲအင်ဂျင်နီယာများကဲ့သို့ ပါတနာများကို ကူညီပေးပါမည်။ ဤ <ph name="BEGIN_LINK1" />ဆက်တင်<ph name="END_LINK1" /> ကို ပိုင်ရှင်ဖြစ်သူက သတ်မှတ်ထားခြင်းဖြစ်သည်။ ပိုင်ရှင်သည် ဤစက်ပစ္စည်းအတွက် ပြဿနာအဖြေရှာခြင်းနှင့် အသုံးပြုမှုဒေတာများကို Google သို့ ပို့ရန် ရွေးချယ်နိုင်ပါသည်။ သင့်ကလေးအတွက် ထပ်တိုး 'ဝဘ်နှင့် အက်ပ်လုပ်ဆောင်ချက်' ကို ဖွင့်ထားသည့်အခါ ဤဒေတာကို သူ၏ Google အကောင့်သို့ သိမ်းသွားပါမည်။ <ph name="BEGIN_LINK2" />ပိုမိုလေ့လာရန်<ph name="END_LINK2" /></translation>
@@ -1873,7 +1880,6 @@
 <translation id="3492788708641132712">စင့်ခ်ပြုလုပ်၍ မရပါ။ ထပ်မံ၍ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="3493486281776271508">အင်တာနက် ချိတ်ဆက်မှု လိုအပ်သည်</translation>
 <translation id="3493881266323043047">မှန်ကန်မှု</translation>
-<translation id="3494155060718700400">အန္တရာယ်ရှိသော ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ်နှင့် နောက်ဆက်တွဲများ၏ ရန်မှ ကာကွယ်မပေးပါ (အကြံပြုမထားပါ)။ ရနိုင်သည့်အခါ Gmail နှင့် Search ကဲ့သို့ အခြား Google ဝန်ဆောင်မှုများတွင် 'ဘေးကင်းစွာ အင်တာနက်အသုံးပြုခြင်းစနစ်' အကာအကွယ်ကို ဆက်လက်ရရှိနေပါမည်။</translation>
 <translation id="3494769164076977169">ဆိုက် တစ်ခုက ပထမ ဖိုင်၏ နောက်မှာ ဖိုင်များကို အလိုအလျောက် ဒေါင်းလုဒ် လုပ်ရန် ကြိုးစားလျှင် မေးရန် (အကြံပေးထား)</translation>
 <translation id="3495660573538963482">Google Assistant ဆက်တင်များ</translation>
 <translation id="3496213124478423963">ဇူးမ်ဖြုတ်ရန်</translation>
@@ -2278,6 +2284,7 @@
 <translation id="3971764089670057203">ဤလုံခြုံရေးကီးပေါ်ရှိ လက်ဗွေများ</translation>
 <translation id="3973660817924297510">စကားဝှက်များကို စစ်ဆေးနေသည် (<ph name="TOTAL_PASSWORDS" /> အနက် <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">အဖွဲ့အစည်းအတွက် ဆာဗာသို့ ချိတ်ဆက်၍ မရပါ</translation>
+<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="3976108569178263973">ရနိုင်သော ပုံနှိပ်စက်များ မရှိပါ။</translation>
 <translation id="397703832102027365">အဆုံးသတ်နေ...</translation>
 <translation id="3977886311744775419">ဤကွန်ရက်အမျိုးအစားတွင် အလိုအလျောက် အပ်ဒိတ်များကို ဒေါင်းလုဒ်မလုပ်သော်လည်း အပ်ဒိတ်များကို ကိုယ်တိုင်စစ်ဆေးနိုင်သည်။</translation>
@@ -2341,6 +2348,7 @@
 <translation id="4068506536726151626">ဤစာမျက်နှာတွင် အောက်ပါဆိုဒ်များမှ အရာများပါဝင်ပြီး သင့်တည်နေရာကို ခြေရာခံနေပါသည်။</translation>
 <translation id="4068776064906523561">သိမ်းဆည်းထားသည့် လက်ဗွေများ</translation>
 <translation id="407173827865827707">ကလစ်နှိပ်လျှင်</translation>
+<translation id="4073520450811433493">စင့်ခ်လုပ်ရန် စနစ်ထည့်သွင်းခြင်း</translation>
 <translation id="4074900173531346617">အီးမေးလ် လက်မှတ်ထိုးသူ အသိမှတ်ပြုလက်မှတ်</translation>
 <translation id="407520071244661467">အတိုင်းအတာ</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> ကို ကာစ်လုပ်၍မရပါ။</translation>
@@ -2577,6 +2585,7 @@
 <translation id="4421932782753506458">အမွေးနု</translation>
 <translation id="4423376891418188461">ဆက်တင်များအား ပြန်ယူရန်</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />၊ သင်၏ စီမံခန့်ခွဲသူက သင်၏စကားဝှက်ကို ပြောင်းစေလိုပါသည်။</translation>
+<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="4429030830601238961">ဤဒေတာသည် သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများကို ချိုးဖောက်သည့်အတွက် ကူးထည့်၍မရပါ။</translation>
 <translation id="4430019312045809116">ပမာဏ</translation>
 <translation id="4430369329743628066">ဝဘ်လိပ်စာကို ထည့်ပြီးပါပြီ</translation>
@@ -2589,6 +2598,7 @@
 <translation id="4441124369922430666">စက် ပွင့်လာသည့် အခါမှာ ဒီအက်ပ်ကို သင်သည် အလိုအလျောက် စတင်စေလိုပါသလား?</translation>
 <translation id="4441147046941420429">ရှေ့ဆက်ရန် သင်၏စက်မှ လုံခြုံရေးကီး ဖယ်ရှားပါ၊ ထို့နောက် ၎င်းကို ပြန်ထည့်သွင်းပြီး ထိပါ</translation>
 <translation id="444134486829715816">တိုးချဲ့ရန်...</translation>
+<translation id="4442329324652245220">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်</translation>
 <translation id="4442424173763614572">DNS ကြည့်ရှုမှု မအောင်မြင်ခဲ့</translation>
 <translation id="4443536555189480885">အကူအညီ</translation>
 <translation id="4444304522807523469">USB သို့မဟုတ် ဒေသခံ ကွန်ရက်မှ တစ်ဆင့် ချိတ်ဆက်ထားသည့် စာတမ်း စကင်နာများးကို ရယူသုံးရန်</translation>
@@ -2615,11 +2625,13 @@
 <translation id="4476659815936224889">ဤကုဒ်ကို စကင်ဖတ်ရန် သင့်ဖုန်းပေါ်ရှိ QR စကင်ဖတ်စနစ်အက်ပ် သို့မဟုတ် ကင်မရာအက်ပ် အချို့ကို အသုံးပြုနိုင်သည်။</translation>
 <translation id="4477015793815781985">Ctrl၊ Alt၊ သို့မဟုတ် ⌘ ကိုပါ ထည့်ရန်</translation>
 <translation id="4478664379124702289">လင့်&amp;ကို အဖြစ် သိမ်းရန်...</translation>
+<translation id="4478777936860197922">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation>
 <translation id="4479424953165245642">Kiosk အပလီကေးရှင်းများကို စီမံရန်</translation>
 <translation id="4479639480957787382">အီတာနက်</translation>
 <translation id="4479877282574735775">ပကတိအသွင် စက်စနစ်ကို စီစဉ်သတ်မှတ်နေသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
 <translation id="4480590691557335796">Chrome သည် သင့်ကွန်ပျူတာပေါ်ရှိ အန္တရာယ်ရှိသော ဆော့ဖ်ဝဲများကို ရှာဖွေဖယ်ရှားပေးနိုင်သည်</translation>
 <translation id="4481530544597605423">ချိတ်ဆက်မှု ဖြုတ်ထားသည့် စက်ပစ္စည်းများ</translation>
+<translation id="4488107067273194838">စနစ်ထည့်သွင်းမှု အပြီးတွင် ဘရောင်ဇာစင့်ခ်လုပ်ခြင်း ရွေးချယ်စရာများကို ပြန်စစ်ရန်</translation>
 <translation id="4488502501195719518">ဒေတာအားလုံး ရှင်းထုတ်မလား။</translation>
 <translation id="4495419450179050807">ဤစာမျက်နှာတွင် မပြပါနှင့်</translation>
 <translation id="4496054781541092778"><ph name="PERMISSION" /> ကို အလိုအလျောက် ပိတ်ထားသည်</translation>
@@ -2861,6 +2873,7 @@
 <translation id="4849517651082200438">မသွင်းပါနှင့်</translation>
 <translation id="4850669014075537160">အပေါ်အောက်ရွှေ့ခြင်း</translation>
 <translation id="4850886885716139402">မြင်ကွင်း</translation>
+<translation id="485197095346966382">ကျိုးပေါက်ထားသည့် စကားဝှက်ဖြင့် လက်မှတ်ထိုးဝင်သည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်ကို ကြောင်းကြားပါမည်</translation>
 <translation id="4853020600495124913">ဝင်ဒိုးအသစ် &amp;ထဲမှာ &amp;ဖွင့်ရန်</translation>
 <translation id="4854317507773910281">အတည်ပြုရန်အတွက် မိဘအကောင့်ကို ရွေးပါ</translation>
 <translation id="485480310608090163">နောက်ထပ် ဆက်တင်များနှင့် ခွင့်ပြုချက်များ</translation>
@@ -2879,6 +2892,7 @@
 <translation id="4871322859485617074">ပင်နံပါတ်တွင် မမှန်ကန်သော အက္ခရာများပါဝင်သည်</translation>
 <translation id="4871370605780490696">စာညှပ် ထည့်ပေးရန်</translation>
 <translation id="4871719318659334896">အုပ်စုကို ပိတ်ရန်</translation>
+<translation id="4871852311166078968">အုပ်စုသို့ ထည့်ခြင်း</translation>
 <translation id="4873312501243535625">Media File Checker</translation>
 <translation id="4876273079589074638">ဤ ရပ်တန့်သွားခြင်းကို အင်ဂျင်နီယာများက စစ်ဆေးဖော်ထုတ်ပြီး ပြင်ဆင်နိုင်ရန် ကူညီပါ။ တတ်နိုင်ပါက အဆင့်များကို အတိအကျစာရင်းလုပ်ပေးပါ။ အသေးစိတ်ရရှိနိုင်လေ ပိုကောင်းလေဖြစ်ပါသည်။</translation>
 <translation id="4876895919560854374">မျက်နှာပြင်အား သော့ခတ်ခြင်းနှင့် ပိတ်ခြင်း</translation>
@@ -2923,7 +2937,6 @@
 <translation id="4920887663447894854">ဒီစာမျက်နှာ ပေါ်မှာ သင်၏ တည်နေရာကို ခြေရာခံ မရအောင် အောက်ပါ ဆိုက်များကို ပိတ်ဆို့ခဲ့သည်:</translation>
 <translation id="49226369361073053">{0,plural, =0{စက်ကို ယခုအပ်ဒိတ်လုပ်ပါ}=1{စက်ကို ၁ စက္ကန့်အတွင်း အပ်ဒိတ်လုပ်ပါ}other{စက်ကို # စက္ကန့်အတွင်း အပ်ဒိတ်လုပ်ပါ}}</translation>
 <translation id="492299503953721473">Android အက်ပ်များကို ဖယ်ရှားပါ</translation>
-<translation id="4923279099980110923">ကျွန်ုပ် ကူညီလိုပါသည်</translation>
 <translation id="4924352752174756392">၁၂ ဆ</translation>
 <translation id="4925320384394644410">သင့်ပို့တ်များကို ဤနေရာတွင် မြင်ရပါမည်</translation>
 <translation id="4925542575807923399">ဤအကောင့်၏ ကြီးကြပ်သူသည် ဤအကောင့်အား အကြိမ်ကြိမ် လက်မှတ်ထိုးရမည့် အစီအစဉ် ထဲက ပထမဦးဆုံး လက်မှတ်ထိုး ဝင်သည့် အကောင့် အဖြစ်လိုအပ်သည်။</translation>
@@ -3237,7 +3250,6 @@
 <translation id="5362741141255528695">ကိုယ်ပိုင် သော့ ဖိုင် ရွေးရန်</translation>
 <translation id="5363109466694494651">Powerwash နှင့် ယခင်အခြေအနေပြန်သွားရန်</translation>
 <translation id="5365881113273618889">သင်ရွေးထားသည့် ဖိုင်တွဲတွင် အရေးကြီးဖိုင်များ ပါဝင်သည်။ "<ph name="APP_NAME" />" အား ဤဖိုင်တွဲသို့ အမြဲဝင်ပြင်ခွင့် ပေးလိုသည်မှာ သေချာသလား။</translation>
-<translation id="5367091008316207019">ဖိုင် ဖတ်နေ..</translation>
 <translation id="5368720394188453070">သင့်ဖုန်း သော့ပိတ်ထားသည်။ ဝင်ရောက်ရန် ၄င်းအား သော့ဖွင့်ပါ။</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> သို့ လက်မှတ်ထိုးဝင်ပါ</translation>
 <translation id="5369491905435686894">မောက်စ်အရှိန်မြှင့်တင်ခြင်းကို ဖွင့်ရန်</translation>
@@ -3525,6 +3537,7 @@
 <translation id="5739235828260127894">စစ်ဆေးအတည်ပြုချက် စောင့်နေသည်။ <ph name="LINK_BEGIN" />ပိုမို လေ့လာရန်<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">အလွန်ကြီး</translation>
 <translation id="574209121243317957">အသံအနိမ့်အမြင့်</translation>
+<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> အကြံပြုချက်၊ ကမ်းလှမ်းချက်နှင့် အပ်ဒိတ်များ ရယူပြီး ထင်မြင်ချက်ကို မျှဝေပါ</translation>
 <translation id="5746169159649715125">PDF အဖြစ်သိမ်း</translation>
 <translation id="5747552184818312860">သက်တမ်းကုန်ဆုံးချိန်</translation>
 <translation id="5747785204778348146">ပြုစုသူ - မတည်ငြိမ်</translation>
@@ -4433,6 +4446,7 @@
 <translation id="6997642619627518301"><ph name="NAME_PH" /> - လုပ်ဆောင်ချက်မှတ်တမ်း</translation>
 <translation id="6997707937646349884">သင်စက်ပစ္စည်းများပေါ်တွင်−</translation>
 <translation id="6998793565256476099">ဗီဒီယိုအစည်းအဝေးပြုလုပ်ရန်အတွက် စက်ပစ္စည်းကို စာရင်းသွင်းရန်</translation>
+<translation id="6999956497249459195">အုပ်စုအသစ်</translation>
 <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> ကို ချိတ်ဆက်ထားသော်လည်း စီစဉ်သတ်မှတ်မှု လိုပါသည်</translation>
 <translation id="7000347579424117903">Ctrl၊ Alt သို့မဟုတ် Search ကို နှိပ်ရန်</translation>
 <translation id="7001036685275644873">Linux အက်ပ်နှင့် ဖိုင်များ အရန်သိမ်းနေသည်</translation>
@@ -4731,6 +4745,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">သင့် <ph name="PHONE_NAME" /> တွင် ချိတ်ဆက်မှုကို သတ်မှတ်ပါ</translation>
 <translation id="7401778920660465883">ဤ စာကို ပယ်ဖျက်ရန်</translation>
+<translation id="7403642243184989645">ရင်းမြစ်များ ဒေါင်းလုဒ်လုပ်နေသည်</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{ပြီးခဲ့သည့် ၁ နာရီက လုံခြုံရေးစစ်ဆေးခဲ့သည်}other{ပြီးခဲ့သည့် {NUM_HOURS} နာရီက လုံခြုံရေးစစ်ဆေးခဲ့သည်}}</translation>
 <translation id="740624631517654988">ပေါ့အာပ် ပိတ်ဆို့ထား</translation>
 <translation id="7407430846095439694">တင်သွင်းရန်နှင့် ချိတ်တွဲရန်</translation>
@@ -4967,6 +4982,7 @@
 <translation id="7716781361494605745">Netscape လက်မှတ်ထုတ်ပေးရေး အာဏာပိုင် မူဝါဒ URL</translation>
 <translation id="7717014941119698257">ဒေါင်းလုပ်လုပ်နေ: <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">အပ်ဒိတ်များစစ်ရန်</translation>
+<translation id="7719070594859855691">ကင်မရာ အသုံးပြုခွင့်ပေးရန်</translation>
 <translation id="7719367874908701697">စာမျက်နှာဇူးမ်</translation>
 <translation id="7721179060400456005">ဝင်းဒိုးများအား မျက်နှာပြင်ပြသမှုကို ခြားပြီးပြခွင့်ပေးရန်</translation>
 <translation id="7722040605881499779">အပ်ဒိတ်လုပ်ရန် လိုအပ်သည့် ပမာဏ− <ph name="NECESSARY_SPACE" /></translation>
@@ -5069,6 +5085,7 @@
     <ph name="BEGIN_BOLD" />မှတ်ချက်-<ph name="END_BOLD" />  လုပ်ငန်းစဉ်အတွင်း စနစ် ပြန်လည်စတင်ပါမည်။</translation>
 <translation id="7828731929332799387">၎င်းက ပြင်ပအခြေအနေများတွင် ရရှိနိုင်သော ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်။ ရှေ့ဆက်လိုသလား။</translation>
 <translation id="7829298379596169484">အသံ ထည့်သွင်းမှုကို ရယူနေ</translation>
+<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ။</translation>
 <translation id="7829877209233347340">ကျောင်းအကောင့်ထည့်ရန်အတွက် ခွင့်ပြုချက်ပေးရန် မိဘကို လက်မှတ်ထိုးဝင်ခိုင်းပါ</translation>
 <translation id="7830594666202422257">Linux သို့ ချိတ်ဆက်ရန်</translation>
 <translation id="7831491651892296503">ကွန်ရက်စီစဉ်သတ်မှတ်ရာတွင် အမှားအယွင်းရှိပါသည်</translation>
@@ -5290,6 +5307,7 @@
 <translation id="8107015733319732394">သင့် <ph name="DEVICE_TYPE" /> တွင် Google Play စတိုးကို ထည့်သွင်းနေပါသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီးများ မရှိပါ}=1{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီး ၁ ခုကို ပိတ်ထားသည်}other{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီး # ခုကို ပိတ်ထားသည်}}</translation>
 <translation id="810875025413331850">အနီးအနားတွင် ကိရိယာများ မရှိပါ။</translation>
+<translation id="8114199541033039755">တက်ဘလက်မုဒ်တွင် ခလုတ်များဖြင့် ပင်မစာမျက်နှာသို့ သွားခြင်း၊ နောက်ပြန်သွားခြင်းနှင့် အက်ပ်များပြောင်းခြင်းတို့ ပြုလုပ်နိုင်သည်။ ChromeVox သို့မဟုတ် 'အလိုအလျောက်' ကလစ်များ ပွင့်နေသည့်အခါ ဖွင့်ပေးသည်။</translation>
 <translation id="8114875720387900039">အလျားလိုက် ခွဲရန်</translation>
 <translation id="8116972784401310538">&amp;စာညှပ် မန်နေဂျာ</translation>
 <translation id="8117620576188476503">အခြေအနေပြ အကန့်မှတစ်ဆင့် ချိတ်ဆက်မှုများ၊ အပ်ဒိတ်များနှင့် ဆက်တင်များကို စီမံခန့်ခွဲပါ။ ကီးဘုတ်ကို အသုံးပြုရန် Alt + Shift + S ကို နှိပ်ပါ။</translation>
@@ -5409,6 +5427,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> သည်သင့် မောက်စ်ကို ပိတ်လိုက်သည်။</translation>
 <translation id="8264024885325823677">ဤဆက်တင်ကို သင့်စီမံခန့်ခွဲသူက စီမံသည်။</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" စကရင်အပြည့် ခလုတ်နှိပ်။</translation>
+<translation id="826511437356419340">ဝင်းဒိုးအနှစ်ချုပ်မုဒ်သို့ ဝင်ထားသည်။ ရှေ့နောက်သွားရန် ပွတ်ဆွဲပါ သို့မဟုတ် လက်ကွက်အသုံးပြုနေပါက တဘ်ကိုနှိပ်ပါ။</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />၎င်းက သင့်စက်နှင့် ၎င်းကို သင်မည်သို့သုံးစွဲကြောင်း (ဘက်ထရီအား၊ စနစ်နှင့် အက်ပ်လုပ်ဆောင်ချက်နှင့် အမှားများ ကဲ့သို့) အထွေထွေ အချက်အလက်ဖြစ်ပါသည်။ ဤဒေတာများကို Android ပိုမိုကောင်းမွန်လာစေရန်အတွက် အသုံးပြုသွားမည်ဖြစ်ပြီး စုစည်းထားသည့်အချက်အလက်အချို့ကလည်း Google အက်ပ်နှင့် Android ဆော့ဖ်ဝဲအင်ဂျင်နီယာများကဲ့သို့ ပါတနာများအတွက် ၎င်းတို့၏ အက်ပ်နှင့် ထုတ်ကုန်များ ပိုမိုကောင်းမွန်လာစေရန် အထောက်အကူဖြစ်စေပါသည်။<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />ဤဝန်ဆောင်မှုကို ပိတ်လိုက်ခြင်းက စနစ်အပ်ဒိတ်များနှင့် လုံခြုံရေးတို့ကဲ့သို့ မရှိမဖြစ်ဝန်ဆောင်မှုများအတွက် လိုအပ်သော အချက်အလက်များကို ပေးပို့နိုင်သည့် စက်၏စွမ်းရည်အပေါ် သက်ရောက်မှုရှိမည် မဟုတ်ပါ။<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />၎င်းဝန်ဆောင်မှုကို ဆက်တင်များ &gt; အဆင့်မြင့် &gt; Google သို့ ချွတ်ယွင်းချက်နှင့် အသုံးပြုမှုဒေတာများ အလိုအလျောက် ပို့ခြင်းတွင် ပိုင်ရှင်က ထိန်းချုပ်နိုင်ပါသည်။<ph name="END_PARAGRAPH3" />
@@ -5517,6 +5536,7 @@
 <translation id="8426713856918551002">ဖွင့်နေပါသည်</translation>
 <translation id="8427292751741042100">မည်သည့် လက်ခံစက်တွင်မဆို မြုပ်သွင်းထားသည်</translation>
 <translation id="8428213095426709021">ဆက်တင်များ</translation>
+<translation id="8428271547607112339">ကျောင်းအကောင့်ကို ထည့်ရန်</translation>
 <translation id="8428628598981198790">သင့်လုံခြုံရေးကီးကို ဤဝဘ်ဆိုက်တွင် အသုံးပြု၍မရပါ</translation>
 <translation id="84297032718407999">သင်သည် <ph name="LOGOUT_TIME_LEFT" /> အတွင်း ထွက်သွားပါမည်</translation>
 <translation id="8431190899827883166">တို့ရန်များကို ပြခြင်း</translation>
@@ -5580,6 +5600,7 @@
 <translation id="851263357009351303">ပုံများပြရန် <ph name="HOST" /> ကိုအမြဲတမ်း ခွင့်ပြုမည်</translation>
 <translation id="8513108775083588393">အလိုအလျောက် လှည့်ရန်</translation>
 <translation id="8514746246728959655">အခြား လုံခြုံရေးကီးနှင့် စမ်းကြည့်ပါ</translation>
+<translation id="851960115758509829">သင်၏ Google Account ဖြင့် လက်မှတ်ထိုးဝင်ထားသော Chrome OS စက်အားလုံးတွင် သင့်အက်ပ်၊ ဆက်တင်နှင့် အခြား စိတ်ကြိုက်ပြင်ဆက်မှုများကို စင့်ခ်လုပ်ပါမည်။</translation>
 <translation id="8521475323816527629">သင်၏အက်ပ်များကို အမြန်ဖွင့်ရန်</translation>
 <translation id="8523493869875972733">ပြောင်းလဲမှုများကို သိမ်းရန်</translation>
 <translation id="8523849605371521713">မူဝါဒအရ ထည့်သွင်းထားသည်</translation>
@@ -5861,11 +5882,13 @@
 <translation id="885701979325669005">သိုလှောင်ခန်း</translation>
 <translation id="8859057652521303089">သင်၏ ဘာသာစကားကို ရွေးရန်:</translation>
 <translation id="8859174528519900719">ဘောင်ငယ်: <ph name="SUBFRAME_SITE" /></translation>
+<translation id="8859662783913000679">မိဘ အကောင့်</translation>
 <translation id="8862003515646449717">ပိုမြန်သော ဘရောင်ဇာသို့ ပြောင်းပါ</translation>
 <translation id="8863753581171631212"><ph name="APP" /> အသစ်တွင် လင့်ခ်ကို ဖွင့်ရန်</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ကို <ph name="APP_NAME" /> သို့ မျှဝေနေသည်</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ကို ဤစက်ပစ္စည်းမှနေ၍ ဖယ်ရှားလိုက်ပါပြီ</translation>
 <translation id="8867228703146808825">တည်ဆောက်ပုံအသေးစိတ်ကို ကလစ်ဘုတ်သို့ မိတ္တူကူးရန်</translation>
+<translation id="8868333925931032127">'သရုပ်ပြမုဒ်' စတင်ခြင်း</translation>
 <translation id="8868626022555786497">အသုံးပြုနေသည်</translation>
 <translation id="8870413625673593573">မကြာမီက ပိတ်ခဲ့</translation>
 <translation id="8871551568777368300">စီမံခန့်ခွဲသူမှ တွယ်ထားသည်</translation>
@@ -5944,6 +5967,7 @@
 <translation id="8966870118594285808">ဝဘ်ကို သင်မတော်တဆပိတ်မိသည့်အခါ ပြန်ဖွင့်ရန်</translation>
 <translation id="8967866634928501045">ပြရန် Alt Shift A ကို နှိပ်ပါ</translation>
 <translation id="8968766641738584599">ကတ်သိမ်းရန်</translation>
+<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ သို့မဟုတ် <ph name="BEGIN_LINK" />သင်၏ Google Account ရှိ စကားဝှက်များကို စစ်ဆေးပါ<ph name="END_LINK" />။</translation>
 <translation id="89720367119469899">ထွက်</translation>
 <translation id="8972513834460200407">ကျေးဇူးပြုပြီး သင့် ကွန်ရက် စီမံအုပ်ချုပ်သူကို ဆက်သွယ်လျက် Google ဆာဗာများမှ ဒေါင်းလုဒ်များကို ဖိုင်ယာဝေါက ပိတ်ဆို့ခြင်း မရှိတာကို စစ်ကြည့်ခိုင်းပါ။</translation>
 <translation id="8973557916016709913">ဇူးမ်ချဲ့ခြင်းပမာဏကို ဖယ်ရှားရန်</translation>
@@ -5960,7 +5984,6 @@
 <translation id="8985264973231822211">ပြီးခဲ့သော <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ရက်က အသုံးပြုထားသည်</translation>
 <translation id="8986362086234534611">မေ့ပစ်လိုက်ပါ</translation>
 <translation id="8986494364107987395">Google ထံသို့ သုံးစွဲမှု စာရင်းအင်းများ နှင့် ပျက်စီးမှု အစီရင်ခံစာများကို အလိုအလျောက် ပို့ပေးရန်</translation>
-<translation id="8986651757229422279">ဤသို့ လုပ်ဆောင်ခြင်းဖြင့် <ph name="ORIGIN_NAME" /> က သိမ်းဆည်းထားသည့် ကွတ်ကီးနှင့် ဒေတာများအပြင် ထည့်သွင်းထားသည့် အက်ပ်များအားလုံးကို ရှင်းလင်းလိုက်ပါမည်။</translation>
 <translation id="8987927404178983737">လ</translation>
 <translation id="8991520179165052608">ဝဘ်ဆိုက်က သင့်မိုက်ခရိုဖုန်းကို အသုံးပြုနိုင်သည်</translation>
 <translation id="899403249577094719">Netscape လက်မှတ် အခြေခံ URL</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 1db2121..b2645b7 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -855,7 +855,6 @@
 <translation id="2154484045852737596">कार्ड सम्पादन गर्नुहोस्</translation>
 <translation id="2154710561487035718">URL प्रतिलिपि गर्नुहोस्</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जस्तो देखिन्छ</translation>
-<translation id="2156283799932971644">तपाईं प्रणालीसम्बन्धी केही जानकारी र पृष्ठको सामग्री Google मा पठाएर सुरक्षित ब्राउजिङमा सुधार गर्न मद्दत गर्न सक्नुहुन्छ।</translation>
 <translation id="2156294658807918600">सेवातर्फका कर्मचारी: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">अतिरिक्त सुविधाहरू प्राप्त गर्न यो Chromebook का लागि उपयुक्त हुने गरी डिजाइन गरिएको Dell डकिङ स्टेसन प्रयोग गर्नुहोस्।</translation>
 <translation id="215753907730220065">पूरा स्क्रिन मोडबाट निस्कनुहोस्</translation>
@@ -987,7 +986,6 @@
 <translation id="2326931316514688470">अनुप्रयोग पुन: &amp;लोड गर्नुहोस्</translation>
 <translation id="2327492829706409234">अनुप्रयोग सक्षम गर्नुहोस्</translation>
 <translation id="2329597144923131178">तपाईँका सबै यन्त्रहरूमा आफ्ना पुस्तक चिन्हहरू, इतिहास, पासवर्डहरू र अन्य सेटिङहरू प्राप्त गर्न साइन इन गर्नुहोस्।</translation>
-<translation id="2330607597130465898">सुरक्षारहित मोड</translation>
 <translation id="2332131598580221120">स्टोरमा हेर्नुहोस्</translation>
 <translation id="2332192922827071008">प्राथमिकताहरू खोल्नुहोस्</translation>
 <translation id="2332742915001411729">पूर्वनिर्धारितमा रिसेट गर्नुहोस्</translation>
@@ -1868,7 +1866,6 @@
 <translation id="3492788708641132712">सिंकले काम गरिरहेको छैन। फेरि साइन इन गरी हेर्नुहोस्।</translation>
 <translation id="3493486281776271508">इन्टरनेट जडान आवश्यक छ</translation>
 <translation id="3493881266323043047">वैधता</translation>
-<translation id="3494155060718700400">तपाईंलाई जोखिमपूर्ण वेबसाइट, डाउनलोड र एक्स्टेन्सनहरूविरुद्ध सुरक्षा प्रदान गर्दैन (सिफारिस गरिँदैन)। उपलब्ध भएसम्म तपाईं अझै पनि Gmail र खोज जस्ता Google का अन्य सेवाहरूमा सुरक्षित ब्राउजिङको सुरक्षा प्राप्त गर्नु हुने छ।</translation>
 <translation id="3494769164076977169">पहिलो फाइल पश्चात साइटले स्वचालित रूपमा कहिले फाइलहरू डाउनलोड गर्ने प्रयास गर्छ सोध्नुहोस् (सिफारिस गरिएको)।</translation>
 <translation id="3495660573538963482">Google सहायकका सेटिङहरू</translation>
 <translation id="3496213124478423963">जुम घटाउनुहोस्</translation>
@@ -2918,7 +2915,6 @@
 <translation id="4920887663447894854">निम्न साइटहरूलाई यस पेजमा तपाईंको स्थान ट्र्याक गर्नबाट ब्लक गरिएको छ:</translation>
 <translation id="49226369361073053">{0,plural, =0{अहिले नै यन्त्र अद्यावधिक गर्नुहोस्}=1{१ सेकेन्डभित्र यन्त्र अद्यावधिक गर्नुहोस्}other{# सेकेन्डभित्र यन्त्र अद्यावधिक गर्नुहोस्}}</translation>
 <translation id="492299503953721473">Android अनुप्रयोगहरूलाई हटाउनुहोस्</translation>
-<translation id="4923279099980110923">हो, म मद्दत गर्न चाहन्छु</translation>
 <translation id="4924352752174756392">१२ गुणा</translation>
 <translation id="4925320384394644410">तपाईंका पोर्टहरू यहाँ देखा पर्ने छन्</translation>
 <translation id="4925542575807923399">यस खाताको प्रशासकलाई एक बहुविध साइन-इन सत्रमा प्रथम साइन-इन गरिएको खाता हुन यस खातालाई आवश्यक छ।</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5362741141255528695">निजी मुख्य फाइल चयन गर्नुहोस्।</translation>
 <translation id="5363109466694494651">पावरवास र फिर्ता गर्नुहोस्</translation>
 <translation id="5365881113273618889">तपाईंले चयन गर्नुभएको फोल्डरमा संवेदनशील फाइलहरू समावेश छन्। तपाईं "<ph name="APP_NAME" />" लाई स्थायी रूपमा यो फोल्डरमा लेख्न सक्ने पहुँच प्रदान गर्ने कुरामा निश्चित हुनुहुन्छ?</translation>
-<translation id="5367091008316207019">फाइल पढ्दै ..</translation>
 <translation id="5368720394188453070">तपाईंको फोन लक गरिएको छ। प्रवेश गर्न यसलाई अनलक गर्नुहोस्।</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> मा साइन इन गर्नुहोस्</translation>
 <translation id="5369491905435686894">माउसको गति बढाउने सुविधा सक्षम पार्नुहोस्</translation>
@@ -5956,7 +5951,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिन अघि सक्रिय</translation>
 <translation id="8986362086234534611">बिर्सनुहोस्</translation>
 <translation id="8986494364107987395">Google लाई स्वचालित रूपमा उपयोगको तथ्याङ्कहरू र क्र्यास रिपोर्ट पठाउनुहोस्</translation>
-<translation id="8986651757229422279">यस कार्यले <ph name="ORIGIN_NAME" /> ले भण्डारण गरेका सबै डेटा र कुकीका साथै यसले स्थापना गरेको अनुप्रयोग खाली गर्ने छ।</translation>
 <translation id="8987927404178983737">महिना</translation>
 <translation id="8991520179165052608">साइटले तपाईंको माइक्रोफोन प्रयोग गर्न सक्छ</translation>
 <translation id="899403249577094719">नेटस्केप प्रमाणपत्र आधार URL</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index d3d23dc1..ed729a61 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Pas bewerken</translation>
 <translation id="2154710561487035718">URL kopiëren</translation>
 <translation id="2155772377859296191">Ziet eruit als <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Je kunt helpen Safe Browsing te verbeteren door bepaalde systeeminformatie en paginacontent naar Google te verzenden.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Gebruik voor aanvullende functies een Dell-dockingstation dat is bedoeld voor gebruik met deze Chromebook.</translation>
 <translation id="215753907730220065">Volledig scherm sluiten</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">App opnieuw &amp;laden</translation>
 <translation id="2327492829706409234">App inschakelen</translation>
 <translation id="2329597144923131178">Als je inlogt, heb je al je instellingen op al je apparaten: bladwijzers, geschiedenis, wachtwoorden en meer.</translation>
-<translation id="2330607597130465898">Geen beveiliging</translation>
 <translation id="2332131598580221120">Bekijken in de Web Store</translation>
 <translation id="2332192922827071008">Voorkeuren openen</translation>
 <translation id="2332742915001411729">Terugzetten naar standaardinstelling</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Synchronisatie werkt niet. Probeer opnieuw in te loggen.</translation>
 <translation id="3493486281776271508">Internetverbinding vereist</translation>
 <translation id="3493881266323043047">Geldigheid</translation>
-<translation id="3494155060718700400">Beschermt je niet tegen gevaarlijke websites, downloads en extensies (niet aanbevolen). Je wordt voor andere services, zoals Gmail en Zoeken, nog steeds beschermd door Safe Browsing als dat beschikbaar is.</translation>
 <translation id="3494769164076977169">Vragen als een site probeert bestanden automatisch te downloaden na het eerste bestand (aanbevolen)</translation>
 <translation id="3495660573538963482">Instellingen van de Google Assistent</translation>
 <translation id="3496213124478423963">Kleiner</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">De volgende sites kunnen je locatie op deze pagina niet bijhouden:</translation>
 <translation id="49226369361073053">{0,plural, =0{Apparaat nu updaten}=1{Apparaat binnen 1 seconde updaten}other{Apparaat binnen # seconden updaten}}</translation>
 <translation id="492299503953721473">Android-apps verwijderen</translation>
-<translation id="4923279099980110923">Ja, ik wil helpen</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Je poorten worden hier weergegeven</translation>
 <translation id="4925542575807923399">De beheerder van dit account vereist dat dit account het eerste ingelogde account is in een sessie met toegang tot meerdere accounts.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Selecteer een privésleutelbestand.</translation>
 <translation id="5363109466694494651">Powerwash en terugzetten</translation>
 <translation id="5365881113273618889">De map die je hebt geselecteerd, bevat gevoelige bestanden. Weet je zeker dat je '<ph name="APP_NAME" />' permanente schrijftoegang wilt geven tot deze map?</translation>
-<translation id="5367091008316207019">Bestand lezen...</translation>
 <translation id="5368720394188453070">Je telefoon is vergrendeld. Ontgrendel deze om door te gaan.</translation>
 <translation id="5368779022775404937">Inloggen bij <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Muisversnelling inschakelen</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> dag geleden actief</translation>
 <translation id="8986362086234534611">Vergeten</translation>
 <translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation>
-<translation id="8986651757229422279">Hiermee wis je alle gegevens en cookies die zijn opgeslagen door <ph name="ORIGIN_NAME" /> en de bijbehorende geïnstalleerde app.</translation>
 <translation id="8987927404178983737">Maand</translation>
 <translation id="8991520179165052608">Site kan je microfoon gebruiken</translation>
 <translation id="899403249577094719">Basis-URL voor Netscape-certificaat</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 4370b33..b0034e6 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">Åpne i <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktivitet og interaksjoner</translation>
 <translation id="2120639962942052471">Blokkert <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Informasjonskapsler er blokkert}=1{Informasjonskapsler er blokkert, 1 unntak}other{Informasjonskapsler er blokkert, {COUNT} unntak}}</translation>
 <translation id="2121825465123208577">Endre størrelse</translation>
 <translation id="2122305276694332719">Automatisk tilkobling til skjulte nettverk gjør det mulig for andre å se enheten din og enkelte nettverksinnstillinger, så det anbefales ikke.</translation>
 <translation id="2123766928840368256">Velg en annen fil</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">Endre kortet</translation>
 <translation id="2154710561487035718">Kopier nettadresse</translation>
 <translation id="2155772377859296191">Ser ut som <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Du kan bidra til å forbedre Safe Browsing ved å sende noe systeminformasjon og sideinnhold til Google.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">For å få flere funksjoner, bruk en Dell-dokkingstasjon som er laget for å fungere sammen med denne Chromebooken.</translation>
 <translation id="215753907730220065">Avslutt fullskjermmodus</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Last inn appen på nytt</translation>
 <translation id="2327492829706409234">Aktiver appen</translation>
 <translation id="2329597144923131178">Logg på for å få bokmerkene, loggen, passordene og de andre innstillingene dine på alle enhetene du bruker.</translation>
-<translation id="2330607597130465898">Ingen beskyttelse</translation>
 <translation id="2332131598580221120">Se i Nettmarked</translation>
 <translation id="2332192922827071008">Åpne Innstillinger</translation>
 <translation id="2332742915001411729">Tilbakestill til standard</translation>
@@ -1868,7 +1867,6 @@
 <translation id="3492788708641132712">Synkroniseringen fungerer ikke. Prøv å logge på igjen.</translation>
 <translation id="3493486281776271508">Internettilkobling kreves</translation>
 <translation id="3493881266323043047">Gyldighet</translation>
-<translation id="3494155060718700400">Beskytter deg ikke mot farlige nettsteder, nedlastinger eller utvidelser (anbefales ikke). Du får fremdeles beskyttelse fra Safe Browsing der dette er tilgjengelig, på andre Google-tjenester, som Gmail og Søk.</translation>
 <translation id="3494769164076977169">Spør når et nettsted forsøker å laste ned filer automatisk etter den første filen (anbefales)</translation>
 <translation id="3495660573538963482">Innstillinger for Google-assistenten</translation>
 <translation id="3496213124478423963">Zoom ut</translation>
@@ -2917,7 +2915,6 @@
 <translation id="4920887663447894854">Følgende nettsteder har blitt nektet tillatelse til å spore posisjonen din på siden:</translation>
 <translation id="49226369361073053">{0,plural, =0{Oppdater enheten nå}=1{Oppdater enheten innen 1 sekund}other{Oppdater enheten innen # sekunder}}</translation>
 <translation id="492299503953721473">Fjern Android-appene</translation>
-<translation id="4923279099980110923">Ja, jeg ønsker å hjelpe</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portene dine vises her</translation>
 <translation id="4925542575807923399">Administratoren for denne kontoen krever at denne kontoen er den første påloggingskontoen i en multipåloggingsøkt.</translation>
@@ -3231,7 +3228,6 @@
 <translation id="5362741141255528695">Velg privat nøkkelfil.</translation>
 <translation id="5363109466694494651">Powerwash og tilbakestill</translation>
 <translation id="5365881113273618889">Mappen du valgte, inneholder sensitive filer. Er du sikker på at du vil gi «<ph name="APP_NAME" />» permanent skrivetilgang til denne mappen?</translation>
-<translation id="5367091008316207019">Leser filen …</translation>
 <translation id="5368720394188453070">Telefonen er låst. Lås den opp for å få tilgang.</translation>
 <translation id="5368779022775404937">Logg på <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Slå på museakselerasjon</translation>
@@ -5957,7 +5953,6 @@
 <translation id="8985264973231822211">Aktiv for <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dag siden</translation>
 <translation id="8986362086234534611">Glem</translation>
 <translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation>
-<translation id="8986651757229422279">Dette sletter alle dataene og informasjonskapslene som er lagret av <ph name="ORIGIN_NAME" /> og den tilhørende appen som er installert.</translation>
 <translation id="8987927404178983737">Måned</translation>
 <translation id="8991520179165052608">Nettstedet kan bruke mikrofonen din</translation>
 <translation id="899403249577094719">Primære nettadresse for Netscape-sertifikat</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 8fe1b12..f23af534 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -855,7 +855,6 @@
 <translation id="2154484045852737596">କାର୍ଡକୁ ଏଡିଟ୍ କରନ୍ତୁ</translation>
 <translation id="2154710561487035718">URL କପି କରନ୍ତୁ</translation>
 <translation id="2155772377859296191">ଏପରି ଜଣାଯାଉଛି <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Googleକୁ କିଛି ସିଷ୍ଟମ୍‌ ସମ୍ବନ୍ଧିତ ସୂଚନା ଏବଂ ପୃଷ୍ଠାର ବିଷୟବସ୍ତୁ ପଠାଇ ଆପଣ ସୁରକ୍ଷିତ ଭାବେ ବ୍ରାଉଜିଂ ଉନ୍ନତ କରିପାରିବେ।</translation>
 <translation id="2156294658807918600">ସର୍ଭିସ୍ ୱାର୍କର୍: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ଅତିରିକ୍ତ ଫିଚର୍‌ଗୁଡ଼ିକ ପାଇବା ନିମନ୍ତେ ଏହି Chromebook ସହ କାମ କରିବା ପାଇଁ ଡିଜାଇନ୍ କରାଯାଇଥିବା ଏକ Dell ଡକିଂ ଷ୍ଟେସନ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="215753907730220065">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରୁ ବାହାରି ଆସନ୍ତୁ</translation>
@@ -987,7 +986,6 @@
 <translation id="2326931316514688470">&amp;ଆପ୍ ରିଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="2327492829706409234">ଆପ୍‍କୁ ସକ୍ଷମ କରନ୍ତୁ</translation>
 <translation id="2329597144923131178">ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସ୍‌ଗୁଡ଼ିକରେ ନିଜର ବୁକ୍‍ମାର୍କଗୁଡିକ, ଇତିବୃତ୍ତି, ପାସ୍‌ୱର୍ଡ ଏବଂ ଅନ୍ୟ ସେଟିଂସ୍ ପାଇବାକୁ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation>
-<translation id="2330607597130465898">କୌଣସି ସୁରକ୍ଷା ନାହିଁ</translation>
 <translation id="2332131598580221120">ଷ୍ଟୋର୍‌ରେ ଦେଖନ୍ତୁ</translation>
 <translation id="2332192922827071008">ଅଗ୍ରାଧିକାରଗୁଡ଼ିକୁ ଖୋଲନ୍ତୁ</translation>
 <translation id="2332742915001411729">ଡିଫଲ୍ଟକୁ ରିସେଟ୍ କରନ୍ତୁ</translation>
@@ -1866,7 +1864,6 @@
 <translation id="3492788708641132712">ସିଙ୍କ କାମ କରୁନାହିଁ। ପୁଣି ସାଇନ୍ ଇନ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="3493486281776271508">ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ଆବଶ୍ୟକ</translation>
 <translation id="3493881266323043047">ବୈଧତା:</translation>
-<translation id="3494155060718700400">ବିପଦଜନକ ୱେବସାଇଟ୍, ଡାଉନଲୋଡ୍ ଏବଂ ଏକ୍ସଟେନ୍ସନଗୁଡ଼ିକରୁ ଆପଣଙ୍କୁ ରକ୍ଷା କରେ ନାହିଁ (ସୁପାରିଶ କରାଯାଇନାହିଁ)। Gmail ଏବଂ Search ପରି ଅନ୍ୟ Google ସେବାଗୁଡ଼ିକରେ ସେଫ୍ ବ୍ରାଉଜିଂ ସୁବିଧା ଉପଲବ୍ଧ ଥିଲେ, ଆପଣ ଏବେ ବି ଏହି ସୁରକ୍ଷା ପାଇବେ।</translation>
 <translation id="3494769164076977169">ପ୍ରଥମ ଫାଇଲ୍ (ସୁପାରିଶ୍ କରାଯାଇଛି) ପରେ ଯେତେବେଳେ ଏକ ସାଇଟ୍ ସ୍ୱଚାଳିତ ଭାବେ ଫାଇଲ୍‌ଗୁଡ଼ିକ ଡାଉନ୍‌ଲୋଡ୍ କରିବାକୁ ଚେଷ୍ଟା କରେ, ତାହା ପଚାରନ୍ତୁ</translation>
 <translation id="3495660573538963482">Google ଆସିଷ୍ଟାଣ୍ଟ ସେଟିଂସ୍</translation>
 <translation id="3496213124478423963">ଜୁମ୍ ଆଉଟ୍</translation>
@@ -2916,7 +2913,6 @@
 <translation id="4920887663447894854">ନିମ୍ନୋକ୍ତ ସାଇଟ୍‍ଗୁଡ଼ିକୁ ଏହି ପୃଷ୍ଠାରେ ଆପଣଙ୍କର ଲୋକେସନ୍‍କୁ ଟ୍ରାକ୍ କରିବାରୁ ବ୍ଲକ୍ କରାଯାଇଛି:</translation>
 <translation id="49226369361073053">{0,plural, =0{ଡିଭାଇସ୍ ବର୍ତ୍ତମାନ ଅପଡେଟ୍ କରନ୍ତୁ}=1{1 ସେକେଣ୍ଡ ଭିତରେ ଡିଭାଇସ୍ ଅପଡେଟ୍ କରନ୍ତୁ}other{# ସେକେଣ୍ଡ ଭିତରେ ଡିଭାଇସ୍ ଅପଡେଟ୍ କରନ୍ତୁ}}</translation>
 <translation id="492299503953721473">Android ଆପ୍ସ କାଢ଼ନ୍ତୁ</translation>
-<translation id="4923279099980110923">ହଁ, ମୁଁ ସାହାଯ୍ୟ କରିବାକୁ ଚାହେଁ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ଆପଣଙ୍କର ପୋର୍ଟଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ</translation>
 <translation id="4925542575807923399">ଏହି ଆକାଉଣ୍ଟର ବ୍ୟବସ୍ଥାପକଙ୍କ ପାଇଁ, ଏକ ଏକାଧିକ ସାଇନ୍ ଇନ୍ ଅବଧି କାଳରେ ଏହି ଆକାଉଣ୍ଟଟିକୁ ସର୍ବପ୍ରଥମେ ସାଇନ୍ ଇନ୍ କରିଥିବା ଆକାଉଣ୍ଟ ଭାବରେ ରଖିବା ଆବଶ୍ୟକ ଅଟେ৷</translation>
@@ -3230,7 +3226,6 @@
 <translation id="5362741141255528695">ବ୍ୟକ୍ତିଗତ କୀ’ର ଫାଇଲ୍‌ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="5363109466694494651">ପାୱାର୍‍ୱାସ୍ ଏବଂ ପୂର୍ବାବସ୍ଥାକୁ ଫେରନ୍ତୁ</translation>
 <translation id="5365881113273618889">ଆପଣ ଚୟନ କରିଥିବା ଫୋଲ୍ଡର୍‍‍ରେ ସମ୍ବେଦନଶୀଳ ଫାଇଲ୍‍ଗୁଡ଼ିକ ଅଛି। ଆପଣ ନିଶ୍ଚିତ ରୂପେ "<ph name="APP_NAME" />"କୁ ଏହି ଫୋଲ୍ଡର୍‍‍ରେ ସ୍ଥାୟୀ ରୂପେ ଲେଖିବା ଆକ୍ସେସ୍ ପ୍ରଦାନ କରିବାକୁ ଚାହାନ୍ତି କି?</translation>
-<translation id="5367091008316207019">ଫାଇଲ୍‌ ପଢୁଛି..</translation>
 <translation id="5368720394188453070">ଆପଣଙ୍କର ଫୋନ୍‌ ଲକ୍‌ ହୋଇଯାଇଛି। ଏଥିରେ ପ୍ରବେଶ କରିବାକୁ ଅନ୍‌ଲକ୍‌ କରନ୍ତୁ।</translation>
 <translation id="5368779022775404937"><ph name="REALM" />ରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation>
 <translation id="5369491905435686894">ମାଉସ୍ ଆକ୍ସଲରେସନ୍ ସକ୍ଷମ କରନ୍ତୁ</translation>
@@ -5955,7 +5950,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ଦିନ ପୂର୍ବେ ସକ୍ରିୟ ଥିଲା</translation>
 <translation id="8986362086234534611">ଭୁଲିଗଲେ</translation>
 <translation id="8986494364107987395">ସ୍ୱଚାଳିତରୂପେ Googleକୁ ବ୍ୟବହାରର ପରିସଂଖ୍ୟାନ ଏବଂ କ୍ରାସ୍ ରିପୋର୍ଟ ପଠାନ୍ତୁ</translation>
-<translation id="8986651757229422279">ଏହା <ph name="ORIGIN_NAME" /> ଦ୍ୱାରା ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ ଡାଟା ଏବଂ କୁକୀକୁ ଏବଂ ଏହାର ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ଆପକୁ ଖାଲି କରିଦେବ।</translation>
 <translation id="8987927404178983737">ମାସ</translation>
 <translation id="8991520179165052608">ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍‌କୁ ସାଇଟ୍ ବ୍ୟବହାର କରିପାରେ</translation>
 <translation id="899403249577094719">Netscape ସାର୍ଟିଫିକେଟ୍ ଉପରେ ଆଧାରିତ URL</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 29fe124..e62443f 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -859,7 +859,6 @@
 <translation id="2154484045852737596">ਕਾਰਡ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation>
 <translation id="2154710561487035718">URL ਕਾਪੀ ਕਰੋ</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ਵਰਗਾ ਲੱਗਦਾ ਹੈ</translation>
-<translation id="2156283799932971644">ਕੁਝ ਸਿਸਟਮ ਜਾਣਕਾਰੀ ਅਤੇ ਪੰਨਾ ਸਮੱਗਰੀ Google ਨੂੰ ਭੇਜ ਕੇ ਤੁਸੀਂ 'ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ' ਨੂੰ ਸੁਧਾਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="2156294658807918600">ਸੇਵਾ ਕਰਮਚਾਰੀ: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ਵਧੀਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਇਸ Chromebook ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਡਿਜ਼ਾਈਨ ਕੀਤਾ Dell ਡੌਕਿੰਗ ਸਟੇਸ਼ਨ ਵਰਤੋ।</translation>
 <translation id="215753907730220065">ਪੂਰੀ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਜਾਓ</translation>
@@ -991,7 +990,6 @@
 <translation id="2326931316514688470">&amp;ਐਪ ਰੀਲੋਡ ਕਰੋ</translation>
 <translation id="2327492829706409234">ਐਪ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="2329597144923131178">ਆਪਣੇ ਸਾਰੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਆਪਣੇ ਬੁੱਕਮਾਰਕ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਸੈਟਿੰਗਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
-<translation id="2330607597130465898">ਬਿਨਾਂ ਸੁਰੱਖਿਆ</translation>
 <translation id="2332131598580221120">ਸਟੋਰ ਵਿੱਚ ਦੇਖੋ</translation>
 <translation id="2332192922827071008">ਤਰਜੀਹਾਂ ਖੋਲ੍ਹੋ</translation>
 <translation id="2332742915001411729">ਪੂਰਵ-ਨਿਰਧਾਰਤ 'ਤੇ ਰੀਸੈੱਟ ਕਰੋ</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">ਸਮਕਾਲੀਕਰਨ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ। ਦੁਬਾਰਾ ਸਾਈਨ ਇਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="3493486281776271508">ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਲੋੜੀਂਦਾ ਹੈ</translation>
 <translation id="3493881266323043047">ਪ੍ਰਮਾਣਿਕਤਾ</translation>
-<translation id="3494155060718700400">ਤੁਹਾਨੂੰ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਰੱਖਿਆ ਜਾਂਦਾ (ਸਿਫ਼ਾਰਸ਼ੀ ਨਹੀਂ)। ਹੋਰ Google ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ Gmail ਅਤੇ 'ਖੋਜ' ਜਿੱਥੇ ਵੀ ਉਪਲਬਧ ਹੋਵੇ ਤੁਹਾਨੂੰ ਫਿਰ ਵੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ।</translation>
 <translation id="3494769164076977169">ਪੁੱਛੋ ਜਦੋਂ ਕੋਈ ਸਾਈਟ ਪਹਿਲੀ ਫ਼ਾਈਲ ਤੋਂ ਬਾਅਦ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation>
 <translation id="3495660573538963482">Google ਸਹਾਇਕ ਸੈਟਿੰਗਾਂ</translation>
 <translation id="3496213124478423963">ਜ਼ੂਮ ਘਟਾਓ</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਸਾਈਟਾਂ ਇਸ ਸਫ਼ੇ ਤੇ ਤੁਹਾਡੇ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਨੂੰ ਟਰੈਕ ਕਰਨ ਤੋਂ ਬਲੌਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ:</translation>
 <translation id="49226369361073053">{0,plural, =0{ਡੀਵਾਈਸ ਨੂੰ ਹੁਣੇ ਅੱਪਡੇਟ ਕਰੋ}=1{ਡੀਵਾਈਸ ਨੂੰ 1 ਸਕਿੰਟ ਦੇ ਅੰਦਰ ਅੱਪਡੇਟ ਕਰੋ}other{ਡੀਵਾਈਸ ਨੂੰ # ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਅੱਪਡੇਟ ਕਰੋ}}</translation>
 <translation id="492299503953721473">Android ਐਪਾਂ ਹਟਾਓ</translation>
-<translation id="4923279099980110923">ਹਾਂ, ਮੈਂ ਸਹਾਇਤਾ ਲੈਣਾ ਚਾਹੁੰਦਾ ਹਾਂ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ਤੁਹਾਡੇ ਪੋਰਟ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੇ</translation>
 <translation id="4925542575807923399">ਇਸ ਖਾਤੇ ਦੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਇਹ ਜ਼ਰੂਰੀ ਹੈ ਕਿ ਬਹੁ-ਗਿਣਤੀ ਸਾਈਨ-ਇਨ ਸੈਸ਼ਨ ਵਿੱਚ ਇਹ ਖਾਤਾ ਸਭ ਤੋਂ ਪਹਿਲਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਵਾਲਾ ਖਾਤਾ ਹੋਵੇ।</translation>
@@ -3234,7 +3230,6 @@
 <translation id="5362741141255528695">ਨਿੱਜੀ ਕੁੰਜੀ ਫਾਈਲ ਚੁਣੋ।</translation>
 <translation id="5363109466694494651">ਪਾਵਰਵਾਸ਼ ਅਤੇ ਵਾਪਸ ਕਰੋ</translation>
 <translation id="5365881113273618889">ਤੁਹਾਡੇ ਵੱਲੋਂ ਚੁਣੇ ਗਏ ਫੋਲਡਰ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਫ਼ਾਈਲਾਂ ਸ਼ਾਮਲ ਹਨ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ "<ph name="APP_NAME" />" ਨੂੰ ਇਸ ਫੋਲਡਰ ਵਿੱਚ ਲਿਖਣ ਦੀ ਸਥਾਈ ਪਹੁੰਚ ਦੇਣੀ ਚਾਹੁੰਦੇ ਹੋ?</translation>
-<translation id="5367091008316207019">ਫਾਈਲ ਪੜ੍ਹ ਰਿਹਾ ਹੈ...</translation>
 <translation id="5368720394188453070">ਤੁਹਾਡਾ ਫ਼ੋਨ ਲਾਕ ਕੀਤਾ ਹੋਇਆ ਹੈ। ਦਰਜ ਕਰਨ ਲਈ ਅਣਲਾਕ ਕਰੋ।</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="5369491905435686894">ਮਾਊਸ ਐਕਸੈੱਲਰੇਸ਼ਨ ਚਾਲੂ ਕਰੋ</translation>
@@ -5957,7 +5952,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ਦਿਨ ਪਹਿਲਾਂ ਕਿਰਿਆਸ਼ੀਲ</translation>
 <translation id="8986362086234534611">ਭੁੱਲਣਾ</translation>
 <translation id="8986494364107987395">ਵਰਤੋਂ ਅੰਕੜੇ ਅਤੇ ਕਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ Google ਨੂੰ ਭੇਜੋ</translation>
-<translation id="8986651757229422279">ਇੰਝ ਕਰਨ ਨਾਲ <ph name="ORIGIN_NAME" /> ਵੱਲੋਂ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਡਾਟੇ ਅਤੇ ਕੁਕੀਜ਼ ਅਤੇ ਉਸਦੀ ਸਥਾਪਤ ਕੀਤੀ ਐਪ ਨੂੰ ਕਲੀਅਰ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="8987927404178983737">ਮਹੀਨਾ</translation>
 <translation id="8991520179165052608">ਸਾਈਟ ਤੁਹਾਡੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀ ਹੈ</translation>
 <translation id="899403249577094719">Netscape ਪ੍ਰਮਾਣ-ਪੱਤਰ ਬੇਸ URL</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 9a59a6f4..6d3fbfa 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -37,6 +37,7 @@
 <translation id="1041263367839475438">Dostępne urządzenia</translation>
 <translation id="1042174272890264476">Twój komputer zawiera również wbudowaną bibliotekę RLZ <ph name="SHORT_PRODUCT_NAME" />. Przypisuje ona powtarzalny, nieumożliwiający identyfikacji użytkownika tag służący do monitorowania wyszukiwań i używania <ph name="SHORT_PRODUCT_NAME" /> w ramach określonej kampanii promocyjnej. Etykiety te czasami pojawiają się w zapytaniach wyszukiwarki Google w <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1043818413152647937">Wyczyścić też dane z tych aplikacji?</translation>
+<translation id="1045448422538531528">Dodaj do grupy</translation>
 <translation id="1046635659603195359">Wygląda na to, że Asystent Google zna już Twój głos z innego urządzenia, na którym masz ustawioną funkcję Voice Match. Możesz użyć zapisanych tam nagrań, by utworzyć model głosu na tym urządzeniu. Powinno to zająć mniej niż minutę.</translation>
 <translation id="104710386808485638">Uruchomić Linuksa ponownie?</translation>
 <translation id="1047431265488717055">Kopiuj te&amp;kst linku</translation>
@@ -66,6 +67,7 @@
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
 <translation id="1079766198702302550">Zawsze blokuj dostęp do kamery</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> chce przywrócić ustawienia Chrome do wartości domyślnych. Spowoduje to zresetowanie strony głównej, strony nowej karty i wyszukiwarki oraz wyłączenie rozszerzeń i odpięcie wszystkich kart. Zostaną też wyczyszczone dane tymczasowe i znajdujące się w pamięci podręcznej – w tym pliki cookie oraz treści i dane stron.</translation>
+<translation id="1084096383128641877">Usunięcie tego hasła nie spowoduje usunięcia Twojego konta w serwisie <ph name="DOMAIN" />. Aby uniemożliwić innym osobom dostęp do konta w serwisie <ph name="DOMAIN_LINK" />, usuń je lub zmień do niego hasło.</translation>
 <translation id="1084824384139382525">Kopiuj adr&amp;es linku</translation>
 <translation id="1085697365578766383">Błąd podczas uruchamiania maszyny wirtualnej. Spróbuj ponownie.</translation>
 <translation id="1090126737595388931">Brak aplikacji uruchomionych w tle</translation>
@@ -200,6 +202,7 @@
 <translation id="1259152067760398571">Potwierdzenie bezpieczeństwa zostało wykonane wczoraj</translation>
 <translation id="1260451001046713751">Zawsze zezwalaj na wyskakujące okienka i przekierowania z <ph name="HOST" /></translation>
 <translation id="126156426083987769">Wystąpił problem z licencjami na urządzenia w trybie demonstracyjnym.</translation>
+<translation id="1263490604593716556">Kontem zarządzają <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" />. Aby wylogować się z podstawowego konta na tym urządzeniu, kliknij godzinę na ekranie. W wyświetlonym menu kliknij „Wyloguj”.</translation>
 <translation id="126710816202626562">Język tłumaczenia:</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">Zatrzymaj</translation>
@@ -860,7 +863,6 @@
 <translation id="2154484045852737596">Edytowanie karty</translation>
 <translation id="2154710561487035718">Kopiuj adres URL</translation>
 <translation id="2155772377859296191">Wygląda na <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Możesz pomóc w ulepszaniu Bezpiecznego przeglądania, wysyłając do Google pewne informacje o systemie i część zawartości stron.</translation>
 <translation id="2156294658807918600">Skrypt service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Aby korzystać z większej liczby funkcji, używaj stacji dokującej Dell przeznaczonej do tego Chromebooka.</translation>
 <translation id="215753907730220065">Zamknij pełny ekran</translation>
@@ -874,6 +876,7 @@
 <translation id="2172784515318616985">Dalej</translation>
 <translation id="2173302385160625112">Sprawdź połączenie z internetem</translation>
 <translation id="2173801458090845390">Dodaj identyfikator przeznaczenia do tego urządzenia</translation>
+<translation id="2174948148799307353">Kontem zarządza <ph name="PARENT_EMAIL" />. Aby wylogować się z podstawowego konta na tym urządzeniu, kliknij godzinę na ekranie. W wyświetlonym menu kliknij „Wyloguj”.</translation>
 <translation id="2175607476662778685">Pasek szybkiego uruchamiania</translation>
 <translation id="217576141146192373">Nie można dodać drukarki. Sprawdź jej konfigurację i spróbuj ponownie.</translation>
 <translation id="2177950615300672361">Karta incognito: <ph name="TAB_NAME" /></translation>
@@ -992,7 +995,6 @@
 <translation id="2326931316514688470">P&amp;rzeładuj aplikację</translation>
 <translation id="2327492829706409234">Włącz aplikację</translation>
 <translation id="2329597144923131178">Zaloguj się, by korzystać z zakładek, historii, haseł i innych ustawień na wszystkich swoich urządzeniach.</translation>
-<translation id="2330607597130465898">Brak ochrony</translation>
 <translation id="2332131598580221120">Wyświetl w sklepie</translation>
 <translation id="2332192922827071008">Otwórz Ustawienia</translation>
 <translation id="2332742915001411729">Przywróć domyślne</translation>
@@ -1481,6 +1483,7 @@
 <translation id="2948300991547862301">Wejdź na <ph name="PAGE_TITLE" /></translation>
 <translation id="29488703364906173">Szybka, prosta i bezpieczna przeglądarka na miarę współczesnego internetu.</translation>
 <translation id="2949289451367477459">Używanie informacji o lokalizacji. Zezwól na używanie lokalizacji tego urządzenia przez aplikacje i usługi, które mają dostęp do lokalizacji. Google może okresowo gromadzić dane o lokalizacji i używać ich anonimowo, by zwiększyć dokładność lokalizacji oraz usprawnić działanie usług opartych na lokalizacji. <ph name="BEGIN_LINK1" />Więcej informacji<ph name="END_LINK1" /></translation>
+<translation id="2950666755714083615">Chcę się zarejestrować</translation>
 <translation id="2956070239128776395">Sekcja umieszczona w grupie: <ph name="ERROR_LINE" /></translation>
 <translation id="2957117904572187936">Nie zezwalaj witrynom na edytowanie plików ani folderów na urządzeniu</translation>
 <translation id="2958721676848865875">Ostrzeżenie o rozszerzeniu pakietu</translation>
@@ -1605,6 +1608,7 @@
 <translation id="3139925690611372679">Domyślny żółty awatar</translation>
 <translation id="3141318088920353606">Słucham…</translation>
 <translation id="3141917231319778873">Brak obsługi tego żądania do: „<ph name="DEVICE_NAME" />”.</translation>
+<translation id="3142562627629111859">Nowa grupa</translation>
 <translation id="3143515551205905069">Anuluj synchronizację</translation>
 <translation id="3143754809889689516">Odtwórz od początku</translation>
 <translation id="3144647712221361880">Otwórz link jako</translation>
@@ -1629,6 +1633,7 @@
 <translation id="3159493096109238499">Beżowy</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (obsługiwany sprzętowo)</translation>
 <translation id="3161522574479303604">Wszystkie języki</translation>
+<translation id="3162853326462195145">Konto szkolne</translation>
 <translation id="3162899666601560689">Strony mogą używać plików cookie dla Twojej wygody, by na przykład zapamiętać Twoje logowanie lub zawartość koszyka</translation>
 <translation id="3163201441334626963">Nieznany produkt <ph name="PRODUCT_ID" />, którego producent to <ph name="VENDOR_ID" /></translation>
 <translation id="3164329792803560526">Udostępniam tę kartę aplikacji <ph name="APP_NAME" /></translation>
@@ -1792,6 +1797,7 @@
 <translation id="3396800784455899911">Klikając przycisk „Zaakceptuj i kontynuuj”, wyrażasz zgodę na opisane powyżej przetwarzanie danych w tych usługach Google.</translation>
 <translation id="3399432415385675819">Powiadomienia zostaną wyłączone</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) – z przeplotem</translation>
+<translation id="3402585168444815892">Rejestruję w trybie demonstracyjnym</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nie zapisano żadnych haseł do tej strony</translation>
 <translation id="3405664148539009465">Dostosuj czcionki</translation>
@@ -1853,6 +1859,7 @@
 <translation id="3468999815377931311">Telefon z Androidem</translation>
 <translation id="3470442499439619530">Usuń tego użytkownika</translation>
 <translation id="3471876058939596279">Do wyświetlania obrazu nie można używać jednocześnie portu HDMI i portu USB typu C. Użyj innego portu wideo.</translation>
+<translation id="3473241910002674503">Przechodź do strony głównej i wstecz oraz przełączaj się między aplikacjami, korzystając z przycisków w trybie tabletu.</translation>
 <translation id="3473479545200714844">Lupa</translation>
 <translation id="3475843873335999118">Odcisk palca nie został rozpoznany. Podaj hasło.</translation>
 <translation id="3476303763173086583">Wysyłaj dane diagnostyczne oraz informacje o użyciu. Pomóż ulepszyć działanie Androida na urządzeniu dziecka, automatycznie wysyłając do Google dane diagnostyczne oraz informacje o używaniu urządzenia i aplikacji. Nie zostaną one użyte do zidentyfikowania Twojego dziecka. Wykorzystamy je, by poprawić stabilność systemu i aplikacji oraz wprowadzić inne ulepszenia. Niektóre dane zbiorcze pomogą nam też udoskonalić aplikacje Google lub zostaną wykorzystane przez naszych partnerów, na przykład deweloperów aplikacji na Androida. To <ph name="BEGIN_LINK1" />ustawienie<ph name="END_LINK1" /> jest wymuszone przez właściciela. Właściciel może ustawić wysyłanie do Google danych diagnostycznych i informacji o używaniu tego urządzenia. Jeśli na koncie Google dziecka włączysz ustawienie Dodatkowa aktywność w internecie i aplikacjach, te dane mogą być zapisywane na tym koncie. <ph name="BEGIN_LINK2" />Więcej informacji<ph name="END_LINK2" /></translation>
@@ -1872,7 +1879,6 @@
 <translation id="3492788708641132712">Synchronizacja nie działa. Spróbuj zalogować się ponownie.</translation>
 <translation id="3493486281776271508">Wymagane połączenie z internetem</translation>
 <translation id="3493881266323043047">Ważność</translation>
-<translation id="3494155060718700400">Nie chroni przed niebezpiecznymi stronami, pobieranymi plikami ani rozszerzeniami (niezalecane). Funkcja Bezpieczne przeglądanie nadal będzie chronić Cię w innych usługach Google, w których jest dostępna (takich jak Gmail i wyszukiwarka).</translation>
 <translation id="3494769164076977169">Pytaj, gdy strona próbuje automatycznie pobrać pliki po pobraniu pierwszego (zalecane)</translation>
 <translation id="3495660573538963482">Ustawienia Asystenta Google</translation>
 <translation id="3496213124478423963">Pomniejsz</translation>
@@ -2278,6 +2284,7 @@
 <translation id="3971764089670057203">Odciski cyfrowe na tym kluczu bezpieczeństwa</translation>
 <translation id="3973660817924297510">Sprawdzam hasła (<ph name="CHECKED_PASSWORDS" /> z <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Nie udało się połączyć z serwerem obszaru</translation>
+<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj później.</translation>
 <translation id="3976108569178263973">Brak dostępnych drukarek.</translation>
 <translation id="397703832102027365">Kończę...</translation>
 <translation id="3977886311744775419">W sieci tego typu aktualizacje nie są pobierane automatycznie, możesz jednak sprawdzić ręcznie, czy są dostępne.</translation>
@@ -2341,6 +2348,7 @@
 <translation id="4068506536726151626">Ta strona zawiera elementy z następujących witryn, które śledzą Twoją lokalizację:</translation>
 <translation id="4068776064906523561">Zapisane odciski palców</translation>
 <translation id="407173827865827707">Po kliknięciu</translation>
+<translation id="4073520450811433493">Synchronizacja ustawień</translation>
 <translation id="4074900173531346617">Certyfikat podmiotu podpisującego pocztę e-mail</translation>
 <translation id="407520071244661467">Skala</translation>
 <translation id="4075639477629295004">Nie udało się przesłać pliku <ph name="FILE_NAME" />.</translation>
@@ -2577,6 +2585,7 @@
 <translation id="4421932782753506458">Puszysty</translation>
 <translation id="4423376891418188461">Przywróć ustawienia</translation>
 <translation id="442397852638519243">Twój administrator (<ph name="USER_NAME" />) prosi Cię o zmianę Twojego hasła.</translation>
+<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny.</translation>
 <translation id="4429030830601238961">Tych danych nie można wkleić, ponieważ naruszają one zasady bezpieczeństwa obowiązujące w Twojej organizacji.</translation>
 <translation id="4430019312045809116">Głośność</translation>
 <translation id="4430369329743628066">Dodano zakładkę</translation>
@@ -2589,6 +2598,7 @@
 <translation id="4441124369922430666">Chcesz, by ta aplikacja była uruchamiana automatycznie po włączeniu urządzenia?</translation>
 <translation id="4441147046941420429">Aby kontynuować, odłącz klucz bezpieczeństwa od urządzenia, a potem podłącz go ponownie i dotknij</translation>
 <translation id="444134486829715816">Rozwiń...</translation>
+<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> może sprawdzić Twoje hasła, gdy zalogujesz się na konto Google</translation>
 <translation id="4442424173763614572">Wyszukiwanie DNS nie powiodło się.</translation>
 <translation id="4443536555189480885">&amp;Pomoc</translation>
 <translation id="4444304522807523469">Dostęp do skanerów podłączonych przez USB lub do sieci lokalnej</translation>
@@ -2615,11 +2625,13 @@
 <translation id="4476659815936224889">Aby zeskanować ten kod, skorzystaj ze skanera kodów QR w telefonie lub z aplikacji aparatu.</translation>
 <translation id="4477015793815781985">Uwzględnij klawisze Ctrl, Alt lub ⌘</translation>
 <translation id="4478664379124702289">Zapisz link ja&amp;ko...</translation>
+<translation id="4478777936860197922">Brak zapisanych haseł. <ph name="IDS_SHORT_PRODUCT_NAME" /> może sprawdzać Twoje hasła, gdy je zapiszesz.</translation>
 <translation id="4479424953165245642">Zarządzaj aplikacjami kiosku</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfiguruję maszynę wirtualną. Może to potrwać kilka minut.</translation>
 <translation id="4480590691557335796">Chrome może znaleźć i usunąć szkodliwe oprogramowanie na Twoim komputerze</translation>
 <translation id="4481530544597605423">Niesparowane urządzenia</translation>
+<translation id="4488107067273194838">Pokaż opcje synchronizacji przeglądarki po zakończeniu konfiguracji</translation>
 <translation id="4488502501195719518">Wyczyścić wszystkie dane?</translation>
 <translation id="4495419450179050807">Nie pokazuj na tej stronie</translation>
 <translation id="4496054781541092778">automatycznie zablokował(a) uprawnienie: <ph name="PERMISSION" /></translation>
@@ -2861,6 +2873,7 @@
 <translation id="4849517651082200438">Nie instaluj</translation>
 <translation id="4850669014075537160">Przewijanie</translation>
 <translation id="4850886885716139402">Widok</translation>
+<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> powiadomi Cię w razie logowania za pomocą przejętego hasła</translation>
 <translation id="4853020600495124913">Otwórz w &amp;nowym oknie</translation>
 <translation id="4854317507773910281">Wybierz konto rodzica na potrzeby zatwierdzenia</translation>
 <translation id="485480310608090163">Więcej ustawień i uprawnień</translation>
@@ -2879,6 +2892,7 @@
 <translation id="4871322859485617074">Kod PIN zawiera niedozwolone znaki</translation>
 <translation id="4871370605780490696">Dodaj zakładkę</translation>
 <translation id="4871719318659334896">Zamknij grupę</translation>
+<translation id="4871852311166078968">Dodaj do grupy</translation>
 <translation id="4873312501243535625">Kontroler plików multimedialnych</translation>
 <translation id="4876273079589074638">Pomóż naszym inżynierom zbadać i naprawić tę awarię. Jeśli możesz, dokładnie opisz poszczególne czynności. Każdy szczegół jest ważny.</translation>
 <translation id="4876895919560854374">Blokowanie i odblokowywanie ekranu</translation>
@@ -2923,7 +2937,6 @@
 <translation id="4920887663447894854">Następującym witrynom zablokowano możliwość śledzenia Twojej lokalizacji na tej stronie:</translation>
 <translation id="49226369361073053">{0,plural, =0{Aktualizacja urządzenia nastąpi teraz}=1{Aktualizacja urządzenia nastąpi w ciągu 1 sekundy}few{Aktualizacja urządzenia nastąpi w ciągu # sekund}many{Aktualizacja urządzenia nastąpi w ciągu # sekund}other{Aktualizacja urządzenia nastąpi w ciągu # sekundy}}</translation>
 <translation id="492299503953721473">Usuń aplikacje na Androida</translation>
-<translation id="4923279099980110923">Tak, chcę pomóc</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Tu pojawią się porty</translation>
 <translation id="4925542575807923399">Administrator tego konta wymaga, by w sesji wielokrotnego logowania logować się na nie jako pierwsze.</translation>
@@ -3237,7 +3250,6 @@
 <translation id="5362741141255528695">Wybierz plik kluczy prywatnych.</translation>
 <translation id="5363109466694494651">Wykonaj Powerwash i przywróć</translation>
 <translation id="5365881113273618889">Wybrany folder zawiera poufne pliki. Czy na pewno chcesz, by aplikacja „<ph name="APP_NAME" />” miała do niego stały dostęp z uprawnieniami do zapisu?</translation>
-<translation id="5367091008316207019">Odczytuję plik..</translation>
 <translation id="5368720394188453070">Twój telefon jest zablokowany. Aby uzyskać do niego dostęp, odblokuj go.</translation>
 <translation id="5368779022775404937">Zaloguj się na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Włącz przyspieszenie myszy</translation>
@@ -3524,6 +3536,7 @@
 <translation id="5739235828260127894">Czekam na weryfikację. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Bardzo duża</translation>
 <translation id="574209121243317957">Ton</translation>
+<translation id="5745136023067925867">Otrzymuj wskazówki na temat urządzeń z systemem <ph name="DEVICE_TYPE" /> oraz najnowsze wiadomości i oferty. Dziel się swoją opinią.</translation>
 <translation id="5746169159649715125">Zapisz jako PDF</translation>
 <translation id="5747552184818312860">Wygasa</translation>
 <translation id="5747785204778348146">Deweloperska – niestabilna</translation>
@@ -4435,6 +4448,7 @@
 <translation id="6997642619627518301"><ph name="NAME_PH" /> – Historia aktywności</translation>
 <translation id="6997707937646349884">Na Twoich urządzeniach:</translation>
 <translation id="6998793565256476099">Zarejestruj urządzenie na potrzeby wideokonferencji</translation>
+<translation id="6999956497249459195">Nowa grupa</translation>
 <translation id="7000206553895739324">Drukarka <ph name="PRINTER_NAME" /> jest podłączona, ale wymaga konfiguracji</translation>
 <translation id="7000347579424117903">Uwzględnij klawisze Ctrl, Alt lub Wyszukaj</translation>
 <translation id="7001036685275644873">Zapisuję kopię zapasową aplikacji i plików Linuksa</translation>
@@ -4733,6 +4747,7 @@
 <translation id="7400418766976504921">Adres URL</translation>
 <translation id="7400839060291901923">Skonfiguruj połączenie na telefonie <ph name="PHONE_NAME" /></translation>
 <translation id="7401778920660465883">Zamknij tę wiadomość</translation>
+<translation id="7403642243184989645">Pobieram zasoby</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{Potwierdzenie bezpieczeństwa zostało wykonane 1 godzinę temu}few{Potwierdzenie bezpieczeństwa zostało wykonane {NUM_HOURS} godziny temu}many{Potwierdzenie bezpieczeństwa zostało wykonane {NUM_HOURS} godzin temu}other{Potwierdzenie bezpieczeństwa zostało wykonane {NUM_HOURS} godziny temu}}</translation>
 <translation id="740624631517654988">Zablokowano wyskakujące okienko</translation>
 <translation id="7407430846095439694">Zaimportuj i powiąż</translation>
@@ -4969,6 +4984,7 @@
 <translation id="7716781361494605745">Adres URL zasad urzędu certyfikacji firmy Netscape</translation>
 <translation id="7717014941119698257">Pobieram: <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">Sprawdź dostępność aktualizacji</translation>
+<translation id="7719070594859855691">Przyznaj dostęp do kamery</translation>
 <translation id="7719367874908701697">Powiększenie strony</translation>
 <translation id="7721179060400456005">Zezwól na rozciąganie okien na wiele wyświetlaczy</translation>
 <translation id="7722040605881499779">Aktualizacja potrzebuje <ph name="NECESSARY_SPACE" /></translation>
@@ -5071,6 +5087,7 @@
     <ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> podczas tego procesu system uruchomi się ponownie.</translation>
 <translation id="7828731929332799387">Spowoduje to usunięcie wszystkich plików cookie i danych witryn dostępnych w kontekście witryn innych firm. Czy chcesz kontynuować?</translation>
 <translation id="7829298379596169484">Otwieram wejście audio</translation>
+<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="7829877209233347340">Poproś rodzica, by się zalogował i zezwolił na dodanie konta szkolnego</translation>
 <translation id="7830594666202422257">Podłącz do Linuksa</translation>
 <translation id="7831491651892296503">Podczas konfigurowania sieci wystąpił błąd</translation>
@@ -5293,6 +5310,7 @@
 <translation id="8107015733319732394">Instaluję Sklep Google Play na urządzeniu <ph name="DEVICE_TYPE" />. Może to potrwać kilka minut.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{Brak plików cookie innych firm}=1{Zablokowano 1 plik cookie innej firmy}few{Zablokowano # pliki cookie innych firm}many{Zablokowano # plików cookie innych firm}other{Zablokowano # pliku cookie innych firm}}</translation>
 <translation id="810875025413331850">Nie znaleziono żadnych urządzeń w pobliżu.</translation>
+<translation id="8114199541033039755">Przechodź do strony głównej i wstecz oraz przełączaj się między aplikacjami, korzystając z przycisków w trybie tabletu. To ustawienie jest włączone, gdy aktywne są ChromeVox lub automatyczne kliknięcia.</translation>
 <translation id="8114875720387900039">Podziel poziomo</translation>
 <translation id="8116972784401310538">&amp;Menedżer zakładek</translation>
 <translation id="8117620576188476503">Zarządzaj połączeniami, aktualizacjami i ustawieniami na pasku stanu. Aby je otworzyć za pomocą klawiatury, naciśnij Alt + Shift + S.</translation>
@@ -5412,6 +5430,7 @@
 <translation id="8263744495942430914">Witryna <ph name="FULLSCREEN_ORIGIN" /> wyłączyła kursor myszy.</translation>
 <translation id="8264024885325823677">Tym ustawieniem zarządza Twój administrator.</translation>
 <translation id="8264718194193514834">Rozszerzenie <ph name="EXTENSION_NAME" /> uruchomiło tryb pełnoekranowy.</translation>
+<translation id="826511437356419340">Jesteś w trybie przeglądu okien. Aby przechodzić między nimi, przesuwaj je palcem lub naciskaj Tab (jeśli używasz klawiatury).</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Są to ogólne informacje o tym urządzeniu i o jego używaniu (takie jak poziom naładowania baterii, aktywność w systemie i aplikacjach oraz błędy). Wykorzystamy je do ulepszania Androida. Z niektórych zebranych informacji będą też korzystać nasze aplikacje oraz partnerzy, np. deweloperzy aplikacji na Androida, by tworzyć lepsze aplikacje i produkty.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Wyłączenie tej funkcji nie wpływa na możliwość wysyłania przez urządzenie informacji potrzebnych do działania ważnych usług, na przykład zabezpieczeń czy aktualizacji systemu.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Właściciel może włączyć lub wyłączyć tę funkcję, wybierając Ustawienia &gt; Zaawansowane &gt; Automatycznie wysyłaj do Google dane diagnostyczne i informacje o użytkowaniu.<ph name="END_PARAGRAPH3" />
@@ -5520,6 +5539,7 @@
 <translation id="8426713856918551002">Włączam</translation>
 <translation id="8427292751741042100">umieszczone na dowolnym hoście</translation>
 <translation id="8428213095426709021">Ustawienia</translation>
+<translation id="8428271547607112339">Dodaj konto szkolne</translation>
 <translation id="8428628598981198790">Twojego klucza bezpieczeństwa nie można używać z tą stroną</translation>
 <translation id="84297032718407999">Wylogujemy Cię za <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431190899827883166">Pokaż kliknięcia</translation>
@@ -5583,6 +5603,7 @@
 <translation id="851263357009351303">Zawsze zezwalaj na pokazywanie grafik w witrynie <ph name="HOST" /></translation>
 <translation id="8513108775083588393">Autoobracanie</translation>
 <translation id="8514746246728959655">Użyj innego klucza bezpieczeństwa</translation>
+<translation id="851960115758509829">Gdy zalogujesz się na konto Google, Twoje aplikacje, ustawienia i inne dostosowania zsynchronizują się na wszystkich urządzeniach z Chrome OS.</translation>
 <translation id="8521475323816527629">Szybkie otwieranie aplikacji</translation>
 <translation id="8523493869875972733">Zachowaj zmiany</translation>
 <translation id="8523849605371521713">Dodane przez zasady</translation>
@@ -5864,11 +5885,13 @@
 <translation id="885701979325669005">Pamięć</translation>
 <translation id="8859057652521303089">Wybierz język:</translation>
 <translation id="8859174528519900719">Ramka podrzędna: <ph name="SUBFRAME_SITE" /></translation>
+<translation id="8859662783913000679">Konto rodzica</translation>
 <translation id="8862003515646449717">Przejdź na szybką przeglądarkę</translation>
 <translation id="8863753581171631212">Otwórz link w nowym oknie aplikacji <ph name="APP" /></translation>
 <translation id="8864055848767439877">Udostępniam kartę <ph name="TAB_NAME" /> aplikacji <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Konto <ph name="EMAIL" /> zostało usunięte z tego urządzenia</translation>
 <translation id="8867228703146808825">Kopiuj szczegóły kompilacji do schowka</translation>
+<translation id="8868333925931032127">Uruchamiam tryb demonstracyjny</translation>
 <translation id="8868626022555786497">Używane</translation>
 <translation id="8870413625673593573">Ostatnio zamknięte</translation>
 <translation id="8871551568777368300">Przypięte przez administratora</translation>
@@ -5947,6 +5970,7 @@
 <translation id="8966870118594285808">Możesz ponownie otworzyć kartę zamkniętą przez przypadek</translation>
 <translation id="8967866634928501045">Naciśnij Alt+Shift+A, by wyświetlić</translation>
 <translation id="8968766641738584599">Zapisz kartę</translation>
+<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny lub <ph name="BEGIN_LINK" />sprawdź hasła na koncie Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Ucieczka</translation>
 <translation id="8972513834460200407">Skontaktuj się z administratorem sieci, by dowiedzieć się, czy zapora sieciowa nie blokuje pobrań z serwerów Google.</translation>
 <translation id="8973557916016709913">Usuń poziom powiększenia</translation>
@@ -5963,7 +5987,6 @@
 <translation id="8985264973231822211">Aktywność <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dzień temu</translation>
 <translation id="8986362086234534611">Zapomnij</translation>
 <translation id="8986494364107987395">Automatycznie przesyłaj do Google statystyki użytkowania i raporty o awariach</translation>
-<translation id="8986651757229422279">Spowoduje to usunięcie wszystkich danych i plików cookie zapisanych przez stronę <ph name="ORIGIN_NAME" /> oraz jej zainstalowaną aplikację.</translation>
 <translation id="8987927404178983737">Miesiąc</translation>
 <translation id="8991520179165052608">Strona może używać mikrofonu</translation>
 <translation id="899403249577094719">Podstawowy adres URL certyfikatu firmy Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index e687255..b58f828 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Editar cartão</translation>
 <translation id="2154710561487035718">Copiar URL</translation>
 <translation id="2155772377859296191">Resolução: <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Você pode ajudar a melhorar o recurso "Navegação segura" enviando algumas informações do sistema e conteúdo da página para o Google.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Para ter outros recursos, use uma base de encaixe Dell compatível com este Chromebook.</translation>
 <translation id="215753907730220065">Sair do modo tela cheia</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Recarregar aplicativo</translation>
 <translation id="2327492829706409234">Ativar aplicativo</translation>
 <translation id="2329597144923131178">Faça login para que favoritos, histórico, senhas e outras configurações fiquem disponíveis em todos os seus dispositivos.</translation>
-<translation id="2330607597130465898">Sem proteção</translation>
 <translation id="2332131598580221120">Ver na loja</translation>
 <translation id="2332192922827071008">Abrir preferências</translation>
 <translation id="2332742915001411729">Redefinir para os valores padrão</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">A sincronização não está funcionando. Tente fazer login novamente.</translation>
 <translation id="3493486281776271508">Requer uma conexão de Internet</translation>
 <translation id="3493881266323043047">Validade</translation>
-<translation id="3494155060718700400">Não protege você contra sites, downloads e extensões perigosos (não recomendado). Você ainda terá a proteção do "Navegação segura", sempre que possível, em outros Serviços do Google, como o Gmail e a Pesquisa.</translation>
 <translation id="3494769164076977169">Perguntar quando um site tenta fazer o download de arquivos automaticamente após o primeiro arquivo (recomendado)</translation>
 <translation id="3495660573538963482">Configurações do Google Assistente</translation>
 <translation id="3496213124478423963">Afastar</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Os seguintes sites foram impedidos de rastrear o seu local nesta página:</translation>
 <translation id="49226369361073053">{0,plural, =0{Atualize o dispositivo agora}=1{Atualize o dispositivo em 1 segundo}one{Atualize o dispositivo em # segundo}other{Atualize o dispositivo em # segundos}}</translation>
 <translation id="492299503953721473">Remover apps Android</translation>
-<translation id="4923279099980110923">Sim, eu quero ajudar</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Suas portas aparecerão aqui</translation>
 <translation id="4925542575807923399">O administrador dessa conta exige que ela seja a primeira conta a fazer o login em uma sessão de login múltiplo.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Selecionar arquivo de chave privada.</translation>
 <translation id="5363109466694494651">Realizar Powerwash e reverter</translation>
 <translation id="5365881113273618889">A pasta selecionada contém arquivos confidenciais. Tem certeza de que quer conceder acesso permanente de gravação nessa pasta ao "<ph name="APP_NAME" />"?</translation>
-<translation id="5367091008316207019">Lendo arquivo...</translation>
 <translation id="5368720394188453070">Seu smartphone está bloqueado. Desbloqueie-o para entrar.</translation>
 <translation id="5368779022775404937">Fazer login em <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ativar aceleração do mouse</translation>
@@ -5965,7 +5960,6 @@
 <translation id="8985264973231822211">Ativado há <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dia</translation>
 <translation id="8986362086234534611">Esquecer</translation>
 <translation id="8986494364107987395">Envia estatísticas de uso e relatórios de erros ao Google automaticamente</translation>
-<translation id="8986651757229422279">Isso limpará todos os dados e cookies armazenados por <ph name="ORIGIN_NAME" /> e o app instalado.</translation>
 <translation id="8987927404178983737">Mês</translation>
 <translation id="8991520179165052608">O site pode usar seu microfone</translation>
 <translation id="899403249577094719">URL base do certificado do Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 62c2423..8b8b231 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Editar cartão</translation>
 <translation id="2154710561487035718">Copiar URL</translation>
 <translation id="2155772377859296191">Parece ter <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Pode ajudar a melhorar a Navegação segura ao enviar algumas informações do sistema e conteúdo da página para a Google.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Para ter acesso a mais funcionalidades, utilize uma estação de ancoragem Dell concebida para trabalhar com este Chromebook.</translation>
 <translation id="215753907730220065">Sair do modo de ecrã inteiro</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Recarregar aplicação</translation>
 <translation id="2327492829706409234">Ativar aplicação</translation>
 <translation id="2329597144923131178">Inicie sessão para aceder aos marcadores, ao histórico, às palavras-passe e a outras definições em todos os dispositivos.</translation>
-<translation id="2330607597130465898">Sem proteção</translation>
 <translation id="2332131598580221120">Ver na loja</translation>
 <translation id="2332192922827071008">Abrir as Preferências</translation>
 <translation id="2332742915001411729">Repor predefinição</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">A sincronização não está a funcionar. Tente iniciar sessão novamente.</translation>
 <translation id="3493486281776271508">É necessária uma ligação à Internet.</translation>
 <translation id="3493881266323043047">Validade</translation>
-<translation id="3494155060718700400">Não protege contra transferências, extensões e Websites perigosos (não recomendado). Continuará a obter a proteção da Navegação segura, quando disponível, noutros Serviços Google, como o Gmail e a Pesquisa.</translation>
 <translation id="3494769164076977169">Perguntar sempre que um site tentar transferir ficheiros automaticamente após o primeiro ficheiro (recomendado)</translation>
 <translation id="3495660573538963482">Definições do Assistente Google</translation>
 <translation id="3496213124478423963">Reduzir</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Os sites seguintes foram bloqueados de monitorizar a sua localização nesta página:</translation>
 <translation id="49226369361073053">{0,plural, =0{Atualize o dispositivo agora}=1{Atualize o dispositivo dentro de 1 segundo}other{Atualize o dispositivo dentro de # segundos}}</translation>
 <translation id="492299503953721473">Remover aplicações para Android</translation>
-<translation id="4923279099980110923">Sim, quero ajudar</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">As suas portas irão aparecer aqui.</translation>
 <translation id="4925542575807923399">O gestor para esta conta requer que esta conta seja a primeira conta com sessão iniciada num início de sessão integrado.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Selecionar ficheiro de chave privada.</translation>
 <translation id="5363109466694494651">Powerwash e reverter</translation>
 <translation id="5365881113273618889">A pasta que selecionou contém ficheiros confidenciais. Tem a certeza de que pretende conceder à aplicação "<ph name="APP_NAME" />" acesso de escrita permanente a esta pasta?</translation>
-<translation id="5367091008316207019">A ler ficheiro...</translation>
 <translation id="5368720394188453070">O seu telemóvel está bloqueado. Desbloqueie-o para introduzir.</translation>
 <translation id="5368779022775404937">Iniciar sessão em <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ativar aceleração do rato</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Ativo há <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dia</translation>
 <translation id="8986362086234534611">Esquecer</translation>
 <translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation>
-<translation id="8986651757229422279">Esta ação limpa todos os dados e cookies armazenados por <ph name="ORIGIN_NAME" /> e a respetiva app instalada.</translation>
 <translation id="8987927404178983737">Mês</translation>
 <translation id="8991520179165052608">O site pode utilizar o microfone.</translation>
 <translation id="899403249577094719">URL base do certificado Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index c207b6b..dbad38d 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Editează cardul</translation>
 <translation id="2154710561487035718">Copiați adresa URL</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Ne poți ajuta să îmbunătățim Navigarea sigură dacă trimiți la Google anumite informații despre sistem și conținutul paginii.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Pentru a beneficia de mai multe funcții, folosește o stație de andocare Dell proiectată să funcționeze cu acest Chromebook.</translation>
 <translation id="215753907730220065">Ieși din ecranul complet</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Reîncarcă aplicația</translation>
 <translation id="2327492829706409234">Activați aplicația</translation>
 <translation id="2329597144923131178">Conectează-te și accesează marcajele, istoricul, parolele și alte setări pe toate dispozitivele.</translation>
-<translation id="2330607597130465898">Fără protecție</translation>
 <translation id="2332131598580221120">Vedeți în magazin</translation>
 <translation id="2332192922827071008">Deschide Preferințele</translation>
 <translation id="2332742915001411729">Resetați la valorile prestabilite</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sincronizarea nu funcționează. Încearcă să te conectezi din nou.</translation>
 <translation id="3493486281776271508">Este necesară o conexiune la internet</translation>
 <translation id="3493881266323043047">Validitate</translation>
-<translation id="3494155060718700400">Nu te protejează împotriva site-urilor, descărcărilor și extensiilor periculoase (nu este recomandat). Te vei bucura în continuare de protecția oferită de Navigarea sigură, dacă este disponibilă, în alte servicii Google, cum ar fi Gmail și Căutarea.</translation>
 <translation id="3494769164076977169">Notifică-mă dacă un site încearcă să descarce automat fișiere după primul fișier (recomandat)</translation>
 <translation id="3495660573538963482">Setări Asistent Google</translation>
 <translation id="3496213124478423963">Micșorează</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Urmărirea locației pe această pagină a fost blocată pentru următoarele site-uri:</translation>
 <translation id="49226369361073053">{0,plural, =0{Actualizează dispozitivul acum}=1{Actualizează dispozitivul într-o secundă}few{Actualizează dispozitivul în # secunde}other{Actualizează dispozitivul în # de secunde}}</translation>
 <translation id="492299503953721473">Elimină aplicațiile Android</translation>
-<translation id="4923279099980110923">Da, doresc să ajut</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Porturile vor apărea aici</translation>
 <translation id="4925542575807923399">Administratorul acestui cont solicită ca acest cont să fie primul conectat într-o sesiune de conectare multiplă.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Selectează fișierul cu cheia privată.</translation>
 <translation id="5363109466694494651">Folosește Powerwash și revino la o versiune anterioară</translation>
 <translation id="5365881113273618889">Dosarul pe care l-ai selectat conține fișiere cu informații sensibile. Sigur dorești să permiți accesul de scriere permanent pentru „<ph name="APP_NAME" />” la acest dosar?</translation>
-<translation id="5367091008316207019">Se citește fișierul...</translation>
 <translation id="5368720394188453070">Telefonul este blocat. Pentru acces, deblochează-l.</translation>
 <translation id="5368779022775404937">Conectează-te la <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activează accelerarea mouse-ului</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">Activ acum <ph name="DEVICE_LAST_ACTIVATED_TIME" /> zi</translation>
 <translation id="8986362086234534611">Șterge</translation>
 <translation id="8986494364107987395">Trimite automat la Google statistici de utilizare și rapoarte de blocare</translation>
-<translation id="8986651757229422279">Astfel, se vor șterge toate datele și cookie-urile stocate de <ph name="ORIGIN_NAME" /> și aplicația instalată asociată.</translation>
 <translation id="8987927404178983737">Lună</translation>
 <translation id="8991520179165052608">Site-ul poate folosi microfonul</translation>
 <translation id="899403249577094719">Adresă URL de bază pentru certificat Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 859fb0c..afc82e1e 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -825,6 +825,7 @@
 <translation id="2119349053129246860">Открыть в приложении "<ph name="APP" />"</translation>
 <translation id="2120297377148151361">Действия в браузере</translation>
 <translation id="2120639962942052471">Отключено разрешение "<ph name="PERMISSION" />"</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Файлы cookie заблокированы.}=1{Файлы cookie заблокированы (есть 1 исключение).}one{Файлы cookie заблокированы (есть {COUNT} исключение).}few{Файлы cookie заблокированы (есть {COUNT} исключения).}many{Файлы cookie заблокированы (есть {COUNT} исключений).}other{Файлы cookie заблокированы (есть {COUNT} исключения).}}</translation>
 <translation id="2121825465123208577">Изменить размер</translation>
 <translation id="2122305276694332719">Включать этот параметр не рекомендуется, так как при автоматическом подключении к скрытой сети другие пользователи могут увидеть ваше устройство и некоторые сетевые настройки.</translation>
 <translation id="2123766928840368256">Выбрать другой файл</translation>
@@ -858,7 +859,6 @@
 <translation id="2154484045852737596">Изменение данных карты</translation>
 <translation id="2154710561487035718">Копировать URL</translation>
 <translation id="2155772377859296191">Выглядит как <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Чтобы улучшить режим Безопасного просмотра, вы можете отправлять системную информацию и содержимое страниц в Google.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Чтобы получить доступ к дополнительным возможностям, используйте док-станцию Dell, предназначенную для этого устройства Chromebook.</translation>
 <translation id="215753907730220065">Выход из полноэкранного режима</translation>
@@ -990,7 +990,6 @@
 <translation id="2326931316514688470">Пере&amp;загрузить приложение</translation>
 <translation id="2327492829706409234">Включить приложение</translation>
 <translation id="2329597144923131178">Войдите, чтобы синхронизировать закладки, пароли, историю и т. д. на всех устройствах.</translation>
-<translation id="2330607597130465898">Защита отключена</translation>
 <translation id="2332131598580221120">Открыть в Интернет-магазине</translation>
 <translation id="2332192922827071008">Открыть настройки</translation>
 <translation id="2332742915001411729">Сбросить</translation>
@@ -1869,7 +1868,6 @@
 <translation id="3492788708641132712">Ошибка синхронизации. Войдите в аккаунт ещё раз.</translation>
 <translation id="3493486281776271508">Требуется подключение к Интернету.</translation>
 <translation id="3493881266323043047">Срок действия</translation>
-<translation id="3494155060718700400">Не защищает вас от сайтов, расширений и скачанных файлов, которые могут представлять опасность (не рекомендуется). Безопасный просмотр по-прежнему будет работать в других сервисах Google, например в Gmail и Поиске.</translation>
 <translation id="3494769164076977169">Показывать запрос на скачивание дополнительных файлов после скачивания первого (рекомендуется)</translation>
 <translation id="3495660573538963482">Настройки Google Ассистента</translation>
 <translation id="3496213124478423963">Уменьшить</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">Вы запретили передачу ваших геоданных следующим сайтам:</translation>
 <translation id="49226369361073053">{0,plural, =0{Перезагрузите устройство прямо сейчас}=1{Перезагрузите устройство в течение 1 секунды}one{Перезагрузите устройство в течение # секунды}few{Перезагрузите устройство в течение # секунд}many{Перезагрузите устройство в течение # секунд}other{Перезагрузите устройство в течение # секунды}}</translation>
 <translation id="492299503953721473">Удалить приложения для Android</translation>
-<translation id="4923279099980110923">Да, отправить файл на анализ</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Здесь появятся порты.</translation>
 <translation id="4925542575807923399">Чтобы начать сеанс множественного входа, необходимо в первую очередь выполнить вход в этот аккаунт</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">Выберите файл закрытого ключа.</translation>
 <translation id="5363109466694494651">Powerwash и откат</translation>
 <translation id="5365881113273618889">Выбранная папка содержит конфиденциальные файлы. Предоставить приложению "<ph name="APP_NAME" />" постоянный доступ для записи данных?</translation>
-<translation id="5367091008316207019">Чтение файла…</translation>
 <translation id="5368720394188453070">Для входа разблокируйте телефон.</translation>
 <translation id="5368779022775404937">Вход в <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Включить ускорение мыши</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">Последние действия: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> дн. назад</translation>
 <translation id="8986362086234534611">Удалить</translation>
 <translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation>
-<translation id="8986651757229422279">Будут удалены все данные и файлы cookie, сохраненные сайтом <ph name="ORIGIN_NAME" /> и установленным им приложением.</translation>
 <translation id="8987927404178983737">Месяц</translation>
 <translation id="8991520179165052608">Сайт может использовать микрофон</translation>
 <translation id="899403249577094719">URL базы сертификатов Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 2dca4e50..c85fde7 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -37,6 +37,7 @@
 <translation id="1041263367839475438">තිබෙන උපාංග</translation>
 <translation id="1042174272890264476">ඔබේ පරිගණකය අැතුළතින් සවි කළ <ph name="SHORT_PRODUCT_NAME" />හි RLZ පුස්තකාලයද සමඟ පැමිණේ. RLZ විසින් විශේෂ ප්‍රවර්ධනාත්මක ව්‍යාපාරයක් මඟින් ධාවනය වන සෙවීම් සහ <ph name="SHORT_PRODUCT_NAME" /> භාවිතය මැනීම සදහා අසමසම නොවන, පුද්ගලික නොවන ලෙස හදුනාගත හැකි ටැග් ඒකක් පවරයි. මෙම ලේබල සමහර විට Google සෙවීම් විමසුම්වල දිස් වේ <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1043818413152647937">මෙම යෙදුම්වලින් ද දත්ත හිස් කරන්නේද?</translation>
+<translation id="1045448422538531528">සමූහයට එක් කරන්න</translation>
 <translation id="1046635659603195359">ඔබ දැනටමත් ඔබේ Google සහායක සමඟ තවත් උපාංගයක කටහඬ ගැළපුම පිහිටුවා ඇති බව පෙනේ. මෙම පෙර පටිගත කිරීම් මෙම උපාංගයෙහි කටහඬ ආකෘතියක් සෑදීමට භාවිතා කළ හැකිය. මෙය මිනිත්තුවකට වඩා අඩුවෙන් ගනු ඇත.</translation>
 <translation id="104710386808485638">ලිනක්ස් යළි අරඹන්නේද?</translation>
 <translation id="1047431265488717055">සබැඳි පෙළ පිටපත් කරන්න</translation>
@@ -66,6 +67,7 @@
 <translation id="1076818208934827215">මයික්‍රොසොෆ්ට් ඉන්ටර්නෙට් එක්ස්ප්ලෝරර්</translation>
 <translation id="1079766198702302550">හැමවිට කැමරා පිවිසීම අවහිර කරන්න</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> හට ඔබේ Chrome සැකසීම් ඒවායේ පෙරනිමි තත්ත්වයට පත් කිරීමට අවශ්‍යයි. මෙය ඔබේ මුල් පිටුව, නව ටැබ පිටුව හා සෙවුම් යාන්ත්‍රණය යළිසකසයි, ඔබේ දිගු අබල කරන අතර සියලු ටැබ ඇමුණුම් ගලවයි. තවද එය කුකී, අන්තර්ගතය හා අඩවි යනාදී, වෙනත් තාවකාලික හා හැඹිලිගත අඩවි දත්ත හිස් කරයි.</translation>
+<translation id="1084096383128641877">මෙම මුරපදය ඉවත් කිරීමට <ph name="DOMAIN" /> මත ඔබේ ගිණුම මකන්නේ නැත. එය අන් අයගෙන් ආරක්‍ෂිතව තබා ගැනීමට ඔබේ මුරපදය වෙනස් කරන්න, නැති නම් <ph name="DOMAIN_LINK" /> මත ඔබේ ගිණුම මකා දමන්න.</translation>
 <translation id="1084824384139382525">සබැඳි ලිපි&amp;නය පිටපත් කරන්න</translation>
 <translation id="1085697365578766383">අථත්‍ය යාන්ත්‍රණය ආරම්භ කිරීමේ දෝෂයකි. කරුණාකර නැවත උත්සාහ කරන්න.</translation>
 <translation id="1090126737595388931">පසුබිමේ යෙදුම් කිසිවක් ක්‍රියා නොකරයි</translation>
@@ -200,6 +202,7 @@
 <translation id="1259152067760398571">ආරක්‍ෂක පරීක්‍ෂාව ඊයේ ධාවන විය</translation>
 <translation id="1260451001046713751">සැමවිටම <ph name="HOST" /> වෙතින් උත්පතන සහ හරවා යැවීමට ඉඩ දෙන්න</translation>
 <translation id="126156426083987769">ආදර්ශන ආකාර උපාංග බලපත්‍ර සමඟ ප්‍රශ්නයක් විය</translation>
+<translation id="1263490604593716556">ගිණුම <ph name="FIRST_PARENT_EMAIL" /> සහ <ph name="SECOND_PARENT_EMAIL" /> විසින් කළමනා කෙරේ. මෙම උපාංගයේ ඇති මූලික ගිණුමෙන් වැරෙන්නට, ඔබේ තිරයේ ඇති වේලාවට ක්ලික් කරන්න. දිස් වන මෙනුව තුළ, "වරන්න" ක්ලික් කරන්න.</translation>
 <translation id="126710816202626562">පරිවර්තන භාශාව:</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">නවතන්න</translation>
@@ -857,7 +860,6 @@
 <translation id="2154484045852737596">කාඩ්පත සංස්කරණය කරන්න</translation>
 <translation id="2154710561487035718">URL පිටපත්</translation>
 <translation id="2155772377859296191">පේන විදියට <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">ඇතැම් පද්ධති තොරතුරු සහ පිටු අන්තර්ගතය Google වෙත යැවීම මගින් ඔබට ආරක්ෂිත බ්‍රවුස් කිරිම වැඩි දියුණු කිරිමට උදවු කළ හැකිය.</translation>
 <translation id="2156294658807918600">සේවා සේවක: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">අමතර විශේෂාංග ලබා ගැනීමට, මෙම Chromebook සමඟ ක්‍රියා කිරීමට සැලසුම් කර ඇති Dell ඩොක් කිරීමේ ස්ථානයක් භාවිත කරන්න.</translation>
 <translation id="215753907730220065">සම්පූර්ණ තිරයෙන් ඉවත් වන්න</translation>
@@ -871,6 +873,7 @@
 <translation id="2172784515318616985">ඉදිරියට යන්න</translation>
 <translation id="2173302385160625112">ඔබේ අන්තර්ජාල සබැඳුම පරීක්ෂා කරන්න</translation>
 <translation id="2173801458090845390">මෙම උපාංගයට අධිග්‍රහණ ID එක් කරන්න</translation>
+<translation id="2174948148799307353">ගිණුම <ph name="PARENT_EMAIL" /> විසින් කළමනා කෙරේ. මෙම උපාංගයේ ඇති මූලික ගිණුමෙන් වැරෙන්නට, ඔබේ තිරයේ ඇති වේලාවට ක්ලික් කරන්න. දිස් වන මෙනුව තුළ, "වරන්න" ක්ලික් කරන්න.</translation>
 <translation id="2175607476662778685">ක්ෂණික දියත් කිරීමේ බාර් එක</translation>
 <translation id="217576141146192373">මුද්‍රකය එක් කළ නොහැක. ඔබේ මුද්‍රකයේ වින්‍යාසය පරීක්‍ෂා කර නැවත උත්සාහ කරන්න.</translation>
 <translation id="2177950615300672361">Incognito ටැබය: <ph name="TAB_NAME" /></translation>
@@ -989,7 +992,6 @@
 <translation id="2326931316514688470">නැවත පූරණය කිරීමේ යෙදුම</translation>
 <translation id="2327492829706409234">යෙදුම සක්‍රිය කරන්න</translation>
 <translation id="2329597144923131178">ඔබගේ සියලුම උපාංග මත ඇති පොත් සලකුණු, ඉතිහාසය, මුරපද හා වෙනත් සැකසීම් ලබා ගැනීමට පුරනය වන්න.</translation>
-<translation id="2330607597130465898">ආරක්ෂාව නැත</translation>
 <translation id="2332131598580221120">අලෙවිසැලෙහි බලන්න</translation>
 <translation id="2332192922827071008">මනාප විවෘත කරන්න</translation>
 <translation id="2332742915001411729">පෙරනිමියට යළි සකසන්න</translation>
@@ -1478,6 +1480,7 @@
 <translation id="2948300991547862301"><ph name="PAGE_TITLE" /> වෙත යන්න</translation>
 <translation id="29488703364906173">නූතන වෙබ සඳහා තැනූ, වේගවත්, සරල, සහ ආරක්සිත වෙබ් බ්‍රවුසරය.</translation>
 <translation id="2949289451367477459">ස්ථානය භාවිතා කරන්න. මෙම උපාංගයේ ස්ථානය භාවිත කිරීමට ස්ථාන අවසරය සහිත යෙදුම් සහ සේවාවලට ඉඩ දෙන්න. Google ස්ථාන දත්ත වරින් වර රැස් කිරීම සහ මෙම දත්ත ස්ථාන නිරවද්‍යතාව සහ ස්ථානය පදනම් සේවා වැඩි දියුණු කිරීමට උදවු වීමට නිර්නාමික ආකාරයකින් භාවිතා කිරීම කළ හැකිය. <ph name="BEGIN_LINK1" />තව දැන ගන්න<ph name="END_LINK1" /></translation>
+<translation id="2950666755714083615">මා ලියාපදිංචි කරන්න</translation>
 <translation id="2956070239128776395">කණ්ඩායම තුළ හසු වූ කොටස: <ph name="ERROR_LINE" /></translation>
 <translation id="2957117904572187936">ඔබේ උපාංගය තුළ ගොනු හෝ ෆෝල්ඩර සංස්කරණ කිරීමට කිසිම වෙබ් අඩවියකට අවසර නොදෙන්න</translation>
 <translation id="2958721676848865875">ඇසුරුම් දිගු අනතුරු හැඟවීම</translation>
@@ -1602,6 +1605,7 @@
 <translation id="3139925690611372679">පෙරනිමි කහ නියුරුව</translation>
 <translation id="3141318088920353606">සවන් දෙමින්...</translation>
 <translation id="3141917231319778873">දෙන ලද ඉල්ලීම මෙයට සහාය නොදක්වයි: "<ph name="DEVICE_NAME" />".</translation>
+<translation id="3142562627629111859">නව සමූහය</translation>
 <translation id="3143515551205905069">සමමුහුර්තය අවලංගු කරන්න</translation>
 <translation id="3143754809889689516">ආරම්භයේ සිට ධාවන කරන්න</translation>
 <translation id="3144647712221361880">ලෙස සබැඳිය විවෘත කරන්න</translation>
@@ -1626,6 +1630,7 @@
 <translation id="3159493096109238499">ළා දුඹුරු වැලි</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (දෘඨාංග-පිටුබලය සහිත)</translation>
 <translation id="3161522574479303604">සියලු භාෂා</translation>
+<translation id="3162853326462195145">පාසල් ගිණුම</translation>
 <translation id="3162899666601560689">වෙබ් අඩවි ඔබේ බ්‍රවුස කිරීමේ අත්දැකීම වැඩිදියුණු කිරීමට, උදාහරණයක් වශයෙන්, ඔබව පුරනය කර තබා ගැනීමට හෝ ඔබේ සාප්පු සවාරි කරත්තයේ අයිතම මතක තබා ගැනීමට කුකී භාවිත කළ හැක</translation>
 <translation id="3163201441334626963"><ph name="VENDOR_ID" /> වෙතින් නොදන්නා නිෂ්පාදනය <ph name="PRODUCT_ID" /></translation>
 <translation id="3164329792803560526">මෙම පටිත්ත <ph name="APP_NAME" /> වෙත බෙදා ගැනීම</translation>
@@ -1789,6 +1794,7 @@
 <translation id="3396800784455899911">"පිළිගන්න සහ දිගටම පවත්වාගෙන යන්න" බොත්තම ක්ලික් කිරීමෙන්, ඔබ මෙම සේවාවන් සඳහා ඉහත විස්තර කළ Google ක්‍රියා කරවීම්වලට එකඟ වේ.</translation>
 <translation id="3399432415385675819">දැනුම්දීම් අබල වනු ඇත</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - එකිනෙකට ගොතන ලද</translation>
+<translation id="3402585168444815892">ආදර්ශන ප්‍රකාරයට ලියාපදිංචි කිරීම</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">මෙම අඩවිය සඳහා මුරපද කිසිවක් සුරැකුවේ නැත</translation>
 <translation id="3405664148539009465">ෆොන්ට අභිරුචිකරණය කරන්න</translation>
@@ -1850,6 +1856,7 @@
 <translation id="3468999815377931311">Android දුරකථනය</translation>
 <translation id="3470442499439619530">මෙම පරිශීලක ඉවත් කරන්න</translation>
 <translation id="3471876058939596279">HDMI සහ USB Type-C තොට එක වරම වීඩියෝව සඳහා භාවිත නොකළ හැක. වෙනත් වීඩියෝ තොටක් භාවිත කරන්න.</translation>
+<translation id="3473241910002674503">ටැබ්ලට් ප්‍රකාරය තුළ බොත්තම් මඟින් නිවසට සංචලන වීම, ආපසු යාම, සහ යෙදුම් මාරු කිරීම.</translation>
 <translation id="3473479545200714844">තිර විශාලකය</translation>
 <translation id="3475843873335999118">කනගාටුයි, ඔබේ ඇඟිලි සලකුණ තවම හඳුනා ගෙන නැත. කරුණාකර ඔබගේ මුරපදය ඇතුළු කරන්න.</translation>
 <translation id="3476303763173086583">භාවිත සහ දෝෂ නිර්ණ දත්ත යවන්න. ස්වයංක්‍රියව රෝග විනිශ්චය, උපාංග සහ යෙදුම් භාවිත දත්ත Google වෙත යැවීමෙන් ඔබගේ දරුවාගේ Android අත්දැකීම වැඩි දියුණු කර ගැනීමට උපකාරී වන්න. මෙය ඔබේ දරුවා හඳුනා ගැනීමට භාවිත නොකෙරෙන අතර, පද්ධති සහ යෙදුම් ස්ථායිතාවට සහ අනෙකුත් වැඩිදියුණු කිරීම්වලට උදවු කරයි. සමහර එකතු කළ දත්ත Google යෙදුම්වලට සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ද උදවු කරති. මෙම <ph name="BEGIN_LINK1" />සැකසීම<ph name="END_LINK1" /> හිමිකරු විසින් බලාත්මක කෙරේ. හිමිකරුට Google වෙත ස්වයංක්‍රියව දෝෂ නිර්ණ සහ භාවිත දත්ත යැවීමට තේරිය හැක. ඔබේ දරුවා සඳහා අමතර වෙබ් සහ යෙදුම් ක්‍රියාකාරකම් සැකසීම සක්‍රීය කර තිබේ නම්, මෙම දත්ත ඔවුන්ගේ Google ගිණුමට සුරැකිය හැක. <ph name="BEGIN_LINK2" />තවත් දැන ගන්න<ph name="END_LINK2" /></translation>
@@ -1869,7 +1876,6 @@
 <translation id="3492788708641132712">සමමුහුර්ත කිරීම ක්‍රියා නොකරයි. නැවත පිරීම උත්සාහ කරන්න.</translation>
 <translation id="3493486281776271508">අන්තර්ජාල සබැඳුම අවශ්‍යයි</translation>
 <translation id="3493881266323043047">වලංගුතාවය</translation>
-<translation id="3494155060718700400">අනතුරුදායක වෙබ් අඩවිවලට, බාගැනීම්වලට, සහ දිගුවලට එරෙහිව ඔබව ආරක්ෂා නොකරයි (නිර්දේශිත නැත). Gmail සහ සෙවීම වැනි අනෙකුත් Google සේවා තුළ ලද හැකි විට ඔබට ආරක්‍ෂිත බ්‍රවුස් කිරීමේ ආරක්ෂාව ලබා ගත හැක.</translation>
 <translation id="3494769164076977169">පළමු බාගැනීමට පසුව අඩවියක් විසින් තවත් ගොනු බාගනී නම් විමසන්න (නිර්දේශිතයි)</translation>
 <translation id="3495660573538963482">Google සහායක සැකසීම්</translation>
 <translation id="3496213124478423963">කුඩා කරන්න</translation>
@@ -2276,6 +2282,7 @@
 <translation id="3971764089670057203">මෙම ආරක්‍ෂක යතුරේ ඇඟිලි සලකුණු</translation>
 <translation id="3973660817924297510">මුරපද පරීක්‍ෂා කෙරේ (<ph name="TOTAL_PASSWORDS" /> න් <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ක්‍ෂේත්‍රය සඳහා සේවාදායකය සම්බන්ධ කිරීම අසාර්ථක විය</translation>
+<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="3976108569178263973">ලද හැකි මුද්‍රක නැත.</translation>
 <translation id="397703832102027365">අවසන්කරමින්...</translation>
 <translation id="3977886311744775419">ස්වයංක්‍රීය යාවත්කාලීන මෙම ජාල වර්ගයේ බාගන්නා නැති නමුත්, ඔබට යාවත්කාලීන සඳහා හස්තීයව පරීක්‍ෂා කළ හැක.</translation>
@@ -2339,6 +2346,7 @@
 <translation id="4068506536726151626">මෙම පිටුවෙහි ඔබගේ පිහිටීම හඹා යන පහත අඩවි වෙතින් වන කුකි අඩංගු විය හැක:</translation>
 <translation id="4068776064906523561">සුරැකි ඇඟිලි සලකුණු</translation>
 <translation id="407173827865827707">ක්ලික් මත</translation>
+<translation id="4073520450811433493">සැකසීම් සමමුහූර්තය</translation>
 <translation id="4074900173531346617">අත්සන්කරු සහතිකය ඊමේල් කරන්න</translation>
 <translation id="407520071244661467">පරිමාණය</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> විකාශය කිරීමට නොහැකිය.</translation>
@@ -2575,6 +2583,7 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">සැකසීම් ප්‍රතිසාධනය කරන්න</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ඔබේ පරිපාලකට ඔබ ඔබේ මුරපදය වෙනස් කිරීමට අවශ්‍යයි.</translation>
+<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පැය 24-කට පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="4429030830601238961">මෙම දත්ත ඔබේ ආයතනයේ ආරක්‍ෂක ප්‍රතිපත්ති උල්ලංඝන කරන අතර, මෙය ඇලවිය නොහැක.</translation>
 <translation id="4430019312045809116">ශබ්ද තීව්‍රතාවය</translation>
 <translation id="4430369329743628066">පිටුසන එක් කරන ලදී</translation>
@@ -2587,6 +2596,7 @@
 <translation id="4441124369922430666">ඔබට පරිගණකය ආරම්භ වන විට ස්වයංක්‍රීයව මෙම යෙදුම ආරම්භ කිරීමට අවශ්‍යද?</translation>
 <translation id="4441147046941420429">ඉදිරියට යාමට, ඔබේ උපාංගයෙන් ඔබේ ආරක්‍ෂක යතුර ඉවත් කරන්න, පසුව යළි ඇතුළත් කර එය ස්පර්ශ කරන්න</translation>
 <translation id="444134486829715816">පුළුල් කරන්න...</translation>
+<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබ ඔබේ Google ගිණුම මඟින් පුරන විට ඔබේ මුරපද පරීක්‍ෂා කළ හැක</translation>
 <translation id="4442424173763614572">DNS සෙවුම අසාර්ථකයි</translation>
 <translation id="4443536555189480885">&amp;උපකාර</translation>
 <translation id="4444304522807523469">ඔස්සේ සම්බන්ධ කර ඇති හෝ USB පෙදෙසි ජාලයේ ඇති ලේඛන පරිලෝකන යන්ත්‍ර ප්‍රවේශ කරන්න</translation>
@@ -2613,11 +2623,13 @@
 <translation id="4476659815936224889">මෙම කේතය ස්කෑන් කිරීමට, ඔබට ඔබේ දුරකථනය මත QR ස්කෑනර් යෙදුමක්, හෝ යම් කැමරා යෙදුම් භාවිත කළ හැක.</translation>
 <translation id="4477015793815781985">Ctrl, Alt, හෝ ⌘ ඇතුළත් කරන්න</translation>
 <translation id="4478664379124702289">ලින්ක් ලෙස සුරකින්න... (&amp;k)</translation>
+<translation id="4478777936860197922">සුරැකි මුරපද නැත. <ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබ ඔබේ මුරපද පරීක්‍ෂා කරන විට ඒවා පරීක්‍ෂා කළ හැක.</translation>
 <translation id="4479424953165245642">kiosk යෙදුම් කළමනාකරණය</translation>
 <translation id="4479639480957787382">ඊදර්නෙට්</translation>
 <translation id="4479877282574735775">අතථ්‍ය යන්ත්‍රය වින්‍යාස කිරීම. මෙයට විනාඩි කිහිපයක් ගත විය හැක.</translation>
 <translation id="4480590691557335796">ඔබේ පරිගණකයේ හානිකර මෘදුකාංග සොයා ගැනීමට සහ එය ඉවත් කිරීමට Chrome හට හැකිය</translation>
 <translation id="4481530544597605423">යුගලනය නොවූ උපාංග</translation>
+<translation id="4488107067273194838">සැකසීමෙන් අනතුරුව බ්‍රවුසර සමමුහූර්ත කිරීමේ විකල්ප සමාලෝචන කරන්න</translation>
 <translation id="4488502501195719518">සියලු දත්ත හිස් කරන්නද?</translation>
 <translation id="4495419450179050807">මෙම පිටුව මත පෙන්වන්න එපා</translation>
 <translation id="4496054781541092778"><ph name="PERMISSION" /> ස්වයංක්‍රියව අවහිර කර ඇත</translation>
@@ -2859,6 +2871,7 @@
 <translation id="4849517651082200438">ස්ථාපනය නොකරන්න</translation>
 <translation id="4850669014075537160">අනුචලනය</translation>
 <translation id="4850886885716139402">දසුන</translation>
+<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ඔබ සමථයට පත් වූ මුරපදයක් සමඟ පුරන විට ඔබට දැනුම් දෙයි</translation>
 <translation id="4853020600495124913">&amp;නව කවුළුවක විවෘත කරන්න</translation>
 <translation id="4854317507773910281">අනුමැතිය සඳහා මාපිය ගිණුම තෝරන්න</translation>
 <translation id="485480310608090163">තවත් සැකසීම් සහ අවසර</translation>
@@ -2877,6 +2890,7 @@
 <translation id="4871322859485617074">රහස් අංකයේ අවලංගු අනුලකුණු අඩංගු ය</translation>
 <translation id="4871370605780490696">පිටු සලකුණ එක් කරන්න</translation>
 <translation id="4871719318659334896">කණ්ඩායම වසන්න</translation>
+<translation id="4871852311166078968">සමූහයට එක් කරන්න</translation>
 <translation id="4873312501243535625">මාධ්‍ය ගොනු පරීක්ෂක</translation>
 <translation id="4876273079589074638">අපේ ඉංජිනේරුවන්ට මෙම බිඳ වැටීම විමර්ශනය කර හදන්න උදවු කරන්න. ඔබට හැකි නම් හරියටම පියවර ලැයිස්තුගත කරන්න. කිසිදු විස්තරයක් කුඩා නොවේ!</translation>
 <translation id="4876895919560854374">තිරය අගුළු දමන්න අගුළු හරින්න</translation>
@@ -2921,7 +2935,6 @@
 <translation id="4920887663447894854">පහත අඩවි මෙම පිටුවෙහි ඔබගේ පිහිටීම හඹා යාමෙන් අවහිර කර ඇත.</translation>
 <translation id="49226369361073053">{0,plural, =0{උපාංගය දැන් යාවත්කාලීන කරන්න}=1{උපාංගය 1 තත්පරයක් තුළ යාවත්කාලීන කරන්න}one{උපාංගය තත්පර # ක් තුළ යාවත්කාලීන කරන්න}other{උපාංගය තත්පර # ක් තුළ යාවත්කාලීන කරන්න}}</translation>
 <translation id="492299503953721473">Android යෙදුම් ඉවත් කරන්න</translation>
-<translation id="4923279099980110923">ඔව්, මට උපකාර කිරීමට අවශ්‍යයි</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">ඔබේ තොටවල් මෙහි දිස් වේ</translation>
 <translation id="4925542575807923399">මෙම ගිණුම සඳහා පරිපාලකට මෙම ගිණුම බහුවිධ පිරීමේ සැසියක් තුළ පළමු පිරූ ගිණුම වීමට අවශ්‍යයි.</translation>
@@ -3235,7 +3248,6 @@
 <translation id="5362741141255528695">පුද්ගලික යතුරු ගොනුව තෝරන්න.</translation>
 <translation id="5363109466694494651">Powerwash හා Revert</translation>
 <translation id="5365881113273618889">ඔබ තේරූ ෆෝල්ඩරයේ සංවේදී ගොනු අඩංගුයි. ඔබ මෙම ෆෝල්ඩරයට "<ph name="APP_NAME" />" ස්ථීර ලිවීමේ ප්‍රවේශය දීමට කැමතිද?</translation>
-<translation id="5367091008316207019">ගොනුව කියවමින්..</translation>
 <translation id="5368720394188453070">ඔබේ දුරකථනය අගුළුලා ඇත. ඇතුළත් වීමට අගුළු හරින්න.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> වෙත පුරන්න</translation>
 <translation id="5369491905435686894">මූසික ත්වරණය සබල කරන්න</translation>
@@ -3523,6 +3535,7 @@
 <translation id="5739235828260127894">සත්‍යාපනය බලාපොරොත්තුවෙන් <ph name="LINK_BEGIN" />තවත් දැන ගන්න.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ඉතා විශාල</translation>
 <translation id="574209121243317957">තාරතාව</translation>
+<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ඉඟි, දීමනා සහ යාවත්කාලීන ලබා ගන්න, සහ ප්‍රතිපෝෂණ බෙදා ගන්න</translation>
 <translation id="5746169159649715125">PDF ලෙස සුරකින්න</translation>
 <translation id="5747552184818312860">කල් ඉකුත් වේ</translation>
 <translation id="5747785204778348146">සංවර්ධක - අස්ථිර</translation>
@@ -4432,6 +4445,7 @@
 <translation id="6997642619627518301"><ph name="NAME_PH" /> - ක්‍රියාකාරකම් ලොගය</translation>
 <translation id="6997707937646349884">ඔබේ උපාංගවල:</translation>
 <translation id="6998793565256476099">වීඩියෝ සම්මන්ත්‍රණ සඳහා උපාංගය බඳවා ගන්න</translation>
+<translation id="6999956497249459195">නව සමූහය</translation>
 <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> සම්බන්ධ වී තිබෙන නමුත් වින්‍යාසය අවශ්‍යයි</translation>
 <translation id="7000347579424117903">Ctrl, Alt, හෝ සෙවීම ඇතුළත් කරන්න</translation>
 <translation id="7001036685275644873">ලිනක්ස් යෙදුම් සහ ගොනු උපස්ථ කිරීම</translation>
@@ -4730,6 +4744,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">ඔබේ <ph name="PHONE_NAME" /> මත සම්බන්ධතාව පිහිටුවන්න</translation>
 <translation id="7401778920660465883">මෙම පණිවුඩය ඉවත ලන්න</translation>
+<translation id="7403642243184989645">සම්පත් බාගැනීම</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{ආරක්‍ෂක පරීක්‍ෂාව 1 පැයකට පෙර ධාවන විය}one{ආරක්‍ෂක පරීක්‍ෂාව පැය {NUM_HOURS} කට පෙර ධාවන විය}other{ආරක්‍ෂක පරීක්‍ෂාව පැය {NUM_HOURS} කට පෙර ධාවන විය}}</translation>
 <translation id="740624631517654988">පොප් අප් බාධා කරන ලදි</translation>
 <translation id="7407430846095439694">ආයාත කිරීම සහ බැදීම</translation>
@@ -4966,6 +4981,7 @@
 <translation id="7716781361494605745">Netscape සහතික බලධාරී ප්‍රතිපත්ති ලිපිනය</translation>
 <translation id="7717014941119698257">බාගනිමින්: <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">යාවත්කාලීන සඳහා පරීක්ෂා කරන්න</translation>
+<translation id="7719070594859855691">කැමරාවට ප්‍රවේශය දෙන්න</translation>
 <translation id="7719367874908701697">පිටු විශාලනය:</translation>
 <translation id="7721179060400456005">කවුළුවලට සංදර්ශක විහිදවීමට ඉඩ දෙන්න</translation>
 <translation id="7722040605881499779">යාවත්කාලීන කිරීමට අවශ්‍යයි: <ph name="NECESSARY_SPACE" /></translation>
@@ -5067,6 +5083,7 @@
     <ph name="BEGIN_BOLD" />සටහන:<ph name="END_BOLD" />  ක්‍රියාවලිය අතරතුරේදී පද්ධතිය නැවත ආරම්භ වනු ඇත.</translation>
 <translation id="7828731929332799387">මෙය තෙවන පාර්ශ්ව සන්දර්භ තුළ තිබෙන සියලුම කුකී සහ වෙබ් අඩවි දත්ත මකා දමයි. ඔබට ඉදිරියට යාමට අවශ්‍යද?</translation>
 <translation id="7829298379596169484">ශ්‍රව්‍ය ආදානයට ප්‍රවේශ වෙමින්</translation>
+<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="7829877209233347340">පාසල් ගිණුමක් එක් කිරීමට අවසර දීමට මාපියෙකුට පුරන්නට කියන්න</translation>
 <translation id="7830594666202422257">ලිනක්ස් වෙත සම්බන්ධ කරන්න</translation>
 <translation id="7831491651892296503">ජාලය වින්‍යාස කිරීමේ දෝෂයකි</translation>
@@ -5288,6 +5305,7 @@
 <translation id="8107015733319732394">ඔබේ <ph name="DEVICE_TYPE" /> මත Google Play Store ස්ථාපනය කරමින්. මේ සඳහා විනාඩි කිහිපයක් ගත විය හැකිය.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{තෙවන පාර්ශ්ව කුකී නැත}=1{1 තෙවන පාර්ශ්ව කුකීයක් අවහිර කළා}one{තෙවන පාර්ශ්ව කුකී # ක් අවහිර කළා}other{තෙවන පාර්ශ්ව කුකී # ක් අවහිර කළා}}</translation>
 <translation id="810875025413331850">කිසිඳු උපාංගයක් අවටින් හමු නොවිය.</translation>
+<translation id="8114199541033039755">ටැබ්ලට් ප්‍රකාරය තුළ බොත්තම් මඟින් නිවසට සංචලන වීම, ආපසු යාම, සහ යෙදුම් මාරු කිරීම. ChromeVox හෝ ස්වයංක්‍රීය ක්ලික් සබල කළ විට සක්‍රීය කළා.</translation>
 <translation id="8114875720387900039">තිරස්ව වෙන් කරන්න</translation>
 <translation id="8116972784401310538">&amp;පිටු සලකුණු කලමනාකරු</translation>
 <translation id="8117620576188476503">තත්ත්ව තැටිය සමඟ සබැඳුම්, යාවත්කාලීන සහ සැකසීම් කළමනාකරණය කරන්න. යතුරු පුවරුව මඟින් මෙහි ලබා ගැනීමට, Alt + Shift + S ඔබන්න.</translation>
@@ -5407,6 +5425,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ඔබේ මූසික කර්සරය අබල කර ඇත.</translation>
 <translation id="8264024885325823677">මෙම සැකසුම ඔබේ පරිපාලකයා විසින් කළමනා කෙරේ.</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" පූර්ණ තිරය විමෝචනය කළේය.</translation>
+<translation id="826511437356419340">ඇතුළත් කළ කවුළු දළ විශ්ලේෂණ ප්‍රකාරය. සංචලන කිරීමට ස්වයිප් කරන්න, හෝ යතුරු පුවරුවක් භාවිත කරන්නේ නම් tab ඔබන්න.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />මෙය මෙම උපාංගය සහ එය භාවිත කරන ආකාරය පිළිබඳ සාමාන්‍ය තොරතුරුය (බැටරි මට්ටම, පද්ධති සහ යෙදුම් ක්‍රියාකාරකම සහ දෝෂ යනාදී). දත්ත Android වැඩි දියුණු කිරීමට භාවිත කරනු ඇති අතර, සමහර රැස් කළ තොරතුරු Google යෙදුම් සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ඔවුන්ගේ යෙදුම් සහ නිෂ්පාදන වඩා හොඳින් සෑදීමටත් උදවු කරනු ඇත.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />මෙම විශේෂාංගය ක්‍රියාවිරහිත කිරීමෙන් පද්ධති යාවත්කාලීන සහ ආරක්ෂාව වැනි අත්‍යවශ්‍ය සේවා සඳහා අවශ්‍ය තොරතුරු යැවීම සඳහා මෙම උපාංගයට ඇති හැකියාවට බලනොපායි.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />හිමිකරුට මෙම විශේෂාංගය සැකසීම් &gt; උසස් &gt; Google වෙත දෝෂහරණ සහ භාවිතයේ දත්ත ස්වයංක්‍රීයව යවන්න වෙතින් පාලනය කළ හැකිය.<ph name="END_PARAGRAPH3" />
@@ -5515,6 +5534,7 @@
 <translation id="8426713856918551002">සබල කරමින්</translation>
 <translation id="8427292751741042100">ඕනෑම සංග්‍රහාකයක් මත කාවද්දන ලද</translation>
 <translation id="8428213095426709021">සැකසුම්</translation>
+<translation id="8428271547607112339">පාසල් ගිණුම එක් කරන්න</translation>
 <translation id="8428628598981198790">ඔබේ ආරක්‍ෂක යතුර මෙම වෙබ් අඩවිය සමඟ භාවිත කළ නොහැක</translation>
 <translation id="84297032718407999">ඔබ <ph name="LOGOUT_TIME_LEFT" />කින් වරනු ඇත</translation>
 <translation id="8431190899827883166">තට්ටු කිරීම් පෙන්වන්න</translation>
@@ -5578,6 +5598,7 @@
 <translation id="851263357009351303">සැමවිට <ph name="HOST" /> ට රූප පෙන්වීමට ඉඩ දෙන්න</translation>
 <translation id="8513108775083588393">ස්වයංක්‍රීය කරකැවීම</translation>
 <translation id="8514746246728959655">වෙනත් ආරක්‍ෂක යතුරක් උත්සාහ කරන්න</translation>
+<translation id="851960115758509829">ඔබේ යෙදුම්, සැකසීම්, සහ අනෙකුත් අභිරුචි කිරීම් සියල්ල ඔබේ Google ගිණුම මඟින් පුරනය වී ඇති සියලුම Chrome OS උපාංග අතරින් සමමුහූර්ත වෙයි.</translation>
 <translation id="8521475323816527629">ඔබේ යෙදුම් වේගයෙන් ලබා ගන්න</translation>
 <translation id="8523493869875972733">වෙනස්කම් තබා ගන්න</translation>
 <translation id="8523849605371521713">ප්‍රතිපත්තිය විසින් එක් කර ඇත</translation>
@@ -5859,11 +5880,13 @@
 <translation id="885701979325669005">ගබඩාව</translation>
 <translation id="8859057652521303089">ඔබේ භාෂාව තෝරන්න:</translation>
 <translation id="8859174528519900719">උපරාමුව: <ph name="SUBFRAME_SITE" /></translation>
+<translation id="8859662783913000679">මාපිය ගිණුම</translation>
 <translation id="8862003515646449717">වේගවත් බ්‍රව්සරයකට මාරු වන්න</translation>
 <translation id="8863753581171631212">සබැඳිය නව <ph name="APP" /> තුළ විවෘත කරන්න</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> වෙත <ph name="TAB_NAME" /> බෙදා ගැනේ</translation>
 <translation id="8864458770072227512">මෙම උපාංගයෙන් <ph name="EMAIL" /> ඉවත් කරන ලදි</translation>
 <translation id="8867228703146808825">නිමැවුම් විස්තර පසුරු පුවරුවට පිටපත් කරන්න</translation>
+<translation id="8868333925931032127">ආදර්ශන ප්‍රකාරය ඇරඹීම</translation>
 <translation id="8868626022555786497">භාවිතයේ ඇත</translation>
 <translation id="8870413625673593573">මෑතකදී වසන ලද</translation>
 <translation id="8871551568777368300">පරිපාලක විසින් පින් කරන ලදී</translation>
@@ -5942,6 +5965,7 @@
 <translation id="8966870118594285808">ඔබ එය අහම්බෙන් වසා දැමුවේ නම්, පටිත්ත නැවත විවෘත කරන්න</translation>
 <translation id="8967866634928501045">පෙන්වීමට Alt Shift A ඔබන්න</translation>
 <translation id="8968766641738584599">කාඩ්පත සුරකින්න</translation>
+<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පැය 24-කට පසු නැවත උත්සාහ කරන්න, නැති නම් <ph name="BEGIN_LINK" />ඔබේ Google ගිණුම තුළ මුරපද පරීක්‍ෂා කරන්න<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">ඔබේ ගිණිපවුර විසින් Google සේවාදායක වෙතින් බාගැනීම බාධා කර නොමැතිදැයි ජාල පරිපාලකගෙන් විමසන්න.</translation>
 <translation id="8973557916016709913">විශාලන මට්ටම ඉවත් කරන්න</translation>
@@ -5958,7 +5982,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> දිනකට පෙර ක්‍රියාත්මකයි</translation>
 <translation id="8986362086234534611">අමතක</translation>
 <translation id="8986494364107987395">ස්වයංක්‍රීයව භාවිත සංඛ්‍යා ලේඛන සහ කඩිනම් වාර්තා Google වෙත යවන්න</translation>
-<translation id="8986651757229422279">මෙය <ph name="ORIGIN_NAME" /> සහ එහි ස්ථාපිත යෙදුම විසින් ගබඩා කරනු ලැබූ සියලුම දත්ත සහ කුකී ඉවත් කරයි.</translation>
 <translation id="8987927404178983737">මාසය</translation>
 <translation id="8991520179165052608">අඩවියට ඔබේ මයික්‍රෆෝනය භාවිත කළ හැකිය</translation>
 <translation id="899403249577094719">Netscape සහතික මත පදනම් වූ URL</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index a4a358b8..6ac0b7a 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Otvoriť v aplikácii <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktivity a interakcie</translation>
 <translation id="2120639962942052471">Blokujete <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Súbory cookie sú blokované}=1{Súbory cookie sú blokované, 1 výnimka}few{Súbory cookie sú blokované, {COUNT} výnimky}many{Cookies are blocked, {COUNT} exceptions}other{Súbory cookie sú blokované, {COUNT} výnimiek}}</translation>
 <translation id="2121825465123208577">Zmeniť veľkosť</translation>
 <translation id="2122305276694332719">Automatické pripájanie k skrytej sieti umožňuje ostatným zobraziť si vaše zariadenie a niektoré nastavenia sietí, a preto sa neodporúča.</translation>
 <translation id="2123766928840368256">Vybrať iný súbor</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Úprava karty</translation>
 <translation id="2154710561487035718">Kopírovať webovú adresu</translation>
 <translation id="2155772377859296191">Vyzerá ako <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Bezpečné prehliadanie môžete pomôcť zlepšovať tak, že budete Googlu odosielať niektoré informácie o systéme a obsah stránok.</translation>
 <translation id="2156294658807918600">Obsluha: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Ak chcete získať ďalšie funkcie, použite dokovaciu stanicu od spoločnosti Dell, ktorá je navrhnutá pre tento Chromebook.</translation>
 <translation id="215753907730220065">Ukončiť zobrazenie na celú obrazovku</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Znova načítať aplikáciu</translation>
 <translation id="2327492829706409234">Povoliť aplikáciu</translation>
 <translation id="2329597144923131178">Prihláste sa a používajte svoje záložky, históriu, heslá a ďalšie nastavenia vo všetkých svojich zariadeniach.</translation>
-<translation id="2330607597130465898">Žiadna ochrana</translation>
 <translation id="2332131598580221120">Zobraziť v obchode</translation>
 <translation id="2332192922827071008">Otvoriť predvoľby</translation>
 <translation id="2332742915001411729">Obnoviť na predvolené hodnoty</translation>
@@ -1870,7 +1869,6 @@
 <translation id="3492788708641132712">Synchronizácia nefunguje. Skúste sa znova prihlásiť</translation>
 <translation id="3493486281776271508">Vyžaduje sa internetové pripojenie</translation>
 <translation id="3493881266323043047">Platnosť</translation>
-<translation id="3494155060718700400">Nechráni vás pred nebezpečnými webmi, stiahnutým súbormi ani rozšíreniami (neodporúčané). Ochrana Bezpečného prehliadania vám bude poskytovaná v náležitých prípadoch v ďalších službách Googlu, ako sú napríklad Gmail alebo Vyhľadávanie.</translation>
 <translation id="3494769164076977169">Opýtať sa, keď sa stránky pokúsia sťahovať súbory automaticky po stiahnutí prvého súboru (odporúčané)</translation>
 <translation id="3495660573538963482">Nastavenia Asistenta Google</translation>
 <translation id="3496213124478423963">Oddialiť</translation>
@@ -2921,7 +2919,6 @@
 <translation id="4920887663447894854">Tieto webové stránky majú zablokované sledovanie vašej polohy na tejto stránke:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ihneď aktualizujte zariadenie}=1{Update device within 1 second}few{Aktualizujte zariadenie do # sekúnd}many{Aktualizujte zariadenie do # sekundy}other{Aktualizujte zariadenie do # sekúnd}}</translation>
 <translation id="492299503953721473">Odstrániť aplikácie pre Android</translation>
-<translation id="4923279099980110923">Áno, chcem pomôcť</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Tu sa zobrazia vaše porty</translation>
 <translation id="4925542575807923399">Správca tohto účtu vyžaduje, aby sa tento účet v relácii viacnásobného prihlásenia prihlásil ako prvý.</translation>
@@ -3235,7 +3232,6 @@
 <translation id="5362741141255528695">Vybrať súbor súkromného kľúča.</translation>
 <translation id="5363109466694494651">Úplne obnoviť (Powerwash) a vrátiť späť</translation>
 <translation id="5365881113273618889">Vybraný priečinok obsahuje citlivé súbory. Naozaj chcete aplikácii <ph name="APP_NAME" /> povoliť trvalý prístup na zapisovanie pre tento priečinok?</translation>
-<translation id="5367091008316207019">Prebieha čítanie súboru..</translation>
 <translation id="5368720394188453070">Telefón je uzamknutý. Ak chcete pokračovať, odomknite ho.</translation>
 <translation id="5368779022775404937">Prihláste sa do domény <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Povoliť zrýchlenie myši</translation>
@@ -5960,7 +5956,6 @@
 <translation id="8985264973231822211">Aktívne pred <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dňami</translation>
 <translation id="8986362086234534611">Odstrániť</translation>
 <translation id="8986494364107987395">Automaticky odosielať Googlu štatistiky používania a správy o zlyhaní</translation>
-<translation id="8986651757229422279">Týmto vymažete všetky dáta a súbory cookie uložené zdrojom <ph name="ORIGIN_NAME" /> a jeho nainštalovanou aplikáciou.</translation>
 <translation id="8987927404178983737">Mesiac</translation>
 <translation id="8991520179165052608">Web môže používať váš mikrofón</translation>
 <translation id="899403249577094719">Netscape – základná webová adresa certifikátu</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 51fcd33d..a7b8e39 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Urejanje kartice</translation>
 <translation id="2154710561487035718">Kopiraj URL</translation>
 <translation id="2155772377859296191">Videti je <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">S pošiljanjem nekaterih informacij o sistemu in vsebine strani Googlu lahko pomagate izboljšati Varno brskanje.</translation>
 <translation id="2156294658807918600">Proces storitve: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Če želite dodatne funkcije, uporabite priklopno postajo Dell, zasnovano za uporabo s tem Chromebookom.</translation>
 <translation id="215753907730220065">Izhod iz celozaslonskega načina</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Znova naloži aplikacijo</translation>
 <translation id="2327492829706409234">Omogoči aplikacijo</translation>
 <translation id="2329597144923131178">Prijavite se, da boste lahko dostopali do zaznamkov, zgodovine, gesel in drugih nastavitev v vseh napravah.</translation>
-<translation id="2330607597130465898">Brez zaščite</translation>
 <translation id="2332131598580221120">Ogled v trgovini</translation>
 <translation id="2332192922827071008">Odpri nastavitve</translation>
 <translation id="2332742915001411729">Ponastavi na privzeto</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Sinhronizacija ne deluje. Poskusite se znova prijaviti.</translation>
 <translation id="3493486281776271508">Potrebujete povezavo z internetom</translation>
 <translation id="3493881266323043047">Veljavnost</translation>
-<translation id="3494155060718700400">Ne ščiti pred nevarnimi spletnimi mesti, prenosi in razširitvami (ni priporočljivo). Še vedno boste deležni zaščite Varnega brskanja, kjer je na voljo, v drugih Googlovih storitvah, kot sta Gmail in Iskanje Google.</translation>
 <translation id="3494769164076977169">Vprašaj, če poskuša spletno mesto po prvi datoteki samodejno prenesti še druge (priporočeno)</translation>
 <translation id="3495660573538963482">Nastavitve Pomočnika Google</translation>
 <translation id="3496213124478423963">Pomanjšaj</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">Zaradi blokade ta spletna mesta ne morejo slediti vaši lokaciji na tej strani:</translation>
 <translation id="49226369361073053">{0,plural, =0{Takoj posodobite napravo}=1{Napravo posodobite v 1 sekundi}one{Napravo posodobite v # sekundi}two{Napravo posodobite v # sekundah}few{Napravo posodobite v # sekundah}other{Napravo posodobite v # sekundah}}</translation>
 <translation id="492299503953721473">Odstrani aplikacije za Android</translation>
-<translation id="4923279099980110923">Da, želim pomagati</translation>
 <translation id="4924352752174756392">12 x</translation>
 <translation id="4925320384394644410">Vrata bodo prikazana tukaj</translation>
 <translation id="4925542575807923399">Skrbnik tega računa zahteva, da je ta račun v seji prijave z več računi prvi prijavljeni račun.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Izberite datoteko z zasebnim ključem.</translation>
 <translation id="5363109466694494651">Izvedi Powerwash in povrni</translation>
 <translation id="5365881113273618889">Izbrana mapa vsebuje občutljive datoteke. Ali ste prepričani, da želite aplikaciji »<ph name="APP_NAME" />« odobriti trajni dostop za pisanje v tej mapi?</translation>
-<translation id="5367091008316207019">Branje datoteke ...</translation>
 <translation id="5368720394188453070">Telefon je zaklenjen. Za dostop ga odklenite.</translation>
 <translation id="5368779022775404937">Prijavite se v domeno <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogočanje pospeševanja miške</translation>
@@ -5965,7 +5960,6 @@
 <translation id="8985264973231822211">Aktivno pred toliko dnevi: <ph name="DEVICE_LAST_ACTIVATED_TIME" /></translation>
 <translation id="8986362086234534611">Pozabi</translation>
 <translation id="8986494364107987395">Samodejno pošlji statistične podatke o uporabi in poročila o zrušitvah Googlu</translation>
-<translation id="8986651757229422279">S tem boste izbrisali vse podatke in piškotke, ki jih je shranilo spletno mesto <ph name="ORIGIN_NAME" />, ter nameščeno aplikacijo.</translation>
 <translation id="8987927404178983737">Mesec</translation>
 <translation id="8991520179165052608">Spletno mesto lahko uporablja vaš mikrofon</translation>
 <translation id="899403249577094719">Osnovni spletni naslov Netscapeovega potrdila</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 8fe23c6..8b58b3d 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">Hape në <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktiviteti dhe bashkëveprimet</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> është bllokuar</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Kukit janë bllokuar}=1{Kukit janë bllokuar, 1 përjashtim}other{Kukit janë bllokuar, {COUNT} përjashtime}}</translation>
 <translation id="2121825465123208577">Ndrysho madhësinë</translation>
 <translation id="2122305276694332719">Lidhja automatike me një rrjet të fshehtë u lejon të tjerëve të të shohin pajisjen dhe disa prej cilësimeve të rrjetit, dhe nuk rekomandohet.</translation>
 <translation id="2123766928840368256">Zgjidh një skedar tjetër</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">Redakto kartën</translation>
 <translation id="2154710561487035718">Kopjo URL-në</translation>
 <translation id="2155772377859296191">Duket si <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Mund të ndihmosh në përmirësimin e "Shfletimit të sigurt" duke dërguar te Google disa informacione të sistemit dhe përmbajtje të faqes.</translation>
 <translation id="2156294658807918600">Punonjësi i shërbimit: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Për të marrë veçori shtesë, përdor një stacion lidhjeje Dell të projektuar për të funksionuar me këtë Chromebook.</translation>
 <translation id="215753907730220065">Dil nga ekrani i plotë</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Ringarko aplikacionin</translation>
 <translation id="2327492829706409234">Aktivizo aplikacionin</translation>
 <translation id="2329597144923131178">Identifikohu për të marrë faqeshënuesit, historikun, fjalëkalimet dhe cilësime të tjera në të gjitha pajisjet e tua.</translation>
-<translation id="2330607597130465898">Nuk ka mbrojtje</translation>
 <translation id="2332131598580221120">Shiko në dyqan</translation>
 <translation id="2332192922827071008">Hap "Preferencat"</translation>
 <translation id="2332742915001411729">Rivendos me parazgjedhje</translation>
@@ -1868,7 +1867,6 @@
 <translation id="3492788708641132712">Sinkronizimi nuk po funksionon. Provo të identifikohesh sërish.</translation>
 <translation id="3493486281776271508">Kërkohet lidhja e internetit</translation>
 <translation id="3493881266323043047">Vlefshmëria</translation>
-<translation id="3494155060718700400">Nuk të mbron kundër faqeve të internetit, shkarkimeve dhe shtesave të rrezikshme (nuk rekomandohet). Do të vazhdosh të marrësh mbrojtje për "Shfletimin e sigurt", aty ku ofrohet, në shërbimet e tjera të Google, si Gmail dhe "Kërko".</translation>
 <translation id="3494769164076977169">Pyet kur një faqe tenton të shkarkojë skedarët automatikisht pas skedarit të parë (rekomandohet)</translation>
 <translation id="3495660573538963482">Cilësimet e "Asistentit të Google"</translation>
 <translation id="3496213124478423963">Zvogëlo</translation>
@@ -2919,7 +2917,6 @@
 <translation id="4920887663447894854">Sajtet e mëposhtme janë bllokuar që të mos gjurmojnë vendndodhjen tënde në këtë faqe:</translation>
 <translation id="49226369361073053">{0,plural, =0{Përditëso pajisjen tani}=1{Përditëso pajisjen brenda 1 sekonde}other{Përditëso pajisjen brenda # sekondash}}</translation>
 <translation id="492299503953721473">Hiq aplikacionet Android</translation>
-<translation id="4923279099980110923">Po, dua ndihmë</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portat e tua do të shfaqen këtu</translation>
 <translation id="4925542575807923399">Administratori për këtë llogari kërkon që ajo të jetë llogaria e parë e identifikimit në një sesion me identifikime të shumëfishta.</translation>
@@ -3233,7 +3230,6 @@
 <translation id="5362741141255528695">Përzgjidh skedarin e çelësit privat.</translation>
 <translation id="5363109466694494651">Powerwash dhe Rikthimi</translation>
 <translation id="5365881113273618889">Dosja që zgjodhe përmban skedarë delikatë. Je i sigurt që dëshiron t'i japësh "<ph name="APP_NAME" />" qasje të përhershme shkrimi në këtë dosje?</translation>
-<translation id="5367091008316207019">Po lexon skedarin...</translation>
 <translation id="5368720394188453070">Telefoni yt është i kyçur. Shkyçe për t'u futur.</translation>
 <translation id="5368779022775404937">Identifikohu në <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktivizo përshpejtimin e miut</translation>
@@ -5957,7 +5953,6 @@
 <translation id="8985264973231822211">Aktiv <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ditë më parë</translation>
 <translation id="8986362086234534611">Harro</translation>
 <translation id="8986494364107987395">Dërgo automatikisht te Google statistikat e përdorimit dhe raportet e ndërprerjeve aksidentale</translation>
-<translation id="8986651757229422279">Kjo do të pastrojë të gjitha të dhënat dhe kukit e ruajtura nga <ph name="ORIGIN_NAME" /> dhe aplikacioni i tij i instaluar.</translation>
 <translation id="8987927404178983737">Muaji</translation>
 <translation id="8991520179165052608">Sajti mund të përdorë mikrofonin tënd</translation>
 <translation id="899403249577094719">URL-ja e bazës së certifikatës së Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index c72bf2f..9eb3d361 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">Izmenite karticu</translation>
 <translation id="2154710561487035718">Kopiranje URL adrese</translation>
 <translation id="2155772377859296191">Izgleda da je u pitanju <ph name="WIDTH" />×<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Možete da poboljšate Bezbedno pregledanje ako pošaljete neke sistemske informacije i sadržaj stranica Google-u.</translation>
 <translation id="2156294658807918600">Serviser: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Da biste koristili dodatne funkcije, koristite Dell baznu stanicu kompatibilnu sa ovim Chromebook-om.</translation>
 <translation id="215753907730220065">Izađi iz režima celog ekrana</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Ponovo učitaj aplikaciju</translation>
 <translation id="2327492829706409234">Omogući aplikaciju</translation>
 <translation id="2329597144923131178">Prijavite se da bi vam obeleživači, istorija, lozinke i druga podešavanja bili dostupni na svim uređajima.</translation>
-<translation id="2330607597130465898">Bez zaštite</translation>
 <translation id="2332131598580221120">Prikaži u prodavnici</translation>
 <translation id="2332192922827071008">Otvori Podešavanja</translation>
 <translation id="2332742915001411729">Vrati na podrazumevanu vrednost</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">Sinhronizacija ne funkcioniše. Probajte ponovo da se prijavite.</translation>
 <translation id="3493486281776271508">Treba vam internet veza</translation>
 <translation id="3493881266323043047">Validnost</translation>
-<translation id="3494155060718700400">Ne štiti vas od opasnih veb-sajtova, preuzimanja ili dodataka (ne preporučuje se). U drugim Google uslugama, kao što su Gmail i Pretraga, i dalje ćete imati zaštitu pomoću Bezbednog pregledanja kada je dostupna.</translation>
 <translation id="3494769164076977169">Pitaj kada sajt pokuša automatski da preuzima datoteke posle prve datoteke (preporučeno)</translation>
 <translation id="3495660573538963482">Podešavanja Google pomoćnika</translation>
 <translation id="3496213124478423963">Umanji</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">Sledećim sajtovima je onemogućeno praćenje vaše lokacije na ovoj stranici:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ažurirajte uređaj}=1{Ažurirajte uređaj u roku od 1 sekunde}one{Ažurirajte uređaj u roku od # sekunde}few{Ažurirajte uređaj u roku od # sekunde}other{Ažurirajte uređaj u roku od # sekundi}}</translation>
 <translation id="492299503953721473">Ukloni Android aplikacije</translation>
-<translation id="4923279099980110923">Da, želim da pomognem</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portovi će se prikazivati ovde</translation>
 <translation id="4925542575807923399">Administrator za ovaj nalog zahteva da ovaj nalog bude prvi prijavljeni nalog u sesiji sa višestrukim prijavljivanjem.</translation>
@@ -3234,7 +3230,6 @@
 <translation id="5362741141255528695">Izaberite datoteku privatnog ključa.</translation>
 <translation id="5363109466694494651">Obavi Powerwash i vrati</translation>
 <translation id="5365881113273618889">Direktorijum koji ste izabrali sadrži osetljive datoteke. Želite li stvarno da odobrite aplikaciji „<ph name="APP_NAME" />“ stalan pristup za upisivanje za ovaj direktorijum?</translation>
-<translation id="5367091008316207019">Čitanje datoteke..</translation>
 <translation id="5368720394188453070">Telefon je zaključan. Otključajte ga da biste pristupili.</translation>
 <translation id="5368779022775404937">Prijavite se na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzavanje miša</translation>
@@ -5961,7 +5956,6 @@
 <translation id="8985264973231822211">Poslednja aktivnost: pre <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dan/a</translation>
 <translation id="8986362086234534611">Zaboravi</translation>
 <translation id="8986494364107987395">Automatski šalji Google-u statističke podatke o korišćenju i izveštaje o otkazivanju</translation>
-<translation id="8986651757229422279">Ovim brišete sve podatke i kolačiće koje čuvaju sajt <ph name="ORIGIN_NAME" /> i njegova instalirana aplikacija.</translation>
 <translation id="8987927404178983737">Mesec</translation>
 <translation id="8991520179165052608">Sajt može da koristi mikrofon</translation>
 <translation id="899403249577094719">Osnovna URL adresa za Netscape sertifikat</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index cab6203..be97116 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">Измените картицу</translation>
 <translation id="2154710561487035718">Копирање URL адресе</translation>
 <translation id="2155772377859296191">Изгледа да је у питању <ph name="WIDTH" />×<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Можете да побољшате Безбедно прегледање ако пошаљете неке системске информације и садржај страница Google-у.</translation>
 <translation id="2156294658807918600">Сервисер: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Да бисте користили додатне функције, користите Dell базну станицу компатибилну са овим Chromebook-ом.</translation>
 <translation id="215753907730220065">Изађи из режима целог екрана</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">&amp;Поново учитај апликацију</translation>
 <translation id="2327492829706409234">Омогући апликацију</translation>
 <translation id="2329597144923131178">Пријавите се да би вам обележивачи, историја, лозинке и друга подешавања били доступни на свим уређајима.</translation>
-<translation id="2330607597130465898">Без заштите</translation>
 <translation id="2332131598580221120">Прикажи у продавници</translation>
 <translation id="2332192922827071008">Отвори Подешавања</translation>
 <translation id="2332742915001411729">Врати на подразумевану вредност</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">Синхронизација не функционише. Пробајте поново да се пријавите.</translation>
 <translation id="3493486281776271508">Треба вам интернет веза</translation>
 <translation id="3493881266323043047">Валидност</translation>
-<translation id="3494155060718700400">Не штити вас од опасних веб-сајтова, преузимања или додатака (не препоручује се). У другим Google услугама, као што су Gmail и Претрага, и даље ћете имати заштиту помоћу Безбедног прегледања када је доступна.</translation>
 <translation id="3494769164076977169">Питај када сајт покуша аутоматски да преузима датотеке после прве датотеке (препоручено)</translation>
 <translation id="3495660573538963482">Подешавања Google помоћника</translation>
 <translation id="3496213124478423963">Умањи</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">Следећим сајтовима је онемогућено праћење ваше локације на овој страници:</translation>
 <translation id="49226369361073053">{0,plural, =0{Ажурирајте уређај}=1{Ажурирајте уређај у року од 1 секунде}one{Ажурирајте уређај у року од # секунде}few{Ажурирајте уређај у року од # секунде}other{Ажурирајте уређај у року од # секунди}}</translation>
 <translation id="492299503953721473">Уклони Android апликације</translation>
-<translation id="4923279099980110923">Да, желим да помогнем</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Портови ће се приказивати овде</translation>
 <translation id="4925542575807923399">Администратор за овај налог захтева да овај налог буде први пријављени налог у сесији са вишеструким пријављивањем.</translation>
@@ -3234,7 +3230,6 @@
 <translation id="5362741141255528695">Изаберите датотеку приватног кључа.</translation>
 <translation id="5363109466694494651">Обави Powerwash и врати</translation>
 <translation id="5365881113273618889">Директоријум који сте изабрали садржи осетљиве датотеке. Желите ли стварно да одобрите апликацији „<ph name="APP_NAME" />“ сталан приступ за уписивање за овај директоријум?</translation>
-<translation id="5367091008316207019">Читање датотеке..</translation>
 <translation id="5368720394188453070">Телефон је закључан. Откључајте га да бисте приступили.</translation>
 <translation id="5368779022775404937">Пријавите се на <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Омогући убрзавање миша</translation>
@@ -5961,7 +5956,6 @@
 <translation id="8985264973231822211">Последња активност: пре <ph name="DEVICE_LAST_ACTIVATED_TIME" /> дан/а</translation>
 <translation id="8986362086234534611">Заборави</translation>
 <translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation>
-<translation id="8986651757229422279">Овим бришете све податке и колачиће које чувају сајт <ph name="ORIGIN_NAME" /> и његова инсталирана апликација.</translation>
 <translation id="8987927404178983737">Месец</translation>
 <translation id="8991520179165052608">Сајт може да користи микрофон</translation>
 <translation id="899403249577094719">Основна URL адреса за Netscape сертификат</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index e2e04ce6..cd219ac 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Öppna i <ph name="APP" /></translation>
 <translation id="2120297377148151361">Aktivitet och interaktion</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> har blockerats</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Cookies blockeras}=1{Cookies blockeras, 1 undantag}other{Cookies blockeras, {COUNT} undantag}}</translation>
 <translation id="2121825465123208577">Ändra storlek</translation>
 <translation id="2122305276694332719">Med automatisk anslutning till ett dolt nätverk kan andra se enheten och vissa nätverksinställningar. Detta rekommenderas inte.</translation>
 <translation id="2123766928840368256">Välj en annan fil</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Redigera kortet</translation>
 <translation id="2154710561487035718">Kopiera webbadress</translation>
 <translation id="2155772377859296191">Ser ut som <ph name="WIDTH" /> × <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Du kan hjälpa oss att förbättra Säker webbsökning genom att låta viss systeminformation och visst sidinnehåll skickas automatiskt till Google.</translation>
 <translation id="2156294658807918600">Tjänstefunktion: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Använd en dockningsstation som är gjord för att användas med denna Chromebook om du vill ha tillgång till ytterligare funktioner.</translation>
 <translation id="215753907730220065">Avsluta helskärmsläge</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Läs in appen igen</translation>
 <translation id="2327492829706409234">Aktivera app</translation>
 <translation id="2329597144923131178">Logga in så blir bokmärken, historik, lösenord med mera tillgängligt på alla dina enheter.</translation>
-<translation id="2330607597130465898">Inget skydd</translation>
 <translation id="2332131598580221120">Visa i butik</translation>
 <translation id="2332192922827071008">Öppna inställningarna</translation>
 <translation id="2332742915001411729">Återställ standardvärden</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Det går inte att synkronisera. Testa att logga in igen.</translation>
 <translation id="3493486281776271508">Internetanslutning krävs</translation>
 <translation id="3493881266323043047">Giltighet</translation>
-<translation id="3494155060718700400">Skyddar inte mot farliga webbplatser, nedladdningar eller tillägg (rekommenderas inte). Du behåller skydd med Säker webbsökning, där denna funktion är tillgänglig, i andra tjänster från Google, till exempel Gmail och Sök.</translation>
 <translation id="3494769164076977169">Fråga när en webbplats försöker ladda ned filer automatiskt efter den första filen (rekommenderas)</translation>
 <translation id="3495660573538963482">Inställningar för Google Assistent</translation>
 <translation id="3496213124478423963">Zooma ut</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Följande webbplatser har förhindrats att spåra din plats på sidan:</translation>
 <translation id="49226369361073053">{0,plural, =0{Uppdatera enheten nu}=1{Uppdatera enheten inom 1 sekund}other{Uppdatera enheten inom # sekunder}}</translation>
 <translation id="492299503953721473">Ta bort Android-appar</translation>
-<translation id="4923279099980110923">Ja, jag vill hjälpa till</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portarna visas här</translation>
 <translation id="4925542575807923399">Administratören för kontot kräver att kontot är det första i en session med multiinloggning.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Välj privat nyckelfil.</translation>
 <translation id="5363109466694494651">Använd Powerwash och återställ</translation>
 <translation id="5365881113273618889">Mappen som du valde innehåller känsliga filer. Vill du bevilja <ph name="APP_NAME" /> permanent skrivåtkomst till den här mappen?</translation>
-<translation id="5367091008316207019">Läser fil ...</translation>
 <translation id="5368720394188453070">Din mobil är låst. Lås upp den.</translation>
 <translation id="5368779022775404937">Logga in på <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktivera musacceleration</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">Aktiv för <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dag sedan</translation>
 <translation id="8986362086234534611">Glöm</translation>
 <translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation>
-<translation id="8986651757229422279">All data och alla cookies som har sparats av <ph name="ORIGIN_NAME" /> och tillhörande installerade appar rensas.</translation>
 <translation id="8987927404178983737">Månad</translation>
 <translation id="8991520179165052608">Webbplatsen har åtkomst till din mikrofon</translation>
 <translation id="899403249577094719">Basadress för Netscape-certifikat</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 92d9ee5..d5cce9a3 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -857,7 +857,6 @@
 <translation id="2154484045852737596">Badilisha kadi</translation>
 <translation id="2154710561487035718">Nakili UR:</translation>
 <translation id="2155772377859296191">Inaonekana kama <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Unaweza kuboresha huduma ya Kuvinjari Salama kwa kutuma baadhi ya maelezo ya mfumo na maudhui ya ukurasa kwa Google.</translation>
 <translation id="2156294658807918600">Mhudumu: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Ili upate vipengele vya ziada, tumia kituo cha Dell cha kuambatisha kinachoweza kutumiwa na Chromebook hii.</translation>
 <translation id="215753907730220065">Ondoka kwenye Skrini Kamili</translation>
@@ -989,7 +988,6 @@
 <translation id="2326931316514688470">Pakia upya programu</translation>
 <translation id="2327492829706409234">Washa programu</translation>
 <translation id="2329597144923131178">Ingia katika akaunti ili upate alamisho, historia, manenosiri, na mipangilio yako mingine kwenye vifaa vyako vyote.</translation>
-<translation id="2330607597130465898">Hakuna ulinzi</translation>
 <translation id="2332131598580221120">Angalia katika Duka la Wavuti</translation>
 <translation id="2332192922827071008">Fungua Mapendeleo</translation>
 <translation id="2332742915001411729">Rejesha kwenye chaguomsingi</translation>
@@ -1869,7 +1867,6 @@
 <translation id="3492788708641132712">Usawazishaji haufanyi kazi. Jaribu tena kuingia katika akaunti.</translation>
 <translation id="3493486281776271508">Inahitaji muunganisho wa intaneti</translation>
 <translation id="3493881266323043047">Uhalali</translation>
-<translation id="3494155060718700400">Haikulindi dhidi ya tovuti, vipakuliwa na viendelezi hatari (haipendekezwi). Bado utapata ulinzi wa kipengele cha Kuvinjari Salama, kinapopatikana katika huduma nyingi za Google kama vile Gmail na Tafuta na Google.</translation>
 <translation id="3494769164076977169">Uliza wakati tovuti inapojaribu kupakua faili kiotomatiki baada ya faili ya kwanza (inapendekezwa)</translation>
 <translation id="3495660573538963482">Mipangilio ya Mratibu wa Google</translation>
 <translation id="3496213124478423963">Kuza</translation>
@@ -2918,7 +2915,6 @@
 <translation id="4920887663447894854">Tovuti zifuatazo zimezuiwa zisifuatilie mahali ulipo kwenye ukurasa huu:</translation>
 <translation id="49226369361073053">{0,plural, =0{Sasisha kifaa sasa}=1{Sasisha kifaa ndani ya sekunde moja}other{Sasisha kifaa ndani ya sekunde #}}</translation>
 <translation id="492299503953721473">Ondoa programu za Android</translation>
-<translation id="4923279099980110923">Ndiyo, nataka kusaidia</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Milango yako itaonekana hapa</translation>
 <translation id="4925542575807923399">Msimamizi wa akaunti hii anahitaji uingie kwenye akaunti hii kwanza katika kipindi cha kuingia katika akaunti nyingi kwa wakati mmoja.</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5362741141255528695">Chagua faili ya ufunguo binafsi.</translation>
 <translation id="5363109466694494651">Powerwash na Urejeshe nakala ya awali</translation>
 <translation id="5365881113273618889">Folda uliyochagua ina faili nyeti. Je, una uhakika, ungependa kuipa "<ph name="APP_NAME" />" idhini ya kuandika kwenye folda hii?</translation>
-<translation id="5367091008316207019">Inasoma faili..</translation>
 <translation id="5368720394188453070">Simu yako imefungwa. Ifungue ili kuingia.</translation>
 <translation id="5368779022775404937">Ingia katika <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Washa kipengele cha kuongeza kasi ya kipanya</translation>
@@ -5960,7 +5955,6 @@
 <translation id="8985264973231822211">Ilitumika siku <ph name="DEVICE_LAST_ACTIVATED_TIME" /> iliyopita</translation>
 <translation id="8986362086234534611">Sahau</translation>
 <translation id="8986494364107987395">Tumia Google takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi, moja kwa moja</translation>
-<translation id="8986651757229422279">Hatua hii itafuta data na vidakuzi vyote vilivyohifadhiwa na <ph name="ORIGIN_NAME" /> na programu yake iliyosakinishwa.</translation>
 <translation id="8987927404178983737">Mwezi</translation>
 <translation id="8991520179165052608">Tovuti inaweza kutumia maikrofoni yako</translation>
 <translation id="899403249577094719">URL ya Msingi wa Vyeti wa Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index f96dd5a8..3f793be 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -73,6 +73,7 @@
 <translation id="1093457606523402488">தெரியும் நெட்வொர்க்குகள்:</translation>
 <translation id="1094607894174825014">படித்தல் அல்லது எழுதுதல் செயல்பாடு தவறான ஆஃப்செட்டுடன் கோரப்பட்ட சாதனம்: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">உள்நுழைவதற்கு முன், <ph name="NETWORK_ID" /> என்ற நெட்வொர்க்கை இயக்க, கெஸ்டாக நுழைக</translation>
+<translation id="1099962274138857708"><ph name="DEVICE_NAME" /> சாதனத்திலிருந்து நகலெடுக்கப்பட்ட படம்</translation>
 <translation id="1103523840287552314">எப்போதும் இந்த மொழியை மொழிபெயர் <ph name="LANGUAGE" /></translation>
 <translation id="1104038495841596279">உங்கள் SIM கார்டைக் கண்டறிய முடியவில்லை</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
@@ -457,6 +458,7 @@
 <translation id="1616206807336925449">இந்த நீட்டிப்பிற்குச் சிறப்பு அனுமதிகள் தேவையில்லை.</translation>
 <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" நீட்டிப்பு பகிரப்பட்ட மாட்யூலாக இல்லாததால், இறக்க முடியவில்லை</translation>
 <translation id="1618268899808219593">உதவி மையம்</translation>
+<translation id="1620307519959413822">கடவுச்சொல் தவறு. மீண்டும் முயலவும் அல்லது அதை மீட்டமைக்க 'கடவுச்சொல் மறந்துவிட்டது' என்பதைக் கிளிக் செய்யவும் .</translation>
 <translation id="1620510694547887537">கேமரா</translation>
 <translation id="1623132449929929218">படங்கள் தற்போது கிடைக்கவில்லை. வால்பேப்பர் தொகுப்புகளைப் பார்க்க, இணையத்துடன் மீண்டும் இணைக்கவும்.</translation>
 <translation id="1627276047960621195">கோப்பு விளக்கிகள்</translation>
@@ -554,6 +556,7 @@
 <translation id="1744060673522309905">சாதனத்தை டொமைனுடன் இணைக்க முடியவில்லை. நீங்கள் சேர்க்கக்கூடிய சாதனங்களின் அதிகபட்ச எண்ணிக்கையை மீறவில்லை என்பதை உறுதிசெய்யவும்.</translation>
 <translation id="1744108098763830590">பின்புலப் பக்கம்</translation>
 <translation id="1750172676754093297">உங்கள் பாதுகாப்பு விசையில் கைரேகைகளைச் சேமிக்க முடியவில்லை</translation>
+<translation id="1751262127955453661">தாவல்கள் அனைத்தையும் நீங்கள் மூடும் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FOLDERNAME" /> இல் உள்ள கோப்புகளைத் திருத்த முடியும்</translation>
 <translation id="175196451752279553">மூடிய தாவலை ம&amp;றுபடி திறக்கவும்</translation>
 <translation id="1753067873202720523">உங்கள் Chromebook இயக்கத்தில் இருக்கும்போது சார்ஜ் செய்ய முடியாது.</translation>
 <translation id="1753905327828125965">அதிகமாகப் பார்க்கப்பட்டவை</translation>
@@ -620,6 +623,7 @@
 <translation id="1822140782238030981">ஏற்கனவே Chrome பயனரா? உள்நுழைக</translation>
 <translation id="18245044880483936">உங்கள் பிள்ளையின் Drive சேமிப்பக ஒதுக்கீட்டில் காப்புப் பிரதித் தரவு கணக்கிடப்படாது.</translation>
 <translation id="1826516787628120939">சரிபார்க்கிறது</translation>
+<translation id="1827738518074806965">கலைக்கூடம்</translation>
 <translation id="1828378091493947763">சாதனத்தில் இந்தச் செருகுநிரல் ஆதரிக்கப்படவில்லை</translation>
 <translation id="1828901632669367785">கம்ப்யூட்டர் உரையாடலைப் பயன்படுத்தி அச்சிடுக…</translation>
 <translation id="1829129547161959350">பென்குயின்</translation>
@@ -671,6 +675,7 @@
 <translation id="1887850431809612466">வன்பொருள் பதிப்பு</translation>
 <translation id="1890674179660343635">&lt;span&gt;ஐடி: &lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
 <translation id="189210018541388520">முழுத் திரையைத் திற</translation>
+<translation id="1892341345406963517">வணக்கம் <ph name="PARENT_NAME" /></translation>
 <translation id="189358972401248634">பிற மொழிகள்</translation>
 <translation id="1895252664692693738"><ph name="TIME_LEFT" /> மீதமுள்ளன</translation>
 <translation id="1895658205118569222">நிறுத்தம்</translation>
@@ -854,7 +859,6 @@
 <translation id="2154484045852737596">கார்டைத் திருத்தவும்</translation>
 <translation id="2154710561487035718">URL ஐ நகலெடு</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> போல் தெரிகிறது</translation>
-<translation id="2156283799932971644">Googleளுக்குச் சில சாதனத் தகவல்களையும் பக்க உள்ளடக்கத்தையும் அனுப்புவதன் மூலம் பாதுகாப்பான உலாவலை மேம்படுத்த உதவலாம்.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">கூடுதல் அம்சங்களைப் பெற இந்த Chromebookகுடன் இணங்குமாறு வடிவமைக்கப்பட்ட Dell டாக்கிங் ஸ்டேஷனைப் பயன்படுத்தவும்.</translation>
 <translation id="215753907730220065">முழுத்திரையிலிருந்து வெளியேறு</translation>
@@ -986,7 +990,6 @@
 <translation id="2326931316514688470">&amp;பயன்பாட்டை மீண்டும் ஏற்று</translation>
 <translation id="2327492829706409234">ஆப்ஸை இயக்கு</translation>
 <translation id="2329597144923131178">உங்கள் எல்லா சாதனங்களிலும் புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள் மற்றும் பிற அமைப்புகளைப் பெற உள்நுழையவும்.</translation>
-<translation id="2330607597130465898">பாதுகாப்பு வேண்டாம்</translation>
 <translation id="2332131598580221120">அங்காடியில் காட்டு</translation>
 <translation id="2332192922827071008">விருப்பத்தேர்வுகளைத் திற</translation>
 <translation id="2332742915001411729">இயல்புநிலைக்கு மீட்டமை</translation>
@@ -1019,6 +1022,7 @@
 <translation id="2359808026110333948">தொடர்க</translation>
 <translation id="236117173274098341">மேம்படுத்து</translation>
 <translation id="236141728043665931">மைக்ரோஃபோன் அணுகலை எப்போதும் தடு</translation>
+<translation id="2364498172489649528">வெற்றி</translation>
 <translation id="2365507699358342471">கிளிப்போர்டுக்கு நகலெடுத்த உரையையும் படங்களையும், இந்தத் தளத்தால் பார்க்க முடியும்.</translation>
 <translation id="2366260648632264559">சிஸ்டத்தின் உரையை இந்த மொழியில் காட்டு</translation>
 <translation id="2367972762794486313">பயன்பாடுகளைக் காட்டு</translation>
@@ -1325,6 +1329,7 @@
 <translation id="2762441749940182211">கேமரா தடுக்கப்பட்டது</translation>
 <translation id="2765217105034171413">சிறிய</translation>
 <translation id="2766161002040448006">பெற்றோரிடம் கேள்</translation>
+<translation id="2767127727915954024">தாவல்கள் அனைத்தையும் நீங்கள் மூடும் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FILENAME" /> கோப்பைத் திருத்த முடியும்</translation>
 <translation id="276969039800130567"><ph name="USER_EMAIL_ADDRESS" /> ஆக உள்நுழைந்துள்ளீர்கள்.</translation>
 <translation id="2770465223704140727">பட்டியலிலிருந்து நீக்கு</translation>
 <translation id="2770690685823456775">மற்றொரு கோப்புறைக்குக் கடவுச்சொற்களை ஏற்றவும்</translation>
@@ -1646,6 +1651,18 @@
 <translation id="3202173864863109533">இந்தத் தாவலின் ஆடியோ முடக்கப்படுகிறது.</translation>
 <translation id="3208321278970793882">ஆப்ஸ்</translation>
 <translation id="3208584281581115441">இப்போது சரிபார்</translation>
+<translation id="3208640652501208439">பள்ளிப் பாடத்திற்கான ஆதாரங்கள் கிடைக்காமலோ தானாகவே ஏற்றப்படாமலோ போகலாம்
+    உங்கள் பிள்ளைக்கு இவற்றுக்கான அணுகல் இல்லாமல் இருக்கக்கூடும்:
+    <ph name="BEGIN_LIST" />
+      <ph name="LIST_ITEM" />பள்ளியால் நிறுவப்பட்ட ஆப்ஸ்கள் மற்றும் நீட்டிப்புகள்
+      <ph name="LIST_ITEM" />பள்ளி Chromebookகில் உள்ள புக்மார்க்குகள்
+      <ph name="LIST_ITEM" />கல்வித் தளங்களுக்கான தன்னிரப்பிக் கடவுச்சொற்கள்
+    <ph name="END_LIST" />
+    இந்தச் சாதனத்தில் பள்ளி அனுபவத்தை முழுவதுமாகப் பெற உங்கள் பிள்ளை இவற்றைச் செய்ய வேண்டும்:
+    <ph name="BEGIN_OLIST" />
+      <ph name="OLIST_ITEM" />Family Link நிர்வகிக்கும் கணக்கிலிருந்து வெளியேற வேண்டும்
+      <ph name="OLIST_ITEM" />உள்நுழையும் திரையில் G Suite for Education கணக்கைப் பயன்படுத்தி உள்நுழைய வேண்டும். கவனத்திற்கு: எனினும் உங்கள் Family Linkகின் கண்காணிப்பு அம்சங்களில் ஆப்ஸ், இணையதள அணுகல் அமைப்புகள் உள்ளிட்ட பள்ளிக் கொள்கைகள் நடைமுறைக்கு வரும் என்பது இதன் அர்த்தம் (உதாரணமாக, வீட்டுப்பாடம் செய்வதற்குத் தேவைப்படுகிறது எனில் பள்ளி நிர்வாகிகள் YouTubeஐ அனுமதிக்கலாம், பயன்படுத்திய நேரம் செயல்படுத்தப்படாது.)
+    <ph name="END_OLIST" /></translation>
 <translation id="3208703785962634733">உறுதிசெய்யப்படாதது</translation>
 <translation id="32101887417650595">பிரிண்டருடன் இணைக்க இயலவில்லை</translation>
 <translation id="321084946921799184">மஞ்சள் &amp; வெள்ளை</translation>
@@ -1722,6 +1739,7 @@
 <translation id="3312424061798279731">இயக்கத்திலுள்ள மொழிகள்</translation>
 <translation id="3313622045786997898">சான்றிதழ் கையொப்ப மதிப்பு</translation>
 <translation id="3315158641124845231"><ph name="PRODUCT_NAME" /> ஐ மறை</translation>
+<translation id="3317284582048881482">பெற்றோர்களுக்கான பள்ளிக் கணக்குத் தகவல்</translation>
 <translation id="3317459757438853210">இரு-பக்கம்</translation>
 <translation id="3317678681329786349">கேமராவும் மைக்ரோஃபோனும் தடுக்கப்பட்டன</translation>
 <translation id="3319048459796106952">புதிய &amp;மறைநிலை சாளரம்</translation>
@@ -1850,7 +1868,6 @@
 <translation id="3492788708641132712">ஒத்திசைவு வேலை செய்யவில்லை. மீண்டும் உள்நுழையவும்.</translation>
 <translation id="3493486281776271508">இணைய இணைப்பு அவசியம்</translation>
 <translation id="3493881266323043047">செல்லுபடிக்காலம்</translation>
-<translation id="3494155060718700400">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள், நீட்டிப்புகள் ஆகியவற்றிலிருந்து பாதுகாக்காது (பரிந்துரைக்கப்படவில்லை). எனினும் Gmail, Search போன்ற பிற Google சேவைகளில் ’பாதுகாப்பு உலாவல்’ அம்சத்தின் (கிடைத்தால்) மூலம் பாதுகாப்பைப் பெறுவீர்கள்.</translation>
 <translation id="3494769164076977169">முதல் கோப்பு பதிவிறக்கமானதும் தானாகவே கோப்புகளைப் பதிவிறக்கத் தளம் முயற்சிக்கும்போது கேள் (பரிந்துரைக்கப்பட்டது)</translation>
 <translation id="3495660573538963482">Google அசிஸ்டண்ட் அமைப்புகள்</translation>
 <translation id="3496213124478423963">சிறிதாக்கு</translation>
@@ -1907,6 +1924,7 @@
 <translation id="3574210789297084292">உள்நுழைக</translation>
 <translation id="3574917942258583917">எனினும் மறைநிலைப் பயன்முறையை விட்டு வெளியேறவா?</translation>
 <translation id="3575121482199441727">இந்தத் தளத்திற்கு அனுமதி</translation>
+<translation id="3575919114596668130">உங்கள் Family Linkகின் பெற்றோர் அமைப்புகள் இப்போதும் பொருந்தும். ஆப்ஸையோ தளத்தையோ இதற்கு முன்பு தடுத்திருந்தால் மீண்டும் அவ்வாறு செய்ய வேண்டிய அவசியம் இல்லை.</translation>
 <translation id="3576324189521867626">நிறுவப்பட்டது</translation>
 <translation id="3578594933904494462">இந்தத் தாவலில் உள்ள உள்ளடக்கமானது பகிரப்படுகிறது.</translation>
 <translation id="357886715122934472">நீங்கள் உரிமையாளராக உள்ள குழுவில் &lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt;, &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; பிரிண்டரைப் பகிர விரும்புகிறார்: &lt;strong&gt;<ph name="GROUP_NAME" />&lt;/strong&gt;. நீங்கள் ஏற்றுக்கொண்டால், எல்லா குழு உறுப்பினர்களாலும் பிரிண்டர் மூலம் அச்சிட முடியும்.</translation>
@@ -2738,6 +2756,7 @@
 <translation id="4689235506267737042">டெமோ விருப்பங்களைத் தேர்வுசெய்தல்</translation>
 <translation id="4689421377817139245">இந்தப் புத்தகக்குறியை iPhone உடன் ஒத்திசையுங்கள்</translation>
 <translation id="4690091457710545971">&lt;Intel வைஃபை நிலைபொருள் உருவாக்கிய நான்கு கோப்புகள்: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon.  முதல் மூன்று கோப்புகளும் பதிவு டம்ப்களைக் கொண்டுள்ள பைனரிக் கோப்புகளாகும், அவற்றில் தனிப்பட்ட அல்லது சாதனத்தை அடையாளப்படுத்தும் தகவல்கள் எதுவும் இல்லை என்று Intel உறுதிப்படுத்தியுள்ளது.  கடைசிக் கோப்பு, Intel நிலைபொருளைச் சேர்ந்த ஓர் இயக்கக் கண்காணிப்புக் கோப்பாகும்; அதிலிருந்து தனிப்பட்ட அல்லது சாதனத்தை அடையாளப்படுத்தும் தகவல்கள் அகற்றப்பட்டுள்ளன, ஆனால் கோப்பு மிகப் பெரிதாக இருப்பதால் அதை இங்கு காட்ட முடியாது.  இந்தக் கோப்புகள் உங்கள் சாதனத்தில் சமீபத்தில் ஏற்பட்ட வைஃபை குறித்த சிக்கல்களுக்குப் பதிலளிக்கையில் உருவாக்கப்பட்டன, அவை இந்தச் சிக்கல்களைப் பிழையறிந்து திருத்துவதற்கு உதவ, Intelலுடன் பகிரப்படும்.&gt;</translation>
+<translation id="4691791363716065510">தளத்தின் தாவல்கள் அனைத்தையும் மூடும் நீங்கள் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FILENAME" /> கோப்பைப் பார்க்க முடியும்</translation>
 <translation id="4692623383562244444">தேடல் இன்ஜின்கள்</translation>
 <translation id="4693155481716051732">சூஷி</translation>
 <translation id="4694024090038830733">பிரிண்டர் உள்ளமைவை நிர்வாகி கையாளுகிறார்.</translation>
@@ -2897,7 +2916,6 @@
 <translation id="4920887663447894854">இந்தப் பக்கத்தில் உங்கள் இருப்பிடத்தைத் தடமறிவதிலிருந்து பின்வரும் தளங்கள் தடுக்கப்பட்டுள்ளன:</translation>
 <translation id="49226369361073053">{0,plural, =0{இப்போதே சாதனத்தைப் புதுப்பிக்கவும்}=1{ஒரு வினாடிக்குள் சாதனத்தைப் புதுப்பிக்கவும்}other{# வினாடிகளுக்குள் சாதனத்தைப் புதுப்பிக்கவும்}}</translation>
 <translation id="492299503953721473">Android ஆப்ஸை அகற்று</translation>
-<translation id="4923279099980110923">ஆம், எனக்கு உதவி தேவை</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">உங்கள் போர்ட்கள் இங்கே காட்டப்படும்</translation>
 <translation id="4925542575807923399">பல உள்நுழைவு அமர்வில் இந்தக் கணக்கு முதலில் உள்நுழைந்த கணக்காக இருக்க வேண்டிய தேவை இந்தக் கணக்கின் நிர்வாகிக்கு உள்ளது.</translation>
@@ -3088,12 +3106,14 @@
 <translation id="5204967432542742771">கடவுச்சொல்</translation>
 <translation id="5206215183583316675">"<ph name="CERTIFICATE_NAME" />"ஐ நீக்கவா?</translation>
 <translation id="520621735928254154">சான்றிதழ் இறக்குமதியாவதில் பிழை</translation>
+<translation id="5209307736170827035">வகுப்பறையில் இருக்கும் உங்கள் பிள்ளையின் தரவு பாதுகாக்கப்படும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="5209320130288484488">சாதனங்கள் காணப்படவில்லை</translation>
 <translation id="5210990770352357081">Plugin VMமின் நிறுவலை நீக்க முடியவில்லை</translation>
 <translation id="5213481667492808996">இப்போது உங்கள் '<ph name="NAME" />' டேட்டா சேவையைப் பயன்படுத்தலாம்</translation>
 <translation id="5213891612754844763">ப்ராக்ஸி அமைப்புகளைக் காட்டு</translation>
 <translation id="5215502535566372932">நாட்டைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="521582610500777512">படம் விலக்கப்பட்டது</translation>
+<translation id="5222403284441421673">பாதுகாப்பற்ற பதிவிறக்கம் தடுக்கப்பட்டது</translation>
 <translation id="5222676887888702881">வெளியேறு</translation>
 <translation id="52232769093306234">தொகுக்க முடியவில்லை.</translation>
 <translation id="5225324770654022472">ஆப்ஸின் ஷார்ட்கட்டைக் காட்டு</translation>
@@ -3198,6 +3218,7 @@
 <translation id="5341980496415249280">தொகுக்கிறது, காத்திருக்கவும்...</translation>
 <translation id="5342091991439452114">பின்னில் குறைந்தது <ph name="MINIMUM" /> இலக்கங்கள் இருக்க வேண்டும்</translation>
 <translation id="5344036115151554031">Linuxஸை மீட்டெடுக்கிறது</translation>
+<translation id="535123479159372765">மற்றொரு சாதனத்திலிருந்து நகலெடுக்கப்பட்ட உரை</translation>
 <translation id="5352033265844765294">நேர முத்திரையிடுதல்</translation>
 <translation id="5353252989841766347">Chrome இலிருந்து கடவுச்சொற்களை ஏற்றுதல்</translation>
 <translation id="5355099869024327351">அறிவிப்புகளைக் காண்பிக்க அசிஸ்டண்ட்டுக்கு அனுமதியளிக்கவும்</translation>
@@ -3207,7 +3228,6 @@
 <translation id="5362741141255528695">தனிப்பட்ட விசை கோப்பைத் தேர்ந்தெடு.</translation>
 <translation id="5363109466694494651">பவர்வாஷ் செய்து மாற்றியமை</translation>
 <translation id="5365881113273618889">நீங்கள் தேர்ந்தெடுத்த கோப்புறையில் முக்கியமான கோப்புகள் உள்ளன. "<ph name="APP_NAME" />" இந்தக் கோப்புறைக்கான நிரந்தர எழுதும் அணுகலை நிச்சயமாக வழங்க விரும்புகிறீர்களா?</translation>
-<translation id="5367091008316207019">கோப்பைப் படிக்கிறது.</translation>
 <translation id="5368720394188453070">ஃபோன் பூட்டப்பட்டது. நுழைய, திறக்கவும்.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> இல் உள்நுழையவும்</translation>
 <translation id="5369491905435686894">மவுஸ் துரிதப்படுத்தலை இயக்கு</translation>
@@ -3319,6 +3339,7 @@
 <translation id="5511379779384092781">மிகச்சிறியது</translation>
 <translation id="5511823366942919280">"Shark" சாதனமாக, இதை அமைக்க விரும்புகிறீர்களா?</translation>
 <translation id="5512653252560939721">பயனர் சான்றிதழானது வன்பொருளால் பாதுகாக்கப்பட்டதாக இருப்பது அவசியம்.</translation>
+<translation id="5515923816438946203">உங்கள் திரையில் என்ன பார்க்க வேண்டும் என்பதைத் தேர்வு செய்க</translation>
 <translation id="5517304475148761050">இந்த ஆப்ஸிற்கு Play ஸ்டோருக்கான அணுகல் வேண்டும்</translation>
 <translation id="5517412723934627386"><ph name="NETWORK_TYPE" /> - <ph name="NETWORK_DISPLAY_NAME" /></translation>
 <translation id="551752069230578406">உங்கள் கணக்குடன் பிரிண்டரைச் சேர்க்கிறது - இதற்குச் சில நிமிடங்கள் எடுக்கலாம்...</translation>
@@ -3490,6 +3511,7 @@
 <translation id="5734362860645681824">தகவல்தொடர்புகள்</translation>
 <translation id="5734697361979786483">கோப்புப் பகிர்வைச் சேர்</translation>
 <translation id="5736796278325406685">சரியான பயனர்பெயரை உள்ளிடவும்</translation>
+<translation id="5739017626473506901">பள்ளிக் கணக்கை சேர்க்க <ph name="USER_NAME" />க்கு உதவ, உள்நுழையவும்</translation>
 <translation id="5739235828260127894">சரிபார்ப்புக்காகக் காத்திருக்கிறது. <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">மிகப் பெரியது</translation>
 <translation id="574209121243317957">குரல் அழுத்தம்</translation>
@@ -3763,6 +3785,7 @@
 <translation id="6097480669505687979">போதுமான இடத்தைக் காலியாக்கவில்லை எனில், பயனர்களும் தரவும் தானாகவே அகற்றப்படலாம்.</translation>
 <translation id="6097600385983390082">குரல் தேடல் மூடப்பட்டது</translation>
 <translation id="6098793583803863900">அறியப்படாத கோப்பு ஒன்று, மோசமான உள்ளடக்கம் இருக்கிறதா என்பதைப் பார்க்க ஸ்கேன் செய்யப்படுகிறது.</translation>
+<translation id="609942571968311933"><ph name="DEVICE_NAME" /> சாதனத்திலிருந்து நகலெடுக்கப்பட்ட உரை</translation>
 <translation id="6100736666660498114">தொடக்க மெனு</translation>
 <translation id="6101226222197207147">புதிய ஆப்ஸ் சேர்க்கப்பட்டது (<ph name="EXTENSION_NAME" />)</translation>
 <translation id="6102043788063419338">'மேம்பட்ட பாதுகாப்பு' அம்சம் இந்தக் கோப்பைத் தடுத்துள்ளது.</translation>
@@ -4129,6 +4152,7 @@
 <translation id="6612358246767739896">பாதுகாக்கப்பட்ட உள்ளடக்கம்</translation>
 <translation id="6615455863669487791">எனக்கு காண்பி</translation>
 <translation id="6618097958368085618">பரவாயில்லை, வைத்திரு</translation>
+<translation id="6618744767048954150">இயங்குகிறது</translation>
 <translation id="6619058681307408113">லைன் பிரிண்டர் டீமன் (LPD)</translation>
 <translation id="661907246513853610">தளத்தால் உங்கள் இருப்பிடத்தைக் கண்காணிக்க முடியும்</translation>
 <translation id="6619801788773578757">கியோஸ்க் பயன்பாட்டைச் சேர்</translation>
@@ -4852,6 +4876,7 @@
 <translation id="761530003705945209">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். எப்போது வேண்டுமானாலும் உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும். உங்களின் காப்புப்பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation>
 <translation id="7616214729753637086">சாதனத்தைப் பதிவுசெய்கிறது...</translation>
 <translation id="7617366389578322136">"<ph name="DEVICE_NAME" />" சாதனத்துடன் இணைக்கிறது</translation>
+<translation id="761763866592998929">சூழல் பயன்முறை</translation>
 <translation id="762068974690945752">இங்கே பள்ளிக் கணக்கு ஒன்றைச் சேர்க்கலாம் அல்லது பிள்ளைகளின் கணக்குகளை நிர்வகிக்கலாம். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="7621382409404463535">சாதன உள்ளமைவை சிஸ்டத்தால் சேமிக்க முடியவில்லை.</translation>
 <translation id="7622114377921274169">சார்ஜாகிறது.</translation>
@@ -4964,6 +4989,7 @@
 <translation id="7766838926148951335">அனுமதிகளை ஏற்றுக்கொள்</translation>
 <translation id="7768770796815395237">மாற்று</translation>
 <translation id="7769672763586021400">மாடல் ஐடி</translation>
+<translation id="7770612696274572992">மற்றொரு சாதனத்திலிருந்து நகலெடுக்கப்பட்ட படம்</translation>
 <translation id="7770651108375708429">வைஃபையைத் துண்டி</translation>
 <translation id="7771452384635174008">தளவமைப்பு</translation>
 <translation id="7772032839648071052">கடவுச்சொற்றொடரை உறுதி செய்க</translation>
@@ -4971,6 +4997,7 @@
 <translation id="7772773261844472235">Chromebook நிலையைச் சரிபாருங்கள்</translation>
 <translation id="7773726648746946405">அமர்வு சேமிப்பகம்</translation>
 <translation id="7774365994322694683">பறவை</translation>
+<translation id="7776156998370251340">தாவல்கள் அனைத்தையும் நீங்கள் மூடும் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FOLDERNAME" /> இல் உள்ள கோப்புகளைப் பார்க்க முடியும்</translation>
 <translation id="7776701556330691704">குரல்கள் எதுவும் இல்லை</translation>
 <translation id="7780252971640011240">இணைப்பதில் சிக்கல் உள்ளது. உதவிக்கு மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7781335840981796660">எல்லா பயனர்களின் கணக்குகளும், அகத் தரவும் அகற்றப்படும்.</translation>
@@ -5472,6 +5499,7 @@
 <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> நெட்வொர்க், இணைக்கிறது</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">முதலில் கேள் (பரிந்துரைத்தது)</translation>
+<translation id="8417548266957501132">பெற்றோர் கடவுச்சொல்</translation>
 <translation id="8418445294933751433">தாவலாக &amp;காண்பி</translation>
 <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' உடன் பொருந்தும் தேடல் முடிவுகள்</translation>
 <translation id="8419368276599091549">உங்கள் <ph name="DEVICE_TYPE" />க்கு வரவேற்கிறோம்!</translation>
@@ -5924,7 +5952,6 @@
 <translation id="8985264973231822211">கடைசியாக <ph name="DEVICE_LAST_ACTIVATED_TIME" /> நாளுக்கு முன் பயன்படுத்தியுள்ளார்</translation>
 <translation id="8986362086234534611">மற</translation>
 <translation id="8986494364107987395">பயன்பாட்டுப் புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் தானாகவே Google க்கு அனுப்பு</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> இலும் அதனால் நிறுவப்பட்ட ஆப்ஸிலும் சேமிக்கப்பட்ட அனைத்து தரவையும் குக்கீகளையும் இது அழிக்கும்.</translation>
 <translation id="8987927404178983737">மாதம்</translation>
 <translation id="8991520179165052608">தளத்தால் உங்கள் மைக்ரோஃபோனைப் பயன்படுத்த முடியும்</translation>
 <translation id="899403249577094719">Netscape சான்றிதழ் அடிப்படை URL</translation>
@@ -5982,6 +6009,7 @@
 <translation id="9055636786322918818">RC4 என்க்ரிப்ஷனைச் செயல்படுத்தும். RC4 சைஃபர்கள் பாதுகாப்பற்றவை என்பதால், இந்த விருப்பத்தைப் பயன்படுத்துவது, உங்கள் அபாயத்தை அதிகரிக்கும்.</translation>
 <translation id="9056810968620647706">பொருத்தங்கள் கண்டறியப்படவில்லை.</translation>
 <translation id="9057354806206861646">புதுப்பிப்புக்கான திட்ட அட்டவணை</translation>
+<translation id="9058976525724291037">உங்கள் பிள்ளை இந்தச் சாதனத்தில் மற்றொரு Google கணக்கைச் சேர்க்க விரும்புகிறார். Family Link நிர்வகிக்கும் சாதனங்களில் G Suite for Education கணக்குகள் மட்டுமே சேர்க்கப்படக்கூடும்.</translation>
 <translation id="9062468308252555888">14x</translation>
 <translation id="9063208415146866933"><ph name="ERROR_LINE_START" /> இலிருந்து <ph name="ERROR_LINE_END" />வது வரி வரை பிழை</translation>
 <translation id="9064142312330104323">Google சுயவிவரப் புகைப்படம் (ஏற்றுகிறது)</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index c70bb65..841883f 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -859,7 +859,6 @@
 <translation id="2154484045852737596">కార్డ్‌ను సవరించండి</translation>
 <translation id="2154710561487035718">URLను కాపీ చేయి</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ఉన్నట్టుంది</translation>
-<translation id="2156283799932971644">కొంత సిస్టమ్ సమాచారం మరియు పేజీ కంటెంట్‌ను Googleకి పంపడం ద్వారా సురక్షిత బ్రౌజింగ్‌ని మెరుగుపరచడంలో మీరు సహాయపడవచ్చు.</translation>
 <translation id="2156294658807918600">సర్వీస్ వర్కర్: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">ఈ Chromebookకు అనుగుణంగా పని చేయడానికి రూపొందించబడిన డెల్ డాకింగ్ స్టేషన్‌ను ఉపయోగించి, అదనపు ఫీచర్‌లను పొందండి.</translation>
 <translation id="215753907730220065">పూర్తి స్క్రీన్‌ను నిష్క్రమించు</translation>
@@ -991,7 +990,6 @@
 <translation id="2326931316514688470">యాప్‌ను &amp;మళ్లీ లోడ్ చేయి</translation>
 <translation id="2327492829706409234">యాప్‌ను ప్రారంభించు</translation>
 <translation id="2329597144923131178">మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు, ఇతర సెట్టింగ్‌లను మీ అన్ని పరికరాలలో పొందడానికి సైన్ ఇన్ చేయండి.</translation>
-<translation id="2330607597130465898">రక్షణ లేదు</translation>
 <translation id="2332131598580221120">స్టోర్‌లో వీక్షించండి</translation>
 <translation id="2332192922827071008">ప్రాధాన్యతలను తెరువు</translation>
 <translation id="2332742915001411729">డిఫాల్ట్‌కు రీసెట్ చేయి</translation>
@@ -1871,7 +1869,6 @@
 <translation id="3492788708641132712">సమకాలీకరణ పని చేయడం లేదు. మళ్లీ సైన్ ఇన్ చేేయడానికి ప్రయత్నించండి.</translation>
 <translation id="3493486281776271508">ఇంటర్నెట్ కనెక్షన్ అవసరం</translation>
 <translation id="3493881266323043047">చెల్లుబాటు</translation>
-<translation id="3494155060718700400">ప్రమాదకరమైన వెబ్‌సైట్‌లు, డౌన్‌లోడ్‌లు, ఎక్స్‌టెన్షన్‌ల నుండి మిమ్మల్ని రక్షించదు (సిఫార్సు చేయడం లేదు). Gmail, Search వంటి ఇతర Google సర్వీస్‌లలో, సురక్షిత బ్రౌజింగ్ అందుబాటులో ఉన్న చోట మీరు ఇప్పటికీ రక్షణను పొందుతారు.</translation>
 <translation id="3494769164076977169">సైట్ మొదటి ఫైల్ తర్వాత ఆటోమేటిక్‌గా ఫైల్‌లను డౌన్‌లోడ్ చేయడానికి ప్రయత్నించేటప్పుడు అడగాలి (సిఫార్సు చేయబడింది)</translation>
 <translation id="3495660573538963482">Google సహాయకం సెట్టింగ్‌లు</translation>
 <translation id="3496213124478423963">దూరంగా జూమ్ చెయ్యి</translation>
@@ -2922,7 +2919,6 @@
 <translation id="4920887663447894854">ఈ పేజీలో మీ స్థానాన్ని ట్రాక్ చెయ్యకుండా ఈ క్రింది సైట్‌లు బ్లాక్ చెయ్యబడ్డాయి:</translation>
 <translation id="49226369361073053">{0,plural, =0{ఇప్పుడే పరికరాన్ని అప్‌డేట్ చేయండి}=1{1 సెకను లోపు పరికరాన్ని అప్‌డేట్ చేయండి}other{# సెకన్ల లోపు పరికరాన్ని అప్‌డేట్ చేయండి}}</translation>
 <translation id="492299503953721473">Android యాప్‌లను తీసివేయి</translation>
-<translation id="4923279099980110923">అవును, నేను సహాయం అందించాలనుకుంటున్నాను</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">మీ పోర్ట్‌లు ఇక్కడ కనిపిస్తాయి</translation>
 <translation id="4925542575807923399">బహుళ సైన్-ఇన్ సెషన్‌లో ఈ ఖాతా మొదటిగా సైన్-ఇన్ చేసిన ఖాతాగా ఉండటం ఈ ఖాతా నిర్వాహకులకు అవసరం.</translation>
@@ -3236,7 +3232,6 @@
 <translation id="5362741141255528695">వ్యక్తిగత కీ ఫైల్‌ను ఎంచుకోండి.</translation>
 <translation id="5363109466694494651">పవర్‌వాష్ చేసి, తిరిగి మార్చు</translation>
 <translation id="5365881113273618889">మీరు ఎంచుకున్న ఫోల్డర్ చాలా ఎక్కువ గోప్యమైన ఫైల్‌లను కలిగి ఉంది. మీరు ఖచ్చితంగా ఈ ఫోల్డర్ కోసం "<ph name="APP_NAME" />"కి శాశ్వతంగా రాయగల యాక్సెస్‌ను మంజూరు చేయాలనుకుంటున్నారా?</translation>
-<translation id="5367091008316207019">ఫైల్‌ను చదువుతోంది..</translation>
 <translation id="5368720394188453070">మీ ఫోన్ లాక్ చేయబడింది. దానిని తెరవడానికి, అన్‌లాక్ చేయండి.</translation>
 <translation id="5368779022775404937"><ph name="REALM" />కు సైన్ ఇన్ చేయండి</translation>
 <translation id="5369491905435686894">మౌస్ యాక్సిలరేషన్‌ను ప్రారంభించండి</translation>
@@ -5958,7 +5953,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> రోజు క్రితం యాక్టివ్‌గా ఉంది</translation>
 <translation id="8986362086234534611">మరిచిపోయారా</translation>
 <translation id="8986494364107987395">Googleకు ఆటోమేటిక్‌గా వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను పంపు</translation>
-<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> ద్వారా మరియు దాని ఇన్‌స్టాల్ చేసిన యాప్ ద్వారా స్టోర్ అయిన డేటా మరియు కుక్కీలను ఇది తొలగిస్తుంది.</translation>
 <translation id="8987927404178983737">నెల</translation>
 <translation id="8991520179165052608">సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగించవచ్చు</translation>
 <translation id="899403249577094719">Netscape సర్టిఫికెట్ ఆధార URL</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 6075ac9..82b4f1fbc 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">แก้ไขบัตร</translation>
 <translation id="2154710561487035718">คัดลอก URL</translation>
 <translation id="2155772377859296191">ดูเหมือน <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">คุณช่วยปรับปรุง Safe Browsing ได้โดยส่งข้อมูลบางอย่างของระบบและเนื้อหาของหน้าให้ Google</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">โปรดใช้แท่นชาร์จ Dell ที่ออกแบบมาให้ใช้งานกับ Chromebook นี้เพื่อใช้ฟีเจอร์เพิ่มเติม</translation>
 <translation id="215753907730220065">ออกจากการแสดงเต็มหน้าจอ</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">โ&amp;หลดแอปซ้ำ</translation>
 <translation id="2327492829706409234">เปิดใช้งานแอปพลิเคชัน</translation>
 <translation id="2329597144923131178">ลงชื่อเข้าใช้เพื่อรับบุ๊กมาร์ก ประวัติ รหัสผ่าน และการตั้งค่าอื่นๆ ในอุปกรณ์ทั้งหมด</translation>
-<translation id="2330607597130465898">ไม่มีการปกป้อง</translation>
 <translation id="2332131598580221120">ดูในสโตร์</translation>
 <translation id="2332192922827071008">เปิดค่ากำหนด</translation>
 <translation id="2332742915001411729">รีเซ็ตเป็นค่าเริ่มต้น</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">การซิงค์ไม่ทำงาน ลองลงชื่อเข้าใช้อีกครั้ง</translation>
 <translation id="3493486281776271508">ต้องเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="3493881266323043047">ความถูกต้อง</translation>
-<translation id="3494155060718700400">ไม่ปกป้องคุณจากเว็บไซต์ การดาวน์โหลด และส่วนขยายที่เป็นอันตราย (ไม่แนะนำ) คุณจะยังคงได้รับการปกป้องจาก Google Safe Browsing ในบริการอื่นๆ ของ Google ที่มีฟีเจอร์นี้ เช่น Gmail และ Search</translation>
 <translation id="3494769164076977169">ถามเมื่อไซต์พยายามดาวน์โหลดไฟล์โดยอัตโนมัติหลังจากไฟล์แรก (แนะนำ)</translation>
 <translation id="3495660573538963482">การตั้งค่า Google Assistant</translation>
 <translation id="3496213124478423963">ย่อ</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">ไซต์ต่อไปนี้ถูกปิดกั้นไม่ให้ติดตามตำแหน่งของคุณบนหน้าเว็บนี้</translation>
 <translation id="49226369361073053">{0,plural, =0{อัปเดตอุปกรณ์ทันที}=1{อัปเดตอุปกรณ์ภายใน 1 วินาที}other{อัปเดตอุปกรณ์ภายใน # วินาที}}</translation>
 <translation id="492299503953721473">นำแอป Android ออก</translation>
-<translation id="4923279099980110923">ใช่ ฉันต้องการช่วย</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">พอร์ตจะแสดงที่นี่</translation>
 <translation id="4925542575807923399">ผู้ดูแลระบบต้องทำให้บัญชีนี้เป็นบัญชีที่ลงชื่อเข้าใช้เป็นบัญชีแรก ในเซสชันการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชี</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">เลือกไฟล์กุญแจส่วนตัว</translation>
 <translation id="5363109466694494651">Powerwash และเปลี่ยนกลับ</translation>
 <translation id="5365881113273618889">โฟลเดอร์ที่คุณเลือกมีไฟล์ที่ละเอียดอ่อน แน่ใจไหมว่าต้องการให้สิทธิ์การเข้าถึงในการเขียนโฟลเดอร์นี้อย่างถาวรแก่ "<ph name="APP_NAME" />"</translation>
-<translation id="5367091008316207019">กำลังอ่านไฟล์..</translation>
 <translation id="5368720394188453070">โทรศัพท์ล็อกอยู่ โปรดปลดล็อกเพื่อเข้าใช้งาน</translation>
 <translation id="5368779022775404937">ลงชื่อเข้าใช้ <ph name="REALM" /></translation>
 <translation id="5369491905435686894">เปิดใช้การเร่งความเร็วเมาส์</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">ใช้งานเมื่อ <ph name="DEVICE_LAST_ACTIVATED_TIME" /> วันที่ผ่านมา</translation>
 <translation id="8986362086234534611">ไม่จำ</translation>
 <translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation>
-<translation id="8986651757229422279">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="ORIGIN_NAME" /> จัดเก็บไว้ รวมถึงแอปที่ต้นทางนี้ติดตั้งไว้</translation>
 <translation id="8987927404178983737">เดือน</translation>
 <translation id="8991520179165052608">เว็บไซต์ใช้ไมโครโฟนของคุณได้</translation>
 <translation id="899403249577094719">URL ที่อ้างอิงใบรับรองของ Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index d788ba5..4a7a108 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> Uygulamasında Aç</translation>
 <translation id="2120297377148151361">Etkinlik ve etkileşimler</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> engellendi</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Çerezler engellendi}=1{Çerezler engellendi, 1 istisna}other{Çerezler engellendi, {COUNT} istisna}}</translation>
 <translation id="2121825465123208577">Yeniden Boyutlandır</translation>
 <translation id="2122305276694332719">Gizli bir ağa otomatik olarak bağlanmak başkalarının cihazınızı ve bazı ağ ayarlarını görmesine olanak sağladığından önerilmez.</translation>
 <translation id="2123766928840368256">Farklı bir dosya seç</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Kartı düzenle</translation>
 <translation id="2154710561487035718">URL'yi Kopyala</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> şeklinde görünür</translation>
-<translation id="2156283799932971644">Google'a bazı sistem bilgilerini ve sayfa içeriklerini göndererek Güvenli Tarama'nın iyileştirilmesine yardımcı olabilirsiniz.</translation>
 <translation id="2156294658807918600">Hizmet Çalışanı: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Ek özelliklerden yararlanmak için bu Chromebook ile uyumlu olacak şekilde tasarlanmış bir Dell yuva istasyonu kullanın.</translation>
 <translation id="215753907730220065">Tam Ekrandan Çık</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Uygulamayı yeniden yükle</translation>
 <translation id="2327492829706409234">Uygulamayı etkinleştir</translation>
 <translation id="2329597144923131178">Yer işaretlerinize, geçmişinize ve diğer ayarlarınıza tüm cihazlarınızdan erişmek için oturum açın.</translation>
-<translation id="2330607597130465898">Koruma yok</translation>
 <translation id="2332131598580221120">Mağazada görüntüle</translation>
 <translation id="2332192922827071008">Tercihleri Aç</translation>
 <translation id="2332742915001411729">Varsayılana sıfırla</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Senkronizasyon çalışmıyor. Tekrar oturum açmayı deneyin.</translation>
 <translation id="3493486281776271508">İnternet bağlantısı gerekiyor</translation>
 <translation id="3493881266323043047">Geçerlilik</translation>
-<translation id="3494155060718700400">Sizi tehlikeli web sitelerine, indirmelere ve uzantılara karşı korumaz (önerilmez). Gmail ve Arama gibi diğer Google hizmetlerinde, mümkün olduğunda Güvenli Tarama korumasından yararlanmaya devam edersiniz.</translation>
 <translation id="3494769164076977169">Bir site ilk dosyadan sonraki dosyaları otomatik olarak indirmeye çalıştığında bana sor (önerilen)</translation>
 <translation id="3495660573538963482">Google Asistan ayarları</translation>
 <translation id="3496213124478423963">Uzaklaştır</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Aşağıdaki sitelerin bu sayfadaki konumunuzu izlemesi engellendi:</translation>
 <translation id="49226369361073053">{0,plural, =0{Cihazı şimdi güncelleyin}=1{Cihazı 1 saniye içinde güncelleyin}other{Cihazı # saniye içinde güncelleyin}}</translation>
 <translation id="492299503953721473">Android uygulamalarını kaldır</translation>
-<translation id="4923279099980110923">Evet, yardımcı olmak istiyorum</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Bağlantı noktalarınız burada görünecek</translation>
 <translation id="4925542575807923399">Bu hesabın yöneticisi hesabın bir çoklu oturumda ilk oturum açan hesap olmasını gerektiriyor.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Özel anahtar dosyası seçin.</translation>
 <translation id="5363109466694494651">Powerwash Uygula ve Geri Al</translation>
 <translation id="5365881113273618889">Seçtiğiniz klasör hassas dosyalar içeriyor. "<ph name="APP_NAME" />" uygulamasına bu klasör için kalıcı yazma erişimi vermek istediğinizden emin misiniz?</translation>
-<translation id="5367091008316207019">Dosya okunuyor..</translation>
 <translation id="5368720394188453070">Telefonunuz kilitli. Giriş yapmak için kilidini açın.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> alan adında oturum açın</translation>
 <translation id="5369491905435686894">Fare hızlandırmasını etkinleştir</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> gün önce etkinleştirildi</translation>
 <translation id="8986362086234534611">Unut</translation>
 <translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation>
-<translation id="8986651757229422279">Bu işlem, <ph name="ORIGIN_NAME" /> tarafından depolanan tüm veriler ve çerezler ile yüklemiş olduğu uygulamayı temizleyecek.</translation>
 <translation id="8987927404178983737">Ay</translation>
 <translation id="8991520179165052608">Site, mikrofonunuzu kullanabilir</translation>
 <translation id="899403249577094719">Netscape Sertifikası Temel URL'si</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index b01307f..760f40f 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -860,7 +860,6 @@
 <translation id="2154484045852737596">Редагувати картку</translation>
 <translation id="2154710561487035718">Копіювати URL-адресу</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" />x<ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Ви можете допомогти покращити Безпечний перегляд, надсилаючи в Google деяку інформацію про систему та вміст сторінок.</translation>
 <translation id="2156294658807918600">Синтаксис Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Щоб отримати додаткові функції, використовуйте док-станцію Dell, розроблену для цього комп'ютера Chromebook.</translation>
 <translation id="215753907730220065">Вийти з повноекранного режиму</translation>
@@ -992,7 +991,6 @@
 <translation id="2326931316514688470">&amp;Перезавантажити додаток</translation>
 <translation id="2327492829706409234">Увімкнути програму</translation>
 <translation id="2329597144923131178">Увійдіть, щоб мати доступ до закладок, історії, паролів та інших налаштувань на всіх своїх пристроях.</translation>
-<translation id="2330607597130465898">Захист вимкнено</translation>
 <translation id="2332131598580221120">Переглянути в магазині</translation>
 <translation id="2332192922827071008">Відкрити налаштування</translation>
 <translation id="2332742915001411729">Відновити масштаб за умовчанням</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3492788708641132712">Синхронізація не працює. Спробуйте ввійти ще раз.</translation>
 <translation id="3493486281776271508">Потрібне інтернет-з'єднання</translation>
 <translation id="3493881266323043047">Чинність</translation>
-<translation id="3494155060718700400">Не захищає від небезпечних веб-сайтів, завантажень і розширень (не рекомендовано). Безпечний перегляд усе ще працюватиме в інших сервісах Google (у яких він доступний), як-от Gmail і Пошук.</translation>
 <translation id="3494769164076977169">Запитувати, якщо сайт намагається завантажити файли автоматично після першого файлу (рекомендовано)</translation>
 <translation id="3495660573538963482">Налаштування Google Асистента</translation>
 <translation id="3496213124478423963">Зменшити</translation>
@@ -2923,7 +2920,6 @@
 <translation id="4920887663447894854">На цій сторінці заборонено відстежувати ваше місцезнаходження таким сайтам:</translation>
 <translation id="49226369361073053">{0,plural, =0{Оновіть пристрій зараз}=1{Оновіть пристрій протягом 1 секунди}one{Оновіть пристрій протягом # секунди}few{Оновіть пристрій протягом # секунд}many{Оновіть пристрій протягом # секунд}other{Оновіть пристрій протягом # секунд}}</translation>
 <translation id="492299503953721473">Видалити додатки Android</translation>
-<translation id="4923279099980110923">Так, я хочу допомогти</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Тут відображатимуться ваші порти</translation>
 <translation id="4925542575807923399">Адміністратору облікового запису потрібно, щоб цей обліковий запис був першим обліковим записом, з якого здійснено вхід під час сеансу паралельного входу.</translation>
@@ -3237,7 +3233,6 @@
 <translation id="5362741141255528695">Виберіть файл секретного ключа.</translation>
 <translation id="5363109466694494651">Виконати Powerwash і повернутися до попередньої версії</translation>
 <translation id="5365881113273618889">Вибрана папка містить файли з конфіденційною інформацією. Надати додатку <ph name="APP_NAME" /> постійний дозвіл на редагування цієї папки?</translation>
-<translation id="5367091008316207019">Читання файлу...</translation>
 <translation id="5368720394188453070">Ваш телефон заблоковано. Щоб увійти, розблокуйте його.</translation>
 <translation id="5368779022775404937">Увійти на сторінці <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Увімкнути прискорення миші</translation>
@@ -5963,7 +5958,6 @@
 <translation id="8985264973231822211">У мережі <ph name="DEVICE_LAST_ACTIVATED_TIME" /> дн. тому</translation>
 <translation id="8986362086234534611">Видалити</translation>
 <translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation>
-<translation id="8986651757229422279">Усі дані та файли cookie сайту <ph name="ORIGIN_NAME" />, а також встановлений ним додаток, буде видалено.</translation>
 <translation id="8987927404178983737">Місяць</translation>
 <translation id="8991520179165052608">Сайт може використовувати мікрофон</translation>
 <translation id="899403249577094719">Основна URL-адреса сертифіката Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 7505bb9..6e72b21 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -827,6 +827,7 @@
 <translation id="2119349053129246860"><ph name="APP" /> میں کھولیں</translation>
 <translation id="2120297377148151361">سرگرمی اور تعاملات</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> کو مسدود کر دیا گیا</translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{کوکیز مسدود ہیں}=1{سوائے 1 کے، کوکیز مسدود ہیں}other{سوائے {COUNT} کے، کوکیز مسدود ہیں}}</translation>
 <translation id="2121825465123208577">سائز تبدیل کریں</translation>
 <translation id="2122305276694332719">پوشیدہ نیٹ ورک سے خود کار طور پر منسلک ہونے سے دوسروں کو آپ کا آلہ اور نیٹ ورک کی کچھ ترتیبات دیکھنے میں سہولت ملتی ہے اور اس کی تجویز نہیں کی جاتی ہے۔</translation>
 <translation id="2123766928840368256">ایک مختلف فائل منتخب کریں</translation>
@@ -860,7 +861,6 @@
 <translation id="2154484045852737596">کارڈ میں ترمیم کریں</translation>
 <translation id="2154710561487035718">‏URL کاپی کریں</translation>
 <translation id="2155772377859296191">‏<ph name="WIDTH" /> x <ph name="HEIGHT" /> جیسا نظر آتا ہے</translation>
-<translation id="2156283799932971644">‏آپ سسٹم کی کچھ معلومات اور صفحے کا کچھ مواد Google کو بھیج کر محفوظ براؤزنگ کو بہتر بنانے میں مدد کر سکتے ہیں۔</translation>
 <translation id="2156294658807918600">سروس ورکر: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">‏اضافی خصوصیات حاصل کرنے کیلئے، اس Chromebook کے ساتھ کام کرنے کیلئے ڈیزائن کردہ ایک Dell ڈاکنگ اسٹیشن استعمال کریں۔</translation>
 <translation id="215753907730220065">پوری اسکرین سے خارج ہوں</translation>
@@ -992,7 +992,6 @@
 <translation id="2326931316514688470">ایپ &amp;دوبارہ لوڈ کریں</translation>
 <translation id="2327492829706409234">ایپ فعال کریں</translation>
 <translation id="2329597144923131178">اپنے سبھی آلات پر اپنے بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات حاصل کرنے کیلئے سائن ان کریں۔</translation>
-<translation id="2330607597130465898">کوئی تحفظ نہیں</translation>
 <translation id="2332131598580221120">اسٹور میں دیکھیں</translation>
 <translation id="2332192922827071008">ترجیحات کھولیں</translation>
 <translation id="2332742915001411729">ڈیفالٹ پر دوبارہ ترتیب دیں</translation>
@@ -1873,7 +1872,6 @@
 <translation id="3492788708641132712">مطابقت پذیری کام نہیں کر رہی ہے۔ دوبارہ سائن ان کرنے کی کوشش کریں۔</translation>
 <translation id="3493486281776271508">انٹرنیٹ کنکشن کی ضرورت ہے</translation>
 <translation id="3493881266323043047">درستگی</translation>
-<translation id="3494155060718700400">‏خطرناک ویب سائٹس، ڈاؤن لوڈز اور ایکسٹینشنز سے آپ کی حفاظت نہیں کرتی ہے (تجویز نہیں کی جاتی ہے)۔ آپ کو اب بھی Gmail اور تلاش جیسی Google کی دیگر سروسز میں جہاں بھی دستیاب ہوگا محفوظ براؤزنگ کا تحفظ ملے گا۔</translation>
 <translation id="3494769164076977169">جب کوئی سائٹ پہلی فائل کے بعد خود بخود فائلیں ڈاؤن لوڈ کرنے کی کوشش کرے تو پوچھیں (تجویز کردہ)</translation>
 <translation id="3495660573538963482">‏Google اسسٹنٹ کی ترتیبات</translation>
 <translation id="3496213124478423963">زوم آؤٹ کریں</translation>
@@ -2924,7 +2922,6 @@
 <translation id="4920887663447894854">مندرجہ ذیل سائٹس کو اس صفحہ پر آپ کے مقام کو ٹریک کرنے سے مسدود کر دیا گیا ہے:</translation>
 <translation id="49226369361073053">{0,plural, =0{ابھی آلہ کو اپ ڈیٹ کریں}=1{1 سیکنڈ کے اندر آلہ کو اپ ڈیٹ کریں}other{# سیکنڈز کے اندر آلہ کو اپ ڈیٹ کریں}}</translation>
 <translation id="492299503953721473">‏Android ایپس ہٹائیں</translation>
-<translation id="4923279099980110923">ہاں، میں مدد کرنا چاہتا ہوں</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">آپ کے پورٹس یہاں دکھائی دیں گے</translation>
 <translation id="4925542575807923399">اس اکاؤنٹ کے منتظم کا تقاضہ ہے کہ یہ اکاؤنٹ متعدد سائن سیشن میں پہلا سائن ان کردہ اکاؤنٹ ہو۔</translation>
@@ -3238,7 +3235,6 @@
 <translation id="5362741141255528695">نجی کلید والی فائل منتخب کریں۔</translation>
 <translation id="5363109466694494651">پاور واش کریں اور لوٹیں</translation>
 <translation id="5365881113273618889">آپ کے منتخب کردہ فولڈر میں حساس فائلز شامل ہیں۔ کیا آپ واقعی "<ph name="APP_NAME" />" کو اس فولڈر میں لکھنے کی مستقل رسائی دینا چاہتے ہیں؟</translation>
-<translation id="5367091008316207019">فائل پڑھی جا رہی ہے…</translation>
 <translation id="5368720394188453070">آپ کا فون مقفل ہے۔ داخل ہونے کیلئے اسے غیر مقفل کریں۔</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> میں سائن ان کریں</translation>
 <translation id="5369491905435686894">ماؤس ایکسلریشن فعال کریں</translation>
@@ -5964,7 +5960,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> دن پہلے فعال کیا گیا</translation>
 <translation id="8986362086234534611">بھول جائیں</translation>
 <translation id="8986494364107987395">‏خود کار طریقے سے Google کو استعمال کے اعداد و شمار اور کریش کی رپورٹیں بھیجیں</translation>
-<translation id="8986651757229422279">اس سے <ph name="ORIGIN_NAME" /> کا اسٹور کردہ تمام ڈیٹا اور کوکیز اور اس کی انسٹال کردہ ایپ صاف ہو جائے گی۔</translation>
 <translation id="8987927404178983737">ماہ</translation>
 <translation id="8991520179165052608">سائٹ آپ کا مائیکروفون استعمال کر سکتی ہے</translation>
 <translation id="899403249577094719">‏Netscape سرٹیفکیٹ بیس URL</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 9786c00..393a01a1 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -858,7 +858,6 @@
 <translation id="2154484045852737596">Karta ma’lumotlarini tahrirlash</translation>
 <translation id="2154710561487035718">URL manzilni nusxalash</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> kabi</translation>
-<translation id="2156283799932971644">Tizim va sahifa haqidagi ba’zi axborotni Google serverlariga yuborish orqali xavfsiz brauzerni yaxshilanishiga yordam berasiz.</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Qoʻshimcha funksiyalardan foydalanish uchun bu Chromebook bilan sinalgan Dell dok stansiyasini ishlating.</translation>
 <translation id="215753907730220065">To‘liq ekran rejimidan chiqish</translation>
@@ -990,7 +989,6 @@
 <translation id="2326931316514688470">&amp;Ilovani qayta yuklash</translation>
 <translation id="2327492829706409234">Ilovani yoqish</translation>
 <translation id="2329597144923131178">Xatcho‘plar, tarix, parollar va boshqa sozlamalarni barcha qurilmalaringizda sinxronlash uchun hisobingizga kiring.</translation>
-<translation id="2330607597130465898">Himoyasiz</translation>
 <translation id="2332131598580221120">Internet-do‘konda ochish</translation>
 <translation id="2332192922827071008">Parametrlarni ochish</translation>
 <translation id="2332742915001411729">Standart masshtab</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">Sinxronizatsiya ishlamayapti. Qaytadan hisobingizga kiring.</translation>
 <translation id="3493486281776271508">Internet bilan aloqa zarur</translation>
 <translation id="3493881266323043047">Yaroqlilik muddati</translation>
-<translation id="3494155060718700400">Zararli sayt, yuklanma va kengaytmalardan himoya qila olmaydi (tavsiya etilmaydi). Gmail va Qidiruv kabi Google xizmatlarida Saytlarni xavfsiz kezish himoyasi ostida boʻlasiz.</translation>
 <translation id="3494769164076977169">Bir fayl yuklab olinganda qo‘shimcha fayllarni yuklab olish so‘rovi ko‘rsatilsin (tavsiya etiladi)</translation>
 <translation id="3495660573538963482">Google Assistent sozlamalari</translation>
 <translation id="3496213124478423963">Kichiklashtirish</translation>
@@ -2921,7 +2918,6 @@
 <translation id="4920887663447894854">Quyidagi saytlar joylashuvingiz ma’lumotlarini ko‘rmoqchi bo‘lganda bloklangan:</translation>
 <translation id="49226369361073053">{0,plural, =0{Qurilmani hoziroq oʻchirib yoqish kerak}=1{Qurilmani 1 soniya ichida oʻchirib yoqish kerak}other{Qurilmani # soniya ichida oʻchirib yoqish kerak}}</translation>
 <translation id="492299503953721473">Android ilovarni olib tashlash</translation>
-<translation id="4923279099980110923">Ha, menga yordam kerak</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Portlar bu yerda chiqadi</translation>
 <translation id="4925542575807923399">Bu hisobning administratori ko‘plab tizimga kirish seanslarida birinchi bo‘lib shu hisobga kirishni talab qiladi.</translation>
@@ -3235,7 +3231,6 @@
 <translation id="5362741141255528695">Yopiq kalit faylini tanlang.</translation>
 <translation id="5363109466694494651">Powerwash va Revert</translation>
 <translation id="5365881113273618889">Tanlangan jildda maxfiy maʼlumotlar mavjud. “<ph name="APP_NAME" />” ilovasiga ushbu jildga yozish uchun doimiy ruxsat berilsinmi?</translation>
-<translation id="5367091008316207019">Fayl o‘qilmoqda...</translation>
 <translation id="5368720394188453070">Kirish uchun telefonni qulfdan chiqaring.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> domeniga kirish</translation>
 <translation id="5369491905435686894">Sichqonchani tezlatkichni yoqish</translation>
@@ -5959,7 +5954,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> kun oldin onlayn edi</translation>
 <translation id="8986362086234534611">Olib tashlash</translation>
 <translation id="8986494364107987395">Foydalanish statistikasi va ishdan chiqishlar hisobotini avtomatik ravishda Google‘ga jo‘natish</translation>
-<translation id="8986651757229422279">Bunda <ph name="ORIGIN_NAME" /> saytidan saqlangan barcha maʼlumotlar, cookie fayllar va oʻrnatilgan ilovalar tozalab tashlanadi.</translation>
 <translation id="8987927404178983737">Oy</translation>
 <translation id="8991520179165052608">Sayt mikrofondan foydalanishi mumkin</translation>
 <translation id="899403249577094719">Netscape sertifikatlar omborining URL manzili</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 8a80a54..5ca11e51 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">Mở trong <ph name="APP" /></translation>
 <translation id="2120297377148151361">Hoạt động và tương tác</translation>
 <translation id="2120639962942052471">Đã chặn <ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{Đã chặn các cookie}=1{Đã chặn các cookie nhưng có 1 trường hợp ngoại lệ}other{Đã chặn các cookie nhưng có {COUNT} trường hợp ngoại lệ}}</translation>
 <translation id="2121825465123208577">Đổi kích thước</translation>
 <translation id="2122305276694332719">Việc tự động kết nối vào một mạng ẩn sẽ cho phép những người khác nhìn thấy thiết bị và một số tùy chọn cài đặt mạng của bạn. Bạn không nên bật tùy chọn này.</translation>
 <translation id="2123766928840368256">Chọn một tệp khác</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">Chỉnh sửa thẻ</translation>
 <translation id="2154710561487035718">Sao chép URL</translation>
 <translation id="2155772377859296191">Có vẻ như là <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Bạn có thể giúp cải tiến tính năng Duyệt web an toàn bằng cách gửi một số thông tin hệ thống và nội dung trang tới Google.</translation>
 <translation id="2156294658807918600">Trình chạy dịch vụ: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Để có thêm tính năng, hãy sử dụng đế sạc Dell tương thích với Chromebook này.</translation>
 <translation id="215753907730220065">Thoát khỏi Chế độ Toàn màn hình</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">Tải &amp;lại ứng dụng</translation>
 <translation id="2327492829706409234">Bật ứng dụng</translation>
 <translation id="2329597144923131178">Đăng nhập để sử dụng dấu trang, lịch sử hoạt động, mật khẩu và các tùy chọn cài đặt khác trên tất cả thiết bị của bạn.</translation>
-<translation id="2330607597130465898">Chế độ không bảo vệ</translation>
 <translation id="2332131598580221120">Xem trong cửa hàng</translation>
 <translation id="2332192922827071008">Mở Tùy chọn</translation>
 <translation id="2332742915001411729">Đặt lại về mặc định</translation>
@@ -1871,7 +1870,6 @@
 <translation id="3492788708641132712">Đồng bộ hóa không hoạt động. Thử đăng nhập lại.</translation>
 <translation id="3493486281776271508">Cần có kết nối Internet</translation>
 <translation id="3493881266323043047">Hiệu lực</translation>
-<translation id="3494155060718700400">Không bảo vệ bạn trước các trang web, tệp đã tải xuống và tiện ích nguy hiểm (không khuyên dùng). Bạn sẽ vẫn được bảo vệ bằng tính năng Duyệt web An toàn (nếu có) ở các dịch vụ khác của Google, chẳng hạn như Gmail và Tìm kiếm.</translation>
 <translation id="3494769164076977169">Hỏi khi trang web cố gắng tự động tải tệp xuống sau tệp đầu tiên (được đề xuất)</translation>
 <translation id="3495660573538963482">Cài đặt Trợ lý Google</translation>
 <translation id="3496213124478423963">Thu Nhỏ</translation>
@@ -2922,7 +2920,6 @@
 <translation id="4920887663447894854">Các trang web sau đã bị chặn theo dõi vị trí của bạn trên trang này:</translation>
 <translation id="49226369361073053">{0,plural, =0{Cập nhật thiết bị ngay}=1{Cập nhật thiết bị trong vòng 1 giây}other{Cập nhật thiết bị trong vòng # giây}}</translation>
 <translation id="492299503953721473">Xóa ứng dụng Android</translation>
-<translation id="4923279099980110923">Vâng, tôi muốn được trợ giúp</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Các cổng của bạn sẽ xuất hiện ở đây</translation>
 <translation id="4925542575807923399">Quản trị viên của tài khoản này yêu cầu tài khoản này là tài khoản đăng nhập đầu tiên trong phiên đăng nhập nhiều tài khoản.</translation>
@@ -3236,7 +3233,6 @@
 <translation id="5362741141255528695">Chọn tệp khóa cá nhân.</translation>
 <translation id="5363109466694494651">Powerwash và hoàn nguyên</translation>
 <translation id="5365881113273618889">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 cho "<ph name="APP_NAME" />" quyền ghi vào thư mục này vĩnh viễn không?</translation>
-<translation id="5367091008316207019">Đang đọc tệp..</translation>
 <translation id="5368720394188453070">Điện thoại của bạn bị khóa. Hãy mở khóa điện thoại để truy cập.</translation>
 <translation id="5368779022775404937">Đăng nhập vào <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Bật tính năng tăng tốc chuột</translation>
@@ -5962,7 +5958,6 @@
 <translation id="8985264973231822211">Hoạt động <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ngày trước</translation>
 <translation id="8986362086234534611">Quên</translation>
 <translation id="8986494364107987395">Tự động gửi số liệu thống kê về việc sử dụng và báo cáo sự cố cho Google</translation>
-<translation id="8986651757229422279">Thao tác này sẽ xóa toàn bộ dữ liệu và cookie mà <ph name="ORIGIN_NAME" /> lưu trữ, cũng như các ứng dụng đã cài đặt của nguồn đó.</translation>
 <translation id="8987927404178983737">Tháng</translation>
 <translation id="8991520179165052608">Trang web có thể sử dụng micrô của bạn</translation>
 <translation id="899403249577094719">URL Cơ sở Chứng chỉ Netscape</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 33290645..af449355d 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -823,6 +823,7 @@
 <translation id="2119349053129246860">在“<ph name="APP" />”中打开</translation>
 <translation id="2120297377148151361">活动和互动行为</translation>
 <translation id="2120639962942052471">已禁用<ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{已阻止 Cookie}=1{已阻止 Cookie,但有 1 项例外情况}other{已阻止 Cookie,但有 {COUNT} 项例外情况}}</translation>
 <translation id="2121825465123208577">调整大小</translation>
 <translation id="2122305276694332719">自动连接至隐藏的网络会导致其他人能查看您的设备和一些网络设置,因此我们建议不要这样做。</translation>
 <translation id="2123766928840368256">另选一个文件</translation>
@@ -856,7 +857,6 @@
 <translation id="2154484045852737596">修改支付卡</translation>
 <translation id="2154710561487035718">复制网址</translation>
 <translation id="2155772377859296191">有效分辨率:<ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">您可以选择向 Google 发送一些系统信息和网页内容,以帮助我们改进安全浏览功能。</translation>
 <translation id="2156294658807918600">Service Worker:<ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">要获得更多功能,请使用由戴尔专为这款 Chromebook 设计的基座。</translation>
 <translation id="215753907730220065">退出全屏模式</translation>
@@ -988,7 +988,6 @@
 <translation id="2326931316514688470">重新加载应用(&amp;R)</translation>
 <translation id="2327492829706409234">启用应用</translation>
 <translation id="2329597144923131178">登录后可获取您所有设备上保存的书签、历史记录、密码和其他设置。</translation>
-<translation id="2330607597130465898">无保护</translation>
 <translation id="2332131598580221120">在应用店中查看</translation>
 <translation id="2332192922827071008">打开偏好设置</translation>
 <translation id="2332742915001411729">重置为默认设置</translation>
@@ -1866,7 +1865,6 @@
 <translation id="3492788708641132712">无法同步。请尝试重新登录。</translation>
 <translation id="3493486281776271508">需要互联网连接</translation>
 <translation id="3493881266323043047">有效期</translation>
-<translation id="3494155060718700400">不保护您免受危险网站、下载内容和扩展程序的侵害(不推荐)。在 Gmail 和 Google 搜索等其他 Google 服务中,若安全浏览保护可用,您仍将获得该保护。</translation>
 <translation id="3494769164076977169">当网站下载第一个文件后要自动下载更多文件时询问您(推荐)</translation>
 <translation id="3495660573538963482">Google 助理设置</translation>
 <translation id="3496213124478423963">缩小</translation>
@@ -2914,7 +2912,6 @@
 <translation id="4920887663447894854">系统已阻止以下网站跟踪您在此网页上的位置:</translation>
 <translation id="49226369361073053">{0,plural, =0{立即更新此设备}=1{请在 1 秒内更新此设备}other{请在 # 秒内更新此设备}}</translation>
 <translation id="492299503953721473">移除 Android 应用</translation>
-<translation id="4923279099980110923">我愿意提供帮助</translation>
 <translation id="4924352752174756392">12 倍</translation>
 <translation id="4925320384394644410">您的端口将会显示在此处</translation>
 <translation id="4925542575807923399">此帐号的管理员规定:在多帐号登录会话中,此帐号必须是最先登录的帐号。</translation>
@@ -3227,7 +3224,6 @@
 <translation id="5362741141255528695">选择私有密钥文件。</translation>
 <translation id="5363109466694494651">执行 Powerwash 操作并还原</translation>
 <translation id="5365881113273618889">您所选的文件夹中包含敏感文件。确定要向“<ph name="APP_NAME" />”授予对此文件夹的永久写入权限吗?</translation>
-<translation id="5367091008316207019">正在读取文件...</translation>
 <translation id="5368720394188453070">配对手机已锁定,需将其解锁才能进入。</translation>
 <translation id="5368779022775404937">登录 <ph name="REALM" /></translation>
 <translation id="5369491905435686894">启用鼠标加速</translation>
@@ -5950,7 +5946,6 @@
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> 天前曾有活动</translation>
 <translation id="8986362086234534611">不保存</translation>
 <translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation>
-<translation id="8986651757229422279">这会清除 <ph name="ORIGIN_NAME" /> 及其中安装的应用存储的所有数据和 Cookie。</translation>
 <translation id="8987927404178983737">月</translation>
 <translation id="8991520179165052608">该网站可能会使用您的麦克风</translation>
 <translation id="899403249577094719">Netscape 证书基本网址</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index c8c68d4..42c74f6 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">在 <ph name="APP" /> 中開啟</translation>
 <translation id="2120297377148151361">活動和互動</translation>
 <translation id="2120639962942052471">已封鎖<ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{已封鎖 Cookie}=1{已封鎖 Cookie,有 1 個例外情況}other{已封鎖 Cookie,有 {COUNT} 個例外情況}}</translation>
 <translation id="2121825465123208577">調整大小</translation>
 <translation id="2122305276694332719">自動連線至隱藏網絡會讓其他人可查看您的裝置和部分網絡設定,建議您不要啟用此設定。</translation>
 <translation id="2123766928840368256">選擇其他檔案</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">編輯付款信用卡</translation>
 <translation id="2154710561487035718">複製網址</translation>
 <translation id="2155772377859296191">解像度:<ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">您可以將部分系統資訊和網頁內容傳送至 Google,以協助改善「安全瀏覽」的效能。</translation>
 <translation id="2156294658807918600">Service Worker:<ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">如要取得其他功能,請使用此 Chromebook 的專用插座。</translation>
 <translation id="215753907730220065">結束全螢幕</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">重新載入應用程式(&amp;R)</translation>
 <translation id="2327492829706409234">啟用應用程式</translation>
 <translation id="2329597144923131178">登入後,即可從您使用的任何裝置取得自己的書籤、歷史記錄、密碼和其他設定。</translation>
-<translation id="2330607597130465898">沒有保護</translation>
 <translation id="2332131598580221120">前往商店檢視</translation>
 <translation id="2332192922827071008">開啟偏好設定</translation>
 <translation id="2332742915001411729">重設為預設值</translation>
@@ -1869,7 +1868,6 @@
 <translation id="3492788708641132712">同步處理功能無法正常運作,請嘗試重新登入。</translation>
 <translation id="3493486281776271508">需要互聯網連線</translation>
 <translation id="3493881266323043047">有效性</translation>
-<translation id="3494155060718700400">無法防範危險網站、下載檔案和擴充程式 (不建議)。您仍可在其他 Google 服務 (例如 Gmail 和搜尋) 中使用「安全瀏覽」功能 (如有)。</translation>
 <translation id="3494769164076977169">在網站已下載第一個檔案,並且嘗試自動下載更多檔案時先通知您 (建議使用)</translation>
 <translation id="3495660573538963482">Google 助理設定</translation>
 <translation id="3496213124478423963">縮小</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">下列網站已被封鎖,無法在您瀏覽這個網頁時追蹤您的位置:</translation>
 <translation id="49226369361073053">{0,plural, =0{立即更新裝置}=1{請在 1 秒內更新裝置}other{請在 # 秒內更新裝置}}</translation>
 <translation id="492299503953721473">移除 Android 應用程式</translation>
-<translation id="4923279099980110923">是,我願意協助</translation>
 <translation id="4924352752174756392">12 倍</translation>
 <translation id="4925320384394644410">您的連接埠將會在這裡顯示</translation>
 <translation id="4925542575807923399">這個帳戶的管理員要求這個帳戶必須是多重登入工作階段中第一個登入的帳戶。</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">選取私密金鑰檔案。</translation>
 <translation id="5363109466694494651">執行 Powerwash 並還原</translation>
 <translation id="5365881113273618889">您選取的資料夾包含敏感檔案。確定要將此資料夾的寫入權限永久授予「<ph name="APP_NAME" />」嗎?</translation>
-<translation id="5367091008316207019">正在讀取檔案…</translation>
 <translation id="5368720394188453070">您的手機已被鎖定。請解鎖以進入。</translation>
 <translation id="5368779022775404937">登入 <ph name="REALM" /></translation>
 <translation id="5369491905435686894">啟用滑鼠加速</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">曾於 <ph name="DEVICE_LAST_ACTIVATED_TIME" /> 天前在線</translation>
 <translation id="8986362086234534611">清除</translation>
 <translation id="8986494364107987395">自動將使用統計資料和當機報告傳送給 Google</translation>
-<translation id="8986651757229422279">此操作會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie,以及該網站所安裝的應用程式。</translation>
 <translation id="8987927404178983737">月</translation>
 <translation id="8991520179165052608">網站可以使用您的麥克風</translation>
 <translation id="899403249577094719">Netscape 憑證基底網址</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index f86acd8..f46e8768 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -826,6 +826,7 @@
 <translation id="2119349053129246860">在「<ph name="APP" />」中開啟</translation>
 <translation id="2120297377148151361">活動與互動行為</translation>
 <translation id="2120639962942052471">已封鎖<ph name="PERMISSION" /></translation>
+<translation id="2121055421682309734">{COUNT,plural, =0{已封鎖 Cookie}=1{已封鎖 Cookie,有 1 個例外狀況}other{已封鎖 Cookie,有 {COUNT} 個例外狀況}}</translation>
 <translation id="2121825465123208577">調整大小</translation>
 <translation id="2122305276694332719">自動連線至隱藏網路會讓其他人可以查看你的裝置和部分網路設定,建議你不要啟用這項設定。</translation>
 <translation id="2123766928840368256">選擇其他檔案</translation>
@@ -859,7 +860,6 @@
 <translation id="2154484045852737596">編輯卡片資訊</translation>
 <translation id="2154710561487035718">複製網址</translation>
 <translation id="2155772377859296191">螢幕解析度:<ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">你可以將部分系統資訊和網頁內容傳送給 Google,協助我們改善安全瀏覽功能。</translation>
 <translation id="2156294658807918600">Service Worker:<ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">如要取得其他功能,請使用這部 Chromebook 的專用座架。</translation>
 <translation id="215753907730220065">結束全螢幕</translation>
@@ -991,7 +991,6 @@
 <translation id="2326931316514688470">重新載入應用程式(&amp;R)</translation>
 <translation id="2327492829706409234">啟用應用程式</translation>
 <translation id="2329597144923131178">登入後,即可從您使用的任何裝置取得自己的書籤、歷史記錄、密碼和其他設定。</translation>
-<translation id="2330607597130465898">無防護</translation>
 <translation id="2332131598580221120">前往商店查看</translation>
 <translation id="2332192922827071008">開啟偏好設定</translation>
 <translation id="2332742915001411729">重設為預設值</translation>
@@ -1870,7 +1869,6 @@
 <translation id="3492788708641132712">同步功能無法正常運作,請嘗試重新登入。</translation>
 <translation id="3493486281776271508">需要網際網路連線</translation>
 <translation id="3493881266323043047">有效性</translation>
-<translation id="3494155060718700400">無法防範不安全的網站、下載內容和擴充功能 (不建議)。在 Gmail 和 Google 搜尋等其他 Google 服務中,你仍可獲得安全瀏覽的防護 (如適用)。</translation>
 <translation id="3494769164076977169">在網站已下載第一個檔案,並且嘗試自動下載更多檔案時先通知你 (建議使用)</translation>
 <translation id="3495660573538963482">Google 助理設定</translation>
 <translation id="3496213124478423963">縮小</translation>
@@ -2920,7 +2918,6 @@
 <translation id="4920887663447894854">下列網站已遭封鎖,無法在你瀏覽此網頁時追蹤你的位置:</translation>
 <translation id="49226369361073053">{0,plural, =0{請立即更新裝置}=1{請在 1 秒內更新裝置}other{請在 # 秒內更新裝置}}</translation>
 <translation id="492299503953721473">移除 Android 應用程式</translation>
-<translation id="4923279099980110923">是,我願意協助</translation>
 <translation id="4924352752174756392">12 倍</translation>
 <translation id="4925320384394644410">你的通訊埠會顯示在這裡</translation>
 <translation id="4925542575807923399">這個帳戶的管理員要求此帳戶必需是多重登入工作階段中第一個登入的帳戶。</translation>
@@ -3234,7 +3231,6 @@
 <translation id="5362741141255528695">選取秘密金鑰檔案。</translation>
 <translation id="5363109466694494651">執行 Powerwash 並恢復原廠設定</translation>
 <translation id="5365881113273618889">你選取的資料夾包含敏感檔案。你確定要將這個資料夾的寫入權限永久授予「<ph name="APP_NAME" />」嗎?</translation>
-<translation id="5367091008316207019">正在讀取檔案...</translation>
 <translation id="5368720394188453070">你的手機已鎖定,必須解鎖才能繼續操作。</translation>
 <translation id="5368779022775404937">登入 <ph name="REALM" /></translation>
 <translation id="5369491905435686894">啟用滑鼠加速</translation>
@@ -5959,7 +5955,6 @@
 <translation id="8985264973231822211">上次使用時間:<ph name="DEVICE_LAST_ACTIVATED_TIME" /> 天前</translation>
 <translation id="8986362086234534611">清除</translation>
 <translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation>
-<translation id="8986651757229422279">這會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie,以及該網站所安裝的應用程式。</translation>
 <translation id="8987927404178983737">月</translation>
 <translation id="8991520179165052608">網站可以使用你的麥克風</translation>
 <translation id="899403249577094719">Netscape 憑證基底網址</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 2ee63c0..d68c74d 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -858,7 +858,6 @@
 <translation id="2154484045852737596">Hlela ikhadi</translation>
 <translation id="2154710561487035718">Kopisa i-URL</translation>
 <translation id="2155772377859296191">Kubukeka njenge-<ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="2156283799932971644">Ungasiza ukuthuthukisa ukuphequlula okuphephile ngokuthumela olunye ulwazi lwesistimu nokuqukethwe kwekhasi ku-Google.</translation>
 <translation id="2156294658807918600">Umsebenzi wesevisi: <ph name="SCRIPT_URL" /></translation>
 <translation id="2157474325782140681">Ukuze uthole izici ezingeziwe, sebenzisa isiteshi sedokhu se-Dell esidizayinelwe ukusebenza nale Chromebook.</translation>
 <translation id="215753907730220065">Phuma kusikrini esigcwele</translation>
@@ -990,7 +989,6 @@
 <translation id="2326931316514688470">&amp;Phinda ulayishe uhlelo lokusebenza</translation>
 <translation id="2327492829706409234">Nika amandla uhlelo lokusebenza</translation>
 <translation id="2329597144923131178">Ngena ngemvume ukuze uthole amabhukhimakhi wakho, umlando, amaphasiwedi, nezinye izilungiselelo kuwo wonke amadivayisi wakho.</translation>
-<translation id="2330607597130465898">Akukho ukuvikelwa</translation>
 <translation id="2332131598580221120">Buka esitolo</translation>
 <translation id="2332192922827071008">Vula okuthandayo</translation>
 <translation id="2332742915001411729">Sethela kabusha kokuzenzakalelayo</translation>
@@ -1870,7 +1868,6 @@
 <translation id="3492788708641132712">Ukuvumelanisa akusebenzi. Zama ukuphinda ungene ngemvume futhi.</translation>
 <translation id="3493486281776271508">Ukuxhumeka kwe-inthanethi kuyadingeka</translation>
 <translation id="3493881266323043047">Ukuqinisekisa</translation>
-<translation id="3494155060718700400">Akukuvikeli kumawebhusayithi ayingozi, okulandwayo nezandiso (akunconywa). Usazokuthola ukuvikelwa kokuphequlula okuphephile, lapho kutholakala, kwamanye amasevisi we-Google, njenge-Gmail. nokuSesha.</translation>
 <translation id="3494769164076977169">Buza uma isayithi lizama ukulanda amafayela ngokuzenzakalela ngemuva kwefayela lokuqala (kunconyiwe)</translation>
 <translation id="3495660573538963482">Izilungiselelo zomsizi we-Google</translation>
 <translation id="3496213124478423963">Hlehlisa isithombe</translation>
@@ -2920,7 +2917,6 @@
 <translation id="4920887663447894854">Amasayithi alandelayo avinjelwe kusuka ekulandeleleni indawo yakho kuleli khasi:</translation>
 <translation id="49226369361073053">{0,plural, =0{Buyekeza idivayisi yakho manje}=1{Buykeza idivayis yakho phakathi nesekhondi elingu-1}one{Buyekeza idivayisi yakho phakathi namasekhondi angu-#}other{Buyekeza idivayisi yakho phakathi namasekhondi angu-#}}</translation>
 <translation id="492299503953721473">Susa izinhlelo zokusebenza ze-Android</translation>
-<translation id="4923279099980110923">Yebo, ngifuna ukusiza</translation>
 <translation id="4924352752174756392">12x</translation>
 <translation id="4925320384394644410">Izimbobo zakho zizovela lapha</translation>
 <translation id="4925542575807923399">Umlawuli wale akhawunti udinga le akhawunti ukuthi ibe yi-akhawunti yokuqala engene ngemvume kuseshini yokungena ngemvume eningi.</translation>
@@ -3236,7 +3232,6 @@
 <translation id="5362741141255528695">Khetha ifayela lokhiye oyimfihlo.</translation>
 <translation id="5363109466694494651">Geza ngamandla uphinde Ubuyele</translation>
 <translation id="5365881113273618889">Ifolda oyikhethile iqukethe amafayela azwelayo. Ingabe uqinisekile ukuthi ufuna ukunika i-"<ph name="APP_NAME" />" ukufinyelela kokubhala kwanaphakade kule folda?</translation>
-<translation id="5367091008316207019">Ifunda ifayela..</translation>
 <translation id="5368720394188453070">Ifoni yakho ikhiyiwe. Ivule ukuze ungene.</translation>
 <translation id="5368779022775404937">Ngena ngemvume ku-<ph name="REALM" /></translation>
 <translation id="5369491905435686894">Nika amandla ukusheshiswa kwemawuzi</translation>
@@ -5962,7 +5957,6 @@
 <translation id="8985264973231822211">Isebenze ngosuku olungu-<ph name="DEVICE_LAST_ACTIVATED_TIME" /> oludlule</translation>
 <translation id="8986362086234534611">Khohlwa</translation>
 <translation id="8986494364107987395">Thumela ngokuzenzakalela izibalo zokusetshenziswa nemibiko yokuphahlazeka ku-Google</translation>
-<translation id="8986651757229422279">Lokhu kuzosula yonke idatha namakhukhi alondolozwe nge-<ph name="ORIGIN_NAME" /> nohlelo lokusebenza lakhona olufakiwe.</translation>
 <translation id="8987927404178983737">Inyanga</translation>
 <translation id="8991520179165052608">Isayithi lingasebenzisa imakrofoni yakho</translation>
 <translation id="899403249577094719">I-URL yesisekelo sesitifiketi se-Netscape</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb
index d5d8381..41508a45 100644
--- a/chrome/app/resources/google_chrome_strings_am.xtb
+++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome አልተዘመነም፣ የሆነ ስክህተት ተከስቷል። <ph name="BEGIN_LINK" />የChrome ዝማኔ ችግሮችን እና ያልተሳኩ ዝማኔዎችን ያስተካክሉ።<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - በአውታረ መረብ ወደ መለያ መግባት - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome በጀርባ ሁኔታ ላይ ነው።</translation>
+<translation id="3059710691562604940">የጥንቃቄ አሰሳ ጠፍቷል። Chrome እንዲያበሩት ይመክራል።</translation>
 <translation id="3065168410429928842">የChrome ትር</translation>
 <translation id="3080151273017101988">Google Chrome ሲዘጋ የጀርባ መተግበሪያዎችን ማሂዱን ይቀጥሉ</translation>
 <translation id="3089968997497233615">አዲስና ደህንነቱ ይበልጥ የተጠበቀ የGoogle Chrome ስሪት ይገኛል።</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb
index d7e7838..3b4be96 100644
--- a/chrome/app/resources/google_chrome_strings_ar.xtb
+++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -68,10 +68,11 @@
 <translation id="2847461019998147611">‏عرض Google Chrome بهذه اللغة</translation>
 <translation id="2857540653560290388">‏جارٍ إطلاق Chrome...</translation>
 <translation id="2871893339301912279">‏تم تسجيل دخولك إلى Chrome!</translation>
-<translation id="2888126860611144412">‏لمحة عن Chrome</translation>
+<translation id="2888126860611144412">‏لمحة عامة عن Chrome</translation>
 <translation id="2929907241665500097">‏تعذّر تحديث Chrome بسبب حدوث خطأ. <ph name="BEGIN_LINK" />حلّ مشاكل تحديث Chrome وتعذُّر التحديثات<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736">‏<ph name="PAGE_TITLE" /> - Chrome - تسجيل الدخول إلى الشبكة</translation>
 <translation id="3037838751736561277">‏Google Chrome في وضع الخلفية.</translation>
+<translation id="3059710691562604940">‏تم إيقاف "التصفّح الآمن" ويقترح متصفّح Chrome تفعيله.</translation>
 <translation id="3065168410429928842">‏علامة تبويب Chrome</translation>
 <translation id="3080151273017101988">‏استمرار تشغيل تطبيقات الخلفية عند إغلاق Google Chrome</translation>
 <translation id="3089968997497233615">‏يتوفر إصدار جديد وأكثر أمانًا لمتصفح Google Chrome.</translation>
@@ -152,7 +153,7 @@
 <translation id="5686916850681061684">‏تخصيص Google Chrome والتحكم فيه معلومات مهمة - انقر للحصول على التفاصيل.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
 <translation id="5715063361988620182">{SECONDS,plural, =1{‏ستتم إعادة تشغيل Google Chrome خلال ثانية واحدة}zero{‏ستتم إعادة تشغيل Google Chrome خلال # ثانية}two{‏ستتم إعادة تشغيل Google Chrome خلال ثانيتين (#)}few{‏ستتم إعادة تشغيل Google Chrome خلال # ثوانٍ}many{‏ستتم إعادة تشغيل Google Chrome خلال # ثانيةً}other{‏ستتم إعادة تشغيل Google Chrome خلال # ثانية}}</translation>
-<translation id="573759479754913123">‏حول نظام التشغيل Chrome</translation>
+<translation id="573759479754913123">‏لمحة عامة عن نظام التشغيل Chrome</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation>
 <translation id="5804318322022881572">‏تعذَّر إطلاق Chrome. يُرجى إعادة المحاولة.</translation>
 <translation id="5867197326698922595">‏يحاول Google Chrome تعديل كلمات المرور.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_az.xtb b/chrome/app/resources/google_chrome_strings_az.xtb
index a524603..a48878c 100644
--- a/chrome/app/resources/google_chrome_strings_az.xtb
+++ b/chrome/app/resources/google_chrome_strings_az.xtb
@@ -72,6 +72,7 @@
 <translation id="2929907241665500097">Chrome güncəllənmədi, xəta baş verdi. <ph name="BEGIN_LINK" />Chrome'un güncəllənmə problemlərini və alınmayan güncəllənmələri həll edin.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Şəbəkəyə Giriş - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome arxa fon rejimindədir.</translation>
+<translation id="3059710691562604940">Təhlükəsiz Baxış deaktivdir. Chrome onu aktiv etməyi tövsiyə edir.</translation>
 <translation id="3065168410429928842">Chrome Paneli</translation>
 <translation id="3080151273017101988">Google Chrome bağlı olduqda arxa fon tətbiqləri davam etdirilsin</translation>
 <translation id="3089968997497233615">Google Chrome'un yeni, güvənli versiyası əlçatandır.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb
index 93954ecf..4304ee43 100644
--- a/chrome/app/resources/google_chrome_strings_be.xtb
+++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome не абнавіўся. Нешта пайшло не так. <ph name="BEGIN_LINK" />Выправіце праблемы з абнаўленнем Chrome і памылкі абнаўлення.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Уваход у сетку – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome працуе ў фонавым рэжыме.</translation>
+<translation id="3059710691562604940">"Бяспечны прагляд" выключаны. Chrome рэкамендуе ўключыць гэты рэжым.</translation>
 <translation id="3065168410429928842">Укладка Chrome</translation>
 <translation id="3080151273017101988">Працягваць выконваць фонавыя праграмы, калі Google Chrome закрыты</translation>
 <translation id="3089968997497233615">Ёсць новая, больш бяспечная версія Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index 25cb6549..fb5ef6c 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -73,6 +73,7 @@
 <translation id="2929907241665500097">Prohlížeč Chrome se neaktualizoval, něco se pokazilo. <ph name="BEGIN_LINK" />Vyřešte problémy se stahováním aktualizací Chromu a neúspěšnými aktualizacemi.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – přihlášení k síti – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome je v režimu na pozadí.</translation>
+<translation id="3059710691562604940">Bezpečné prohlížení je vypnuté. Chrome doporučuje zapnout ho.</translation>
 <translation id="3065168410429928842">Karta prohlížeče Chrome</translation>
 <translation id="3080151273017101988">Po ukončení prohlížeče Google Chrome nechat aplikace na pozadí spuštěné</translation>
 <translation id="3089968997497233615">K dispozici je nová, bezpečnější verze prohlížeče Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 767dc5b..834b47b 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -69,6 +69,7 @@
 <translation id="2929907241665500097">Chrome konnte aufgrund eines Fehlers nicht aktualisiert werden. Wie Sie Updateprobleme und Fehler bei der Aktualisierung von Chrome beheben, <ph name="BEGIN_LINK" />erfahren Sie hier<ph name="END_LINK" />.</translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Netzwerkanmeldung – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome wird im Hintergrundmodus ausgeführt.</translation>
+<translation id="3059710691562604940">Safe Browsing ist deaktiviert. Es wird empfohlen, diese Funktion zu aktivieren.</translation>
 <translation id="3065168410429928842">Chrome-Tab</translation>
 <translation id="3080151273017101988">Apps im Hintergrund ausführen, wenn Google Chrome geschlossen ist</translation>
 <translation id="3089968997497233615">Es gibt eine neue, sicherere Version von Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb
index eb9beac..3d259c15 100644
--- a/chrome/app/resources/google_chrome_strings_es-419.xtb
+++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">No se actualizó Chrome porque se produjo un error. <ph name="BEGIN_LINK" />Soluciona los problemas de actualización y las actualizaciones con error de Chrome.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" />: Acceso a la red - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome está en modo de segundo plano</translation>
+<translation id="3059710691562604940">La Navegación segura está desactivada. Chrome recomienda activarla.</translation>
 <translation id="3065168410429928842">Pestaña de Chrome</translation>
 <translation id="3080151273017101988">Seguir ejecutando aplicaciones en segundo plano al cerrar Google Chrome</translation>
 <translation id="3089968997497233615">Hay disponible una versión de Google Chrome más nueva y más segura.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index 93293de..1f37bfd 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome no se ha actualizado, algo no va bien. <ph name="BEGIN_LINK" />Soluciona los problemas y errores de actualización de Chrome<ph name="END_LINK" />.</translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" />, inicio de sesión en la red, Chrome</translation>
 <translation id="3037838751736561277">Google Chrome está en modo de segundo plano.</translation>
+<translation id="3059710691562604940">La función Navegación Segura está desactivada. Chrome recomienda activarla.</translation>
 <translation id="3065168410429928842">Pestaña de Chrome</translation>
 <translation id="3080151273017101988">Seguir ejecutando aplicaciones en segundo plano al cerrar Google Chrome</translation>
 <translation id="3089968997497233615">Hay una nueva versión más segura de Google Chrome disponible.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index 3c599f1..ac8ccce 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -72,6 +72,7 @@
 <translation id="2929907241665500097">Chrome'i ei värskendatud, midagi läks valesti. <ph name="BEGIN_LINK" />Lahendage Chrome'i värskendamisprobleemid ja parandage ebaõnnestunud värskendused.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – võrku sisselogimine – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome on taustarežiimis.</translation>
+<translation id="3059710691562604940">Google'i ohutu sirvimine on välja lülitatud. Chrome soovitab selle sisse lülitada.</translation>
 <translation id="3065168410429928842">Chrome'i vaheleht</translation>
 <translation id="3080151273017101988">Jätka taustal olevate rakenduste tööd, kui Google Chrome on suletud</translation>
 <translation id="3089968997497233615">Saadaval on uus ja turvalisem Google Chrome'i versioon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index 4b0b0cb..7fc6cbc 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome ez da eguneratu arazoren bat izan delako. <ph name="BEGIN_LINK" />Konpondu Chrome eguneratzeko arazoak eta huts egindako eguneratzeak.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Hasi saioa sarean - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome atzeko planoko moduan dago.</translation>
+<translation id="3059710691562604940">Arakatze segurua desaktibatuta dago. Aktibatzea gomendatzen du Chrome-k.</translation>
 <translation id="3065168410429928842">Chrome fitxa</translation>
 <translation id="3080151273017101988">Mantendu atzeko planoko aplikazioak abian Google Chrome ixten denean</translation>
 <translation id="3089968997497233615">Google Chrome-ren bertsio berriagoa eta seguruagoa erabilgarri dago.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb
index 677a0dd..59dc470 100644
--- a/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -4,7 +4,7 @@
 <translation id="1001534784610492198">‏آرشیو نصب‌کننده خراب یا نامعتبر است. لطفاً دوباره Google Chrome را بارگیری کنید.</translation>
 <translation id="102763973188675173">‏سفارشی کردن و کنترل Google Chrome. به‌روزرسانی‌ در دسترس است.</translation>
 <translation id="1051826050538111504">‏نرم‌افزار مضری در رایانه‌تان وجود دارد. Chrome می‌تواند آن را بردارد، تنظیمات را بازیابی کند و افزونه‌ها را غیرفعال کند تا عملکرد مرورگرتان دوباره عادی شود.</translation>
-<translation id="1065672644894730302">تنظیمات برگزیده شما را نمی‌توان خواند. بعضی ویژگی‌ها ممکن است در دسترس نباشند و تغییرات تنظیمات برگزیده ذخیره نخواهد شد.</translation>
+<translation id="1065672644894730302">اولویت‌های شما را نمی‌توان خواند. بعضی ویژگی‌ها ممکن است در دسترس نباشند و تغییرات تنظیمات برگزیده ذخیره نخواهد شد.</translation>
 <translation id="1088300314857992706">‏<ph name="USER_EMAIL_ADDRESS" /> قبلاً از Chrome استفاده می‌کرد</translation>
 <translation id="1097330777386562916">‏هنگام خروج از Chrome، کوکی‌‌ها و داده‌های سایت پاک شوند</translation>
 <translation id="110877069173485804">‏این Chrome شماست</translation>
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">‏Chrome به‌روزرسانی نشد؛ مشکلی پیش آمد. <ph name="BEGIN_LINK" />مشکلات به‌روزرسانی Chrome و به‌روزرسانی‌های ناموفق را برطرف کنید.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736">‏<ph name="PAGE_TITLE" /> - ورود به سیستم شبکه - Chrome</translation>
 <translation id="3037838751736561277">‏Google Chrome در حالت پس‌زمینه است.</translation>
+<translation id="3059710691562604940">‏«مرور ایمن» خاموش است. Chrome توصیه می‌کند آن را روشن کنید.</translation>
 <translation id="3065168410429928842">‏برگه Chrome</translation>
 <translation id="3080151273017101988">‏ادامه اجرای برنامه‌ها در پس‌زمینه هنگامیکه Google Chrome بسته می‌شود</translation>
 <translation id="3089968997497233615">‏نسخه جدید و امن تری از Google Chrome موجود است.</translation>
@@ -138,7 +139,7 @@
 <translation id="532046782124376502">‏اخطار: Google Chrome نمی تواند مانع از ثبت سابقه مرور شما توسط افزونه‌ها شود. برای غیرفعال کردن این افزونه در حالت ناشناس، این گزینه را لغو انتخاب کنید.</translation>
 <translation id="5386244825306882791">‏این برنامه همچنین صفحه‌ای را که هنگام راه‌اندازی Chrome یا جستجو از Omnibox نشان داده می‌شود، کنترل می‌کند.</translation>
 <translation id="5394833366792865639">‏هم‌رسانی برگه Chrome</translation>
-<translation id="5430073640787465221">‏فایل تنظیمات برگزیده شما خراب یا نامعتبر است. Google Chrome نمی‌تواند تنظیمات شما را بازیابی کند.</translation>
+<translation id="5430073640787465221">‏فایل اولویت‌های شما خراب یا نامعتبر است. Google Chrome نمی‌تواند تنظیمات شما را بازیابی کند.</translation>
 <translation id="556024056938947818">‏Google Chrome می‌خواهد گذرواژه‌ها را نمایش دهد.</translation>
 <translation id="5566025111015594046">‏Google Chrome (ورودی mDNS)</translation>
 <translation id="5657226924540934362">‏اگر تنظیمی در این صفحه نشان داده نمی‌شود، در <ph name="LINK_BEGIN" />
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 5590072..68c6a94 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">Chromea ei päivitetty, vaan jotain meni pieleen. <ph name="BEGIN_LINK" />Korjaa Chromen päivitysongelmat ja epäonnistuneet päivitykset<ph name="END_LINK" />.</translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Kirjautuminen verkkoon – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome on käynnissä taustalla.</translation>
+<translation id="3059710691562604940">Selaussuoja on pois päältä. Chrome suosittelee laittamaan sen päälle.</translation>
 <translation id="3065168410429928842">Chrome-välilehti</translation>
 <translation id="3080151273017101988">Jätä taustaohjelmat käyntiin, kun Google Chrome suljetaan</translation>
 <translation id="3089968997497233615">Google Chromesta on saatavillaa uusi, turvallisempi versio.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb
index e43cdcb3..bf436a3e 100644
--- a/chrome/app/resources/google_chrome_strings_fil.xtb
+++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Hindi na-update ang Chrome, nagkaproblema. <ph name="BEGIN_LINK" />Ayusin ang mga problema sa pag-update ng Chrome at ang mga hindi naisagawang pag-update dito.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Pag-sign in sa Network - Chrome</translation>
 <translation id="3037838751736561277">Nasa background mode ang Google Chrome.</translation>
+<translation id="3059710691562604940">Naka-off ang Ligtas na Pag-browse. Inirerekomenda ng Chrome na i-on ito.</translation>
 <translation id="3065168410429928842">Tab ng Chrome</translation>
 <translation id="3080151273017101988">Magpatuloy sa pagpapatakbo ng mga app sa background kapag nakasara ang Google Chrome</translation>
 <translation id="3089968997497233615">May available na bago, mas ligtas na bersyon ng Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
index a6aa2af..5d4e41e5 100644
--- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -73,6 +73,7 @@
 <translation id="2929907241665500097">La mise à jour de Chrome n'a pas été installée. Une erreur s'est produite. <ph name="BEGIN_LINK" />Découvrez comment résoudre les problèmes de mise à jour de Chrome.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Connexion au réseau – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome fonctionne en mode arrière-plan.</translation>
+<translation id="3059710691562604940">La navigation sécurisée est désactivée. Chrome vous recommande de l'activer.</translation>
 <translation id="3065168410429928842">Onglet Chrome</translation>
 <translation id="3080151273017101988">Continuer l'exécution des applications en arrière-plan après la fermeture de Google Chrome</translation>
 <translation id="3089968997497233615">Une nouvelle version de Google Chrome encore plus sûre est maintenant offerte.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index ee2cffc..5e3e14b 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -72,6 +72,7 @@
 <translation id="2929907241665500097">Échec de la mise à jour de Chrome en raison d'une erreur. <ph name="BEGIN_LINK" />Découvrez comment résoudre ce type de problème.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Connexion au réseau - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome est exécuté en mode arrière-plan.</translation>
+<translation id="3059710691562604940">La navigation sécurisée étant désactivée, Chrome vous recommande de l'activer.</translation>
 <translation id="3065168410429928842">Onglet Chrome</translation>
 <translation id="3080151273017101988">Poursuivre l'exécution d'applications en arrière-plan après la fermeture de Google Chrome</translation>
 <translation id="3089968997497233615">Une nouvelle version de Google Chrome encore plus sûre est disponible.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb
index 85b43d6..93e9b6f 100644
--- a/chrome/app/resources/google_chrome_strings_gl.xtb
+++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome non se actualizou, xa que se produciu un erro. <ph name="BEGIN_LINK" />Soluciona os problemas de actualización de Chrome e as actualizacións que non se puidesen realizar<ph name="END_LINK" />.</translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> (inicio de sesión de rede, Chrome)</translation>
 <translation id="3037838751736561277">Google Chrome está no modo de segundo plano.</translation>
+<translation id="3059710691562604940">A opción Navegación segura está desactivada. Chrome recomenda activala.</translation>
 <translation id="3065168410429928842">Pestana de Chrome</translation>
 <translation id="3080151273017101988">Continuar executando aplicacións en segundo plano cando se peche Google Chrome</translation>
 <translation id="3089968997497233615">Está dispoñible unha versión nova e máis segura de Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index 37e964e..e263a43 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">किसी गड़बड़ी की वजह से Chrome अपडेट नहीं हुआ. <ph name="BEGIN_LINK" />Chrome को अपडेट करने से जुड़ी समस्याएं और नहीं हो पाने वाले अपडेट ठीक करें.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - नेटवर्क में Chrome से साइन-इन करें</translation>
 <translation id="3037838751736561277">Google Chrome पृष्ठभूमि मोड में है.</translation>
+<translation id="3059710691562604940">सुरक्षित ब्राउज़िंग की सुविधा बंद है. Chrome इसे चालू करने का सुझाव देता है.</translation>
 <translation id="3065168410429928842">Chrome टैब</translation>
 <translation id="3080151273017101988">Google Chrome के बंद होने पर पृष्ठभूमि ऐप्स  चलाना जारी रखें</translation>
 <translation id="3089968997497233615">Google Chrome का एक नया, सुरक्षित वर्शन उपलब्‍ध है.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb
index a06aeb5..2e76684b7 100644
--- a/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">Chrome tidak dapat diupdate, terjadi error. <ph name="BEGIN_LINK" />Perbaiki masalah update Chrome dan update yang gagal.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Login Jaringan - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome berjalan di mode latar belakang.</translation>
+<translation id="3059710691562604940">Safe Browsing nonaktif. Chrome merekomendasikan untuk mengaktifkannya.</translation>
 <translation id="3065168410429928842">Tab Chrome</translation>
 <translation id="3080151273017101988">Terus jalankan apl latar belakang saat Google Chrome ditutup</translation>
 <translation id="3089968997497233615">Tersedia versi Google Chrome yang baru dan lebih aman.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index 8afec3b..0a4fced 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">エラーが発生したため、Chrome が更新されませんでした。<ph name="BEGIN_LINK" />Chrome の更新に関する問題を解決してください。<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - ネットワークにログイン - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome はバックグラウンド モードです。</translation>
+<translation id="3059710691562604940">セーフ ブラウジングがオフになっています。Chrome はオンにすることをおすすめしています。</translation>
 <translation id="3065168410429928842">Chrome タブ</translation>
 <translation id="3080151273017101988">Google Chrome を閉じた際にバックグラウンド アプリの処理を続行する</translation>
 <translation id="3089968997497233615">Google クロームブラウザがより速く、さらに便利に。いますぐトライ!</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb
index ded5423..61f64045 100644
--- a/chrome/app/resources/google_chrome_strings_kk.xtb
+++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome жаңартылған жоқ. Бірдеңе дұрыс болмады. <ph name="BEGIN_LINK" />Chrome браузеріндегі жаңартуға қатысты мәселелерді түзетіңіз.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Желіге кіру – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome фондық режимде.</translation>
+<translation id="3059710691562604940">"Қауіпсіз шолу" функциясы өшірулі. Chrome браузері оны қосуды ұсынады.</translation>
 <translation id="3065168410429928842">Chrome қойындысы</translation>
 <translation id="3080151273017101988">Google Chrome жабылғанда, фондық қолданбаларды пайдалануды жалғастыру</translation>
 <translation id="3089968997497233615">Жаңа, қауіпсізірек Google Chrome нұсқасы қолжетімді.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_km.xtb b/chrome/app/resources/google_chrome_strings_km.xtb
index 0d5aca1..90fa22ac 100644
--- a/chrome/app/resources/google_chrome_strings_km.xtb
+++ b/chrome/app/resources/google_chrome_strings_km.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome មិន​បានដំឡើងកំណែទេ មានអ្វីមួយខុសប្រក្រតី។ <ph name="BEGIN_LINK" />សូមដោះស្រាយបញ្ហា​នៃការដំឡើងកំណែ Chrome និងការដំឡើងកំណែដែលមិនបានសម្រេចផ្សេងៗ។<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - ការចូលបណ្ដាញ - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome នៅក្នុងរបៀបផ្ទៃខាងក្រោយ។</translation>
+<translation id="3059710691562604940">បានបិទមុខងាររុករក​ដោយសុវត្ថិភាព​។ Chrome ណែនាំឱ្យបើក​មុខងារនេះ។</translation>
 <translation id="3065168410429928842">ផ្ទាំង Chrome</translation>
 <translation id="3080151273017101988">បន្តដំណើរការកម្មវិធីផ្ទៃខាងក្រោយ នៅពេល Google Chrome ត្រូវបានបិទ</translation>
 <translation id="3089968997497233615">មានកំណែថ្មីដែលមានសុវត្ថិភាពជាងមុនសម្រាប់ Google Chrome។</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb
index a3173fee..8c175491 100644
--- a/chrome/app/resources/google_chrome_strings_ko.xtb
+++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">문제가 발생하여 Chromium을 업데이트할 수 없습니다. <ph name="BEGIN_LINK" />Chrome 업데이트 문제 및 업데이트 실패 문제 해결하기<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - 네트워크 로그인 - Chrome</translation>
 <translation id="3037838751736561277">Chrome이 백그라운드 모드로 실행 중입니다.</translation>
+<translation id="3059710691562604940">세이프 브라우징이 사용 중지되어 있습니다. 사용 설정하는 것이 좋습니다.</translation>
 <translation id="3065168410429928842">Chrome 탭</translation>
 <translation id="3080151273017101988">Chrome 종료 후에도 백그라운드 앱을 계속 실행</translation>
 <translation id="3089968997497233615">새롭고 안전한 Chrome의 새 버전을 사용할 수 있습니다.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb
index 15ae76d..afd4174 100644
--- a/chrome/app/resources/google_chrome_strings_ky.xtb
+++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome жаңыртылган жок. Бир жерден ката кетти. <ph name="BEGIN_LINK" />Chrome'догу жаңыртуу маселелерин оңдоңуз.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Тармакка кирүү – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome фондук режимде.</translation>
+<translation id="3059710691562604940">Коопсуз серептөө өчүк. Chrome аны күйгүзүүнү сунуштайт.</translation>
 <translation id="3065168410429928842">Chrome өтмөгү</translation>
 <translation id="3080151273017101988">Google Chrome жабылганда фондук колдонмолор иштей берсин</translation>
 <translation id="3089968997497233615">Google Chrome'дун бир кыйла жаңы, коопсуз версиясы бар.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb
index 0ecdf97..62c7e74 100644
--- a/chrome/app/resources/google_chrome_strings_lv.xtb
+++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -72,6 +72,7 @@
 <translation id="2929907241665500097">Pārlūkprogramma Chrome netika atjaunināta. Radās problēma. <ph name="BEGIN_LINK" />Novērsiet Chrome atjaunināšanas problēmas.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> — pierakstīšanās tīklā — Chrome</translation>
 <translation id="3037838751736561277">Google Chrome darbojas fona režīmā.</translation>
+<translation id="3059710691562604940">Droša pārlūkošana ir izslēgta. Pārlūkā Chrome tiek ieteikts to ieslēgt.</translation>
 <translation id="3065168410429928842">Chrome cilne</translation>
 <translation id="3080151273017101988">Turpināt lietotņu izpildi fonā, kad Google Chrome ir aizvērts</translation>
 <translation id="3089968997497233615">Ir pieejama jauna un drošāka Google Chrome versija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb
index 25d6307..1e528b7 100644
--- a/chrome/app/resources/google_chrome_strings_mn.xtb
+++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome-г шинэчлээгүй, ямар нэг алдаа гарлаа. <ph name="BEGIN_LINK" />Chrome-г шинэчлэхтэй холбоотой асуудлууд болон амжилтгүй болсон шинэчлэлтүүдийг засна уу.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Сүлжээнд нэвтрэх - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome нь суурь горимд байна.</translation>
+<translation id="3059710691562604940">Аюулгүй үзэх онцлог унтраалттай байна. Chrome түүнийг асаахыг зөвлөж байна.</translation>
 <translation id="3065168410429928842">Chrome-н чихтэй хуудас</translation>
 <translation id="3080151273017101988">Google Chrome хаагдсан үед үндсэн аппликйешнуудыг үргэлжлүүлэн ажиллуул</translation>
 <translation id="3089968997497233615">Google Chrome-ийн шинэ, илүү аюулгүй хувилбар бэлэн боллоо.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb
index 6e193b8..383e8a6 100644
--- a/chrome/app/resources/google_chrome_strings_no.xtb
+++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">Chrome ble ikke oppdatert. Noe gikk galt. <ph name="BEGIN_LINK" />Løs problemer med Chrome-oppdateringer og mislykkede oppdateringer.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – nettverkspålogging – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome er i bakgrunnsmodus.</translation>
+<translation id="3059710691562604940">Safe Browsing er slått av. Chrome anbefaler at du slår det på.</translation>
 <translation id="3065168410429928842">Chrome-fane</translation>
 <translation id="3080151273017101988">Fortsett kjøringen av bakgrunnsprogrammer når Google Chrome er lukket</translation>
 <translation id="3089968997497233615">En ny, sikrere versjon av Google Chrome er tilgjengelig</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb
index 654d4b3..5621f35c 100644
--- a/chrome/app/resources/google_chrome_strings_ru.xtb
+++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -69,6 +69,7 @@
 <translation id="2929907241665500097">Не удалось обновить Chrome. <ph name="BEGIN_LINK" />Выяснить причины неполадок и устранить их<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736">"<ph name="PAGE_TITLE" />" – вход в сеть – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome работает в фоновом режиме</translation>
+<translation id="3059710691562604940">Безопасный просмотр отключен. Chrome рекомендует включить его.</translation>
 <translation id="3065168410429928842">Вкладка Chrome</translation>
 <translation id="3080151273017101988">Не отключать работающие в фоновом режиме сервисы при закрытии браузера</translation>
 <translation id="3089968997497233615">Доступна новая, более безопасная версия Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb
index 354c34e..1f6fe54f 100644
--- a/chrome/app/resources/google_chrome_strings_sk.xtb
+++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -71,6 +71,7 @@
 <translation id="2929907241665500097">Chrome sa neaktualizoval. Vyskytol sa problém. <ph name="BEGIN_LINK" />Vyriešiť problémy so sťahovaním aktualizácií Chromu a neúspešnými aktualizáciami<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – prihlásenie do siete – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome je v režime na pozadí.</translation>
+<translation id="3059710691562604940">Bezpečné prehliadanie je vypnuté. Chrome ho odporúča zapnúť.</translation>
 <translation id="3065168410429928842">Karta Chrome</translation>
 <translation id="3080151273017101988">Po zatvorení prehliadača Google Chrome nechať aplikácie na pozadí spustené</translation>
 <translation id="3089968997497233615">K dispozícii je nová, bezpečnejšia verzia prehliadača Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb
index 510a0de..3d93f477 100644
--- a/chrome/app/resources/google_chrome_strings_sq.xtb
+++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Chrome nuk u përditësua. Ndodhi një gabim. <ph name="BEGIN_LINK" />Rregullo problemet e përditësimit të Chrome dhe përditësimet e dështuara.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - identifikimi në rrjet - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome është në modalitetin e sfondit.</translation>
+<translation id="3059710691562604940">"Shfletimi i sigurt" është joaktiv. Chrome rekomandon aktivizimin e tij.</translation>
 <translation id="3065168410429928842">Skeda Chrome</translation>
 <translation id="3080151273017101988">Vazhdo ekzekutimin e aplikacioneve në sfond kur Google Chrome është i mbyllur</translation>
 <translation id="3089968997497233615">Ofrohet një version i ri dhe më i sigurt i Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index add4366..87fe90f 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">Ett fel uppstod och Chrome uppdaterades inte. <ph name="BEGIN_LINK" />Åtgärda uppdateringsproblem och misslyckade uppdateringar i Chrome.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – nätverksinloggning – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome körs i bakgrundsläge.</translation>
+<translation id="3059710691562604940">Säker webbsökning har inaktiverats. Du rekommenderas att aktivera funktionen i Chrome.</translation>
 <translation id="3065168410429928842">Chrome-flik</translation>
 <translation id="3080151273017101988">Fortsätt köra bakgrundsappar när Google Chrome avslutas</translation>
 <translation id="3089968997497233615">Det finns en ny, ännu säkrare version av Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb
index 0fab91b..c743c60 100644
--- a/chrome/app/resources/google_chrome_strings_tr.xtb
+++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">Chrome güncellenmedi. Bir sorun oluştu. <ph name="BEGIN_LINK" />Chrome güncelleme sorunlarını ve başarısız güncellemeleri düzeltin.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Ağda Oturum Açın - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome arka plan modunda.</translation>
+<translation id="3059710691562604940">Güvenli Tarama kapalı. Chrome bunun açılmasını öneriyor.</translation>
 <translation id="3065168410429928842">Chrome Sekmesi</translation>
 <translation id="3080151273017101988">Google Chrome kapandığında arka plan uygulamaları çalıştırmaya devam et</translation>
 <translation id="3089968997497233615">Google Chrome'un kullanabileceğiniz yeni, daha güvenli bir sürümü var.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ur.xtb b/chrome/app/resources/google_chrome_strings_ur.xtb
index e1bee70..53ec6b8 100644
--- a/chrome/app/resources/google_chrome_strings_ur.xtb
+++ b/chrome/app/resources/google_chrome_strings_ur.xtb
@@ -74,6 +74,7 @@
 <translation id="2929907241665500097">‏Chrome اپ ڈیٹ نہیں ہوا، کچھ غلط ہو گیا۔ <ph name="BEGIN_LINK" />Chrome اپ ڈیٹ کی دشواریوں اور ناکام اپ ڈیٹس کو درست کریں۔<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736">‏<ph name="PAGE_TITLE" /> - نیٹ ورک سائن ان - Chrome</translation>
 <translation id="3037838751736561277">‏Google Chrome پس منظر وضع میں ہے۔</translation>
+<translation id="3059710691562604940">‏محفوظ براؤزنگ آف ہے۔ Chrome اسے آن کرنے کی تجویز کرتا ہے۔</translation>
 <translation id="3065168410429928842">‏Chrome ٹیب</translation>
 <translation id="3080151273017101988">‏Google Chrome بند ہونے پر پس منظر کی ایپس چلانا جاری رکھیں</translation>
 <translation id="3089968997497233615">‏Google Chrome کا ایک نیا، محفوظ تر ورژن دستیاب ہے۔</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb
index f3cb4ec81..512a5a0 100644
--- a/chrome/app/resources/google_chrome_strings_vi.xtb
+++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -72,6 +72,7 @@
 <translation id="2929907241665500097">Đã xảy ra lỗi nên Chrome chưa cập nhật được. <ph name="BEGIN_LINK" />Hãy khắc phục các vấn đề cập nhật và các bản cập nhật không thành công của Chrome.<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Đăng nhập vào mạng – Chrome</translation>
 <translation id="3037838751736561277">Google Chrome đang chạy trong nền.</translation>
+<translation id="3059710691562604940">Tính năng Duyệt web an toàn đang tắt. Bạn nên bật tính năng này trên Chrome.</translation>
 <translation id="3065168410429928842">Tab Chrome</translation>
 <translation id="3080151273017101988">Tiếp tục chạy các ứng dụng nền khi Google Chrome đóng</translation>
 <translation id="3089968997497233615">Đã có phiên bản Google Chrome mới và an toàn hơn.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
index d43f597..1a7aaff 100644
--- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">Chrome 未能更新,因为出了点问题。<ph name="BEGIN_LINK" />请解决导致 Chrome 更新失败的问题<ph name="END_LINK" />。</translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - 网络登录 - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome处于后台运行模式。</translation>
+<translation id="3059710691562604940">“安全浏览”功能已关闭。Chrome 建议开启它。</translation>
 <translation id="3065168410429928842">Chrome 标签页</translation>
 <translation id="3080151273017101988">关闭 Google Chrome 后继续运行后台应用</translation>
 <translation id="3089968997497233615">Google Chrome 浏览器现已推出更安全的新版本。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-HK.xtb b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
index 38e2722c..c95110d 100644
--- a/chrome/app/resources/google_chrome_strings_zh-HK.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
@@ -73,6 +73,7 @@
 <translation id="2929907241665500097">發生錯誤,Chrome 未能更新。<ph name="BEGIN_LINK" />請修正 Chrome 更新問題與更新失敗問題。<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - 網絡登入 - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome 正在背景模式中執行。</translation>
+<translation id="3059710691562604940">「安全瀏覽」功能已停用。Chrome 建議啟用此功能。</translation>
 <translation id="3065168410429928842">Chrome 分頁</translation>
 <translation id="3080151273017101988">Google Chrome 關閉時繼續執行背景應用程式</translation>
 <translation id="3089968997497233615">Google Chrome 推出全新版本,安全性更勝從前。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
index 901e6dc..c246b25 100644
--- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -70,6 +70,7 @@
 <translation id="2929907241665500097">發生錯誤,Chrome 未能更新。<ph name="BEGIN_LINK" />請修正 Chrome 更新問題與更新失敗項目。<ph name="END_LINK" /></translation>
 <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - 網路登入 - Chrome</translation>
 <translation id="3037838751736561277">Google Chrome 正在背景模式中執行。</translation>
+<translation id="3059710691562604940">安全瀏覽功能已停用。Chrome 建議啟用這項功能。</translation>
 <translation id="3065168410429928842">Chrome 分頁</translation>
 <translation id="3080151273017101988">Google Chrome 關閉時繼續執行背景應用程式</translation>
 <translation id="3089968997497233615">Google Chrome 推出全新版本,安全性更勝以往。</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 8be5a31e..ef07679 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2292,7 +2292,12 @@
   ]
 
   if (is_win) {
-    libs += [ "secur32.lib" ]
+    libs += [
+      "secur32.lib",
+
+      # Needed for _variant_t used in browser_dm_token_storage_win.cc
+      "comsuppw.lib",
+    ]
     sources +=
         [ "component_updater/recovery_improved_component_installer_win.cc" ]
     deps += [ "//chrome/elevation_service:elevation_service_idl" ]
@@ -3086,6 +3091,10 @@
     }
   } else {  # !is_android
     sources += [
+      "accessibility/caption_controller.cc",
+      "accessibility/caption_controller.h",
+      "accessibility/caption_controller_factory.cc",
+      "accessibility/caption_controller_factory.h",
       "accessibility/invert_bubble_prefs.cc",
       "accessibility/invert_bubble_prefs.h",
       "apps/app_service/app_icon_factory.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 575188d..b6b857e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2105,6 +2105,13 @@
     {"instant-tethering", flag_descriptions::kTetherName,
      flag_descriptions::kTetherDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kInstantTethering)},
+    {
+        "new-shortcut-mapping",
+        flag_descriptions::kEnableNewShortcutMappingName,
+        flag_descriptions::kEnableNewShortcutMappingDescription,
+        kOsCrOS,
+        FEATURE_VALUE_TYPE(features::kNewShortcutMapping),
+    },
     {"shelf-hide-buttons-in-tablet",
      flag_descriptions::kHideShelfControlsInTabletModeName,
      flag_descriptions::kHideShelfControlsInTabletModeDescription, kOsCrOS,
@@ -4062,6 +4069,10 @@
      flag_descriptions::kRemoteCopyImageNotificationName,
      flag_descriptions::kRemoteCopyImageNotificationDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(kRemoteCopyImageNotification)},
+    {"remote-copy-persistent-notification",
+     flag_descriptions::kRemoteCopyPersistentNotificationName,
+     flag_descriptions::kRemoteCopyPersistentNotificationDescription,
+     kOsDesktop, FEATURE_VALUE_TYPE(kRemoteCopyPersistentNotification)},
     {"remote-copy-progress-notification",
      flag_descriptions::kRemoteCopyProgressNotificationName,
      flag_descriptions::kRemoteCopyProgressNotificationDescription, kOsDesktop,
diff --git a/chrome/browser/accessibility/caption_controller.cc b/chrome/browser/accessibility/caption_controller.cc
new file mode 100644
index 0000000..f336b01
--- /dev/null
+++ b/chrome/browser/accessibility/caption_controller.cc
@@ -0,0 +1,108 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/accessibility/caption_controller.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/feature_list.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/component_updater/soda_component_installer.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/caption_bubble_controller.h"
+#include "chrome/common/pref_names.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/prefs/pref_change_registrar.h"
+#include "components/sync_preferences/pref_service_syncable.h"
+#include "media/base/media_switches.h"
+
+namespace captions {
+
+CaptionController::CaptionController(Profile* profile) : profile_(profile) {}
+
+CaptionController::~CaptionController() = default;
+
+// static
+void CaptionController::RegisterProfilePrefs(
+    user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterBooleanPref(
+      prefs::kLiveCaptionEnabled, false,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  registry->RegisterFilePathPref(prefs::kSODAPath, base::FilePath());
+}
+
+// static
+void CaptionController::InitOffTheRecordPrefs(Profile* off_the_record_profile) {
+  DCHECK(off_the_record_profile->IsOffTheRecord());
+  off_the_record_profile->GetPrefs()->SetBoolean(prefs::kLiveCaptionEnabled,
+                                                 false);
+  off_the_record_profile->GetPrefs()->SetFilePath(prefs::kSODAPath,
+                                                  base::FilePath());
+}
+
+void CaptionController::Init() {
+  // Hidden behind a feature flag.
+  if (!base::FeatureList::IsEnabled(media::kLiveCaption))
+    return;
+
+  pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
+  pref_change_registrar_->Init(profile_->GetPrefs());
+  pref_change_registrar_->Add(
+      prefs::kLiveCaptionEnabled,
+      base::BindRepeating(&CaptionController::OnLiveCaptionEnabledChanged,
+                          base::Unretained(this)));
+}
+
+void CaptionController::OnLiveCaptionEnabledChanged() {
+  PrefService* profile_prefs = profile_->GetPrefs();
+  bool enabled = profile_prefs->GetBoolean(prefs::kLiveCaptionEnabled);
+  if (enabled == enabled_)
+    return;
+  enabled_ = enabled;
+
+  if (enabled_) {
+    // Register SODA component and download speech model.
+    component_updater::RegisterSODAComponent(
+        g_browser_process->component_updater(), profile_prefs,
+        base::BindOnce(&component_updater::SODAComponentInstallerPolicy::
+                           UpdateSODAComponentOnDemand));
+
+    // Create captions UI in each browser view.
+    for (Browser* browser : *BrowserList::GetInstance()) {
+      OnBrowserAdded(browser);
+    }
+
+    // Add observers to the BrowserList for new browser views being added.
+    BrowserList::GetInstance()->AddObserver(this);
+  } else {
+    // TODO(evliu): Unregister SODA component.
+
+    // Destroy caption bubble controllers.
+    caption_bubble_controllers_.clear();
+
+    // Remove observers.
+    BrowserList::GetInstance()->RemoveObserver(this);
+  }
+}
+
+void CaptionController::OnBrowserAdded(Browser* browser) {
+  if (browser->profile() != profile_)
+    return;
+
+  caption_bubble_controllers_[browser] =
+      CaptionBubbleController::Create(browser);
+}
+
+void CaptionController::OnBrowserRemoved(Browser* browser) {
+  if (browser->profile() != profile_)
+    return;
+
+  DCHECK(caption_bubble_controllers_.count(browser));
+  caption_bubble_controllers_.erase(browser);
+}
+
+}  // namespace captions
diff --git a/chrome/browser/accessibility/caption_controller.h b/chrome/browser/accessibility/caption_controller.h
new file mode 100644
index 0000000..e2adbf1
--- /dev/null
+++ b/chrome/browser/accessibility/caption_controller.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_H_
+#define CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_H_
+
+#include <memory>
+#include <unordered_map>
+
+#include "chrome/browser/ui/browser_list_observer.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+class Browser;
+class Profile;
+class PrefChangeRegistrar;
+
+namespace user_prefs {
+class PrefRegistrySyncable;
+}
+
+namespace captions {
+
+class CaptionBubbleController;
+
+///////////////////////////////////////////////////////////////////////////////
+// Caption Controller
+//
+//  The controller of the live caption feature. It enables the captioning
+//  service when the preference is enabled. The caption controller is a
+//  KeyedService and BrowserListObserver. There exists one caption controller
+//  per profile and it lasts for the duration of the session. The caption
+//  controller owns the live caption UI, which are caption bubble controllers.
+//
+class CaptionController : public BrowserListObserver, public KeyedService {
+ public:
+  explicit CaptionController(Profile* profile);
+  ~CaptionController() override;
+  CaptionController(const CaptionController&) = delete;
+  CaptionController& operator=(const CaptionController&) = delete;
+
+  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
+  // Off the record profiles will default to having the feature disabled.
+  static void InitOffTheRecordPrefs(Profile* off_the_record_profile);
+
+  void Init();
+
+ private:
+  friend class CaptionControllerFactory;
+
+  // BrowserListObserver:
+  void OnBrowserAdded(Browser* browser) override;
+  void OnBrowserRemoved(Browser* browser) override;
+
+  void OnLiveCaptionEnabledChanged();
+
+  // Owns us via the KeyedService mechanism.
+  Profile* profile_;
+
+  std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
+
+  // A map of Browsers using this profile to CaptionBubbleControllers anchored
+  // to the browser.
+  std::unordered_map<Browser*, std::unique_ptr<CaptionBubbleController>>
+      caption_bubble_controllers_;
+
+  bool enabled_ = false;
+};
+
+}  // namespace captions
+
+#endif  // CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_H_
diff --git a/chrome/browser/accessibility/caption_controller_factory.cc b/chrome/browser/accessibility/caption_controller_factory.cc
new file mode 100644
index 0000000..7a623f65
--- /dev/null
+++ b/chrome/browser/accessibility/caption_controller_factory.cc
@@ -0,0 +1,51 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/accessibility/caption_controller_factory.h"
+
+#include "build/build_config.h"
+#include "chrome/browser/accessibility/caption_controller.h"
+#include "chrome/browser/profiles/incognito_helpers.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+
+namespace captions {
+
+// static
+CaptionController* CaptionControllerFactory::GetForProfile(Profile* profile) {
+  return static_cast<CaptionController*>(
+      GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+// static
+CaptionController* CaptionControllerFactory::GetForProfileIfExists(
+    Profile* profile) {
+  return static_cast<CaptionController*>(
+      GetInstance()->GetServiceForBrowserContext(profile, /*create=*/false));
+}
+
+// static
+CaptionControllerFactory* CaptionControllerFactory::GetInstance() {
+  static base::NoDestructor<CaptionControllerFactory> factory;
+  return factory.get();
+}
+
+CaptionControllerFactory::CaptionControllerFactory()
+    : BrowserContextKeyedServiceFactory(
+          "CaptionController",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+CaptionControllerFactory::~CaptionControllerFactory() = default;
+
+content::BrowserContext* CaptionControllerFactory::GetBrowserContextToUse(
+    content::BrowserContext* context) const {
+  return chrome::GetBrowserContextRedirectedInIncognito(context);
+}
+
+KeyedService* CaptionControllerFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new CaptionController(Profile::FromBrowserContext(context));
+}
+
+}  // namespace captions
diff --git a/chrome/browser/accessibility/caption_controller_factory.h b/chrome/browser/accessibility/caption_controller_factory.h
new file mode 100644
index 0000000..1caf078
--- /dev/null
+++ b/chrome/browser/accessibility/caption_controller_factory.h
@@ -0,0 +1,41 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_FACTORY_H_
+#define CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_FACTORY_H_
+
+#include "base/no_destructor.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+class Profile;
+
+namespace captions {
+
+class CaptionController;
+
+// Factory to get or create an instance of CaptionController from a Profile.
+class CaptionControllerFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  static CaptionController* GetForProfile(Profile* profile);
+
+  static CaptionController* GetForProfileIfExists(Profile* profile);
+
+  static CaptionControllerFactory* GetInstance();
+
+ private:
+  friend base::NoDestructor<CaptionControllerFactory>;
+
+  CaptionControllerFactory();
+  ~CaptionControllerFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  content::BrowserContext* GetBrowserContextToUse(
+      content::BrowserContext* context) const override;
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* profile) const override;
+};
+
+}  // namespace captions
+
+#endif  // CHROME_BROWSER_ACCESSIBILITY_CAPTION_CONTROLLER_FACTORY_H_
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc
index efe9062..4832152 100644
--- a/chrome/browser/android/autofill_assistant/client_android.cc
+++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -185,10 +185,8 @@
   // From this point on, the UIController, in ui_ptr, is either transferred or
   // deleted.
 
-  GetPasswordManagerClient()
-      ->GetPasswordManager()
-      ->set_autofill_assistance_mode(
-          password_manager::AutofillAssistantMode::kNotRunning);
+  GetPasswordManagerClient()->GetPasswordManager()->SetAutofillAssistantMode(
+      password_manager::AutofillAssistantMode::kNotRunning);
 
   if (!jother_web_contents)
     return;
@@ -424,12 +422,10 @@
     if (!controller_)
       CreateController(nullptr);
     ui_controller_android_->Attach(web_contents_, this, controller_.get());
-  }
 
-  GetPasswordManagerClient()
-      ->GetPasswordManager()
-      ->set_autofill_assistance_mode(
-          password_manager::AutofillAssistantMode::kManuallyCuratedScript);
+    GetPasswordManagerClient()->GetPasswordManager()->SetAutofillAssistantMode(
+        password_manager::AutofillAssistantMode::kRunning);
+  }
 }
 
 void ClientAndroid::DestroyUI() {
@@ -514,10 +510,8 @@
   if (!controller_)
     return;
 
-  GetPasswordManagerClient()
-      ->GetPasswordManager()
-      ->set_autofill_assistance_mode(
-          password_manager::AutofillAssistantMode::kNotRunning);
+  GetPasswordManagerClient()->GetPasswordManager()->SetAutofillAssistantMode(
+      password_manager::AutofillAssistantMode::kNotRunning);
 
   if (ui_controller_android_ && ui_controller_android_->IsAttached())
     DestroyUI();
diff --git a/chrome/browser/android/service_tab_launcher.cc b/chrome/browser/android/service_tab_launcher.cc
index 5016ae0..f528d404 100644
--- a/chrome/browser/android/service_tab_launcher.cc
+++ b/chrome/browser/android/service_tab_launcher.cc
@@ -12,6 +12,7 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
+#include "url/android/gurl_android.h"
 
 using base::android::AttachCurrentThread;
 using base::android::ConvertUTF8ToJavaString;
@@ -52,8 +53,6 @@
   }
 
   JNIEnv* env = AttachCurrentThread();
-  ScopedJavaLocalRef<jstring> url = ConvertUTF8ToJavaString(
-      env, params.url.spec());
   ScopedJavaLocalRef<jstring> referrer_url =
       ConvertUTF8ToJavaString(env, params.referrer.url.spec());
   ScopedJavaLocalRef<jstring> headers = ConvertUTF8ToJavaString(
@@ -67,7 +66,8 @@
   DCHECK_GE(request_id, 1);
 
   Java_ServiceTabLauncher_launchTab(
-      env, request_id, browser_context->IsOffTheRecord(), url,
+      env, request_id, browser_context->IsOffTheRecord(),
+      url::GURLAndroid::FromNativeGURL(env, params.url),
       static_cast<int>(disposition), referrer_url,
       static_cast<int>(params.referrer.policy), headers, post_data);
 }
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 359c29f..e09c3f5 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -183,6 +183,7 @@
 #if defined(OS_ANDROID)
 #include "chrome/browser/flags/android/chrome_feature_list.h"
 #include "chrome/browser/metrics/thread_watcher_android.h"
+#include "chrome/browser/ui/page_info/chrome_page_info_client.h"
 #include "ui/base/resource/resource_bundle_android.h"
 #else
 #include "chrome/browser/resource_coordinator/tab_activity_watcher.h"
@@ -1393,6 +1394,10 @@
   content::WebUIControllerFactory::RegisterFactory(
       ChromeWebUIControllerFactory::GetInstance());
 
+#if defined(OS_ANDROID)
+  page_info::SetPageInfoClient(new ChromePageInfoClient());
+#endif
+
 #if BUILDFLAG(ENABLE_NACL)
   // NaClBrowserDelegateImpl is accessed inside PostProfileInit().
   // So make sure to create it before that.
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_browsertest.cc b/chrome/browser/chromeos/accessibility/select_to_speak_browsertest.cc
index 192ac33..14d808e 100644
--- a/chrome/browser/chromeos/accessibility/select_to_speak_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/select_to_speak_browsertest.cc
@@ -306,8 +306,7 @@
   sm_.Replay();
 }
 
-// Flaky test. https://crbug.com/950049
-IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, DISABLED_FocusRingMovesWithMouse) {
+IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, FocusRingMovesWithMouse) {
   // Create a callback for the focus ring observer.
   base::RepeatingCallback<void()> callback =
       base::BindRepeating(&SelectToSpeakTest::OnFocusRingChanged, GetWeakPtr());
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
index 80101cb..bf4b8d5 100644
--- a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
+++ b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
@@ -29,6 +29,7 @@
 #include "chrome/browser/chromeos/certificate_provider/certificate_provider.h"
 #include "chrome/browser/chromeos/net/client_cert_store_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/chromeos/system_token_cert_db_initializer.h"
 #include "chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.h"
 #include "chrome/browser/net/nss_context.h"
 #include "chrome/browser/profiles/profile.h"
@@ -36,6 +37,7 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/resource_context.h"
 #include "crypto/nss_key_util.h"
 #include "crypto/openssl_util.h"
 #include "crypto/scoped_nss_types.h"
@@ -107,11 +109,11 @@
 
 using GetCertDBCallback = base::Callback<void(net::NSSCertDatabase* cert_db)>;
 
-// Used by GetCertDatabaseOnIOThread and called back with the requested
+// Used by GetCertDatabaseOnIoThread and called back with the requested
 // NSSCertDatabase.
 // If |token_id| is not empty, sets |slot_| of |state| accordingly and calls
 // |callback| if the database was successfully retrieved.
-void DidGetCertDBOnIOThread(const std::string& token_id,
+void DidGetCertDbOnIoThread(const std::string& token_id,
                             const GetCertDBCallback& callback,
                             NSSOperationState* state,
                             net::NSSCertDatabase* cert_db) {
@@ -141,27 +143,56 @@
 // Retrieves the NSSCertDatabase from |context| and, if |token_id| is not empty,
 // the slot for |token_id|.
 // Must be called on the IO thread.
-void GetCertDatabaseOnIOThread(const std::string& token_id,
+void GetCertDatabaseOnIoThread(const std::string& token_id,
                                const GetCertDBCallback& callback,
                                content::ResourceContext* context,
                                NSSOperationState* state) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   net::NSSCertDatabase* cert_db = GetNSSCertDatabaseForResourceContext(
-      context, base::Bind(&DidGetCertDBOnIOThread, token_id, callback, state));
+      context, base::Bind(&DidGetCertDbOnIoThread, token_id, callback, state));
 
   if (cert_db)
-    DidGetCertDBOnIOThread(token_id, callback, state, cert_db);
+    DidGetCertDbOnIoThread(token_id, callback, state, cert_db);
+}
+
+// Called by SystemTokenCertDBInitializer on the UI thread with the system token
+// certificate database when it is initialized.
+void DidGetSystemTokenCertDbOnUiThread(const std::string& token_id,
+                                       const GetCertDBCallback& callback,
+                                       NSSOperationState* state,
+                                       net::NSSCertDatabase* cert_db) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  // Sets |slot_| of |state| accordingly and calls |callback| on the IO thread
+  // if the database was successfully retrieved.
+  base::PostTask(FROM_HERE, {BrowserThread::IO},
+                 base::BindOnce(&DidGetCertDbOnIoThread, token_id, callback,
+                                state, cert_db));
 }
 
 // Asynchronously fetches the NSSCertDatabase for |browser_context| and, if
 // |token_id| is not empty, the slot for |token_id|. Stores the slot in |state|
 // and passes the database to |callback|. Will run |callback| on the IO thread.
+// TODO(omorsi): Introduce timeout for retrieving certificate database in
+// platform keys.
 void GetCertDatabase(const std::string& token_id,
                      const GetCertDBCallback& callback,
                      BrowserContext* browser_context,
                      NSSOperationState* state) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  Profile* profile = Profile::FromBrowserContext(browser_context);
+  // There will be no public or private slots initialized if no user is logged
+  // in. In this case, an NSS certificate database that has the system slot
+  // should be used for system token operations.
+  if (ProfileHelper::IsSigninProfile(profile)) {
+    SystemTokenCertDBInitializer::Get()->GetSystemTokenCertDb(base::BindOnce(
+        &DidGetSystemTokenCertDbOnUiThread, token_id, callback, state));
+    return;
+  }
+
   base::PostTask(FROM_HERE, {BrowserThread::IO},
-                 base::BindOnce(&GetCertDatabaseOnIOThread, token_id, callback,
+                 base::BindOnce(&GetCertDatabaseOnIoThread, token_id, callback,
                                 browser_context->GetResourceContext(), state));
 }
 
@@ -947,11 +978,16 @@
   std::unique_ptr<std::vector<std::string>> token_ids(
       new std::vector<std::string>);
 
-  // The user's token is always available.
-  token_ids->push_back(kTokenIdUser);
+  // The user token will be unavailable in case of no logged in user in this
+  // profile.
+  if (cert_db->GetPrivateSlot())
+    token_ids->push_back(kTokenIdUser);
+
   if (cert_db->GetSystemSlot())
     token_ids->push_back(kTokenIdSystem);
 
+  DCHECK(!token_ids->empty());
+
   state->CallBack(FROM_HERE, std::move(token_ids),
                   std::string() /* no error */);
 }
diff --git a/chrome/browser/chromeos/system_token_cert_db_initializer.cc b/chrome/browser/chromeos/system_token_cert_db_initializer.cc
index 30959b4..f9b000c 100644
--- a/chrome/browser/chromeos/system_token_cert_db_initializer.cc
+++ b/chrome/browser/chromeos/system_token_cert_db_initializer.cc
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/sequence_checker.h"
 #include "base/task/post_task.h"
 #include "build/branding_buildflags.h"
 #include "build/buildflag.h"
@@ -74,6 +75,9 @@
 #endif
 }
 
+// ChromeBrowserMainPartsChromeos owns this.
+SystemTokenCertDBInitializer* g_system_token_cert_db_initializer = nullptr;
+
 }  // namespace
 
 SystemTokenCertDBInitializer::SystemTokenCertDBInitializer() {
@@ -82,11 +86,26 @@
   CryptohomeClient::Get()->WaitForServiceToBeAvailable(
       base::BindOnce(&SystemTokenCertDBInitializer::OnCryptohomeAvailable,
                      weak_ptr_factory_.GetWeakPtr()));
+
+  DCHECK_EQ(g_system_token_cert_db_initializer, nullptr);
+  g_system_token_cert_db_initializer = this;
 }
 
-SystemTokenCertDBInitializer::~SystemTokenCertDBInitializer() = default;
+SystemTokenCertDBInitializer::~SystemTokenCertDBInitializer() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  DCHECK_EQ(g_system_token_cert_db_initializer, this);
+  g_system_token_cert_db_initializer = nullptr;
+}
+
+// static
+SystemTokenCertDBInitializer* SystemTokenCertDBInitializer::Get() {
+  return g_system_token_cert_db_initializer;
+}
 
 void SystemTokenCertDBInitializer::ShutDown() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   // Note that the observer could potentially not be added yet, but
   // RemoveObserver() is a no-op in that case.
   CryptohomeClient::Get()->RemoveObserver(this);
@@ -96,13 +115,29 @@
     bool ready,
     bool owned,
     bool was_owned_this_boot) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (ready) {
     // The TPM "ready" means that it's available && owned && not being owned.
     MaybeStartInitializingDatabase();
   }
 }
 
+void SystemTokenCertDBInitializer::GetSystemTokenCertDb(
+    GetSystemTokenCertDbCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  DCHECK(callback);
+
+  if (system_token_cert_database_)
+    std::move(callback).Run(system_token_cert_database_.get());
+  else
+    get_system_token_cert_db_callback_list_.push_back(std::move(callback));
+}
+
 void SystemTokenCertDBInitializer::OnCryptohomeAvailable(bool available) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (!available) {
     LOG(ERROR) << "SystemTokenCertDBInitializer: Failed to wait for "
                   "cryptohome to become available.";
@@ -118,6 +153,8 @@
 
 void SystemTokenCertDBInitializer::OnGotTpmIsReady(
     base::Optional<bool> tpm_is_ready) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (!tpm_is_ready.has_value() || !tpm_is_ready.value()) {
     VLOG(1) << "SystemTokenCertDBInitializer: TPM is not ready - not loading "
                "system token.";
@@ -136,6 +173,8 @@
 }
 
 void SystemTokenCertDBInitializer::MaybeStartInitializingDatabase() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (started_initializing_)
     return;
   started_initializing_ = true;
@@ -149,8 +188,22 @@
                  base::BindOnce(&GetSystemSlotOnIOThread, callback));
 }
 
+void SystemTokenCertDBInitializer::
+    RunAndClearGetSystemTokenCertDbCallbackList() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(system_token_cert_database_);
+
+  std::vector<GetSystemTokenCertDbCallback> callback_list =
+      std::move(get_system_token_cert_db_callback_list_);
+  for (auto& callback : callback_list) {
+    std::move(callback).Run(system_token_cert_database_.get());
+  }
+}
+
 void SystemTokenCertDBInitializer::InitializeDatabase(
     crypto::ScopedPK11Slot system_slot) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   // Currently, NSSCertDatabase requires a public slot to be set, so we use
   // the system slot there. We also want GetSystemSlot() to return the system
   // slot. As ScopedPK11Slot is actually a unique_ptr which will be moved into
@@ -164,6 +217,7 @@
   database->SetSystemSlot(std::move(system_slot_copy));
 
   system_token_cert_database_ = std::move(database);
+  RunAndClearGetSystemTokenCertDbCallbackList();
 
   VLOG(1) << "SystemTokenCertDBInitializer: Passing system token NSS "
              "database to NetworkCertLoader.";
diff --git a/chrome/browser/chromeos/system_token_cert_db_initializer.h b/chrome/browser/chromeos/system_token_cert_db_initializer.h
index 5167724..cfd08ad 100644
--- a/chrome/browser/chromeos/system_token_cert_db_initializer.h
+++ b/chrome/browser/chromeos/system_token_cert_db_initializer.h
@@ -6,10 +6,13 @@
 #define CHROME_BROWSER_CHROMEOS_SYSTEM_TOKEN_CERT_DB_INITIALIZER_H_
 
 #include <memory>
+#include <vector>
 
+#include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
+#include "base/sequence_checker.h"
 #include "chromeos/dbus/cryptohome/cryptohome_client.h"
 #include "crypto/scoped_nss_types.h"
 
@@ -32,6 +35,9 @@
   SystemTokenCertDBInitializer();
   ~SystemTokenCertDBInitializer() override;
 
+  // Returns a global instance. May return null if not initialized.
+  static SystemTokenCertDBInitializer* Get();
+
   // Stops making new requests to D-Bus services.
   void ShutDown();
 
@@ -40,6 +46,14 @@
                             bool owned,
                             bool was_owned_this_boot) override;
 
+  // Retrieves the global NSSCertDatabase for the system token and passes it to
+  // |callback|. If the database is already initialized, calls |callback|
+  // immediately. Otherwise, |callback| will be called when the database is
+  // initialized.
+  using GetSystemTokenCertDbCallback =
+      base::OnceCallback<void(net::NSSCertDatabase*)>;
+  void GetSystemTokenCertDb(GetSystemTokenCertDbCallback callback);
+
  private:
   // Called once the cryptohome service is available.
   void OnCryptohomeAvailable(bool available);
@@ -53,6 +67,10 @@
   // database, unless it was already started before.
   void MaybeStartInitializingDatabase();
 
+  // This is called when the system token certificate database is created to run
+  // all entries in |get_system_token_cert_db_callback_list_| and clear it.
+  void RunAndClearGetSystemTokenCertDbCallbackList();
+
   // Initializes the global system token NSSCertDatabase with |system_slot|.
   // Also starts NetworkCertLoader with the system token database.
   void InitializeDatabase(crypto::ScopedPK11Slot system_slot);
@@ -63,6 +81,13 @@
   // Global NSSCertDatabase which sees the system token.
   std::unique_ptr<net::NSSCertDatabase> system_token_cert_database_;
 
+  // List of callbacks that should be executed when the system token certificate
+  // database is created.
+  std::vector<GetSystemTokenCertDbCallback>
+      get_system_token_cert_db_callback_list_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
   base::WeakPtrFactory<SystemTokenCertDBInitializer> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(SystemTokenCertDBInitializer);
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index f60cea2..be29128 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -174,7 +174,7 @@
     if (scope != ANY_SCOPE && ((scope == GLOBAL) != saved_command.global()))
       continue;
 
-    if (type != SUGGESTED && shortcut_assigned.key_code() != ui::VKEY_UNKNOWN)
+    if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN)
       command.set_accelerator(shortcut_assigned);
     command.set_global(saved_command.global());
 
@@ -357,50 +357,6 @@
   return Command();
 }
 
-bool CommandService::GetSuggestedExtensionCommand(
-    const std::string& extension_id,
-    const ui::Accelerator& accelerator,
-    Command* command) const {
-  const Extension* extension =
-      ExtensionRegistry::Get(profile_)
-          ->GetExtensionById(extension_id, ExtensionRegistry::ENABLED);
-  CHECK(extension);
-
-  Command prospective_command;
-  CommandMap command_map;
-  if (GetBrowserActionCommand(extension_id,
-                              CommandService::SUGGESTED,
-                              &prospective_command,
-                              nullptr) &&
-      accelerator == prospective_command.accelerator()) {
-    if (command)
-      *command = prospective_command;
-    return true;
-  } else if (GetPageActionCommand(extension_id,
-                                  CommandService::SUGGESTED,
-                                  &prospective_command,
-                                  nullptr) &&
-             accelerator == prospective_command.accelerator()) {
-    if (command)
-      *command = prospective_command;
-    return true;
-  } else if (GetNamedCommands(extension_id,
-                              CommandService::SUGGESTED,
-                              CommandService::REGULAR,
-                              &command_map)) {
-    for (CommandMap::const_iterator it = command_map.begin();
-         it != command_map.end();
-         ++it) {
-      if (accelerator == it->second.accelerator()) {
-        if (command)
-          *command = it->second;
-        return true;
-      }
-    }
-  }
-  return false;
-}
-
 void CommandService::AddObserver(Observer* observer) {
   observers_.AddObserver(observer);
 }
@@ -675,50 +631,6 @@
       active_command.accelerator().key_code() != ui::VKEY_UNKNOWN;
 }
 
-bool CommandService::IsKeybindingChanging(const Extension* extension,
-                                          const std::string& command_name) {
-  // Get the new assigned command, if any.
-  Command new_command;
-  if (command_name == manifest_values::kBrowserActionCommandEvent) {
-    new_command = *CommandsInfo::GetBrowserActionCommand(extension);
-  } else if (command_name == manifest_values::kPageActionCommandEvent) {
-    new_command = *CommandsInfo::GetPageActionCommand(extension);
-  } else {  // This is a named command.
-    const CommandMap* named_commands =
-        CommandsInfo::GetNamedCommands(extension);
-    if (named_commands) {
-      auto loc = named_commands->find(command_name);
-      if (loc != named_commands->end())
-        new_command = loc->second;
-    }
-  }
-
-  return Command::StringToAccelerator(
-      GetSuggestedKeyPref(extension, command_name), command_name) !=
-      new_command.accelerator();
-}
-
-std::string CommandService::GetSuggestedKeyPref(
-    const Extension* extension,
-    const std::string& command_name) {
-  // Get the previous suggested key, if any.
-  ui::Accelerator suggested_key;
-  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile_);
-  const base::DictionaryValue* commands_prefs = NULL;
-  if (extension_prefs->ReadPrefAsDictionary(extension->id(),
-                                            kCommands,
-                                            &commands_prefs)) {
-    const base::DictionaryValue* suggested_key_prefs = NULL;
-    std::string suggested_key;
-    if (commands_prefs->GetDictionary(command_name, &suggested_key_prefs) &&
-        suggested_key_prefs->GetString(kSuggestedKey, &suggested_key)) {
-      return suggested_key;
-    }
-  }
-
-  return std::string();
-}
-
 void CommandService::RemoveKeybindingPrefs(const std::string& extension_id,
                                            const std::string& command_name) {
   DictionaryPrefUpdate updater(profile_->GetPrefs(),
@@ -808,22 +720,14 @@
       FindCommandByName(extension_id, requested_command->command_name());
   ui::Accelerator shortcut_assigned = saved_command.accelerator();
 
-  if (active) {
-    if (query_type == SUGGESTED) {
-      *active =
-          (requested_command->accelerator().key_code() != ui::VKEY_UNKNOWN &&
-           requested_command->accelerator() == shortcut_assigned);
-    } else {
-      *active = (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN);
-    }
-  }
+  if (active)
+    *active = (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN);
 
   if (query_type == ACTIVE && shortcut_assigned.key_code() == ui::VKEY_UNKNOWN)
     return false;
 
   *command = *requested_command;
-  if (query_type != SUGGESTED &&
-      shortcut_assigned.key_code() != ui::VKEY_UNKNOWN)
+  if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN)
     command->set_accelerator(shortcut_assigned);
 
   return true;
diff --git a/chrome/browser/extensions/api/commands/command_service.h b/chrome/browser/extensions/api/commands/command_service.h
index 9ffcfb4..668772a 100644
--- a/chrome/browser/extensions/api/commands/command_service.h
+++ b/chrome/browser/extensions/api/commands/command_service.h
@@ -40,13 +40,14 @@
                        public ExtensionRegistryObserver {
  public:
   // An enum specifying which extension commands to fetch. There are effectively
-  // four options: all, active, suggested, and inactive. Only the first three
-  // appear in the enum since there hasn't been a need for 'inactive' yet.
+  // four options: all, active, suggested, and inactive. Only the first two
+  // appear in the enum since there isn't currently a need for 'inactive' yet or
+  // 'suggested'.
   //
-  // 'Inactive' means no key is bound. It might be because 1) a key wasn't
+  // 'inactive' means no key is bound. It might be because 1) a key wasn't
   // specified (suggested) or 2) it was not granted (key already taken).
   //
-  // SUGGESTED covers developer-assigned keys that may or may not have been
+  // 'suggested' covers developer-assigned keys that may or may not have been
   // granted. Reasons for not granting include permission denied/key already
   // taken.
   //
@@ -57,7 +58,6 @@
   enum QueryType {
     ALL,
     ACTIVE,
-    SUGGESTED,
   };
 
   // An enum specifying whether the command is global in scope or not. Global
@@ -167,13 +167,6 @@
   Command FindCommandByName(const std::string& extension_id,
                             const std::string& command) const;
 
-  // If the extension with |extension_id| suggests the assignment of a command
-  // to |accelerator|, returns true and assigns the command to *|command|. Also
-  // assigns the type to *|command_type| if non-null.
-  bool GetSuggestedExtensionCommand(const std::string& extension_id,
-                                    const ui::Accelerator& accelerator,
-                                    Command* command) const;
-
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
 
@@ -232,16 +225,6 @@
   bool IsCommandShortcutUserModified(const Extension* extension,
                                      const std::string& command_name);
 
-  // Returns true if the extension is changing the binding of |command_name| on
-  // install.
-  bool IsKeybindingChanging(const Extension* extension,
-                            const std::string& command_name);
-
-  // Returns |extension|'s previous suggested key for |command_name| in the
-  // preferences, or the empty string if none.
-  std::string GetSuggestedKeyPref(const Extension* extension,
-                                  const std::string& command_name);
-
   bool GetExtensionActionCommand(const std::string& extension_id,
                                  QueryType query_type,
                                  Command* command,
diff --git a/chrome/browser/extensions/api/commands/command_service_browsertest.cc b/chrome/browser/extensions/api/commands/command_service_browsertest.cc
index a6a2e01..6c3e3acc 100644
--- a/chrome/browser/extensions/api/commands/command_service_browsertest.cc
+++ b/chrome/browser/extensions/api/commands/command_service_browsertest.cc
@@ -226,56 +226,6 @@
 }
 
 IN_PROC_BROWSER_TEST_F(CommandServiceTest,
-                       GetExtensionActionCommandQuerySuggested) {
-  base::FilePath extension_dir =
-      test_data_dir_.AppendASCII("keybinding").AppendASCII("basics");
-  const Extension* extension = InstallExtension(extension_dir, 1);
-  ASSERT_TRUE(extension);
-
-  CommandService* command_service = CommandService::Get(browser()->profile());
-
-  {
-    Command command;
-    bool active = false;
-    EXPECT_TRUE(command_service->GetBrowserActionCommand(
-        extension->id(), CommandService::SUGGESTED, &command, &active));
-
-    EXPECT_EQ(kBasicBrowserActionKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-    EXPECT_TRUE(active);
-  }
-
-  command_service->UpdateKeybindingPrefs(
-      extension->id(), manifest_values::kBrowserActionCommandEvent,
-      kBasicAlternateKeybinding);
-
-  {
-    Command command;
-    bool active = true;
-    EXPECT_TRUE(command_service->GetBrowserActionCommand(
-        extension->id(), CommandService::SUGGESTED, &command, &active));
-
-    EXPECT_EQ(kBasicBrowserActionKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-    EXPECT_FALSE(active);
-  }
-
-  command_service->RemoveKeybindingPrefs(
-      extension->id(), manifest_values::kBrowserActionCommandEvent);
-
-  {
-    Command command;
-    bool active = true;
-    EXPECT_TRUE(command_service->GetBrowserActionCommand(
-        extension->id(), CommandService::SUGGESTED, &command, &active));
-
-    EXPECT_EQ(kBasicBrowserActionKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-    EXPECT_FALSE(active);
-  }
-}
-
-IN_PROC_BROWSER_TEST_F(CommandServiceTest,
                        GetNamedCommandsQueryAll) {
   base::FilePath extension_dir =
       test_data_dir_.AppendASCII("keybinding").AppendASCII("basics");
@@ -372,55 +322,4 @@
   }
 }
 
-IN_PROC_BROWSER_TEST_F(CommandServiceTest,
-                       GetNamedCommandsQuerySuggested) {
-  base::FilePath extension_dir =
-      test_data_dir_.AppendASCII("keybinding").AppendASCII("basics");
-  const Extension* extension = InstallExtension(extension_dir, 1);
-  ASSERT_TRUE(extension);
-
-  CommandService* command_service = CommandService::Get(browser()->profile());
-
-  {
-    CommandMap command_map;
-    EXPECT_TRUE(command_service->GetNamedCommands(
-        extension->id(), CommandService::SUGGESTED, CommandService::ANY_SCOPE,
-        &command_map));
-
-    ASSERT_EQ(1u, command_map.count(kBasicNamedCommand));
-    Command command = command_map[kBasicNamedCommand];
-    EXPECT_EQ(kBasicNamedKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-  }
-
-  command_service->UpdateKeybindingPrefs(
-      extension->id(), kBasicNamedCommand, kBasicAlternateKeybinding);
-
-  {
-    CommandMap command_map;
-    EXPECT_TRUE(command_service->GetNamedCommands(
-        extension->id(), CommandService::SUGGESTED, CommandService::ANY_SCOPE,
-        &command_map));
-
-    ASSERT_EQ(1u, command_map.count(kBasicNamedCommand));
-    Command command = command_map[kBasicNamedCommand];
-    EXPECT_EQ(kBasicNamedKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-  }
-
-  command_service->RemoveKeybindingPrefs(extension->id(), kBasicNamedCommand);
-
-  {
-    CommandMap command_map;
-    EXPECT_TRUE(command_service->GetNamedCommands(
-        extension->id(), CommandService::SUGGESTED, CommandService::ANY_SCOPE,
-        &command_map));
-
-    ASSERT_EQ(1u, command_map.count(kBasicNamedCommand));
-    Command command = command_map[kBasicNamedCommand];
-    EXPECT_EQ(kBasicNamedKeybinding,
-              Command::AcceleratorToString(command.accelerator()));
-  }
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc
index 1d786a2..0f43e71 100644
--- a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc
+++ b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc
@@ -48,17 +48,24 @@
 
   auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_);
   std::vector<CoreAccountId> accounts;
-  auto chrome_accounts_with_refresh_tokens =
-      identity_manager->GetAccountsWithRefreshTokens();
-  for (const auto& chrome_account : chrome_accounts_with_refresh_tokens) {
-    // An account in persistent error state would make multilogin fail. Showing
-    // only a subset of accounts seems to be a better alternative than failing
-    // with an error.
-    if (identity_manager->HasAccountWithRefreshTokenInPersistentErrorState(
-            chrome_account.account_id)) {
-      continue;
+  if (IdentityAPI::GetFactoryInstance()
+          ->Get(profile_)
+          ->AreExtensionsRestrictedToPrimaryAccount()) {
+    CoreAccountId primary_account_id = identity_manager->GetPrimaryAccountId();
+    accounts.push_back(primary_account_id);
+  } else {
+    auto chrome_accounts_with_refresh_tokens =
+        identity_manager->GetAccountsWithRefreshTokens();
+    for (const auto& chrome_account : chrome_accounts_with_refresh_tokens) {
+      // An account in persistent error state would make multilogin fail.
+      // Showing only a subset of accounts seems to be a better alternative than
+      // failing with an error.
+      if (identity_manager->HasAccountWithRefreshTokenInPersistentErrorState(
+              chrome_account.account_id)) {
+        continue;
+      }
+      accounts.push_back(chrome_account.account_id);
     }
-    accounts.push_back(chrome_account.account_id);
   }
 
   set_accounts_in_cookie_task_ =
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc
index 5dde92c3..d2e7053 100644
--- a/chrome/browser/extensions/api/identity/identity_apitest.cc
+++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -1824,10 +1824,6 @@
 
 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
                        MultiSecondaryUserManuallyIssueToken) {
-  // This test is only relevant if extensions see all accounts.
-  if (id_api()->AreExtensionsRestrictedToPrimaryAccount())
-    return;
-
   SignIn("primary@example.com");
   CoreAccountId secondary_account_id =
       identity_test_env()
@@ -1840,11 +1836,22 @@
   func->set_auto_login_access_token(false);
   func->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS);
 
+  const char kFunctionParams[] =
+      "[{\"account\": { \"id\": \"gaia_id_for_secondary_example.com\" } }]";
+
+  if (id_api()->AreExtensionsRestrictedToPrimaryAccount()) {
+    // Fail if extensions are restricted to the primary account.
+    std::string error = utils::RunFunctionAndReturnError(
+        func.get(), kFunctionParams, browser());
+    EXPECT_EQ(std::string(errors::kUserNonPrimary), error);
+    EXPECT_FALSE(func->login_ui_shown());
+    EXPECT_FALSE(func->scope_ui_shown());
+    return;
+  }
+
   base::RunLoop run_loop;
   on_access_token_requested_ = run_loop.QuitClosure();
-  RunFunctionAsync(
-      func.get(),
-      "[{\"account\": { \"id\": \"gaia_id_for_secondary_example.com\" } }]");
+  RunFunctionAsync(func.get(), kFunctionParams);
   run_loop.Run();
 
   std::string secondary_account_access_token =
@@ -1873,7 +1880,11 @@
   std::string error = utils::RunFunctionAndReturnError(
       func.get(), "[{\"account\": { \"id\": \"unknown@example.com\" } }]",
       browser());
-  EXPECT_EQ(std::string(errors::kUserNotSignedIn), error);
+  std::string expected_error;
+  if (id_api()->AreExtensionsRestrictedToPrimaryAccount())
+    EXPECT_EQ(errors::kUserNonPrimary, error);
+  else
+    EXPECT_EQ(errors::kUserNotSignedIn, error);
 }
 
 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
@@ -1946,10 +1957,6 @@
 // getAuthToken() call for the same extension.
 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
                        MultiSecondaryInteractiveRemoteConsent) {
-  // This test is only relevant if extensions see all accounts.
-  if (id_api()->AreExtensionsRestrictedToPrimaryAccount())
-    return;
-
   CoreAccountId primary_account_id = SignIn("primary@example.com");
   AccountInfo secondary_account =
       identity_test_env()->MakeAccountAvailable("secondary@example.com");
@@ -1975,6 +1982,12 @@
     // the account that has been returned in result of the remote consent.
     std::string primary_account_access_token =
         IssueLoginAccessTokenForAccount(primary_account_id);
+
+    if (id_api()->AreExtensionsRestrictedToPrimaryAccount()) {
+      EXPECT_EQ(std::string(errors::kUserNonPrimary), WaitForError(func.get()));
+      return;
+    }
+
     std::string secondary_account_access_token =
         IssueLoginAccessTokenForAccount(secondary_account.account_id);
 
@@ -2031,7 +2044,7 @@
     // Fail if extensions are restricted to the primary account.
     std::string error = utils::RunFunctionAndReturnError(
         func.get(), kFunctionParams, browser());
-    EXPECT_EQ(std::string(errors::kUserNotSignedIn), error);
+    EXPECT_EQ(std::string(errors::kUserNonPrimary), error);
     EXPECT_FALSE(func->login_ui_shown());
     EXPECT_FALSE(func->scope_ui_shown());
   } else {
diff --git a/chrome/browser/extensions/api/identity/identity_constants.cc b/chrome/browser/extensions/api/identity/identity_constants.cc
index 657911b..97983c6 100644
--- a/chrome/browser/extensions/api/identity/identity_constants.cc
+++ b/chrome/browser/extensions/api/identity/identity_constants.cc
@@ -13,6 +13,7 @@
 const char kNoGrant[] = "OAuth2 not granted or revoked.";
 const char kUserRejected[] = "The user did not approve access.";
 const char kUserNotSignedIn[] = "The user is not signed in.";
+const char kUserNonPrimary[] = "Only the primary user account is allowed";
 const char kBrowserSigninNotAllowed[] = "The user turned off browser signin";
 const char kInteractionRequired[] = "User interaction required.";
 const char kInvalidRedirect[] = "Did not redirect to the right URL.";
diff --git a/chrome/browser/extensions/api/identity/identity_constants.h b/chrome/browser/extensions/api/identity/identity_constants.h
index 67079d6..3c05a8a 100644
--- a/chrome/browser/extensions/api/identity/identity_constants.h
+++ b/chrome/browser/extensions/api/identity/identity_constants.h
@@ -14,6 +14,7 @@
 extern const char kNoGrant[];
 extern const char kUserRejected[];
 extern const char kUserNotSignedIn[];
+extern const char kUserNonPrimary[];
 extern const char kBrowserSigninNotAllowed[];
 extern const char kInteractionRequired[];
 extern const char kInvalidRedirect[];
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
index 63eb934..a859d75 100644
--- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
+++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
@@ -141,7 +141,7 @@
   token_key_.scopes = scopes;
   token_key_.extension_id = extension()->id();
 
-  if (gaia_id.empty()) {
+  if (gaia_id.empty() && !IsPrimaryAccountOnly()) {
     gaia_id = IdentityAPI::GetFactoryInstance()
                   ->Get(GetProfile())
                   ->GetGaiaIdForExtension(token_key_.extension_id)
@@ -181,8 +181,7 @@
   // than the primary account.
   if (primary_account_only && !extension_gaia_id.empty() &&
       extension_gaia_id != primary_account_info.gaia) {
-    // TODO(courage): should this be a different error?
-    CompleteFunctionWithError(identity_constants::kUserNotSignedIn);
+    CompleteFunctionWithError(identity_constants::kUserNonPrimary);
     return;
   }
 
@@ -744,6 +743,16 @@
     return;
   }
 
+  if (IsPrimaryAccountOnly()) {
+    CoreAccountId primary_account_id =
+        IdentityManagerFactory::GetForProfile(GetProfile())
+            ->GetPrimaryAccountId();
+    if (primary_account_id != account->account_id) {
+      CompleteFunctionWithError(identity_constants::kUserNonPrimary);
+      return;
+    }
+  }
+
   IdentityAPI* id_api = IdentityAPI::GetFactoryInstance()->Get(GetProfile());
   id_api->SetGaiaIdForExtension(token_key_.extension_id, gaia_id);
 
diff --git a/chrome/browser/extensions/forced_extensions/installation_metrics.cc b/chrome/browser/extensions/forced_extensions/installation_metrics.cc
index e81915ab..a1b5f67 100644
--- a/chrome/browser/extensions/forced_extensions/installation_metrics.cc
+++ b/chrome/browser/extensions/forced_extensions/installation_metrics.cc
@@ -116,16 +116,16 @@
 #endif  // defined(OS_CHROMEOS)
 
 void InstallationMetrics::ReportMetrics() {
-  UMA_HISTOGRAM_COUNTS_100("Extensions.ForceInstalledTotalCandidateCount",
-                           tracker_->extensions().size());
+  base::UmaHistogramCounts100("Extensions.ForceInstalledTotalCandidateCount",
+                              tracker_->extensions().size());
   std::set<ExtensionId> missing_forced_extensions;
   for (const auto& extension : tracker_->extensions()) {
     if (extension.second.status != ExtensionStatus::LOADED)
       missing_forced_extensions.insert(extension.first);
   }
   if (missing_forced_extensions.empty()) {
-    UMA_HISTOGRAM_LONG_TIMES("Extensions.ForceInstalledLoadTime",
-                             base::Time::Now() - start_time_);
+    base::UmaHistogramLongTimes("Extensions.ForceInstalledLoadTime",
+                                base::Time::Now() - start_time_);
     // TODO(burunduk): Remove VLOGs after resolving crbug/917700 and
     // crbug/904600.
     VLOG(2) << "All forced extensions seems to be installed";
@@ -140,9 +140,9 @@
   size_t misconfigured_extensions = 0;
   size_t installed_missing_count = missing_forced_extensions.size();
 
-  UMA_HISTOGRAM_COUNTS_100("Extensions.ForceInstalledTimedOutCount",
-                           enabled_missing_count);
-  UMA_HISTOGRAM_COUNTS_100(
+  base::UmaHistogramCounts100("Extensions.ForceInstalledTimedOutCount",
+                              enabled_missing_count);
+  base::UmaHistogramCounts100(
       "Extensions.ForceInstalledTimedOutAndNotInstalledCount",
       installed_missing_count);
   VLOG(2) << "Failed to install " << installed_missing_count
@@ -150,7 +150,7 @@
   for (const auto& extension_id : missing_forced_extensions) {
     InstallationReporter::InstallationData installation =
         installation_reporter->Get(extension_id);
-    UMA_HISTOGRAM_ENUMERATION(
+    base::UmaHistogramEnumeration(
         "Extensions.ForceInstalledFailureCacheStatus",
         installation.downloading_cache_status.value_or(
             ExtensionDownloaderDelegate::CacheStatus::CACHE_UNKNOWN));
@@ -159,26 +159,26 @@
           InstallationReporter::FailureReason::IN_PROGRESS;
       InstallationReporter::Stage install_stage =
           installation.install_stage.value();
-      UMA_HISTOGRAM_ENUMERATION("Extensions.ForceInstalledStage",
-                                install_stage);
+      base::UmaHistogramEnumeration("Extensions.ForceInstalledStage",
+                                    install_stage);
       if (install_stage == InstallationReporter::Stage::DOWNLOADING) {
         DCHECK(installation.downloading_stage);
         ExtensionDownloaderDelegate::Stage downloading_stage =
             installation.downloading_stage.value();
-        UMA_HISTOGRAM_ENUMERATION("Extensions.ForceInstalledDownloadingStage",
-                                  downloading_stage);
+        base::UmaHistogramEnumeration(
+            "Extensions.ForceInstalledDownloadingStage", downloading_stage);
       }
     }
     InstallationReporter::FailureReason failure_reason =
         installation.failure_reason.value_or(
             InstallationReporter::FailureReason::UNKNOWN);
-    UMA_HISTOGRAM_ENUMERATION("Extensions.ForceInstalledFailureReason2",
-                              failure_reason);
+    base::UmaHistogramEnumeration("Extensions.ForceInstalledFailureReason2",
+                                  failure_reason);
     if (tracker_->extensions().at(extension_id).is_from_store) {
-      UMA_HISTOGRAM_ENUMERATION(
+      base::UmaHistogramEnumeration(
           "Extensions.WebStore_ForceInstalledFailureReason2", failure_reason);
     } else {
-      UMA_HISTOGRAM_ENUMERATION(
+      base::UmaHistogramEnumeration(
           "Extensions.OffStore_ForceInstalledFailureReason2", failure_reason);
     }
 
@@ -193,9 +193,9 @@
         base::UmaHistogramSparse("Extensions.ForceInstalledHttpErrorCode",
                                  installation.response_code.value());
       }
-      UMA_HISTOGRAM_EXACT_LINEAR("Extensions.ForceInstalledFetchTries",
-                                 installation.fetch_tries.value(),
-                                 ExtensionDownloader::kMaxRetries);
+      base::UmaHistogramExactLinear("Extensions.ForceInstalledFetchTries",
+                                    installation.fetch_tries.value(),
+                                    ExtensionDownloader::kMaxRetries);
     }
 
     // In case of MANIFEST_FETCH_FAILURE, report the network error code,
@@ -211,7 +211,7 @@
             "Extensions.ForceInstalledManifestFetchFailedHttpErrorCode",
             installation.response_code.value());
       }
-      UMA_HISTOGRAM_EXACT_LINEAR(
+      base::UmaHistogramExactLinear(
           "Extensions.ForceInstalledManifestFetchFailedFetchTries",
           installation.fetch_tries.value(), ExtensionDownloader::kMaxRetries);
     }
@@ -221,8 +221,8 @@
     // the login screen. There is no active user on the login screen and
     // thus we would not report in that case.
     if (user_manager::UserManager::Get()->GetActiveUser()) {
-      UMA_HISTOGRAM_ENUMERATION("Extensions.ForceInstalledFailureSessionType",
-                                GetSessionType());
+      base::UmaHistogramEnumeration(
+          "Extensions.ForceInstalledFailureSessionType", GetSessionType());
     }
 #endif  // defined(OS_CHROMEOS)
     VLOG(2) << "Forced extension " << extension_id
@@ -232,19 +232,26 @@
       CrxInstallErrorDetail detail = installation.install_error_detail.value();
       if (IsMisconfiguration(installation, extension_id))
         misconfigured_extensions++;
-      UMA_HISTOGRAM_ENUMERATION(
+      base::UmaHistogramEnumeration(
           "Extensions.ForceInstalledFailureCrxInstallError", detail);
     }
     if (installation.unpacker_failure_reason) {
-      UMA_HISTOGRAM_ENUMERATION(
+      base::UmaHistogramEnumeration(
           "Extensions.ForceInstalledFailureSandboxUnpackFailureReason",
           installation.unpacker_failure_reason.value(),
           SandboxedUnpackerFailureReason::NUM_FAILURE_REASONS);
     }
+    if (failure_reason ==
+            InstallationReporter::FailureReason::CRX_FETCH_URL_EMPTY &&
+        installation.update_check_status) {
+      base::UmaHistogramEnumeration(
+          "Extensions.ForceInstalledFailureUpdateCheckStatus",
+          installation.update_check_status.value());
+    }
   }
   bool non_misconfigured_failure_occurred =
       misconfigured_extensions != missing_forced_extensions.size();
-  UMA_HISTOGRAM_BOOLEAN(
+  base::UmaHistogramBoolean(
       "Extensions."
       "ForceInstalledSessionsWithNonMisconfigurationFailureOccured",
       non_misconfigured_failure_occurred);
diff --git a/chrome/browser/extensions/forced_extensions/installation_reporter.cc b/chrome/browser/extensions/forced_extensions/installation_reporter.cc
index 64e9e9c..e54ba3be 100644
--- a/chrome/browser/extensions/forced_extensions/installation_reporter.cc
+++ b/chrome/browser/extensions/forced_extensions/installation_reporter.cc
@@ -88,6 +88,33 @@
   }
 }
 
+void InstallationReporter::ReportManifestUpdateCheckStatus(
+    const ExtensionId& id,
+    const std::string& status) {
+  InstallationData& data = installation_data_map_[id];
+  // Map the current status to UpdateCheckStatus enum.
+  if (status == "ok")
+    data.update_check_status = UpdateCheckStatus::kOk;
+  else if (status == "noupdate")
+    data.update_check_status = UpdateCheckStatus::kNoUpdate;
+  else if (status == "error-internal")
+    data.update_check_status = UpdateCheckStatus::kErrorInternal;
+  else if (status == "error-hash")
+    data.update_check_status = UpdateCheckStatus::kErrorHash;
+  else if (status == "error-osnotsupported")
+    data.update_check_status = UpdateCheckStatus::kErrorOsNotSupported;
+  else if (status == "error-hwnotsupported")
+    data.update_check_status = UpdateCheckStatus::kErrorHardwareNotSupported;
+  else if (status == "error-unsupportedprotocol")
+    data.update_check_status = UpdateCheckStatus::kErrorUnsupportedProtocol;
+  else
+    data.update_check_status = UpdateCheckStatus::kUnknown;
+
+  for (auto& observer : observers_) {
+    observer.OnExtensionDataChangedForTesting(id, browser_context_, data);
+  }
+}
+
 void InstallationReporter::ReportFetchError(
     const ExtensionId& id,
     FailureReason reason,
diff --git a/chrome/browser/extensions/forced_extensions/installation_reporter.h b/chrome/browser/extensions/forced_extensions/installation_reporter.h
index dac4359..42b9000 100644
--- a/chrome/browser/extensions/forced_extensions/installation_reporter.h
+++ b/chrome/browser/extensions/forced_extensions/installation_reporter.h
@@ -172,6 +172,40 @@
     // Always update it to the max value.
     kMaxValue = CRX_FETCH_URL_INVALID,
   };
+  // Status for the update check returned by server while fetching manifest.
+  // Enum used for UMA. Do NOT reorder or remove entries. Don't forget to update
+  // enums.xml (name: UpdateCheckStatus) when adding new entries.
+  enum class UpdateCheckStatus {
+    // Technically it may happen that update server return some unknown value or
+    // no value.
+    kUnknown = 0,
+
+    // An update is available and should be applied.
+    kOk = 1,
+
+    // No update is available for this application at this time.
+    kNoUpdate = 2,
+
+    // Server encountered an unknown internal error.
+    kErrorInternal = 3,
+
+    // The server attempted to serve an update, but could not provide a valid
+    // hash for the download.
+    kErrorHash = 4,
+
+    // The application is running on an incompatible operating system.
+    kErrorOsNotSupported = 5,
+
+    // The application is running on an incompatible hardware.
+    kErrorHardwareNotSupported = 6,
+
+    // This application is incompatible with this version of the protocol.
+    kErrorUnsupportedProtocol = 7,
+
+    // Magic constant used by the histogram macros.
+    // Always update it to the max value.
+    kMaxValue = kErrorUnsupportedProtocol,
+  };
 
   // Contains information about extension installation: failure reason, if any
   // reported, specific details in case of CRX install error, current
@@ -202,6 +236,9 @@
     // Type of extension, assigned when CRX installation error detail is
     // DISALLOWED_BY_POLICY.
     base::Optional<Manifest::Type> extension_type;
+    // Type of update check status received from server when manifest was
+    // fetched.
+    base::Optional<UpdateCheckStatus> update_check_status;
   };
 
   class Observer : public base::CheckedObserver {
@@ -238,8 +275,10 @@
   void ReportDownloadingCacheStatus(
       const ExtensionId& id,
       ExtensionDownloaderDelegate::CacheStatus cache_status);
-  // Assigns the extension type. See InstallationData::extension_type for more
-  // details.
+  void ReportManifestUpdateCheckStatus(const ExtensionId& id,
+                                       const std::string& status);
+  // Assigns the extension type. See InstallationData::extension_type for
+  // more details.
   void ReportExtensionTypeForPolicyDisallowedExtension(
       const ExtensionId& id,
       Manifest::Type extension_type);
diff --git a/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc b/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc
index 4461435..0c503a51 100644
--- a/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc
+++ b/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc
@@ -82,6 +82,8 @@
 #endif  // defined(OS_CHROMEOS)
 constexpr char kPossibleNonMisconfigurationFailures[] =
     "Extensions.ForceInstalledSessionsWithNonMisconfigurationFailureOccured";
+constexpr char kManifestUpdateCheckStatus[] =
+    "Extensions.ForceInstalledFailureUpdateCheckStatus";
 }  // namespace
 
 namespace extensions {
@@ -264,6 +266,30 @@
       1);
 }
 
+// Reporting SandboxedUnpackerFailureReason when the force installed extension
+// fails to install with error CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE.
+TEST_F(ForcedExtensionsInstallationTrackerTest,
+       ExtensionsUpdateCheckStatusReporting) {
+  SetupForceList();
+  installation_reporter_->ReportManifestUpdateCheckStatus(kExtensionId1, "ok");
+  installation_reporter_->ReportFailure(
+      kExtensionId1, InstallationReporter::FailureReason::CRX_FETCH_URL_EMPTY);
+  installation_reporter_->ReportManifestUpdateCheckStatus(kExtensionId2,
+                                                          "noupdate");
+  installation_reporter_->ReportFailure(
+      kExtensionId2, InstallationReporter::FailureReason::CRX_FETCH_URL_EMPTY);
+  // InstallationTracker shuts down timer because all extension are either
+  // loaded or failed.
+  EXPECT_FALSE(fake_timer_->IsRunning());
+  histogram_tester_.ExpectTotalCount(kManifestUpdateCheckStatus, 2);
+  histogram_tester_.ExpectBucketCount(
+      kManifestUpdateCheckStatus, InstallationReporter::UpdateCheckStatus::kOk,
+      1);
+  histogram_tester_.ExpectBucketCount(
+      kManifestUpdateCheckStatus,
+      InstallationReporter::UpdateCheckStatus::kNoUpdate, 1);
+}
+
 TEST_F(ForcedExtensionsInstallationTrackerTest, ExtensionsStuck) {
   SetupForceList();
   installation_reporter_->ReportInstallationStage(
diff --git a/chrome/browser/extensions/updater/extension_updater.cc b/chrome/browser/extensions/updater/extension_updater.cc
index 3cc67566..028cf5a 100644
--- a/chrome/browser/extensions/updater/extension_updater.cc
+++ b/chrome/browser/extensions/updater/extension_updater.cc
@@ -411,6 +411,13 @@
       id, cache_status);
 }
 
+void ExtensionUpdater::OnExtensionManifestUpdateCheckStatusReceived(
+    const ExtensionId& id,
+    const std::string& status) {
+  InstallationReporter::Get(profile_)->ReportManifestUpdateCheckStatus(id,
+                                                                       status);
+}
+
 void ExtensionUpdater::OnExtensionDownloadFailed(
     const ExtensionId& id,
     Error error,
diff --git a/chrome/browser/extensions/updater/extension_updater.h b/chrome/browser/extensions/updater/extension_updater.h
index 94617a7..38b4136 100644
--- a/chrome/browser/extensions/updater/extension_updater.h
+++ b/chrome/browser/extensions/updater/extension_updater.h
@@ -205,6 +205,9 @@
                                        Stage stage) override;
   void OnExtensionDownloadCacheStatusRetrieved(const ExtensionId& id,
                                                CacheStatus status) override;
+  void OnExtensionManifestUpdateCheckStatusReceived(
+      const ExtensionId& id,
+      const std::string& status) override;
   void OnExtensionDownloadFailed(const ExtensionId& id,
                                  Error error,
                                  const PingResult& ping,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 6f47b5a9..74b018c 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2859,6 +2859,11 @@
     "expiry_milestone": 86
   },
   {
+    "name": "new-shortcut-mapping",
+    "owners": [ "oshima", "afakhry" ],
+    "expiry_milestone": 85
+  },
+  {
     "name": "new-signin-architecture",
     "owners": ["chrome-ios-signin@google.com", "fernandex"],
     "expiry_milestone": 86
@@ -3468,6 +3473,11 @@
     "expiry_milestone": 85
   },
   {
+    "name": "remote-copy-persistent-notification",
+    "owners": [ "//chrome/browser/sharing/OWNERS" ],
+    "expiry_milestone": 85
+  },
+  {
     "name": "remote-copy-progress-notification",
     "owners": [ "//chrome/browser/sharing/OWNERS" ],
     "expiry_milestone": 85
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 834f4de..9d562ac6 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3376,6 +3376,10 @@
     "Experimental: Enable Neural Palm detection. Not compatible with all "
     "devices.";
 
+const char kEnableNewShortcutMappingName[] = "Enable New Shortcut Mapping";
+const char kEnableNewShortcutMappingDescription[] =
+    "Enables experimental new shortcut mapping";
+
 const char kEnablePalmOnMaxTouchMajorName[] =
     "Enable Palm when Touch is Maximum";
 const char kEnablePalmOnMaxTouchMajorDescription[] =
@@ -3808,6 +3812,12 @@
     "Enables image notifications to be shown for the remote copy feature "
     "when receiving a message.";
 
+const char kRemoteCopyPersistentNotificationName[] =
+    "Enables persistent notifications for the remote copy feature";
+const char kRemoteCopyPersistentNotificationDescription[] =
+    "Enables persistent notifications to be shown for the remote copy feature "
+    "when receiving a message.";
+
 const char kRemoteCopyProgressNotificationName[] =
     "Enables progress notifications for the remote copy feature";
 const char kRemoteCopyProgressNotificationDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index f9ef6fd1..c0197c2 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1949,6 +1949,9 @@
 extern const char kEnableNeuralStylusPalmRejectionName[];
 extern const char kEnableNeuralStylusPalmRejectionDescription[];
 
+extern const char kEnableNewShortcutMappingName[];
+extern const char kEnableNewShortcutMappingDescription[];
+
 extern const char kEnablePalmOnMaxTouchMajorName[];
 extern const char kEnablePalmOnMaxTouchMajorDescription[];
 
@@ -2228,6 +2231,9 @@
 extern const char kRemoteCopyImageNotificationName[];
 extern const char kRemoteCopyImageNotificationDescription[];
 
+extern const char kRemoteCopyPersistentNotificationName[];
+extern const char kRemoteCopyPersistentNotificationDescription[];
+
 extern const char kRemoteCopyProgressNotificationName[];
 extern const char kRemoteCopyProgressNotificationDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 7ea219f..4d22872a 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -607,10 +607,6 @@
 const base::Feature kWebApkAdaptiveIcon{"WebApkAdaptiveIcon",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
 
-static jboolean JNI_ChromeFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_ChromeFeatureList_IsEnabled(
     JNIEnv* env,
     const JavaParamRef<jstring>& jfeature_name) {
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 91029558..b6c9c89 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -10,7 +10,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 import java.util.Map;
 
@@ -71,25 +70,10 @@
      *         none of the methods in this class that require native access should be called (except
      *         in tests if test features have been set).
      */
+    // TODO(crbug.com/1060097): Migrate callers to the FeatureList equivalent function.
+    @Deprecated
     public static boolean isInitialized() {
-        if (FeatureList.hasTestFeatures()) return true;
-        return isNativeInitialized();
-    }
-
-    /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return ChromeFeatureListJni.get().isInitialized();
+        return FeatureList.isInitialized();
     }
 
     /*
@@ -99,7 +83,7 @@
      * @return Whether the feature is enabled or not.
      */
     private static boolean isEnabledInNative(String featureName) {
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return ChromeFeatureListJni.get().isEnabled(featureName);
     }
 
@@ -139,7 +123,7 @@
      */
     public static String getFieldTrialParamByFeature(String featureName, String paramName) {
         if (FeatureList.hasTestFeatures()) return "";
-        assert isInitialized();
+        assert FeatureList.isInitialized();
         return ChromeFeatureListJni.get().getFieldTrialParamByFeature(featureName, paramName);
     }
 
@@ -158,7 +142,7 @@
     public static int getFieldTrialParamByFeatureAsInt(
             String featureName, String paramName, int defaultValue) {
         if (FeatureList.hasTestFeatures()) return defaultValue;
-        assert isInitialized();
+        assert FeatureList.isInitialized();
         return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsInt(
                 featureName, paramName, defaultValue);
     }
@@ -178,7 +162,7 @@
     public static double getFieldTrialParamByFeatureAsDouble(
             String featureName, String paramName, double defaultValue) {
         if (FeatureList.hasTestFeatures()) return defaultValue;
-        assert isInitialized();
+        assert FeatureList.isInitialized();
         return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsDouble(
                 featureName, paramName, defaultValue);
     }
@@ -198,7 +182,7 @@
     public static boolean getFieldTrialParamByFeatureAsBoolean(
             String featureName, String paramName, boolean defaultValue) {
         if (FeatureList.hasTestFeatures()) return defaultValue;
-        assert isInitialized();
+        assert FeatureList.isInitialized();
         return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsBoolean(
                 featureName, paramName, defaultValue);
     }
@@ -437,7 +421,6 @@
 
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
         String getFieldTrialParamByFeature(String featureName, String paramName);
         int getFieldTrialParamByFeatureAsInt(
diff --git a/chrome/browser/media/history/media_history_browsertest.cc b/chrome/browser/media/history/media_history_browsertest.cc
index bce73aae..00cf545 100644
--- a/chrome/browser/media/history/media_history_browsertest.cc
+++ b/chrome/browser/media/history/media_history_browsertest.cc
@@ -577,7 +577,7 @@
     if (IsReadOnly()) {
       EXPECT_TRUE(sessions.empty());
     } else {
-      EXPECT_EQ(2u, sessions.size());
+      ASSERT_EQ(2u, sessions.size());
       EXPECT_EQ(GetTestAltURL(), sessions[0]->url);
       EXPECT_EQ(GetTestURL(), sessions[1]->url);
     }
@@ -629,7 +629,7 @@
     if (IsReadOnly()) {
       EXPECT_TRUE(sessions.empty());
     } else {
-      EXPECT_EQ(2u, sessions.size());
+      ASSERT_EQ(2u, sessions.size());
       EXPECT_EQ(GetTestURL(), sessions[0]->url);
       EXPECT_EQ(GetTestAltURL(), sessions[1]->url);
 
@@ -704,7 +704,7 @@
     if (IsReadOnly()) {
       EXPECT_TRUE(sessions.empty());
     } else {
-      EXPECT_EQ(2u, sessions.size());
+      ASSERT_EQ(2u, sessions.size());
       EXPECT_EQ(GetTestURL(), sessions[0]->url);
       EXPECT_EQ(GetTestAltURL(), sessions[1]->url);
     }
@@ -781,7 +781,7 @@
   if (IsReadOnly()) {
     EXPECT_TRUE(sessions.empty());
   } else {
-    EXPECT_EQ(2u, sessions.size());
+    ASSERT_EQ(2u, sessions.size());
     EXPECT_EQ(GetTestAltURL(), sessions[0]->url);
     EXPECT_EQ(expected_alt_artwork, sessions[0]->artwork);
     EXPECT_EQ(GetTestURL(), sessions[1]->url);
diff --git a/chrome/browser/metrics/antivirus_metrics_provider_win_unittest.cc b/chrome/browser/metrics/antivirus_metrics_provider_win_unittest.cc
index c26ba33..82fd30e 100644
--- a/chrome/browser/metrics/antivirus_metrics_provider_win_unittest.cc
+++ b/chrome/browser/metrics/antivirus_metrics_provider_win_unittest.cc
@@ -121,3 +121,5 @@
   task_environment_.RunUntilIdle();
   EXPECT_TRUE(got_results_);
 }
+
+INSTANTIATE_TEST_SUITE_P(, AntiVirusMetricsProviderTest, ::testing::Bool());
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
index 658c759..a918159 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
@@ -256,6 +256,9 @@
               optimization_guide::features::
                   GetOptimizationGuideServiceGetHintsURL(),
               pref_service)),
+      external_app_packages_approved_for_fetch_(
+          optimization_guide::features::
+              ExternalAppPackageNamesApprovedForFetch()),
       top_host_provider_(top_host_provider),
       clock_(base::DefaultClock::GetInstance()) {
   DCHECK(optimization_guide_service_);
@@ -723,30 +726,52 @@
                                        google_util::DISALLOW_SUBDOMAIN);
 }
 
+bool OptimizationGuideHintsManager::IsAllowedToFetchForNavigationPrediction(
+    const base::Optional<NavigationPredictorKeyedService::Prediction>
+        prediction) const {
+  if (!prediction)
+    return false;
+
+  if (prediction->prediction_source() ==
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage) {
+    const base::Optional<GURL> source_document_url =
+        prediction->source_document_url();
+    if (!source_document_url || source_document_url->is_empty())
+      return false;
+
+    // We only extract next predicted navigations from Google URLs.
+    return IsGoogleURL(*source_document_url);
+  }
+
+  if (prediction->prediction_source() ==
+      NavigationPredictorKeyedService::PredictionSource::kExternalAndroidApp) {
+    if (external_app_packages_approved_for_fetch_.empty())
+      return false;
+
+    const base::Optional<std::vector<std::string>> external_app_packages_name =
+        prediction->external_app_packages_name();
+    if (!external_app_packages_name || external_app_packages_name->empty())
+      return false;
+
+    for (const auto& package_name : *external_app_packages_name) {
+      if (external_app_packages_approved_for_fetch_.find(package_name) ==
+          external_app_packages_approved_for_fetch_.end())
+        return false;
+    }
+    // If we get here, all apps have been approved for fetching.
+    return true;
+  }
+
+  return false;
+}
+
 void OptimizationGuideHintsManager::OnPredictionUpdated(
     const base::Optional<NavigationPredictorKeyedService::Prediction>
         prediction) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  if (registered_optimization_types_.empty())
-    return;
-
-  if (!prediction.has_value())
-    return;
-
-  if (prediction->prediction_source() !=
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage) {
-    return;
-  }
-
-  const base::Optional<GURL>& source_document_url =
-      prediction->source_document_url();
-  if (!source_document_url || source_document_url->is_empty())
-    return;
-
-  // We only extract next predicted navigations from Google URLs.
-  if (!IsGoogleURL(source_document_url.value()))
+  if (!IsAllowedToFetchForNavigationPrediction(prediction))
     return;
 
   // Extract the target hosts and URLs. Use a flat set to remove duplicates.
@@ -1086,6 +1111,9 @@
     const GURL& url) const {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
+  if (registered_optimization_types_.empty())
+    return false;
+
   if (!IsUserPermittedToFetchFromRemoteOptimizationGuide(profile_))
     return false;
 
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
index 1dc4cf56..ab3e82c7 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
@@ -179,7 +179,13 @@
       HintsFetched_AtSRP_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemoved);
   FRIEND_TEST_ALL_PREFIXES(
       OptimizationGuideHintsManagerFetchingTest,
-      HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemoved);
+      HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedAppWhitelisted);
+  FRIEND_TEST_ALL_PREFIXES(
+      OptimizationGuideHintsManagerFetchingTest,
+      HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedNotAllAppsWhitelisted);
+  FRIEND_TEST_ALL_PREFIXES(
+      OptimizationGuideHintsManagerFetchingTest,
+      HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedAppNotWhitelisted);
 
   // Processes the hints component.
   //
@@ -304,6 +310,11 @@
   // search results page (www.google.*).
   bool IsGoogleURL(const GURL& url) const;
 
+  // Returns true if we can make a request for hints for |prediction|.
+  bool IsAllowedToFetchForNavigationPrediction(
+      const base::Optional<NavigationPredictorKeyedService::Prediction>
+          prediction) const;
+
   // NavigationPredictorKeyedService::Observer:
   void OnPredictionUpdated(
       const base::Optional<NavigationPredictorKeyedService::Prediction>
@@ -404,6 +415,10 @@
   std::unique_ptr<optimization_guide::HintsFetcherFactory>
       hints_fetcher_factory_;
 
+  // The external app packages that have been approved for fetching from the
+  // remote Optimization Guide Service.
+  base::flat_set<std::string> external_app_packages_approved_for_fetch_;
+
   // The top host provider that can be queried. Not owned.
   optimization_guide::TopHostProvider* top_host_provider_ = nullptr;
 
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
index b2dfe0fa..1f683bf 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
@@ -1952,7 +1952,9 @@
   OptimizationGuideHintsManagerFetchingTest() {
     scoped_list_.InitAndEnableFeatureWithParameters(
         optimization_guide::features::kRemoteOptimizationGuideFetching,
-        {{"max_concurrent_page_navigation_fetches", "2"}});
+        {{"max_concurrent_page_navigation_fetches", "2"},
+         {"approved_external_app_packages",
+          "org.example.whatever,com.foo.bar"}});
   }
  private:
   base::test::ScopedFeatureList scoped_list_;
@@ -2263,9 +2265,10 @@
 }
 
 // Verify that optimization hints are not fetched if the prediction for the next
-// likely navigations are provided by external Android app.
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemoved) {
+// likely navigations are provided by external Android app that is whitelisted.
+TEST_F(
+    OptimizationGuideHintsManagerFetchingTest,
+    HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedAppWhitelisted) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -2282,37 +2285,92 @@
   sorted_predicted_urls.push_back(GURL("http://httppage.com/"));
 
   std::vector<std::string> external_app_packages_name;
-  external_app_packages_name.push_back("com.example.foo");
+  external_app_packages_name.push_back("com.foo.bar");
 
   NavigationPredictorKeyedService::Prediction prediction_external_android_app(
       nullptr, base::nullopt, external_app_packages_name,
       NavigationPredictorKeyedService::PredictionSource::kExternalAndroidApp,
       sorted_predicted_urls);
   hints_manager()->OnPredictionUpdated(prediction_external_android_app);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
-  // Ensure that we only include 2 URLs in the request.
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
-
-  // Now fetch again with a prediction from anchor elements. This time
-  // optimization hints should be requested.
-  NavigationPredictorKeyedService::Prediction prediction_anchor_elements(
-      nullptr, GURL("https://www.google.com/"),
-      /*external_app_packages_name=*/{},
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-  hints_manager()->OnPredictionUpdated(prediction_anchor_elements);
-  // Ensure that we include both web hosts in the request. These would be
-  // foo.com and httppage.com.
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 2, 1);
-  // Ensure that we only include 2 URLs in the request.
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 2, 1);
 }
 
+// Verify that optimization hints are not fetched if the prediction for the next
+// likely navigations are provided by external Android app that is not
+// whitelisted, even though one of the apps was whitelisted.
+TEST_F(
+    OptimizationGuideHintsManagerFetchingTest,
+    HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedNotAllAppsWhitelisted) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  InitializeWithDefaultConfig("1.0.0.0");
+
+  // Set ECT estimate so fetch is activated.
+  hints_manager()->OnEffectiveConnectionTypeChanged(
+      net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.push_back(GURL("https://foo.com/page1.html"));
+  sorted_predicted_urls.push_back(GURL("file://non-web-bar.com/"));
+  sorted_predicted_urls.push_back(GURL("http://httppage.com/"));
+
+  std::vector<std::string> external_app_packages_name;
+  external_app_packages_name.push_back("com.foo.bar");
+  external_app_packages_name.push_back("com.example.notwhitelisted");
+
+  NavigationPredictorKeyedService::Prediction prediction_external_android_app(
+      nullptr, base::nullopt, external_app_packages_name,
+      NavigationPredictorKeyedService::PredictionSource::kExternalAndroidApp,
+      sorted_predicted_urls);
+  hints_manager()->OnPredictionUpdated(prediction_external_android_app);
+  // Nothing should be fetched.
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
+}
+
+// Verify that optimization hints are not fetched if the prediction for the next
+// likely navigations are provided by external Android app that is not
+// whitelisted.
+TEST_F(
+    OptimizationGuideHintsManagerFetchingTest,
+    HintsFetched_ExternalAndroidApp_ECT_SLOW_2G_NonHTTPOrHTTPSHostsRemovedAppNotWhitelisted) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  InitializeWithDefaultConfig("1.0.0.0");
+
+  // Set ECT estimate so fetch is activated.
+  hints_manager()->OnEffectiveConnectionTypeChanged(
+      net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.push_back(GURL("https://foo.com/page1.html"));
+  sorted_predicted_urls.push_back(GURL("file://non-web-bar.com/"));
+  sorted_predicted_urls.push_back(GURL("http://httppage.com/"));
+
+  std::vector<std::string> external_app_packages_name;
+  external_app_packages_name.push_back("com.example.notwhitelisted");
+
+  NavigationPredictorKeyedService::Prediction prediction_external_android_app(
+      nullptr, base::nullopt, external_app_packages_name,
+      NavigationPredictorKeyedService::PredictionSource::kExternalAndroidApp,
+      sorted_predicted_urls);
+  hints_manager()->OnPredictionUpdated(prediction_external_android_app);
+  // Nothing should be fetched.
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
+}
+
 TEST_F(OptimizationGuideHintsManagerFetchingTest, HintsFetched_AtSRP_ECT_4G) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
diff --git a/chrome/browser/performance_manager/background_tab_loading_policy_browsertest.cc b/chrome/browser/performance_manager/background_tab_loading_policy_browsertest.cc
index 65af7f9..f59cf94 100644
--- a/chrome/browser/performance_manager/background_tab_loading_policy_browsertest.cc
+++ b/chrome/browser/performance_manager/background_tab_loading_policy_browsertest.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_list.h"
+#include "chrome/common/buildflags.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/notification_types.h"
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index cfe5bce..0f9fba5 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -232,6 +232,7 @@
 #include "components/feed/core/common/pref_names.h"
 #endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)
 #else   // defined(OS_ANDROID)
+#include "chrome/browser/accessibility/caption_controller.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/enterprise/reporting/prefs.h"
 #include "chrome/browser/gcm/gcm_product_util.h"
@@ -382,7 +383,6 @@
 #include "chrome/browser/device_identity//device_oauth2_token_store_desktop.h"
 #include "chrome/browser/downgrade/downgrade_prefs.h"
 #include "chrome/browser/ui/startup/default_browser_prompt.h"
-
 #endif
 
 #if defined(TOOLKIT_VIEWS)
@@ -998,6 +998,7 @@
   apps::AppServiceProxy::RegisterProfilePrefs(registry);
   AppShortcutManager::RegisterProfilePrefs(registry);
   browser_sync::ForeignSessionHandler::RegisterProfilePrefs(registry);
+  captions::CaptionController::RegisterProfilePrefs(registry);
   ChromeAuthenticatorRequestDelegate::RegisterProfilePrefs(registry);
   DevToolsWindow::RegisterProfilePrefs(registry);
   enterprise_reporting::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
index d1a9946c..aaf639ac 100644
--- a/chrome/browser/profiles/profile.cc
+++ b/chrome/browser/profiles/profile.cc
@@ -238,8 +238,6 @@
   registry->RegisterStringPref(prefs::kAccessibilityCaptionsTextShadow,
                                std::string());
 #if !defined(OS_ANDROID)
-  registry->RegisterBooleanPref(prefs::kLiveCaptionEnabled, false);
-  registry->RegisterFilePathPref(prefs::kSODAPath, base::FilePath());
   registry->RegisterDictionaryPref(prefs::kPartitionDefaultZoomLevel);
   registry->RegisterDictionaryPref(prefs::kPartitionPerHostZoomLevels);
 #endif  // !defined(OS_ANDROID)
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 7a7ba22..e88ed4ef 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -128,6 +128,8 @@
 #include "chrome/browser/android/metrics/android_profile_session_durations_service_factory.h"
 #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h"
 #else
+#include "chrome/browser/accessibility/caption_controller.h"
+#include "chrome/browser/accessibility/caption_controller_factory.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -1266,6 +1268,7 @@
   // DoFinalInitForServices.
   profiles::UpdateIsProfileLockEnabledIfNeeded(profile);
 #endif
+
   // Start the deferred task runners once the profile is loaded.
   StartupTaskRunnerServiceFactory::GetForProfile(profile)->
       StartDeferredTaskRunners();
@@ -1310,6 +1313,8 @@
   // TODO(b/678590): create services during profile startup.
   // Service is responsible for fetching content snippets for the NTP.
   ContentSuggestionsServiceFactory::GetForProfile(profile);
+#else
+  captions::CaptionControllerFactory::GetForProfile(profile)->Init();
 #endif
 
 #if defined(OS_WIN) && BUILDFLAG(ENABLE_DICE_SUPPORT)
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/jsbundler.py b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/jsbundler.py
index fc5e4ba..89337cf 100755
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/jsbundler.py
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/jsbundler.py
@@ -302,6 +302,9 @@
     infiles, list: File names to list as dependencies in the .d file.
   '''
   content = '%s: %s' % (outfile, ' '.join(infiles))
+  dirname = os.path.dirname(depfile)
+  if not os.path.exists(dirname):
+    os.makedirs(dirname)
   open(depfile, 'w').write(content)
 
 
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb
index ae65acc8..9905ce9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb
@@ -69,6 +69,7 @@
 <translation id="146450394670219700">கிராஃபிக்ஸ் பொருள்</translation>
 <translation id="1480046233931937785">பங்களித்தவர்கள்</translation>
 <translation id="1487494366197411587">Chromebookகில் தேடல் விசையானது இடதுபுற Shift விசைக்கு மேலே இருக்கும்.</translation>
+<translation id="1498498210836053409">உரையைத் திருத்தும்போது ஒற்றை விசைப் பயன்முறையை முடக்கு (ஸ்மார்ட் ஒற்றை விசைப் பயன்முறை)</translation>
 <translation id="1499041187027566160">ஒலியளவை அதிகரிக்கும்</translation>
 <translation id="1502086903961450562">முந்தைய கிராஃபிக்</translation>
 <translation id="1506187449813838456">ஸ்ருதியை அதிகரி</translation>
diff --git a/chrome/browser/resources/chromeos/login/images/browser_sync.svg b/chrome/browser/resources/chromeos/login/images/browser_sync.svg
new file mode 100644
index 0000000..8bafeec
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/images/browser_sync.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="18" viewBox="0 0 24 24" width="18" fill="#4285F4"><path d="M17.26 6H19V4h-6v6h2V6.81c1.79 1.04 3 2.97 3 5.19 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-2.4-1.07-4.54-2.74-6zM4 12c0 2.4 1.07 4.54 2.74 6H5v2h6v-6H9v3.19C7.21 16.15 6 14.22 6 12c0-2.97 2.17-5.43 5-5.91V4.07C7.05 4.56 4 7.92 4 12z"/><path d="M.01 0h24v24h-24V0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/images/settings_gear.svg b/chrome/browser/resources/chromeos/login/images/settings_gear.svg
new file mode 100644
index 0000000..af0a1b8
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/images/settings_gear.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.85 22.25h-3.7c-.74 0-1.36-.54-1.45-1.27l-.27-1.89c-.27-.14-.53-.29-.79-.46l-1.8.72c-.7.26-1.47-.03-1.81-.65L2.2 15.53c-.35-.66-.2-1.44.36-1.88l1.53-1.19c-.01-.15-.02-.3-.02-.46 0-.15.01-.31.02-.46l-1.52-1.19c-.59-.45-.74-1.26-.37-1.88l1.85-3.19c.34-.62 1.11-.9 1.79-.63l1.81.73c.26-.17.52-.32.78-.46l.27-1.91c.09-.7.71-1.25 1.44-1.25h3.7c.74 0 1.36.54 1.45 1.27l.27 1.89c.27.14.53.29.79.46l1.8-.72c.71-.26 1.48.03 1.82.65l1.84 3.18c.36.66.2 1.44-.36 1.88l-1.52 1.19c.01.15.02.3.02.46 0 .16-.01.31-.02.46l1.52 1.19c.56.45.72 1.23.37 1.86l-1.86 3.22c-.34.62-1.11.9-1.8.63l-1.8-.72c-.26.17-.52.32-.78.46l-.27 1.91c-.1.68-.72 1.22-1.46 1.22zm-3.23-2h2.76l.37-2.55.53-.22c.44-.18.88-.44 1.34-.78l.45-.34 2.38.96 1.38-2.4-2.03-1.58.07-.56c.03-.26.06-.51.06-.78s-.03-.53-.06-.78l-.07-.56 2.03-1.58-1.39-2.4-2.39.96-.45-.35c-.42-.32-.87-.58-1.33-.77l-.52-.22-.37-2.55h-2.76l-.37 2.55-.53.21c-.44.19-.88.44-1.34.79l-.45.33-2.38-.95-1.39 2.39 2.03 1.58-.07.56a7 7 0 00-.06.79c0 .26.02.53.06.78l.07.56-2.03 1.58 1.38 2.4 2.39-.96.45.35c.43.33.86.58 1.33.77l.53.22.38 2.55zM12 15.5a3.5 3.5 0 100-7 3.5 3.5 0 000 7z" fill="#1A73E8"/><mask id="a" maskUnits="userSpaceOnUse" x="1" y="1" width="22" height="22"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.85 22.25h-3.7c-.74 0-1.36-.54-1.45-1.27l-.27-1.89c-.27-.14-.53-.29-.79-.46l-1.8.72c-.7.26-1.47-.03-1.81-.65L2.2 15.53c-.35-.66-.2-1.44.36-1.88l1.53-1.19c-.01-.15-.02-.3-.02-.46 0-.15.01-.31.02-.46l-1.52-1.19c-.59-.45-.74-1.26-.37-1.88l1.85-3.19c.34-.62 1.11-.9 1.79-.63l1.81.73c.26-.17.52-.32.78-.46l.27-1.91c.09-.7.71-1.25 1.44-1.25h3.7c.74 0 1.36.54 1.45 1.27l.27 1.89c.27.14.53.29.79.46l1.8-.72c.71-.26 1.48.03 1.82.65l1.84 3.18c.36.66.2 1.44-.36 1.88l-1.52 1.19c.01.15.02.3.02.46 0 .16-.01.31-.02.46l1.52 1.19c.56.45.72 1.23.37 1.86l-1.86 3.22c-.34.62-1.11.9-1.8.63l-1.8-.72c-.26.17-.52.32-.78.46l-.27 1.91c-.1.68-.72 1.22-1.46 1.22zm-3.23-2h2.76l.37-2.55.53-.22c.44-.18.88-.44 1.34-.78l.45-.34 2.38.96 1.38-2.4-2.03-1.58.07-.56c.03-.26.06-.51.06-.78s-.03-.53-.06-.78l-.07-.56 2.03-1.58-1.39-2.4-2.39.96-.45-.35c-.42-.32-.87-.58-1.33-.77l-.52-.22-.37-2.55h-2.76l-.37 2.55-.53.21c-.44.19-.88.44-1.34.79l-.45.33-2.38-.95-1.39 2.39 2.03 1.58-.07.56a7 7 0 00-.06.79c0 .26.02.53.06.78l.07.56-2.03 1.58 1.38 2.4 2.39-.96.45.35c.43.33.86.58 1.33.77l.53.22.38 2.55zM12 15.5a3.5 3.5 0 100-7 3.5 3.5 0 000 7z" fill="#fff"/></mask></svg>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/sync_consent.html b/chrome/browser/resources/chromeos/login/sync_consent.html
index e7193fa..15553a1 100644
--- a/chrome/browser/resources/chromeos/login/sync_consent.html
+++ b/chrome/browser/resources/chromeos/login/sync_consent.html
@@ -86,10 +86,8 @@
 
         <!-- "Sync settings" -->
         <div class="overview-list-item flex layout horizontal">
-          <!-- TODO(jamescook): Customized icons. -->
-          <hd-iron-icon class="overview-list-item-icon"
-              icon1x="sync-consent-32:googleg" icon2x="sync-consent-64:googleg">
-          </hd-iron-icon>
+          <img class="overview-list-item-icon" src="images/settings_gear.svg"
+              width="24" height="24">
           <div class="flex layout vertical center-justified">
             <div role="heading" aria-level="2" class="overview-list-item-title"
               consent-description>
@@ -103,10 +101,8 @@
 
         <!-- "Chrome sync" -->
         <div class="overview-list-item flex layout horizontal">
-          <hd-iron-icon class="overview-list-item-icon"
-              src1x="chrome://oobe/logo_24px-1x.svg"
-              src2x="chrome://oobe/logo_24px-2x.svg">
-          </hd-iron-icon>
+          <img class="overview-list-item-icon" src="images/browser_sync.svg"
+              width="24" height="24">
           <div class="flex layout vertical center-justified">
             <div role="heading" aria-level="2" class="overview-list-item-title"
               consent-description>
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_subpage.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_subpage.html
index 0c7dc4c..5f4e6523 100644
--- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_subpage.html
+++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_subpage.html
@@ -24,14 +24,18 @@
         <!-- TODO(davidmunro): Add Icon from
              https://docs.google.com/presentation/d/1cBU0TnQhuorL69NmifWJ1OzLMsu9dihw64Jo031jUZ4/edit#slide=id.g6b38a81213_0_0
           --->
-        <div id="containerUpgradeLabel" class="start">
-          $i18n{crostiniContainerUpgrade}
-          <div class="secondary" id="secondaryText">
+        <div class="start" aria-hidden="true">
+          <div id="containerUpgradeLabel">
+            $i18n{crostiniContainerUpgrade}
+          </div>
+          <div class="secondary" id="containerUpgradeDescription">
             $i18n{crostiniContainerUpgradeSubtext}
           </div>
         </div>
-        <cr-button on-click="onContainerUpgradeClick_"
-            aria-labelledby="upgradeCrostiniLabel"
+        <cr-button id="containerUpgradeButton"
+            on-click="onContainerUpgradeClick_"
+            aria-labelledby="containerUpgradeLabel containerUpgradeButton"
+            aria-describedby="containerUpgradeDescription"
             disabled="[[disableUpgradeButton_]]">
           $i18n{crostiniContainerUpgradeButton}
         </cr-button>
@@ -104,7 +108,9 @@
     </template>
     <template is="dom-if" if="[[!hideCrostiniUninstall_]]">
       <div id="remove" class="settings-box">
-        <div id="removeCrostiniLabel" class="start">$i18n{crostiniRemove}</div>
+        <div id="removeCrostiniLabel" class="start" aria-hidden="true">
+          $i18n{crostiniRemove}
+        </div>
         <cr-button on-click="onRemoveClick_"
             aria-labelledby="removeCrostiniLabel">
           $i18n{crostiniRemoveButton}
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js
index f60eafb..a032170 100644
--- a/chrome/browser/resources/settings/lazy_load.js
+++ b/chrome/browser/resources/settings/lazy_load.js
@@ -24,7 +24,6 @@
 import './site_settings/site_data.m.js';
 import './site_settings/site_details.m.js';
 import './site_settings/zoom_levels.m.js';
-
 // <if expr="not chromeos">
 import './people_page/import_data_dialog.m.js';
 import './people_page/manage_profile.m.js';
@@ -32,7 +31,6 @@
 import './people_page/signout_dialog.m.js';
 import './people_page/sync_controls.m.js';
 import './people_page/sync_page.m.js';
-
 // <if expr="use_nss_certs">
 import 'chrome://resources/cr_components/certificate_manager/certificate_manager.m.js';
 // </if>
@@ -43,7 +41,6 @@
 import './languages_page/languages_page.m.js';
 import './printing_page/printing_page.m.js';
 import './reset_page/reset_page.m.js';
-
 // <if expr="not chromeos">
 import './system_page/system_page.m.js';
 // </if>
@@ -52,44 +49,46 @@
 import './languages_page/edit_dictionary_page.m.js';
 // </if>
 
-// <if expr="_google_chrome and is_win">
-export {CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW} from './chrome_cleanup_page/items_to_remove_list.m.js';
-export {ChromeCleanupIdleReason} from './chrome_cleanup_page/chrome_cleanup_page.m.js';
-export {ChromeCleanupProxyImpl} from './chrome_cleanup_page/chrome_cleanup_proxy.m.js';
-export {IncompatibleApplication, IncompatibleApplicationsBrowserProxyImpl} from './incompatible_applications_page/incompatible_applications_browser_proxy.m.js';
-// </if>
-
 export {getToastManager} from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.m.js';
-
 export {FontsBrowserProxy, FontsBrowserProxyImpl} from './appearance_page/fonts_browser_proxy.m.js';
 export {CountryDetailManagerImpl} from './autofill_page/address_edit_dialog.m.js';
 export {AutofillManagerImpl} from './autofill_page/autofill_section.m.js';
+// <if expr="chromeos">
+export {BlockingRequestManager} from './autofill_page/blocking_request_manager.m.js';
+// </if>
 export {PaymentsManagerImpl} from './autofill_page/payments_section.m.js';
+// <if expr="_google_chrome and is_win">
+export {ChromeCleanupIdleReason} from './chrome_cleanup_page/chrome_cleanup_page.m.js';
+export {ChromeCleanupProxyImpl} from './chrome_cleanup_page/chrome_cleanup_proxy.m.js';
+export {CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW} from './chrome_cleanup_page/items_to_remove_list.m.js';
+// </if>
 export {ClearBrowsingDataBrowserProxyImpl} from './clear_browsing_data_dialog/clear_browsing_data_browser_proxy.m.js';
 export {DownloadsBrowserProxyImpl} from './downloads_page/downloads_browser_proxy.m.js';
-export {kMenuCloseDelay} from './languages_page/languages_page.m.js';
+// <if expr="_google_chrome and is_win">
+export {IncompatibleApplication, IncompatibleApplicationsBrowserProxyImpl} from './incompatible_applications_page/incompatible_applications_browser_proxy.m.js';
+// </if>
 export {LanguagesBrowserProxyImpl} from './languages_page/languages_browser_proxy.m.js';
-export {ChooserType,ContentSetting,ContentSettingsTypes,CookieControlsMode,SiteSettingSource,SITE_EXCEPTION_WILDCARD,SortMethod} from './site_settings/constants.m.js';
-export {cookieInfo} from './site_settings/cookie_info.m.js';
-export {kControlledByLookup} from './site_settings/site_settings_behavior.m.js';
-export {LocalDataBrowserProxyImpl} from './site_settings/local_data_browser_proxy.m.js';
-export {ContentSettingProvider,SiteSettingsPrefsBrowserProxyImpl} from './site_settings/site_settings_prefs_browser_proxy.m.js';
-export {defaultSettingLabel} from './site_settings_page/site_settings_list.m.js';
+export {kMenuCloseDelay} from './languages_page/languages_page.m.js';
+// <if expr="not chromeos">
+export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.m.js';
+export {ManageProfileBrowserProxyImpl, ProfileShortcutStatus} from './people_page/manage_profile_browser_proxy.m.js';
+// </if>
 export {SafeBrowsingBrowserProxyImpl} from './privacy_page/safe_browsing_browser_proxy.m.js';
-export {SecurityKeysResetBrowserProxyImpl, SecurityKeysPINBrowserProxyImpl, SecurityKeysCredentialBrowserProxyImpl, SecurityKeysBioEnrollProxyImpl, SampleStatus, Ctap2Status} from './privacy_page/security_keys_browser_proxy.m.js';
+export {BioEnrollDialogPage} from './privacy_page/security_keys_bio_enroll_dialog.m.js';
+export {Ctap2Status, SampleStatus, SecurityKeysBioEnrollProxyImpl, SecurityKeysCredentialBrowserProxyImpl, SecurityKeysPINBrowserProxyImpl, SecurityKeysResetBrowserProxyImpl} from './privacy_page/security_keys_browser_proxy.m.js';
+export {CredentialManagementDialogPage} from './privacy_page/security_keys_credential_management_dialog.m.js';
 export {ResetDialogPage} from './privacy_page/security_keys_reset_dialog.m.js';
 export {SetPINDialogPage} from './privacy_page/security_keys_set_pin_dialog.m.js';
-export {CredentialManagementDialogPage} from './privacy_page/security_keys_credential_management_dialog.m.js';
-export {BioEnrollDialogPage} from './privacy_page/security_keys_bio_enroll_dialog.m.js';
-export {WebsiteUsageBrowserProxyImpl} from './site_settings/website_usage_browser_proxy.m.js';
-
-// <if expr="not chromeos">
-export {SystemPageBrowserProxyImpl} from './system_page/system_page_browser_proxy.m.js';
-export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.m.js';
-export {ProfileShortcutStatus, ManageProfileBrowserProxyImpl} from './people_page/manage_profile_browser_proxy.m.js';
-// </if>
-
 // <if expr="chromeos">
 export {AndroidInfoBrowserProxyImpl} from './site_settings/android_info_browser_proxy.m.js';
-export {BlockingRequestManager} from './autofill_page/blocking_request_manager.m.js';
+// </if>
+export {ChooserType, ContentSetting, ContentSettingsTypes, CookieControlsMode, SITE_EXCEPTION_WILDCARD, SiteSettingSource, SortMethod} from './site_settings/constants.m.js';
+export {cookieInfo} from './site_settings/cookie_info.m.js';
+export {LocalDataBrowserProxyImpl} from './site_settings/local_data_browser_proxy.m.js';
+export {kControlledByLookup} from './site_settings/site_settings_behavior.m.js';
+export {ContentSettingProvider, SiteSettingsPrefsBrowserProxyImpl} from './site_settings/site_settings_prefs_browser_proxy.m.js';
+export {WebsiteUsageBrowserProxyImpl} from './site_settings/website_usage_browser_proxy.m.js';
+export {defaultSettingLabel} from './site_settings_page/site_settings_list.m.js';
+// <if expr="not chromeos">
+export {SystemPageBrowserProxyImpl} from './system_page/system_page_browser_proxy.m.js';
 // </if>
diff --git a/chrome/browser/resources/settings/privacy_page/BUILD.gn b/chrome/browser/resources/settings/privacy_page/BUILD.gn
index 25d75501..3c1f649 100644
--- a/chrome/browser/resources/settings/privacy_page/BUILD.gn
+++ b/chrome/browser/resources/settings/privacy_page/BUILD.gn
@@ -563,7 +563,7 @@
                    "chrome/browser/resources/settings/metrics_browser_proxy.html|PrivacyElementInteractions,MetricsBrowserProxyImpl",
                    "chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.html|PrivacyPageBrowserProxy,PrivacyPageBrowserProxyImpl",
                    "chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.html|SiteSettingsPrefsBrowserProxyImpl",
-                   "chrome/browser/resources/settings/site_settings/constants.html|ContentSettingsTypes,ChooserType",
+                   "chrome/browser/resources/settings/site_settings/constants.html|ContentSettingsTypes,CookieControlsMode,ChooserType",
                    "chrome/browser/resources/settings/people_page/sync_browser_proxy.html|SyncBrowserProxyImpl,SyncStatus",
                    "chrome/browser/resources/settings/hats_browser_proxy.html|HatsBrowserProxyImpl",
                    "chrome/browser/resources/settings/page_visibility.html|PrivacyPageVisibility",
diff --git a/chrome/browser/resources/settings/privacy_page/collapse_radio_button.html b/chrome/browser/resources/settings/privacy_page/collapse_radio_button.html
index 65d8829..366ccf0 100644
--- a/chrome/browser/resources/settings/privacy_page/collapse_radio_button.html
+++ b/chrome/browser/resources/settings/privacy_page/collapse_radio_button.html
@@ -61,6 +61,10 @@
         align-items: center;
         display: flex;
       }
+
+      slot[name='noSelectionCollapse'] {
+       cursor: auto;
+      }
     </style>
     <div id="radioCollapse">
       <div aria-checked$="[[getAriaChecked_(checked)]]"
@@ -98,6 +102,7 @@
 
     <iron-collapse opened="[[expanded]]">
       <slot name="collapse"></slot>
+      <slot name="noSelectionCollapse"></slot>
     </iron-collapse>
 
   </template>
diff --git a/chrome/browser/resources/settings/privacy_page/passwords_leak_detection_toggle.html b/chrome/browser/resources/settings/privacy_page/passwords_leak_detection_toggle.html
index 256a310..74a8d737 100644
--- a/chrome/browser/resources/settings/privacy_page/passwords_leak_detection_toggle.html
+++ b/chrome/browser/resources/settings/privacy_page/passwords_leak_detection_toggle.html
@@ -8,11 +8,12 @@
 <link rel="import" href="../people_page/sync_browser_proxy.html">
 <link rel="import" href="../prefs/prefs_behavior.html">
 <link rel="import" href="../prefs/prefs.html">
+<link rel="import" href="../settings_shared_css.html">
 <link rel="import" href="privacy_page_browser_proxy.html">
 
 <dom-module id="settings-passwords-leak-detection-toggle">
   <template>
-    <style>
+    <style include="settings-shared">
       :host(.collapsable) settings-toggle-button {
           border-top: none;
           padding-bottom: 12px;
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index cde7a30..956a14e 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -273,9 +273,13 @@
               sub-option-mode="cookies-session-only">
           </category-default-setting>
           <settings-toggle-button
+              id="blockThirdPartyCookies"
               pref="{{prefs.profile.block_third_party_cookies}}"
               label="$i18n{thirdPartyCookie}"
-              sub-label="$i18n{thirdPartyCookieSublabel}">
+              sub-label="$i18n{thirdPartyCookieSublabel}"
+              on-settings-boolean-control-change=
+                  "onBlockThirdPartyCookiesToggleChange_"
+              no-set-pref>
           </settings-toggle-button>
           <cr-link-row id="site-data-trigger" class="hr"
               on-click="onSiteDataTap_" label="$i18n{siteSettingsCookieLink}">
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js
index 9e03e975..316757c0 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.js
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -416,6 +416,20 @@
     },
 
     /**
+     * Updates both required block third party cookie preferences.
+     * @param {!Event} event
+     * @private
+     */
+    onBlockThirdPartyCookiesToggleChange_(event) {
+      const target = /** @type {!SettingsToggleButtonElement} */ (event.target);
+      this.setPrefValue('profile.block_third_party_cookies', target.checked);
+      this.setPrefValue(
+          'profile.cookie_controls_mode',
+          target.checked ? settings.CookieControlsMode.ENABLED :
+                           settings.CookieControlsMode.DISABLED);
+    },
+
+    /**
      * Records changes made to the "can a website check if you have saved
      * payment methods" setting for logging, the logic of actually changing the
      * setting is taken care of by the webUI pref.
diff --git a/chrome/browser/resources/settings/privacy_page/security_page.html b/chrome/browser/resources/settings/privacy_page/security_page.html
index 5d5193a..747ac16 100644
--- a/chrome/browser/resources/settings/privacy_page/security_page.html
+++ b/chrome/browser/resources/settings/privacy_page/security_page.html
@@ -60,10 +60,19 @@
         padding-bottom: 12px;
       }
 
+      settings-passwords-leak-detection-toggle,
+      settings-toggle-button:not([disabled]) {
+        pointer-events: all;
+      }
+
       #safeBrowsingReportingToggle {
         padding-inline-end: 0;
         padding-inline-start: 0;
       }
+
+      #safeBrowsingEnhanced .bullet-line:last-of-type {
+        padding-bottom: 12px;
+      }
     </style>
     <picture>
       <source
@@ -139,6 +148,8 @@
                   $i18n{safeBrowsingStandardBulTwo}
               </div>
             </div>
+          </div>
+          <div slot="noSelectionCollapse">
             <settings-toggle-button id="safeBrowsingReportingToggle"
                 pref="{{prefs.safebrowsing.scout_reporting_enabled}}"
                 class="first"
diff --git a/chrome/browser/resources/settings/settings.js b/chrome/browser/resources/settings/settings.js
index 6081f77f..b881c69 100644
--- a/chrome/browser/resources/settings/settings.js
+++ b/chrome/browser/resources/settings/settings.js
@@ -4,20 +4,13 @@
 
 import './settings_ui/settings_ui.m.js';
 
-// <if expr="not chromeos">
-export {DefaultBrowserBrowserProxyImpl} from './default_browser_page/default_browser_browser_proxy.m.js';
-export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.m.js';
-// </if>
-
-// <if expr="chromeos">
-export {AccountManagerBrowserProxyImpl} from './people_page/account_manager_browser_proxy.m.js';
-// </if>
-
 export {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, UpdateStatus} from './about_page/about_page_browser_proxy.m.js';
 export {AppearanceBrowserProxy, AppearanceBrowserProxyImpl} from './appearance_page/appearance_browser_proxy.m.js';
-export {CrSettingsPrefs} from './prefs/prefs_types.m.js';
+export {PasswordManagerImpl, PasswordManagerProxy} from './autofill_page/password_manager_proxy.m.js';
+// <if expr="not chromeos">
+export {DefaultBrowserBrowserProxyImpl} from './default_browser_page/default_browser_browser_proxy.m.js';
+// </if>
 export {ExtensionControlBrowserProxyImpl} from './extension_control_browser_proxy.m.js';
-export {getSearchManager, SearchRequest, setSearchManagerForTesting} from './search_settings.m.js';
 export {HatsBrowserProxyImpl} from './hats_browser_proxy.m.js';
 export {LifetimeBrowserProxyImpl} from './lifetime_browser_proxy.m.js';
 export {MetricsBrowserProxyImpl, PrivacyElementInteractions, SafetyCheckInteractions} from './metrics_browser_proxy.m.js';
@@ -25,16 +18,23 @@
 export {EDIT_STARTUP_URL_EVENT} from './on_startup_page/startup_url_entry.m.js';
 export {StartupUrlsPageBrowserProxy, StartupUrlsPageBrowserProxyImpl} from './on_startup_page/startup_urls_page_browser_proxy.m.js';
 export {OpenWindowProxyImpl} from './open_window_proxy.m.js';
+export {pageVisibility, setPageVisibilityForTesting} from './page_visibility.m.js';
+// <if expr="chromeos">
+export {AccountManagerBrowserProxyImpl} from './people_page/account_manager_browser_proxy.m.js';
+// </if>
+// <if expr="not chromeos">
+export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.m.js';
+// </if>
+export {ProfileInfoBrowserProxyImpl} from './people_page/profile_info_browser_proxy.m.js';
 export {MAX_SIGNIN_PROMO_IMPRESSION} from './people_page/sync_account_control.m.js';
 export {PageStatus, StatusAction, SyncBrowserProxyImpl} from './people_page/sync_browser_proxy.m.js';
-export {ProfileInfoBrowserProxyImpl} from './people_page/profile_info_browser_proxy.m.js';
-export {pageVisibility, setPageVisibilityForTesting} from './page_visibility.m.js';
-export {PasswordManagerProxy, PasswordManagerImpl} from './autofill_page/password_manager_proxy.m.js';
 export {PluralStringProxyImpl} from './plural_string_proxy.m.js';
 export {prefToString, stringToPrefValue} from './prefs/pref_util.m.js';
+export {CrSettingsPrefs} from './prefs/prefs_types.m.js';
+export {PrivacyPageBrowserProxyImpl, SecureDnsMode, SecureDnsUiManagementMode} from './privacy_page/privacy_page_browser_proxy.m.js';
 export {ResetBrowserProxyImpl} from './reset_page/reset_browser_proxy.m.js';
 export {buildRouter, routes} from './route.m.js';
 export {Route, Router} from './router.m.js';
+export {SafetyCheckBrowserProxy, SafetyCheckBrowserProxyImpl, SafetyCheckCallbackConstants, SafetyCheckExtensionsStatus, SafetyCheckPasswordsStatus, SafetyCheckSafeBrowsingStatus, SafetyCheckUpdatesStatus} from './safety_check_page/safety_check_browser_proxy.m.js';
 export {SearchEnginesBrowserProxyImpl} from './search_engines_page/search_engines_browser_proxy.m.js';
-export {PrivacyPageBrowserProxyImpl, SecureDnsMode, SecureDnsUiManagementMode} from './privacy_page/privacy_page_browser_proxy.m.js';
-export {SafetyCheckBrowserProxy, SafetyCheckBrowserProxyImpl, SafetyCheckCallbackConstants, SafetyCheckExtensionsStatus, SafetyCheckSafeBrowsingStatus, SafetyCheckPasswordsStatus, SafetyCheckUpdatesStatus} from './safety_check_page/safety_check_browser_proxy.m.js';
+export {getSearchManager, SearchRequest, setSearchManagerForTesting} from './search_settings.m.js';
diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn
index 14bef91..75102e62b 100644
--- a/chrome/browser/safe_browsing/BUILD.gn
+++ b/chrome/browser/safe_browsing/BUILD.gn
@@ -298,6 +298,7 @@
   ]
 
   deps = [
+    "//chrome/common",
     "//components/content_settings/core/browser",
     "//components/history/core/browser",
     "//components/keyed_service/content",
diff --git a/chrome/browser/sharing/shared_clipboard/feature_flags.cc b/chrome/browser/sharing/shared_clipboard/feature_flags.cc
index 6bc97a07..fca9606 100644
--- a/chrome/browser/sharing/shared_clipboard/feature_flags.cc
+++ b/chrome/browser/sharing/shared_clipboard/feature_flags.cc
@@ -18,6 +18,9 @@
 const base::Feature kRemoteCopyImageNotification{
     "RemoteCopyImageNotification", base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kRemoteCopyPersistentNotification{
+    "RemoteCopyPersistentNotification", base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kRemoteCopyProgressNotification{
     "RemoteCopyProgressNotification", base::FEATURE_DISABLED_BY_DEFAULT};
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
diff --git a/chrome/browser/sharing/shared_clipboard/feature_flags.h b/chrome/browser/sharing/shared_clipboard/feature_flags.h
index c07172a..49cb380 100644
--- a/chrome/browser/sharing/shared_clipboard/feature_flags.h
+++ b/chrome/browser/sharing/shared_clipboard/feature_flags.h
@@ -25,6 +25,9 @@
 // Feature to enable image notifications for remote copy messages.
 extern const base::Feature kRemoteCopyImageNotification;
 
+// Feature to enable persistent notifications for remote copy messages.
+extern const base::Feature kRemoteCopyPersistentNotification;
+
 // Feature to enable progress notifications for remote copy messages.
 extern const base::Feature kRemoteCopyProgressNotification;
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
diff --git a/chrome/browser/sharing/shared_clipboard/remote_copy_message_handler.cc b/chrome/browser/sharing/shared_clipboard/remote_copy_message_handler.cc
index bad3710a..c8a6eb5 100644
--- a/chrome/browser/sharing/shared_clipboard/remote_copy_message_handler.cc
+++ b/chrome/browser/sharing/shared_clipboard/remote_copy_message_handler.cc
@@ -542,8 +542,10 @@
   // On macOS we can't replace a persistent notification with a non-persistent
   // one because they are posted from different sources (app vs xpc). To avoid
   // having both notifications on screen, remove the progress one first.
-  if (!progress_notification_closed_)
+  if (!progress_notification_closed_ &&
+      !base::FeatureList::IsEnabled(kRemoteCopyPersistentNotification)) {
     CancelProgressNotification();
+  }
 #endif  // defined(OS_MACOSX)
 
   std::string notification_id = image_notification_id_;
@@ -585,6 +587,8 @@
   }
 
   rich_notification_data.vector_small_image = &kSendTabToSelfIcon;
+  rich_notification_data.never_timeout =
+      base::FeatureList::IsEnabled(kRemoteCopyPersistentNotification);
 
   message_center::NotificationType type =
       use_image_notification ? message_center::NOTIFICATION_TYPE_IMAGE
diff --git a/chrome/browser/spellchecker/spellcheck_language_blacklist_policy_handler.cc b/chrome/browser/spellchecker/spellcheck_language_blacklist_policy_handler.cc
index 77fd7c24..c6e9b80 100644
--- a/chrome/browser/spellchecker/spellcheck_language_blacklist_policy_handler.cc
+++ b/chrome/browser/spellchecker/spellcheck_language_blacklist_policy_handler.cc
@@ -12,12 +12,13 @@
 #include "base/syslog_logging.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "chrome/browser/spellchecker/spellcheck_service.h"
 #include "chrome/common/pref_names.h"
 #include "components/policy/core/browser/policy_error_map.h"
 #include "components/policy/policy_constants.h"
 #include "components/prefs/pref_value_map.h"
 #include "components/spellcheck/browser/pref_names.h"
-#include "components/spellcheck/common/spellcheck_common.h"
+#include "components/spellcheck/common/spellcheck_features.h"
 #include "components/strings/grit/components_strings.h"
 
 SpellcheckLanguageBlacklistPolicyHandler::
@@ -113,9 +114,11 @@
   // Separate the valid languages from the unknown / unsupported languages and
   // the languages that also appear in the SpellcheckLanguage policy.
   for (const base::Value& language : value->GetList()) {
+    std::string candidate_language =
+        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL)
+            .as_string();
     std::string current_language =
-        spellcheck::GetCorrespondingSpellCheckLanguage(
-            base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL));
+        SpellcheckService::GetSupportedAcceptLanguageCode(candidate_language);
 
     if (current_language.empty()) {
       unknown->emplace_back(language.GetString());
diff --git a/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc b/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
index b5407f5..7724da7d 100644
--- a/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
+++ b/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
@@ -11,12 +11,13 @@
 #include "base/syslog_logging.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "chrome/browser/spellchecker/spellcheck_service.h"
 #include "chrome/common/pref_names.h"
 #include "components/policy/core/browser/policy_error_map.h"
 #include "components/policy/policy_constants.h"
 #include "components/prefs/pref_value_map.h"
 #include "components/spellcheck/browser/pref_names.h"
-#include "components/spellcheck/common/spellcheck_common.h"
+#include "components/spellcheck/common/spellcheck_features.h"
 #include "components/strings/grit/components_strings.h"
 
 SpellcheckLanguagePolicyHandler::SpellcheckLanguagePolicyHandler()
@@ -86,9 +87,11 @@
 
   // Separate the valid languages from the unknown / unsupported languages.
   for (const base::Value& language : value->GetList()) {
+    std::string candidate_language =
+        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL)
+            .as_string();
     std::string current_language =
-        spellcheck::GetCorrespondingSpellCheckLanguage(
-            base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL));
+        SpellcheckService::GetSupportedAcceptLanguageCode(candidate_language);
 
     if (current_language.empty()) {
       unknown->emplace_back(language.GetString());
diff --git a/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc b/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc
new file mode 100644
index 0000000..5427e8df
--- /dev/null
+++ b/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc
@@ -0,0 +1,204 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Chromium style is to have one unit test per one header file. However, the
+// applied blocked spellcheck language policy depends on the applied forced
+// language policy. If a language is both blocked and forced, forced wins. It is
+// only practical to test this interaction in a single unit test covering both
+// header files.
+#include "chrome/browser/spellchecker/spellcheck_language_blacklist_policy_handler.h"
+#include "chrome/browser/spellchecker/spellcheck_language_policy_handler.h"
+
+#include <ostream>
+#include <string>
+#include <vector>
+
+#include "base/strings/string_util.h"
+#include "base/test/scoped_feature_list.h"
+#include "base/values.h"
+#include "chrome/common/pref_names.h"
+#include "components/policy/core/common/policy_map.h"
+#include "components/policy/policy_constants.h"
+#include "components/prefs/pref_value_map.h"
+#include "components/spellcheck/browser/pref_names.h"
+#include "components/spellcheck/common/spellcheck_features.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace policy {
+
+struct TestCase {
+  TestCase(const std::vector<std::string>& blocked_languages,
+           const std::vector<std::string>& forced_languages,
+           const std::vector<std::string>& expected_blocked_languages,
+           const std::vector<std::string>& expected_forced_languages,
+           bool spellcheck_enabled,
+           bool windows_spellchecker_enabled)
+      : blocked_languages(blocked_languages),
+        forced_languages(forced_languages),
+        expected_blocked_languages(expected_blocked_languages),
+        expected_forced_languages(expected_forced_languages),
+        spellcheck_enabled(spellcheck_enabled),
+        windows_spellchecker_enabled(windows_spellchecker_enabled) {}
+
+  std::vector<std::string> blocked_languages;
+  std::vector<std::string> forced_languages;
+  std::vector<std::string> expected_blocked_languages;
+  std::vector<std::string> expected_forced_languages;
+  bool spellcheck_enabled;
+  bool windows_spellchecker_enabled;
+};
+
+std::ostream& operator<<(std::ostream& out, const TestCase& test_case) {
+  out << "blocked_languages=["
+      << base::JoinString(test_case.blocked_languages, ",")
+      << "], forced_languages=["
+      << base::JoinString(test_case.forced_languages, ",")
+      << "], expected_blocked_languages=["
+      << base::JoinString(test_case.expected_blocked_languages, ",")
+      << "], expected_forced_languages=["
+      << base::JoinString(test_case.expected_forced_languages, ",")
+      << "], spellcheck_enabled=" << test_case.spellcheck_enabled
+      << "], windows_spellchecker_enabled="
+      << test_case.windows_spellchecker_enabled;
+  return out;
+}
+
+class SpellcheckLanguagePolicyHandlersTest
+    : public testing::TestWithParam<TestCase> {
+ public:
+  SpellcheckLanguagePolicyHandlersTest() = default;
+  ~SpellcheckLanguagePolicyHandlersTest() override = default;
+
+  void CheckPrefs(const PrefValueMap& prefs,
+                  const std::string& key,
+                  const std::vector<std::string>& expected) {
+    // Retrieve the spellcheck enabled pref (if it exists).
+    const base::Value* spellcheck_enabled_pref = nullptr;
+    const bool is_spellcheck_enabled_pref_set = prefs.GetValue(
+        spellcheck::prefs::kSpellCheckEnable, &spellcheck_enabled_pref);
+
+    const base::Value* languages_list = nullptr;
+    if (GetParam().spellcheck_enabled) {
+      EXPECT_TRUE(is_spellcheck_enabled_pref_set);
+      EXPECT_TRUE(spellcheck_enabled_pref->is_bool());
+      EXPECT_TRUE(spellcheck_enabled_pref->GetBool());
+
+      EXPECT_TRUE(prefs.GetValue(key, &languages_list));
+      EXPECT_TRUE(languages_list->is_list());
+      EXPECT_EQ(expected.size(), languages_list->GetList().size());
+
+      for (const auto& language : languages_list->GetList()) {
+        EXPECT_TRUE(language.is_string());
+        EXPECT_TRUE(std::find(expected.begin(), expected.end(),
+                              language.GetString()) != expected.end());
+      }
+    } else {
+      EXPECT_FALSE(is_spellcheck_enabled_pref_set);
+      // No language list should be added to prefs if spellchecking disabled.
+      EXPECT_FALSE(prefs.GetValue(key, &languages_list));
+    }
+  }
+};
+
+TEST_P(SpellcheckLanguagePolicyHandlersTest, ApplyPolicySettings) {
+#if BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
+  base::test::ScopedFeatureList feature_list;
+  if (GetParam().windows_spellchecker_enabled) {
+    // Force hybrid spellchecking to be enabled.
+    feature_list.InitWithFeatures(
+        /*enabled_features=*/{spellcheck::kWinUseBrowserSpellChecker,
+                              spellcheck::kWinUseHybridSpellChecker},
+        /*disabled_features=*/{});
+  } else {
+    // Hunspell-only spellcheck languages will be used.
+    feature_list.InitAndDisableFeature(spellcheck::kWinUseBrowserSpellChecker);
+  }
+#endif  // BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
+
+  PrefValueMap prefs;
+  policy::PolicyMap policy;
+
+  base::Value blocked_languages_list(base::Value::Type::LIST);
+  for (const auto& blocked_language : GetParam().blocked_languages) {
+    blocked_languages_list.Append(std::move(blocked_language));
+  }
+
+  base::Value forced_languages_list(base::Value::Type::LIST);
+  for (const auto& forced_language : GetParam().forced_languages) {
+    forced_languages_list.Append(std::move(forced_language));
+  }
+
+  policy.Set(policy::key::kSpellcheckLanguageBlacklist,
+             policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+             policy::POLICY_SOURCE_ENTERPRISE_DEFAULT,
+             base::Value::ToUniquePtrValue(std::move(blocked_languages_list)),
+             nullptr);
+
+  policy.Set(
+      policy::key::kSpellcheckLanguage, policy::POLICY_LEVEL_MANDATORY,
+      policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_ENTERPRISE_DEFAULT,
+      base::Value::ToUniquePtrValue(std::move(forced_languages_list)), nullptr);
+
+  policy.Set(
+      policy::key::kSpellcheckEnabled, policy::POLICY_LEVEL_MANDATORY,
+      policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_ENTERPRISE_DEFAULT,
+      std::make_unique<base::Value>(GetParam().spellcheck_enabled), nullptr);
+
+  // Apply policy to the forced languages handler.
+  SpellcheckLanguagePolicyHandler forced_languages_handler;
+  forced_languages_handler.ApplyPolicySettings(policy, &prefs);
+
+  // Apply policy to the blocked languages handler.
+  SpellcheckLanguageBlacklistPolicyHandler blocked_languages_handler;
+  blocked_languages_handler.ApplyPolicySettings(policy, &prefs);
+
+  // Check if forced languages preferences are as expected.
+  CheckPrefs(prefs, spellcheck::prefs::kSpellCheckForcedDictionaries,
+             GetParam().expected_forced_languages);
+
+  // Check if blocked languages preferences are as expected.
+  CheckPrefs(prefs, spellcheck::prefs::kSpellCheckBlacklistedDictionaries,
+             GetParam().expected_blocked_languages);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    TestCases,
+    SpellcheckLanguagePolicyHandlersTest,
+    testing::Values(
+#if BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
+        // Test cases for Windows spellchecker (policy languages not restricted
+        // to Hunspell).
+        TestCase({"ar-SA", "es-MX", "fi", "fr",
+                  "not-a-language"} /* blocked languages */,
+                 {"fi", "fr", "not-another-language"} /* forced languages */,
+                 {"ar", "es-MX"} /* expected blocked languages */,
+                 {"fi", "fr"} /* expected forced languages */,
+                 true /* spellcheck enabled */,
+                 true /* windows spellchecker enabled */),
+        TestCase({"ar-SA", "es-MX", "fi", "fr "} /* blocked languages */,
+                 {"fi", "fr"} /* forced languages */,
+                 {""} /* expected blocked languages */,
+                 {""} /* expected forced languages */,
+                 false /* spellcheck enabled */,
+                 true /* windows spellchecker enabled */),
+#endif  // BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
+        // Test cases for Hunspell only spellchecker. ar-SA and fi are
+        // non-Hunspell languages so are ignored for policy enforcement. If they
+        // ever obtain Hunspell support, the first test case below will fail.
+        TestCase({"ar-SA", "es-MX", "fi", "fr",
+                  "not-a-language"} /* blocked languages */,
+                 {"fi", "fr", "not-another-language"} /* forced languages */,
+                 {"es-MX"} /* expected blocked languages */,
+                 {"fr"} /* expected forced languages */,
+                 true /* spellcheck enabled */,
+                 false /* windows spellchecker enabled */),
+        TestCase({"ar-SA", "es-MX", "fi", "fr",
+                  "not-a-language"} /* blocked languages */,
+                 {"fi", "fr", "not-another-language"} /* forced languages */,
+                 {""} /* expected blocked languages */,
+                 {""} /* expected forced languages */,
+                 false /* spellcheck enabled */,
+                 false /* windows spellchecker enabled */)));
+
+}  // namespace policy
diff --git a/chrome/browser/spellchecker/spellcheck_service.cc b/chrome/browser/spellchecker/spellcheck_service.cc
index 7d3ddb7..4aea771d 100644
--- a/chrome/browser/spellchecker/spellcheck_service.cc
+++ b/chrome/browser/spellchecker/spellcheck_service.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/spellchecker/spellcheck_service.h"
 
 #include <algorithm>
+#include <iterator>
 #include <set>
 #include <utility>
 
@@ -38,6 +39,7 @@
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/storage_partition.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "ui/base/l10n/l10n_util.h"
 
 #if defined(OS_WIN) && BUILDFLAG(USE_BROWSER_SPELLCHECKER)
 #include "base/task/post_task.h"
@@ -200,6 +202,84 @@
   return true;
 }
 
+// static
+std::string SpellcheckService::GetSupportedAcceptLanguageCode(
+    const std::string& supported_language_full_tag) {
+  // Default to accept language in hardcoded list of Hunspell dictionaries
+  // (kSupportedSpellCheckerLanguages).
+  std::string supported_accept_language =
+      spellcheck::GetCorrespondingSpellCheckLanguage(
+          supported_language_full_tag);
+
+#if defined(OS_WIN)
+  if (!spellcheck::UseWinHybridSpellChecker())
+    return supported_accept_language;
+
+  // Collect the hardcoded list of accept-languages supported by the browser,
+  // that is, languages that can be added as preferred languages in the
+  // languages settings page.
+  std::vector<std::string> accept_languages;
+  l10n_util::GetAcceptLanguages(&accept_languages);
+
+  // First try exact match. Per BCP47, tags are in ASCII and should be treated
+  // as case-insensitive (although there are conventions for the capitalization
+  // of subtags).
+  auto iter =
+      std::find_if(accept_languages.begin(), accept_languages.end(),
+                   [supported_language_full_tag](const auto& accept_language) {
+                     return base::EqualsCaseInsensitiveASCII(
+                         supported_language_full_tag, accept_language);
+                   });
+  if (iter != accept_languages.end())
+    return *iter;
+
+  // Then try matching just the language and (optional) script subtags, but
+  // not the region subtag. For example, Edge supports sr-Cyrl-RS as an accept
+  // language, but not sr-Cyrl-CS. Matching language + script subtags assures
+  // we get the correct script for spellchecking, and not use sr-Latn-RS if
+  // language packs for both scripts are installed on the system.
+  if (!base::Contains(supported_language_full_tag, "-"))
+    return "";
+
+  iter =
+      std::find_if(accept_languages.begin(), accept_languages.end(),
+                   [supported_language_full_tag](const auto& accept_language) {
+                     return base::EqualsCaseInsensitiveASCII(
+                         SpellcheckService::GetLanguageAndScriptTag(
+                             supported_language_full_tag,
+                             /* include_script_tag */ true),
+                         SpellcheckService::GetLanguageAndScriptTag(
+                             accept_language,
+                             /* include_script_tag */ true));
+                   });
+
+  if (iter != accept_languages.end())
+    return *iter;
+
+  // Then try just matching the leading language subtag. E.g. Edge supports
+  // kok as an accept language, but if the Konkani language pack is
+  // installed the Windows spellcheck API reports kok-Deva-IN for the
+  // dictionary name.
+  iter =
+      std::find_if(accept_languages.begin(), accept_languages.end(),
+                   [supported_language_full_tag](const auto& accept_language) {
+                     return base::EqualsCaseInsensitiveASCII(
+                         SpellcheckService::GetLanguageAndScriptTag(
+                             supported_language_full_tag,
+                             /* include_script_tag */ false),
+                         SpellcheckService::GetLanguageAndScriptTag(
+                             accept_language,
+                             /* include_script_tag */ false));
+                   });
+
+  if (iter != accept_languages.end())
+    return *iter;
+
+#endif  // defined(OS_WIN)
+
+  return supported_accept_language;
+}
+
 void SpellcheckService::StartRecordingMetrics(bool spellcheck_enabled) {
   metrics_ = std::make_unique<SpellCheckHostMetrics>();
   metrics_->RecordEnabledStats(spellcheck_enabled);
@@ -361,6 +441,33 @@
 }
 
 // static
+std::string SpellcheckService::GetLanguageAndScriptTag(
+    const std::string& full_tag,
+    bool include_script_tag) {
+  std::string language_and_script_tag;
+
+  std::vector<std::string> subtags = base::SplitString(
+      full_tag, "-", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+  // Language subtag is required, all others optional.
+  DCHECK_GE(subtags.size(), 1ULL);
+  std::vector<std::string> subtag_tokens_to_pass;
+  subtag_tokens_to_pass.push_back(subtags.front());
+  subtags.erase(subtags.begin());
+
+  // The optional script subtag always follows the language subtag, and is 4
+  // characters in length.
+  if (include_script_tag) {
+    if (!subtags.empty() && subtags.front().length() == 4) {
+      subtag_tokens_to_pass.push_back(subtags.front());
+    }
+  }
+
+  language_and_script_tag = base::JoinString(subtag_tokens_to_pass, "-");
+
+  return language_and_script_tag;
+}
+
+// static
 void SpellcheckService::AttachStatusEvent(base::WaitableEvent* status_event) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
diff --git a/chrome/browser/spellchecker/spellcheck_service.h b/chrome/browser/spellchecker/spellcheck_service.h
index 803c7da..97df1313 100644
--- a/chrome/browser/spellchecker/spellcheck_service.h
+++ b/chrome/browser/spellchecker/spellcheck_service.h
@@ -94,6 +94,13 @@
   // when we do not set an event to |status_event_|.
   static bool SignalStatusEvent(EventType type);
 
+  // Get the best match of a supported accept language code for the provided
+  // language tag. Returns an empty string if no match is found. Method cannot
+  // be defined in spellcheck_common.h as it depends on l10n_util, and code
+  // under components cannot depend on ui/base.
+  static std::string GetSupportedAcceptLanguageCode(
+      const std::string& supported_language_full_tag);
+
   // Instantiates SpellCheckHostMetrics object and makes it ready for recording
   // metrics. This should be called only if the metrics recording is active.
   void StartRecordingMetrics(bool spellcheck_enabled);
@@ -161,6 +168,11 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(SpellcheckServiceBrowserTest, DeleteCorruptedBDICT);
 
+  // Parses a full BCP47 language tag to return just the language subtag,
+  // optionally with a hyphen and script subtag appended.
+  static std::string GetLanguageAndScriptTag(const std::string& full_tag,
+                                             bool include_script_tag);
+
   // Attaches an event so browser tests can listen the status events.
   static void AttachStatusEvent(base::WaitableEvent* status_event);
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 9c2f071b..29d4bca 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -122,6 +122,8 @@
     "native_file_system_dialogs.h",
     "navigation_correction_tab_observer.cc",
     "navigation_correction_tab_observer.h",
+    "page_info/chrome_page_info_client.cc",
+    "page_info/chrome_page_info_client.h",
     "page_info/chrome_page_info_delegate.cc",
     "page_info/chrome_page_info_delegate.h",
     "page_info/chrome_page_info_ui_delegate.cc",
@@ -741,8 +743,6 @@
       "android/omnibox/omnibox_view_util.h",
       "android/overlay/overlay_window_android.cc",
       "android/overlay/overlay_window_android.h",
-      "android/page_info/connection_info_popup_android.cc",
-      "android/page_info/connection_info_popup_android.h",
       "android/page_info/page_info_controller_android.cc",
       "android/page_info/page_info_controller_android.h",
       "android/passwords/credential_leak_dialog_view_android.cc",
@@ -919,6 +919,7 @@
       "browser_window.h",
       "browser_window_state.cc",
       "browser_window_state.h",
+      "caption_bubble_controller.h",
       "chrome_pages.cc",
       "chrome_pages.h",
       "chrome_web_modal_dialog_manager_delegate.cc",
@@ -2774,6 +2775,8 @@
       "translate/translate_bubble_test_utils.h",
       "views/accessibility/caption_bubble.cc",
       "views/accessibility/caption_bubble.h",
+      "views/accessibility/caption_bubble_controller_views.cc",
+      "views/accessibility/caption_bubble_controller_views.h",
       "views/accessibility/invert_bubble_view.cc",
       "views/accessibility/invert_bubble_view.h",
       "views/accessibility/non_accessible_image_view.cc",
diff --git a/chrome/browser/ui/android/page_info/page_info_controller_android.cc b/chrome/browser/ui/android/page_info/page_info_controller_android.cc
index 8cbeb03..81d5c7a 100644
--- a/chrome/browser/ui/android/page_info/page_info_controller_android.cc
+++ b/chrome/browser/ui/android/page_info/page_info_controller_android.cc
@@ -10,12 +10,10 @@
 #include "base/command_line.h"
 #include "base/stl_util.h"
 #include "chrome/android/chrome_jni_headers/PageInfoController_jni.h"
-#include "chrome/browser/infobars/infobar_service.h"
-#include "chrome/browser/ui/page_info/chrome_page_info_delegate.h"
-#include "chrome/common/chrome_features.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/page_info/android/page_info_client.h"
 #include "components/page_info/page_info.h"
 #include "components/page_info/page_info_ui.h"
 #include "components/security_state/core/security_state.h"
@@ -58,8 +56,10 @@
 
   controller_jobject_.Reset(env, java_page_info_pop);
 
+  page_info::PageInfoClient* page_info_client = page_info::GetPageInfoClient();
+  DCHECK(page_info_client);
   presenter_ = std::make_unique<PageInfo>(
-      std::make_unique<ChromePageInfoDelegate>(web_contents), web_contents,
+      page_info_client->CreatePageInfoDelegate(web_contents), web_contents,
       nav_entry->GetURL());
   presenter_->InitializeUiState(this);
 }
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index 15f31c60..f1a4711 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -254,7 +254,7 @@
 <translation id="2870560284913253234">الموقع</translation>
 <translation id="2874939134665556319">المقطع الصوتي السابق</translation>
 <translation id="2876369937070532032">‏يتم إرسال عناوين URL لبعض الصفحات التي تزورها إلى Google، عندما يكون أمانك في خطر</translation>
-<translation id="2888126860611144412">‏لمحة عن Chrome</translation>
+<translation id="2888126860611144412">‏لمحة عامة عن Chrome</translation>
 <translation id="2891154217021530873">إيقاف تحميل الصفحة</translation>
 <translation id="2893180576842394309">‏قد تستخدم Google سجلّك لتخصيص البحث وخدمات Google الأخرى.</translation>
 <translation id="2898264748040935573">تعديل كلمة المرور المخزنة</translation>
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index e886606..9d990be 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -342,6 +342,7 @@
   load_url_params.was_activated = params->was_activated;
   load_url_params.href_translate = params->href_translate;
   load_url_params.reload_type = params->reload_type;
+  load_url_params.impression = params->impression;
 
   // |frame_tree_node_id| is kNoFrameTreeNodeId for main frame navigations.
   if (params->frame_tree_node_id ==
diff --git a/chrome/browser/ui/browser_navigator_params.cc b/chrome/browser/ui/browser_navigator_params.cc
index 84fe1cd..bbf4711 100644
--- a/chrome/browser/ui/browser_navigator_params.cc
+++ b/chrome/browser/ui/browser_navigator_params.cc
@@ -78,6 +78,7 @@
   this->user_gesture = params.user_gesture;
   this->blob_url_loader_factory = params.blob_url_loader_factory;
   this->href_translate = params.href_translate;
+  this->impression = params.impression;
 
   // Implementation notes:
   //   The following NavigateParams don't have an equivalent in OpenURLParams:
diff --git a/chrome/browser/ui/browser_navigator_params.h b/chrome/browser/ui/browser_navigator_params.h
index 1bde537..281bcab 100644
--- a/chrome/browser/ui/browser_navigator_params.h
+++ b/chrome/browser/ui/browser_navigator_params.h
@@ -16,6 +16,7 @@
 #include "content/public/browser/reload_type.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/site_instance.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/was_activated_option.mojom.h"
 #include "services/network/public/cpp/resource_request_body.h"
@@ -289,6 +290,11 @@
   // Indicates the reload type of this navigation.
   content::ReloadType reload_type = content::ReloadType::NONE;
 
+  // Optional impression associated with this navigation. Only set on
+  // navigations that originate from links with impression attributes. Used for
+  // conversion measurement.
+  base::Optional<content::Impression> impression;
+
  private:
   NavigateParams();
   DISALLOW_COPY_AND_ASSIGN(NavigateParams);
diff --git a/chrome/browser/ui/caption_bubble_controller.h b/chrome/browser/ui/caption_bubble_controller.h
new file mode 100644
index 0000000..8e3c7822
--- /dev/null
+++ b/chrome/browser/ui/caption_bubble_controller.h
@@ -0,0 +1,42 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_CAPTION_BUBBLE_CONTROLLER_H_
+#define CHROME_BROWSER_UI_CAPTION_BUBBLE_CONTROLLER_H_
+
+#include <memory>
+#include <string>
+
+class Browser;
+
+namespace captions {
+
+///////////////////////////////////////////////////////////////////////////////
+// Caption Bubble Controller
+//
+//  The interface for the caption bubble controller. It controls the caption
+//  bubble. It is responsible for tasks such as post-processing of the text that
+//  might need to occur before it is displayed in the bubble, and hiding or
+//  showing the caption bubble when captions are received or the tab changes.
+//  There exists one caption bubble controller per browser window.
+//
+class CaptionBubbleController {
+ public:
+  explicit CaptionBubbleController(Browser* browser) {}
+  virtual ~CaptionBubbleController() = default;
+  CaptionBubbleController(const CaptionBubbleController&) = delete;
+  CaptionBubbleController& operator=(const CaptionBubbleController&) = delete;
+
+  static std::unique_ptr<CaptionBubbleController> Create(Browser* browser);
+
+  // Called when captions are received from the service.
+  virtual void OnCaptionReceived(const std::string& text) {}
+
+  // Called when the active tab changes.
+  virtual void OnActiveTabChanged(int index) {}
+};
+
+}  // namespace captions
+
+#endif  // CHROME_BROWSER_UI_CAPTION_BUBBLE_CONTROLLER_H_
diff --git a/chrome/browser/ui/page_info/chrome_page_info_client.cc b/chrome/browser/ui/page_info/chrome_page_info_client.cc
new file mode 100644
index 0000000..e2972da9
--- /dev/null
+++ b/chrome/browser/ui/page_info/chrome_page_info_client.cc
@@ -0,0 +1,21 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/page_info/chrome_page_info_client.h"
+
+#include "chrome/browser/android/resource_mapper.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/page_info/chrome_page_info_delegate.h"
+#include "chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h"
+#include "content/public/browser/web_contents.h"
+
+std::unique_ptr<PageInfoDelegate> ChromePageInfoClient::CreatePageInfoDelegate(
+    content::WebContents* web_contents) {
+  DCHECK(web_contents);
+  return std::make_unique<ChromePageInfoDelegate>(web_contents);
+}
+
+int ChromePageInfoClient::GetJavaResourceId(int native_resource_id) {
+  return ResourceMapper::MapToJavaDrawableId(native_resource_id);
+}
diff --git a/chrome/browser/ui/page_info/chrome_page_info_client.h b/chrome/browser/ui/page_info/chrome_page_info_client.h
new file mode 100644
index 0000000..d51cd42
--- /dev/null
+++ b/chrome/browser/ui/page_info/chrome_page_info_client.h
@@ -0,0 +1,30 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_PAGE_INFO_CHROME_PAGE_INFO_CLIENT_H_
+#define CHROME_BROWSER_UI_PAGE_INFO_CHROME_PAGE_INFO_CLIENT_H_
+
+#include "components/page_info/android/page_info_client.h"
+#include "components/page_info/page_info_delegate.h"
+#include "components/page_info/page_info_ui_delegate.h"
+
+#include <memory>
+
+namespace content {
+class WebContents;
+}
+
+// Chrome's implementation of PageInfoClient. Allows //components/page_info
+// classes to retrieve PageInfo delegates, which override //components logic.
+class ChromePageInfoClient : public page_info::PageInfoClient {
+ public:
+  ChromePageInfoClient() = default;
+  ~ChromePageInfoClient() = default;
+
+  std::unique_ptr<PageInfoDelegate> CreatePageInfoDelegate(
+      content::WebContents* web_contents) override;
+  int GetJavaResourceId(int native_resource_id) override;
+};
+
+#endif  // CHROME_BROWSER_UI_PAGE_INFO_CHROME_PAGE_INFO_CLIENT_H_
diff --git a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
index 94a809b..552d2fb4 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
+++ b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.cc
@@ -11,6 +11,7 @@
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/permissions/permission_manager.h"
 #include "components/prefs/pref_service.h"
+#include "content/public/browser/web_contents.h"
 #include "url/gurl.h"
 
 ChromePageInfoUiDelegate::ChromePageInfoUiDelegate(Profile* profile)
@@ -24,6 +25,7 @@
 }
 
 #if !defined(OS_ANDROID)
+
 bool ChromePageInfoUiDelegate::IsBlockAutoPlayEnabled() {
   return profile_->GetPrefs()->GetBoolean(prefs::kBlockAutoplayEnabled);
 }
diff --git a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
index 674ef665..7b47566 100644
--- a/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
+++ b/chrome/browser/ui/page_info/chrome_page_info_ui_delegate.h
@@ -13,7 +13,7 @@
 class ChromePageInfoUiDelegate : public PageInfoUiDelegate {
  public:
   explicit ChromePageInfoUiDelegate(Profile* profile);
-  ~ChromePageInfoUiDelegate() = default;
+  ~ChromePageInfoUiDelegate() override = default;
 
   // PageInfoUiDelegate implementation
 #if !defined(OS_ANDROID)
@@ -21,7 +21,6 @@
 #endif
   permissions::PermissionResult GetPermissionStatus(ContentSettingsType type,
                                                     const GURL& url) override;
-
  private:
   Profile* profile_;
 };
diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc
index 687ab93..a738dc8 100644
--- a/chrome/browser/ui/prefs/pref_watcher.cc
+++ b/chrome/browser/ui/prefs/pref_watcher.cc
@@ -16,10 +16,6 @@
 #include "components/language/core/browser/pref_names.h"
 #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
 
-#if !defined(OS_ANDROID)
-#include "chrome/browser/component_updater/soda_component_installer.h"
-#endif
-
 namespace {
 
 // The list of prefs we want to observe.
@@ -91,13 +87,6 @@
                                      renderer_callback);
 #endif
 
-#if !defined(OS_ANDROID)
-  profile_pref_change_registrar_.Add(
-      prefs::kLiveCaptionEnabled,
-      base::BindRepeating(&PrefWatcher::OnLiveCaptionEnabledPrefChanged,
-                          base::Unretained(this)));
-#endif
-
   PrefChangeRegistrar::NamedChangeCallback webkit_callback =
       base::BindRepeating(&PrefWatcher::OnWebPrefChanged,
                           base::Unretained(this));
@@ -148,19 +137,6 @@
     helper->OnWebPrefChanged(pref_name);
 }
 
-void PrefWatcher::OnLiveCaptionEnabledPrefChanged(
-    const std::string& pref_name) {
-#if !defined(OS_ANDROID)
-  PrefService* profile_prefs = profile_->GetPrefs();
-  if (profile_prefs->GetBoolean(prefs::kLiveCaptionEnabled)) {
-    component_updater::RegisterSODAComponent(
-        g_browser_process->component_updater(), profile_prefs,
-        base::BindOnce(&component_updater::SODAComponentInstallerPolicy::
-                           UpdateSODAComponentOnDemand));
-  }
-#endif
-}
-
 // static
 PrefWatcher* PrefWatcherFactory::GetForProfile(Profile* profile) {
   return static_cast<PrefWatcher*>(
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble.cc b/chrome/browser/ui/views/accessibility/caption_bubble.cc
index 221428b..8dbadb2 100644
--- a/chrome/browser/ui/views/accessibility/caption_bubble.cc
+++ b/chrome/browser/ui/views/accessibility/caption_bubble.cc
@@ -42,23 +42,18 @@
 
 namespace captions {
 
-CaptionBubble::CaptionBubble(views::View* anchor)
+CaptionBubble::CaptionBubble(views::View* anchor,
+                             base::OnceClosure destroyed_callback)
     : BubbleDialogDelegateView(anchor,
                                views::BubbleBorder::FLOAT,
-                               views::BubbleBorder::Shadow::NO_SHADOW) {
+                               views::BubbleBorder::Shadow::NO_SHADOW),
+      destroyed_callback_(std::move(destroyed_callback)) {
   DialogDelegate::SetButtons(ui::DIALOG_BUTTON_NONE);
   DialogDelegate::set_draggable(true);
 }
 
 CaptionBubble::~CaptionBubble() = default;
 
-// static
-void CaptionBubble::CreateAndShow(views::View* anchor) {
-  CaptionBubble* caption_bubble = new CaptionBubble(anchor);
-  views::BubbleDialogDelegateView::CreateBubble(caption_bubble);
-  caption_bubble->GetWidget()->Show();
-}
-
 void CaptionBubble::Init() {
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical, gfx::Insets(10)));
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble.h b/chrome/browser/ui/views/accessibility/caption_bubble.h
index 504ef63..878fabf 100644
--- a/chrome/browser/ui/views/accessibility/caption_bubble.h
+++ b/chrome/browser/ui/views/accessibility/caption_bubble.h
@@ -20,14 +20,12 @@
 //
 class CaptionBubble : public views::BubbleDialogDelegateView {
  public:
-  explicit CaptionBubble(views::View* anchor);
+  explicit CaptionBubble(views::View* anchor,
+                         base::OnceClosure destroyed_callback);
   ~CaptionBubble() override;
   CaptionBubble(const CaptionBubble&) = delete;
   CaptionBubble& operator=(const CaptionBubble&) = delete;
 
-  // Create and show the caption bubble.
-  static void CreateAndShow(views::View* anchor);
-
   // Set the text of the caption bubble. The bubble displays the last 2 lines.
   void SetText(const std::string& text);
 
@@ -39,6 +37,7 @@
 
  private:
   views::Label label_;
+  base::ScopedClosureRunner destroyed_callback_;
 };
 
 }  // namespace captions
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.cc b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.cc
new file mode 100644
index 0000000..c355ffb1
--- /dev/null
+++ b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.cc
@@ -0,0 +1,76 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/accessibility/caption_bubble_controller_views.h"
+
+#include <memory>
+
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/views/accessibility/caption_bubble.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+
+namespace captions {
+
+// Static
+std::unique_ptr<CaptionBubbleController> CaptionBubbleController::Create(
+    Browser* browser) {
+  return std::make_unique<CaptionBubbleControllerViews>(browser);
+}
+
+CaptionBubbleControllerViews::CaptionBubbleControllerViews(Browser* browser)
+    : CaptionBubbleController(browser) {
+  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+  caption_bubble_ = new CaptionBubble(
+      browser_view->GetContentsView(),
+      base::BindOnce(&CaptionBubbleControllerViews::OnCaptionBubbleDestroyed,
+                     base::Unretained(this)));
+  caption_widget_ =
+      views::BubbleDialogDelegateView::CreateBubble(caption_bubble_);
+
+  // Temporary
+  std::string text =
+      "Taylor Alison Swift (born December 13, 1989) is an American "
+      "singer-songwriter. She is known for narrative songs about her personal "
+      "life, which have received widespread media coverage. At age 14, Swift "
+      "became the youngest artist signed by the Sony/ATV Music publishing "
+      "house and, at age 15, she signed her first record deal.";
+  OnCaptionReceived(text);
+}
+
+CaptionBubbleControllerViews::~CaptionBubbleControllerViews() {
+  if (caption_widget_)
+    caption_widget_->CloseNow();
+}
+
+void CaptionBubbleControllerViews::OnCaptionBubbleDestroyed() {
+  caption_bubble_ = nullptr;
+  caption_widget_ = nullptr;
+}
+
+void CaptionBubbleControllerViews::OnCaptionReceived(const std::string& text) {
+  if (!caption_bubble_ || !caption_widget_)
+    return;
+
+  caption_bubble_->SetText(text);
+
+  // If the captions bubble contains text, show the bubble. Otherwise, hide it.
+  if (!caption_widget_->IsClosed()) {
+    bool is_visible = caption_widget_->IsVisible();
+    bool is_empty = text.empty();
+    if (is_visible && is_empty) {
+      caption_widget_->Hide();
+    } else if (!is_visible && !is_empty) {
+      caption_widget_->Show();
+    }
+  }
+}
+
+void CaptionBubbleControllerViews::OnActiveTabChanged(int index) {
+  // Cache the index of the tab on which the caption bubble is meant to be
+  // shown. When the caption bubble switches to that tab, show the widget. When
+  // the caption bubble switches away from that tab, hide it.
+  NOTIMPLEMENTED();
+}
+
+}  // namespace captions
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.h b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.h
new file mode 100644
index 0000000..9b498a7
--- /dev/null
+++ b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views.h
@@ -0,0 +1,52 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_CAPTION_BUBBLE_CONTROLLER_VIEWS_H_
+#define CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_CAPTION_BUBBLE_CONTROLLER_VIEWS_H_
+
+#include <string>
+
+#include "chrome/browser/ui/caption_bubble_controller.h"
+
+class Browser;
+
+namespace views {
+class Widget;
+}
+
+namespace captions {
+
+class CaptionBubble;
+
+///////////////////////////////////////////////////////////////////////////////
+// Caption Bubble Controller for Views
+//
+//  The implementation of the caption bubble controller for Views.
+//
+class CaptionBubbleControllerViews : public CaptionBubbleController {
+ public:
+  explicit CaptionBubbleControllerViews(Browser* browser);
+  ~CaptionBubbleControllerViews() override;
+  CaptionBubbleControllerViews(const CaptionBubbleControllerViews&) = delete;
+  CaptionBubbleControllerViews& operator=(const CaptionBubbleControllerViews&) =
+      delete;
+
+  // Called when captions are received from the service.
+  void OnCaptionReceived(const std::string& text) override;
+
+  // Called when the active tab changes.
+  void OnActiveTabChanged(int index) override;
+
+ private:
+  // A callback passed to the CaptionBubble which is called when the
+  // CaptionBubble is destroyed.
+  void OnCaptionBubbleDestroyed();
+
+  CaptionBubble* caption_bubble_;
+  views::Widget* caption_widget_;
+};
+
+}  // namespace captions
+
+#endif  // CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_CAPTION_BUBBLE_CONTROLLER_VIEWS_H_
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
index 31e82b4..d5bbf80 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
@@ -43,8 +43,6 @@
 #include "components/constrained_window/constrained_window_views.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/page_navigator.h"
-#include "ui/base/clipboard/clipboard.h"
-#include "ui/base/clipboard/test/test_clipboard.h"
 #include "ui/base/test/ui_controls.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 #include "ui/views/background.h"
@@ -300,13 +298,6 @@
 
     model_->ClearStore();
 
-    bb_view_ = std::make_unique<BookmarkBarView>(browser_.get(), nullptr);
-    bb_view_->set_owned_by_client();
-    // Real bookmark bars get a BookmarkBarViewBackground. Set an opaque
-    // background here just to avoid triggering subpixel rendering issues.
-    bb_view_->SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
-    bb_view_->SetPageNavigator(&navigator_);
-
     AddTestData(CreateBigMenu());
 
     // Create the Widget. Note the initial size is given by
@@ -319,28 +310,24 @@
     // state calculated in GetPreferredSizeForContents().
     EXPECT_TRUE(GetBookmarkButton(5)->GetVisible());
     EXPECT_FALSE(GetBookmarkButton(6)->GetVisible());
-
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-    // On desktop Linux, the bookmark bar context menu blocks on retrieving the
-    // clipboard selection from the X server (for the 'paste' item), so mock it
-    // out.
-    ui::TestClipboard::CreateForCurrentThread();
-    window()->Activate();
-#endif
   }
 
   void TearDown() override {
-    // Destroy everything, then run the message loop to ensure we delete all
-    // Tasks and fully shut down.
+    if (window()) {
+      // Closing the window ensures |bb_view_| is deleted, which must happen
+      // before |model_| is deleted (which happens when |profile_| is reset).
+      window()->CloseNow();
+    }
+
     browser_->tab_strip_model()->CloseAllTabs();
-    bb_view_.reset();
     browser_.reset();
     profile_.reset();
 
-    // Run the message loop to ensure we delete allTasks and fully shut down.
+    // Run the message loop to ensure we delete all tasks and fully shut down.
     base::RunLoop().RunUntilIdle();
 
     ViewEventTestBase::TearDown();
+
     BookmarkBarView::DisableAnimationsForTesting(false);
     constrained_window::SetConstrainedWindowViewsClient(nullptr);
 
@@ -350,7 +337,15 @@
   }
 
  protected:
-  views::View* CreateContentsView() override { return bb_view_.get(); }
+  std::unique_ptr<views::View> CreateContentsView() override {
+    auto bb_view = std::make_unique<BookmarkBarView>(browser_.get(), nullptr);
+    // Real bookmark bars get a BookmarkBarViewBackground. Set an opaque
+    // background here just to avoid triggering subpixel rendering issues.
+    bb_view->SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
+    bb_view->SetPageNavigator(&navigator_);
+    bb_view_ = bb_view.get();
+    return bb_view;
+  }
 
   gfx::Size GetPreferredSizeForContents() const override {
     // Calculate the preferred size so that one button doesn't fit, which
@@ -380,7 +375,7 @@
   virtual bool CreateBigMenu() { return false; }
 
   BookmarkModel* model_ = nullptr;
-  std::unique_ptr<BookmarkBarView> bb_view_;
+  BookmarkBarView* bb_view_ = nullptr;
   TestingPageNavigator navigator_;
 
  private:
@@ -448,10 +443,20 @@
     Done();
   }
 
+  void OnWidgetDestroying(views::Widget* widget) override {
+    if (widget == window())
+      bookmark_bar_observer_.RemoveAll();
+  }
+
+  void OnWidgetDestroyed(views::Widget* widget) override {
+    widget_observer_.Remove(widget);
+  }
+
  protected:
   // BookmarkBarViewEventTestBase:
   void DoTestOnMessageLoop() override {
-    bookmark_bar_observer_.Add(bb_view_.get());
+    widget_observer_.Add(window());
+    bookmark_bar_observer_.Add(bb_view_);
 
     // Record the URL for node f1a.
     const auto& f1 = model_->bookmark_bar_node()->children().front();
@@ -465,12 +470,6 @@
         CreateEventTask(this, &BookmarkBarViewDragTestBase::OnMenuOpened));
   }
 
-  void TearDown() override {
-    bookmark_bar_observer_.RemoveAll();
-    widget_observer_.RemoveAll();
-    BookmarkBarViewEventTestBase::TearDown();
-  }
-
   virtual void OnMenuOpened() {
     // Menu should be showing.
     views::MenuItemView* menu = bb_view_->GetMenu();
@@ -512,10 +511,6 @@
                                   base::Unretained(this)));
   }
 
-  ScopedObserver<views::Widget, views::WidgetObserver>* widget_observer() {
-    return &widget_observer_;
-  }
-
  private:
   void StartDrag() {
     const views::View* drag_view =
@@ -1044,7 +1039,6 @@
     ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT,
         ui_controls::DOWN | ui_controls::UP,
         CreateEventTask(this, &BookmarkBarViewTest10::Step2));
-    base::RunLoop().RunUntilIdle();
   }
 
  private:
@@ -1210,7 +1204,7 @@
 
     // Now click on empty space.
     gfx::Point mouse_loc;
-    views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc);
+    views::View::ConvertPointToScreen(bb_view_, &mouse_loc);
     ASSERT_TRUE(ui_controls::SendMouseMove(mouse_loc.x(), mouse_loc.y()));
     ASSERT_TRUE(ui_controls::SendMouseEventsNotifyWhenDone(
         ui_controls::LEFT, ui_controls::UP | ui_controls::DOWN,
@@ -1792,10 +1786,10 @@
   void DoTestOnMessageLoop() override {
     // Add |test_view_| next to |bb_view_|.
     views::View* parent = bb_view_->parent();
-    parent->RemoveChildView(bb_view_.get());
+    parent->RemoveChildView(bb_view_);
     container_view_ = std::make_unique<ContainerViewForMenuExit>();
     container_view_->set_owned_by_client();
-    container_view_->AddChildView(bb_view_.get());
+    container_view_->AddChildView(bb_view_);
     test_view_ =
         container_view_->AddChildView(std::make_unique<TestViewForMenuExit>());
     parent->AddChildView(container_view_.get());
@@ -1958,18 +1952,10 @@
 class BookmarkBarViewTest22 : public BookmarkBarViewDragTestBase {
  public:
   // BookmarkBarViewDragTestBase:
-  void OnWidgetDragWillStart(views::Widget* widget) override {
-    // Watch for main window destruction instead of menu dragging.
-    widget_observer()->RemoveAll();
-    widget_observer()->Add(window());
-
-    BookmarkBarViewDragTestBase::OnWidgetDragWillStart(widget);
-  }
-
   void OnWidgetDragComplete(views::Widget* widget) override {}
 
   void OnWidgetDestroyed(views::Widget* widget) override {
-    widget_observer()->RemoveAll();
+    BookmarkBarViewDragTestBase::OnWidgetDestroyed(widget);
     Done();
   }
 
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 0c248a0..04df1fe 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -73,7 +73,6 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/accelerator_table.h"
-#include "chrome/browser/ui/views/accessibility/caption_bubble.h"
 #include "chrome/browser/ui/views/accessibility/invert_bubble_view.h"
 #include "chrome/browser/ui/views/autofill/autofill_bubble_handler_impl.h"
 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
@@ -155,7 +154,6 @@
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_switches.h"
-#include "media/base/media_switches.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/accelerators/accelerator.h"
@@ -793,16 +791,6 @@
   browser()->OnWindowDidShow();
 
   MaybeShowInvertBubbleView(this);
-
-#if !defined(OS_ANDROID)
-  // If the kLiveCaption feature is enabled, create and show a caption bubble.
-  // This is temporary while the feature is in early development. Soon, a
-  // CaptionController will be introduced which will conditionally create and
-  // show the CaptionBubble from inside the BrowserView when the preference is
-  // enabled.
-  if (base::FeatureList::IsEnabled(media::kLiveCaption))
-    captions::CaptionBubble::CreateAndShow(contents_web_view_);
-#endif
 }
 
 void BrowserView::ShowInactive() {
diff --git a/chrome/browser/ui/views/menu_model_adapter_test.cc b/chrome/browser/ui/views/menu_model_adapter_test.cc
index d9d2f6b..9860c8e5 100644
--- a/chrome/browser/ui/views/menu_model_adapter_test.cc
+++ b/chrome/browser/ui/views/menu_model_adapter_test.cc
@@ -154,34 +154,31 @@
 class MenuModelAdapterTest : public ViewEventTestBase,
                              public views::ButtonListener {
  public:
-  MenuModelAdapterTest()
-      : ViewEventTestBase(),
-        button_(nullptr),
-        menu_model_adapter_(&top_menu_model_),
-        menu_(nullptr) {}
-
-  ~MenuModelAdapterTest() override {}
+  MenuModelAdapterTest() = default;
+  ~MenuModelAdapterTest() override = default;
 
   // ViewEventTestBase implementation.
 
   void SetUp() override {
-    button_ =
-        new views::MenuButton(base::ASCIIToUTF16("Menu Adapter Test"), this);
+    ViewEventTestBase::SetUp();
 
     menu_ = menu_model_adapter_.CreateMenu();
-    menu_runner_.reset(
-        new views::MenuRunner(menu_, views::MenuRunner::HAS_MNEMONICS));
-
-    ViewEventTestBase::SetUp();
+    menu_runner_ = std::make_unique<views::MenuRunner>(
+        menu_, views::MenuRunner::HAS_MNEMONICS);
   }
 
   void TearDown() override {
-    menu_runner_ = nullptr;
-    menu_ = nullptr;
+    menu_runner_.reset();
+
     ViewEventTestBase::TearDown();
   }
 
-  views::View* CreateContentsView() override { return button_; }
+  std::unique_ptr<views::View> CreateContentsView() override {
+    auto button = std::make_unique<views::MenuButton>(
+        base::ASCIIToUTF16("Menu Adapter Test"), this);
+    button_ = button.get();
+    return button;
+  }
 
   gfx::Size GetPreferredSizeForContents() const override {
     return button_->GetPreferredSize();
@@ -261,10 +258,10 @@
         std::move(next));
   }
 
-  views::MenuButton* button_;
+  views::MenuButton* button_ = nullptr;
   TopMenuModel top_menu_model_;
-  views::MenuModelAdapter menu_model_adapter_;
-  views::MenuItemView* menu_;
+  views::MenuModelAdapter menu_model_adapter_{&top_menu_model_};
+  views::MenuItemView* menu_ = nullptr;
   std::unique_ptr<views::MenuRunner> menu_runner_;
 };
 
diff --git a/chrome/browser/ui/views/menu_test_base.cc b/chrome/browser/ui/views/menu_test_base.cc
index 9f7203f7..a01fa280 100644
--- a/chrome/browser/ui/views/menu_test_base.cc
+++ b/chrome/browser/ui/views/menu_test_base.cc
@@ -38,15 +38,14 @@
 }
 
 void MenuTestBase::SetUp() {
+  ViewEventTestBase::SetUp();
+
   views::test::DisableMenuClosureAnimations();
 
-  button_ = new views::MenuButton(base::ASCIIToUTF16("Menu Test"), this);
   menu_ = new views::MenuItemView(this);
   BuildMenu(menu_);
   menu_runner_ =
       std::make_unique<views::MenuRunner>(menu_, GetMenuRunnerFlags());
-
-  ViewEventTestBase::SetUp();
 }
 
 void MenuTestBase::TearDown() {
@@ -54,14 +53,16 @@
   // with views::MenuRunner::FOR_DROP) don't take kindly to simply pulling the
   // runner out from under them.
   menu_runner_->Cancel();
-
   menu_runner_.reset();
-  menu_ = nullptr;
+
   ViewEventTestBase::TearDown();
 }
 
-views::View* MenuTestBase::CreateContentsView() {
-  return button_;
+std::unique_ptr<views::View> MenuTestBase::CreateContentsView() {
+  auto button = std::make_unique<views::MenuButton>(
+      base::ASCIIToUTF16("Menu Test"), this);
+  button_ = button.get();
+  return button;
 }
 
 void MenuTestBase::DoTestOnMessageLoop() {
diff --git a/chrome/browser/ui/views/menu_test_base.h b/chrome/browser/ui/views/menu_test_base.h
index cceaf440..9c578aa 100644
--- a/chrome/browser/ui/views/menu_test_base.h
+++ b/chrome/browser/ui/views/menu_test_base.h
@@ -71,7 +71,7 @@
   // ViewEventTestBase implementation.
   void SetUp() override;
   void TearDown() override;
-  views::View* CreateContentsView() override;
+  std::unique_ptr<views::View> CreateContentsView() override;
   void DoTestOnMessageLoop() override;
   gfx::Size GetPreferredSizeForContents() const override;
 
@@ -82,8 +82,8 @@
   void ExecuteCommand(int id) override;
 
  private:
-  views::MenuButton* button_;
-  views::MenuItemView* menu_;
+  views::MenuButton* button_ = nullptr;
+  views::MenuItemView* menu_ = nullptr;
   std::unique_ptr<views::MenuRunner> menu_runner_;
 
   // The command id of the last pressed menu item since the menu was opened.
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index 8d0cf26..2c36ef0 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -463,24 +463,28 @@
                               suggestion_height);
 
   if (OmniboxFieldTrial::IsSuggestionButtonRowEnabled()) {
+    const auto check_state = [=](auto state) {
+      return popup_contents_view_->model()->IsSelectionAvailable(
+          OmniboxPopupModel::Selection(model_index_, state));
+    };
     int start_indent = OmniboxMatchCellView::GetTextIndent();
     // This button_indent strictly increases with each button added.
     int button_indent = start_indent;
-    if (match_.associated_keyword) {
+    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD)) {
       button_indent =
           LayoutPillButton(keyword_button_, button_indent, suggestion_height);
     } else if (keyword_button_->GetVisible()) {
       // Setting visibility does lots of work, even if not changing.
       keyword_button_->SetVisible(false);
     }
-    if (match_.pedal) {
+    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL)) {
       pedal_button_->SetText(match_.pedal->GetLabelStrings().hint);
       button_indent =
           LayoutPillButton(pedal_button_, button_indent, suggestion_height);
     } else if (pedal_button_->GetVisible()) {
       pedal_button_->SetVisible(false);
     }
-    if (match_.has_tab_match) {
+    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH)) {
       button_indent = LayoutPillButton(tab_switch_button_, button_indent,
                                        suggestion_height);
     } else if (tab_switch_button_->GetVisible()) {
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc
index 0c600053..cfb0c41 100644
--- a/chrome/browser/ui/views/session_crashed_bubble_view.cc
+++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc
@@ -77,19 +77,6 @@
 #endif
 }
 
-// Returns the app menu view, except when the browser window is Cocoa; Cocoa
-// browser windows always have a null anchor view and use
-// GetSessionCrashedBubbleAnchorRect() instead.
-views::View* GetSessionCrashedBubbleAnchorView(Browser* browser) {
-  return BrowserView::GetBrowserViewForBrowser(browser)
-      ->toolbar_button_provider()
-      ->GetAppMenuButton();
-}
-
-gfx::Rect GetSessionCrashedBubbleAnchorRect(Browser* browser) {
-  return gfx::Rect();
-}
-
 }  // namespace
 
 // A helper class that listens to browser removal event.
@@ -158,9 +145,11 @@
     return;
   }
 
-  SessionCrashedBubbleView* crash_bubble = new SessionCrashedBubbleView(
-      GetSessionCrashedBubbleAnchorView(browser),
-      GetSessionCrashedBubbleAnchorRect(browser), browser, offer_uma_optin);
+  views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser)
+                                 ->toolbar_button_provider()
+                                 ->GetAppMenuButton();
+  SessionCrashedBubbleView* crash_bubble =
+      new SessionCrashedBubbleView(anchor_view, browser, offer_uma_optin);
   views::BubbleDialogDelegateView::CreateBubble(crash_bubble)->Show();
 
   RecordBubbleHistogramValue(SESSION_CRASHED_BUBBLE_SHOWN);
@@ -173,7 +162,6 @@
 }
 
 SessionCrashedBubbleView::SessionCrashedBubbleView(views::View* anchor_view,
-                                                   const gfx::Rect& anchor_rect,
                                                    Browser* browser,
                                                    bool offer_uma_optin)
     : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
@@ -181,6 +169,8 @@
       uma_option_(NULL),
       offer_uma_optin_(offer_uma_optin),
       ignored_(true) {
+  DCHECK(anchor_view);
+
   const SessionStartupPref session_startup_pref =
       SessionStartupPref::GetStartupPref(browser_->profile());
   // Offer the option to open the startup pages using the cancel button, but
@@ -205,12 +195,6 @@
 
   set_close_on_deactivate(false);
   chrome::RecordDialogCreation(chrome::DialogIdentifier::SESSION_CRASHED);
-
-  if (!anchor_view) {
-    SetAnchorRect(anchor_rect);
-    set_parent_window(
-        platform_util::GetViewForWindow(browser->window()->GetNativeWindow()));
-  }
 }
 
 SessionCrashedBubbleView::~SessionCrashedBubbleView() {
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.h b/chrome/browser/ui/views/session_crashed_bubble_view.h
index 04375a5..9cb5c102 100644
--- a/chrome/browser/ui/views/session_crashed_bubble_view.h
+++ b/chrome/browser/ui/views/session_crashed_bubble_view.h
@@ -43,7 +43,6 @@
   friend class SessionCrashedBubbleViewTest;
 
   SessionCrashedBubbleView(views::View* anchor_view,
-                           const gfx::Rect& anchor_rect,
                            Browser* browser,
                            bool offer_uma_optin);
   ~SessionCrashedBubbleView() override;
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc b/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
index 8a55865..d2fd3ed 100644
--- a/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
@@ -31,9 +31,8 @@
                         ->toolbar_button_provider()
                         ->GetAppMenuButton();
     }
-    crash_bubble_ =
-        new SessionCrashedBubbleView(anchor_view, anchor_rect, browser(),
-                                     name == "SessionCrashedBubbleOfferUma");
+    crash_bubble_ = new SessionCrashedBubbleView(
+        anchor_view, browser(), name == "SessionCrashedBubbleOfferUma");
     views::BubbleDialogDelegateView::CreateBubble(crash_bubble_)->Show();
   }
 
diff --git a/chrome/browser/ui/views/test/view_event_test_base.cc b/chrome/browser/ui/views/test/view_event_test_base.cc
index c9a76ff..d3bcadf0 100644
--- a/chrome/browser/ui/views/test/view_event_test_base.cc
+++ b/chrome/browser/ui/views/test/view_event_test_base.cc
@@ -6,22 +6,27 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/macros.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "chrome/browser/ui/views/test/view_event_test_platform_part.h"
 #include "chrome/test/base/chrome_unit_test_suite.h"
 #include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "mojo/core/embedder/embedder.h"
-#include "ui/base/clipboard/clipboard.h"
-#include "ui/base/ime/init/input_method_initializer.h"
-#include "ui/compositor/test/test_context_factories.h"
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/view.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_delegate.h"
 
+#if defined(USE_AURA) && !defined(OS_CHROMEOS)
+#include "ui/display/screen.h"
+
+#if defined(USE_X11)
+#include "ui/views/test/test_desktop_screen_x11.h"
+#else
+#include "ui/views/widget/desktop_aura/desktop_screen.h"
+#endif
+#endif
+
 namespace {
 
 // View that keeps its preferred size in sync with what |harness| requests.
@@ -83,9 +88,26 @@
   // Mojo when starting. This only works because each interactive_ui_test runs
   // in a new process.
   mojo::core::Init();
+
+#if defined(USE_AURA) && !defined(OS_CHROMEOS)
+  // TODO(pkasting): Determine why the TestScreen in AuraTestHelper is
+  // insufficient for these tests, then either bolster/replace it or fix the
+  // tests.
+  DCHECK(!display::Screen::GetScreen());
+#if defined(USE_X11)
+  display::Screen::SetScreenInstance(
+      views::test::TestDesktopScreenX11::GetInstance());
+#else
+  screen_.reset(views::CreateDesktopScreen());
+  display::Screen::SetScreenInstance(screen_.get());
+#endif
+#endif
 }
 
 ViewEventTestBase::~ViewEventTestBase() {
+#if defined(USE_AURA) && !defined(OS_CHROMEOS)
+  display::Screen::SetScreenInstance(nullptr);
+#endif
   TestingBrowserProcess::DeleteInstance();
 }
 
@@ -95,22 +117,13 @@
 }
 
 void ViewEventTestBase::SetUp() {
-  ui::InitializeInputMethodForTesting();
+  ChromeViewsTestBase::SetUp();
 
-  // The ContextFactory must exist before any Compositors are created.
-  context_factories_ = std::make_unique<ui::TestContextFactories>(false);
-
-#if defined(OS_MACOSX)
-  views_delegate_.set_context_factory(context_factories_->GetContextFactory());
-#endif
-  views_delegate_.set_use_desktop_native_widgets(true);
-
-  platform_part_.reset(ViewEventTestPlatformPart::Create(
-      context_factories_->GetContextFactory()));
+  test_views_delegate()->set_use_desktop_native_widgets(true);
 
   window_ = views::Widget::CreateWindowWithContext(
       new TestBaseWidgetDelegate(this),  // Owns itself.
-      platform_part_->GetContext());
+      GetContext());
   window_->Show();
 }
 
@@ -120,12 +133,7 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  ui::Clipboard::DestroyClipboardForCurrentThread();
-  platform_part_.reset();
-
-  context_factories_.reset();
-
-  ui::ShutdownInputMethodForTesting();
+  ChromeViewsTestBase::TearDown();
 }
 
 gfx::Size ViewEventTestBase::GetPreferredSizeForContents() const {
diff --git a/chrome/browser/ui/views/test/view_event_test_base.h b/chrome/browser/ui/views/test/view_event_test_base.h
index 338195a..f56a53c9 100644
--- a/chrome/browser/ui/views/test/view_event_test_base.h
+++ b/chrome/browser/ui/views/test/view_event_test_base.h
@@ -14,27 +14,21 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/compiler_specific.h"
 #include "base/run_loop.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
-#include "chrome/test/views/chrome_test_views_delegate.h"
-#include "content/public/test/browser_task_environment.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "chrome/test/views/chrome_views_test_base.h"
 
-#if defined(OS_WIN)
-#include "ui/base/win/scoped_ole_initializer.h"
+#if defined(USE_AURA) && !defined(OS_CHROMEOS) && !defined(USE_X11)
+namespace display {
+class Screen;
+}
 #endif
 
 namespace gfx {
 class Size;
 }
 
-namespace ui {
-class TestContextFactories;
-}
-
-class ViewEventTestPlatformPart;
 class TestBaseWidgetDelegate;
 
 // Base class for Views based tests that dispatch events.
@@ -69,7 +63,7 @@
 // driven from observer callbacks and posted on the task runner returned by
 // GetDragTaskRunner().
 
-class ViewEventTestBase : public testing::Test {
+class ViewEventTestBase : public ChromeViewsTestBase {
  public:
   ViewEventTestBase();
   ViewEventTestBase(const ViewEventTestBase&) = delete;
@@ -83,7 +77,7 @@
   void TearDown() override;
 
   // Returns the view that is added to the window.
-  virtual views::View* CreateContentsView() = 0;
+  virtual std::unique_ptr<views::View> CreateContentsView() = 0;
 
   // Returns an empty Size. Subclasses that want a preferred size other than
   // that of the View returned by CreateContentsView should override this
@@ -124,16 +118,13 @@
   // failures invokes Done.
   void RunTestMethod(base::OnceClosure task);
 
+#if defined(USE_AURA) && !defined(OS_CHROMEOS) && !defined(USE_X11)
+  std::unique_ptr<display::Screen> screen_;
+#endif
+
   // Thread for posting background drag events.
   std::unique_ptr<base::Thread> drag_event_thread_;
 
-  content::BrowserTaskEnvironment task_environment_;
-#if defined(OS_WIN)
-  ui::ScopedOleInitializer ole_initializer_;
-#endif
-  std::unique_ptr<ui::TestContextFactories> context_factories_;
-  std::unique_ptr<ViewEventTestPlatformPart> platform_part_;
-  ChromeTestViewsDelegate<> views_delegate_;
   base::RunLoop run_loop_;
   views::Widget* window_ = nullptr;
 };
diff --git a/chrome/browser/ui/views/test/view_event_test_platform_part.h b/chrome/browser/ui/views/test/view_event_test_platform_part.h
deleted file mode 100644
index df032a5..0000000
--- a/chrome/browser/ui/views/test/view_event_test_platform_part.h
+++ /dev/null
@@ -1,38 +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 CHROME_BROWSER_UI_VIEWS_TEST_VIEW_EVENT_TEST_PLATFORM_PART_H_
-#define CHROME_BROWSER_UI_VIEWS_TEST_VIEW_EVENT_TEST_PLATFORM_PART_H_
-
-#include "base/macros.h"
-#include "ui/gfx/native_widget_types.h"
-
-namespace ui {
-class ContextFactory;
-}  // namespace ui
-
-// A helper class owned by tests that performs platform specific initialization.
-// ViewEventTestPlatformPart behaves a bit like views::ViewsTestHelper, but on
-// ChromeOS it will create an Ash shell environment, rather than using an
-// AuraTestHelper.
-class ViewEventTestPlatformPart {
- public:
-  virtual ~ViewEventTestPlatformPart() {}
-
-  // Set up the platform-specific environment. Teardown is performed in the
-  // destructor.
-  static ViewEventTestPlatformPart* Create(ui::ContextFactory* context_factory);
-
-  // The Widget context for creating the test window. This will be the Ash root
-  // window on ChromeOS environments. Otherwise it should return NULL.
-  virtual gfx::NativeWindow GetContext() = 0;
-
- protected:
-  ViewEventTestPlatformPart() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ViewEventTestPlatformPart);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_TEST_VIEW_EVENT_TEST_PLATFORM_PART_H_
diff --git a/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc b/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc
deleted file mode 100644
index 633cf1e..0000000
--- a/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc
+++ /dev/null
@@ -1,94 +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 "chrome/browser/ui/views/test/view_event_test_platform_part.h"
-
-#include <memory>
-#include <utility>
-
-#include "ash/session/test_session_controller_client.h"
-#include "ash/shell.h"
-#include "ash/shell_init_params.h"
-#include "ash/test/ash_test_helper.h"
-#include "ash/test_shell_delegate.h"
-#include "base/command_line.h"
-#include "base/macros.h"
-#include "chrome/browser/ui/ash/keyboard/chrome_keyboard_ui_factory.h"
-#include "chromeos/audio/cras_audio_handler.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/power/power_policy_controller.h"
-#include "chromeos/network/network_handler.h"
-#include "device/bluetooth/dbus/bluez_dbus_manager.h"
-#include "ui/aura/env.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/display/display_switches.h"
-#include "ui/wm/core/wm_state.h"
-
-namespace {
-
-// ViewEventTestPlatformPart implementation for ChromeOS (chromeos=1).
-class ViewEventTestPlatformPartChromeOS : public ViewEventTestPlatformPart {
- public:
-  explicit ViewEventTestPlatformPartChromeOS(
-      ui::ContextFactory* context_factory);
-  ~ViewEventTestPlatformPartChromeOS() override;
-
-  // Overridden from ViewEventTestPlatformPart:
-  gfx::NativeWindow GetContext() override {
-    return ash::Shell::GetPrimaryRootWindow();
-  }
-
- private:
-  wm::WMState wm_state_;
-  std::unique_ptr<aura::Env> env_;
-
-  DISALLOW_COPY_AND_ASSIGN(ViewEventTestPlatformPartChromeOS);
-};
-
-ViewEventTestPlatformPartChromeOS::ViewEventTestPlatformPartChromeOS(
-    ui::ContextFactory* context_factory) {
-  chromeos::DBusThreadManager::Initialize();
-  chromeos::PowerManagerClient::InitializeFake();
-  // ash::Shell::CreateInstance needs chromeos::PowerPolicyController
-  // initialized. In classic ash, it is initialized in chrome process. In mash,
-  // it is initialized by window manager service.
-  chromeos::PowerPolicyController::Initialize(
-      chromeos::PowerManagerClient::Get());
-  bluez::BluezDBusManager::InitializeFake();
-  chromeos::CrasAudioHandler::InitializeForTesting();
-  chromeos::NetworkHandler::Initialize();
-
-  env_ = aura::Env::CreateInstance();
-  ash::ShellInitParams init_params;
-  init_params.delegate = std::make_unique<ash::TestShellDelegate>();
-  init_params.context_factory = context_factory;
-  init_params.keyboard_ui_factory = std::make_unique<ChromeKeyboardUIFactory>();
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kHostWindowBounds, "0+0-1280x800");
-  ash::Shell::CreateInstance(std::move(init_params));
-  ash::TestSessionControllerClient session_controller_client(
-      ash::Shell::Get()->session_controller(), /*prefs_provider=*/nullptr);
-  session_controller_client.CreatePredefinedUserSessions(1);
-  GetContext()->GetHost()->Show();
-}
-
-ViewEventTestPlatformPartChromeOS::~ViewEventTestPlatformPartChromeOS() {
-  ash::Shell::DeleteInstance();
-  env_.reset();
-
-  chromeos::NetworkHandler::Shutdown();
-  chromeos::CrasAudioHandler::Shutdown();
-  bluez::BluezDBusManager::Shutdown();
-  chromeos::PowerPolicyController::Shutdown();
-  chromeos::PowerManagerClient::Shutdown();
-  chromeos::DBusThreadManager::Shutdown();
-}
-
-}  // namespace
-
-// static
-ViewEventTestPlatformPart* ViewEventTestPlatformPart::Create(
-    ui::ContextFactory* context_factory) {
-  return new ViewEventTestPlatformPartChromeOS(context_factory);
-}
diff --git a/chrome/browser/ui/views/test/view_event_test_platform_part_default.cc b/chrome/browser/ui/views/test/view_event_test_platform_part_default.cc
deleted file mode 100644
index 44c2e1fc..0000000
--- a/chrome/browser/ui/views/test/view_event_test_platform_part_default.cc
+++ /dev/null
@@ -1,63 +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 "chrome/browser/ui/views/test/view_event_test_platform_part.h"
-
-#include <memory>
-
-#include "base/macros.h"
-#include "build/build_config.h"
-#include "ui/aura/env.h"
-#include "ui/display/screen.h"
-#include "ui/views/widget/desktop_aura/desktop_screen.h"
-
-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
-#include "ui/views/test/test_desktop_screen_x11.h"
-#endif
-
-namespace {
-
-// ViewEventTestPlatformPart implementation for Views, but non-CrOS.
-class ViewEventTestPlatformPartDefault : public ViewEventTestPlatformPart {
- public:
-  explicit ViewEventTestPlatformPartDefault(
-      ui::ContextFactory* context_factory) {
-#if defined(USE_AURA)
-    DCHECK(!display::Screen::GetScreen());
-#if defined(USE_X11)
-    display::Screen::SetScreenInstance(
-        views::test::TestDesktopScreenX11::GetInstance());
-#else
-    screen_.reset(views::CreateDesktopScreen());
-    display::Screen::SetScreenInstance(screen_.get());
-#endif
-    env_ = aura::Env::CreateInstance();
-    env_->set_context_factory(context_factory);
-#endif
-  }
-
-  ~ViewEventTestPlatformPartDefault() override {
-#if defined(USE_AURA)
-    env_.reset();
-    display::Screen::SetScreenInstance(nullptr);
-#endif
-  }
-
-  // Overridden from ViewEventTestPlatformPart:
-  gfx::NativeWindow GetContext() override { return NULL; }
-
- private:
-  std::unique_ptr<display::Screen> screen_;
-  std::unique_ptr<aura::Env> env_;
-
-  DISALLOW_COPY_AND_ASSIGN(ViewEventTestPlatformPartDefault);
-};
-
-}  // namespace
-
-// static
-ViewEventTestPlatformPart* ViewEventTestPlatformPart::Create(
-    ui::ContextFactory* context_factory) {
-  return new ViewEventTestPlatformPartDefault(context_factory);
-}
diff --git a/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc b/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc
index 0eb6558..84e294a 100644
--- a/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc
+++ b/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc
@@ -129,26 +129,24 @@
 
 class TouchEventsViewTest : public ViewEventTestBase {
  public:
-  TouchEventsViewTest() : ViewEventTestBase(), touch_view_(nullptr) {}
+  TouchEventsViewTest() = default;
 
   // ViewEventTestBase:
   void SetUp() override {
-    touch_view_ = new views::View();
     ViewEventTestBase::SetUp();
+
+    auto gesture_recognizer = std::make_unique<TestingGestureRecognizer>();
+    gesture_recognizer_ = gesture_recognizer.get();
     aura::test::EnvTestHelper().SetGestureRecognizer(
-        std::make_unique<TestingGestureRecognizer>());
-    gesture_recognizer_ = static_cast<TestingGestureRecognizer*>(
-        aura::Env::GetInstance()->gesture_recognizer());
+        std::move(gesture_recognizer));
   }
 
-  void TearDown() override {
-    touch_view_ = nullptr;
-    gesture_recognizer_ = nullptr;
-    ViewEventTestBase::TearDown();
+  std::unique_ptr<views::View> CreateContentsView() override {
+    auto touch_view = std::make_unique<views::View>();
+    touch_view_ = touch_view.get();
+    return touch_view;
   }
 
-  views::View* CreateContentsView() override { return touch_view_; }
-
   gfx::Size GetPreferredSizeForContents() const override {
     return gfx::Size(600, 600);
   }
diff --git a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc
index 616aca03..07499a83 100644
--- a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc
+++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc
@@ -20,6 +20,11 @@
 // A string used to log UMA for query tiles in image fetcher service.
 constexpr char kImageFetcherUmaClientName[] = "QueryTiles";
 
+// The time interval for the images to stay in image fetcher's cache after last
+// used time.
+constexpr base::TimeDelta kImageCacheExpirationInterval =
+    base::TimeDelta::FromDays(1);
+
 constexpr net::NetworkTrafficAnnotationTag kQueryTilesTrafficAnnotation =
     net::DefineNetworkTrafficAnnotation("query_tiles_image_loader", R"(
       semantics {
@@ -63,9 +68,9 @@
 
 void CachedImageLoader::FetchImage(const GURL& url, BitmapCallback callback) {
   // Fetch and decode the image from network or disk cache.
-  // TODO(xingliu): Add custom expiration to ImageFetcherParams.
   image_fetcher::ImageFetcherParams params(kQueryTilesTrafficAnnotation,
                                            kImageFetcherUmaClientName);
+  params.set_hold_for_expiration_interval(kImageCacheExpirationInterval);
   image_fetcher_->FetchImage(
       url, base::BindOnce(&OnImageFetched, std::move(callback)), params);
 }
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
index 57626bb..1d92b9f 100644
--- a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
+++ b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
@@ -33,7 +33,7 @@
 
 std::unique_ptr<KeyedService> TileServiceFactory::BuildServiceInstanceFor(
     SimpleFactoryKey* key) const {
-  // TODO(xingliu): Use network only fetcher if needed.
+  // TODO(xingliu): Add reduced mode image fetcher for prefetch.
   auto* image_fetcher =
       ImageFetcherServiceFactory::GetForKey(key)->GetImageFetcher(
           image_fetcher::ImageFetcherConfig::kDiskCacheOnly);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4f7b355..5b73185a 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4473,6 +4473,7 @@
     sources += [
       "../browser/spellchecker/spell_check_host_chrome_impl_mac_unittest.cc",
       "../browser/spellchecker/spellcheck_custom_dictionary_unittest.cc",
+      "../browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc",
       "../browser/spellchecker/spellcheck_service_unittest.cc",
       "../tools/convert_dict/convert_dict_unittest.cc",
     ]
@@ -5892,9 +5893,6 @@
         "../browser/ui/views/tabs/tab_hover_card_bubble_view_interactive_uitest.cc",
         "../browser/ui/views/test/view_event_test_base.cc",
         "../browser/ui/views/test/view_event_test_base.h",
-        "../browser/ui/views/test/view_event_test_platform_part.h",
-        "../browser/ui/views/test/view_event_test_platform_part_chromeos.cc",
-        "../browser/ui/views/test/view_event_test_platform_part_default.cc",
         "../browser/ui/views/toolbar/toolbar_action_view_interactive_uitest.cc",
         "../browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc",
         "../browser/ui/views/translate/translate_bubble_test_utils_views.cc",
@@ -5947,12 +5945,8 @@
         "//chrome/browser/media/router:test_support",
         "//chromeos/dbus",
       ]
-      sources -= [
-        "../browser/ui/signin_view_controller_interactive_uitest.cc",
-
-        # Use only the _chromeos version on Ash / Chrome OS.
-        "../browser/ui/views/test/view_event_test_platform_part_default.cc",
-      ]
+      sources -=
+          [ "../browser/ui/signin_view_controller_interactive_uitest.cc" ]
       sources +=
           [ "../browser/ui/app_list/app_list_client_interactive_uitest.cc" ]
 
diff --git a/chrome/test/chromedriver/chrome/frame_tracker.cc b/chrome/test/chromedriver/chrome/frame_tracker.cc
index 33c8217..f8818fa 100644
--- a/chrome/test/chromedriver/chrome/frame_tracker.cc
+++ b/chrome/test/chromedriver/chrome/frame_tracker.cc
@@ -121,28 +121,6 @@
         return Status(kUnknownError, method + " has invalid 'frameId' value");
     }
 
-    if (context->HasKey("isDefault")) {
-      // TODO(samuong): remove this when we stop supporting Chrome 53.
-      if (!context->GetBoolean("isDefault", &is_default))
-        return Status(kUnknownError, method + " has invalid 'isDefault' value");
-    }
-
-    if (context->HasKey("frameId")) {
-      // TODO(samuong): remove this when we stop supporting Chrome 53.
-      if (!context->GetString("frameId", &frame_id))
-        return Status(kUnknownError, method + " has invalid 'frameId' value");
-    }
-
-    if (context->HasKey("type")) {
-      // Before crrev.com/381172, the optional |type| field can be used to
-      // determine whether we're looking at the default context.
-      // TODO(samuong): remove this when we stop supporting Chrome 50.
-      std::string type;
-      if (!context->GetString("type", &type))
-        return Status(kUnknownError, method + " has invalid 'context.type'");
-      is_default = type != "Extension";  // exclude content scripts
-    }
-
     if (is_default && !frame_id.empty())
       frame_to_context_map_[frame_id] = context_id;
   } else if (method == "Runtime.executionContextDestroyed") {
diff --git a/chrome/test/chromedriver/chrome/frame_tracker_unittest.cc b/chrome/test/chromedriver/chrome/frame_tracker_unittest.cc
index 78af54d2..b73b8236 100644
--- a/chrome/test/chromedriver/chrome/frame_tracker_unittest.cc
+++ b/chrome/test/chromedriver/chrome/frame_tracker_unittest.cc
@@ -18,7 +18,8 @@
   ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsError());
   ASSERT_EQ(-1, context_id);
 
-  const char context[] = "{\"id\":100,\"frameId\":\"f\"}";
+  const char context[] =
+      "{\"id\":100,\"auxData\":{\"frameId\":\"f\",\"isDefault\":true}}";
   base::DictionaryValue params;
   params.Set("context", base::JSONReader::ReadDeprecated(context));
   ASSERT_EQ(kOk,
@@ -68,7 +69,8 @@
   StubDevToolsClient client;
   FrameTracker tracker(&client);
 
-  const char context[] = "{\"id\":1,\"frameId\":\"f\"}";
+  const char context[] =
+      "{\"id\":1,\"auxData\":{\"frameId\":\"f\",\"isDefault\":true}}";
   base::DictionaryValue params;
   params.Set("context", base::JSONReader::ReadDeprecated(context));
   ASSERT_EQ(kOk,
@@ -90,7 +92,8 @@
   StubDevToolsClient client;
   FrameTracker tracker(&client);
 
-  const char context[] = "{\"id\":1,\"frameId\":\"f\"}";
+  const char context[] =
+      "{\"id\":1,\"auxData\":{\"frameId\":\"f\",\"isDefault\":true}}";
   base::DictionaryValue params;
   params.Set("context", base::JSONReader::ReadDeprecated(context));
   ASSERT_EQ(kOk,
@@ -101,7 +104,7 @@
   ASSERT_EQ(1, context_id);
 
   params.SetInteger("context.id", 2);
-  params.SetString("context.type", "Extension");
+  params.SetBoolean("context.auxData.isDefault", false);
   ASSERT_EQ(kOk,
             tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
                 .code());
diff --git a/chrome/test/data/webui/settings/privacy_page_test.js b/chrome/test/data/webui/settings/privacy_page_test.js
index f24548c..a343a40d 100644
--- a/chrome/test/data/webui/settings/privacy_page_test.js
+++ b/chrome/test/data/webui/settings/privacy_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // clang-format off
-// #import {SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
+// #import {CookieControlsMode, SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
 // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 // #import {MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, SyncBrowserProxyImpl, HatsBrowserProxyImpl, Router, routes} from 'chrome://settings/settings.js';
 // #import {TestMetricsBrowserProxy} from 'chrome://test/settings/test_metrics_browser_proxy.m.js';
@@ -226,6 +226,30 @@
           test_util.isChildVisible(page, '#security-keys-subpage-trigger'));
     }
   });
+
+  test('BlockThirdPartyCookiesToggle', async function() {
+    page.prefs.profile.block_third_party_cookies = {value: false};
+    page.prefs.profile.cookie_controls_mode = {
+      value: settings.CookieControlsMode.DISABLED
+    };
+    settings.Router.getInstance().navigateTo(
+        settings.routes.SITE_SETTINGS_COOKIES);
+    Polymer.dom.flush();
+
+    page.$$('#blockThirdPartyCookies').click();
+    Polymer.dom.flush();
+    assertTrue(page.prefs.profile.block_third_party_cookies.value);
+    assertEquals(
+        page.prefs.profile.cookie_controls_mode.value,
+        settings.CookieControlsMode.ENABLED);
+
+    page.$$('#blockThirdPartyCookies').click();
+    Polymer.dom.flush();
+    assertFalse(page.prefs.profile.block_third_party_cookies.value);
+    assertEquals(
+        page.prefs.profile.cookie_controls_mode.value,
+        settings.CookieControlsMode.DISABLED);
+  });
 });
 
 suite('PrivacyPageRedesignEnabled', function() {
diff --git a/chrome/test/mini_installer/registry_operations.py b/chrome/test/mini_installer/registry_operations.py
index 9210f072..3b7bb2e 100644
--- a/chrome/test/mini_installer/registry_operations.py
+++ b/chrome/test/mini_installer/registry_operations.py
@@ -168,25 +168,33 @@
       'property for key %s must not be \'required\'' % key)
   root_key, sub_key = key.split('\\', 1)
 
+  registry_view = _winreg.KEY_WOW64_32KEY
+  if 'wow_key' in expectation:
+    registry_view = _RegistryViewConstant(expectation['wow_key'])
+  elif variable_expander.Expand('$MINI_INSTALLER_BITNESS') == '64':
+    registry_view = _winreg.KEY_WOW64_64KEY
+
   try:
     # Query the Windows registry for the registry key. It will throw a
     # WindowsError if the key doesn't exist.
-    registry_view = _winreg.KEY_WOW64_32KEY
-    if 'wow_key' in expectation:
-      registry_view = _RegistryViewConstant(expectation['wow_key'])
-    elif variable_expander.Expand('$MINI_INSTALLER_BITNESS') == '64':
-      registry_view = _winreg.KEY_WOW64_64KEY
-
     key_handle = _winreg.OpenKey(
         _RootKeyConstant(root_key), sub_key, 0,
-        (win32con.DELETE | _winreg.KEY_ENUMERATE_SUB_KEYS
-         | _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | registry_view))
+        (_winreg.KEY_SET_VALUE | registry_view))
   except WindowsError:
     # There is nothing to clean if the key doesn't exist.
     return
 
   if expectation['exists'] == 'forbidden':
-    win32api.RegDeleteTree(key_handle, None)
+    # RegDeleteTree must be called with a handle on some parent of the key to be
+    # deleted in order for it to remove the key itself and not only its values
+    # and subkeys. Open the root of the hive with the proper permissions, then
+    # delete the key by name.
+    key_handle = None
+    root_handle = _winreg.OpenKey(
+        _RootKeyConstant(root_key), None, 0,
+        (win32con.DELETE | _winreg.KEY_ENUMERATE_SUB_KEYS
+         | _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | registry_view))
+    win32api.RegDeleteTree(root_handle, sub_key)
     logging.info('CleanRegistryEntry deleted key %s' % key)
     return
 
diff --git a/chrome/test/mini_installer/test_installer.py b/chrome/test/mini_installer/test_installer.py
index cce87d0..c4a3ad9f 100644
--- a/chrome/test/mini_installer/test_installer.py
+++ b/chrome/test/mini_installer/test_installer.py
@@ -282,6 +282,7 @@
                  ('$CHROME_LONG_NAME_DEV', '--system-level'),
                  ('$CHROME_LONG_NAME_SXS', '')])
 
+  # Attempt to run each installed product's uninstaller.
   interactive_option = '--interactive' if not force_clean else ''
   for product_name, product_switch in data:
     command = ('python uninstall_chrome.py '
@@ -294,8 +295,11 @@
       message = traceback.format_exception(*sys.exc_info())
       message.insert(0, 'Error cleaning up an old install with:\n')
       logging.info(''.join(message))
-    if force_clean:
-      property_walker.Clean(clean_state, variable_expander)
+
+  # Once everything is uninstalled, make a pass to delete any stray tidbits on
+  # the machine.
+  if force_clean:
+    property_walker.Clean(clean_state, variable_expander)
 
 
 def MergePropertyDictionaries(current_property, new_property):
diff --git a/chromecast/media/audio/BUILD.gn b/chromecast/media/audio/BUILD.gn
index a2d9f77..dec00f8 100644
--- a/chromecast/media/audio/BUILD.gn
+++ b/chromecast/media/audio/BUILD.gn
@@ -29,6 +29,20 @@
     "audio_fader.cc",
     "audio_fader.h",
     "audio_provider.h",
+    "cast_audio_bus.cc",
+    "cast_audio_bus.h",
+  ]
+
+  deps = [ "//base" ]
+
+  # Use fastest possible float math.
+  configs -= [ "//build/config/compiler:default_optimization" ]
+  configs += [ "//build/config/compiler:optimize_speed" ]
+  cflags = [ "-ffast-math" ]
+}
+
+cast_source_set("interleaved_channel_mixer") {
+  sources = [
     "interleaved_channel_mixer.cc",
     "interleaved_channel_mixer.h",
   ]
@@ -37,11 +51,6 @@
     "//base",
     "//media",
   ]
-
-  # Use fastest possible float math.
-  configs -= [ "//build/config/compiler:default_optimization" ]
-  configs += [ "//build/config/compiler:optimize_speed" ]
-  cflags = [ "-ffast-math" ]
 }
 
 cast_source_set("audio") {
@@ -164,6 +173,7 @@
   ]
 
   deps = [
+    ":interleaved_channel_mixer",
     ":processing",
     "//base",
     "//media",
diff --git a/chromecast/media/audio/audio_clock_simulator.cc b/chromecast/media/audio/audio_clock_simulator.cc
index b6e5dd1f..7c8d9a7 100644
--- a/chromecast/media/audio/audio_clock_simulator.cc
+++ b/chromecast/media/audio/audio_clock_simulator.cc
@@ -8,7 +8,6 @@
 #include <cmath>
 
 #include "base/logging.h"
-#include "media/base/audio_bus.h"
 
 namespace chromecast {
 namespace media {
@@ -23,7 +22,7 @@
       sample_rate_(provider_->sample_rate()),
       num_channels_(provider_->num_channels()),
       scratch_buffer_(
-          ::media::AudioBus::Create(num_channels_, kInterpolateWindow + 1)) {
+          CastAudioBus::Create(num_channels_, kInterpolateWindow + 1)) {
   DCHECK(provider_);
   DCHECK_GT(sample_rate_, 0);
   DCHECK_GT(num_channels_, 0u);
diff --git a/chromecast/media/audio/audio_clock_simulator.h b/chromecast/media/audio/audio_clock_simulator.h
index 875a0f6..348f8998 100644
--- a/chromecast/media/audio/audio_clock_simulator.h
+++ b/chromecast/media/audio/audio_clock_simulator.h
@@ -10,10 +10,7 @@
 #include <memory>
 
 #include "chromecast/media/audio/audio_provider.h"
-
-namespace media {
-class AudioBus;
-}  // namespace media
+#include "chromecast/media/audio/cast_audio_bus.h"
 
 namespace chromecast {
 namespace media {
@@ -122,7 +119,7 @@
   //     to interpolation.
   // The |first_frame_filled_| member var tracks whether or not the first frame
   // of the |scratch_buffer_| contains valid audio.
-  std::unique_ptr<::media::AudioBus> scratch_buffer_;
+  std::unique_ptr<CastAudioBus> scratch_buffer_;
 };
 
 }  // namespace media
diff --git a/chromecast/media/audio/audio_fader.cc b/chromecast/media/audio/audio_fader.cc
index 4bd2369..d5123e2a 100644
--- a/chromecast/media/audio/audio_fader.cc
+++ b/chromecast/media/audio/audio_fader.cc
@@ -8,7 +8,6 @@
 
 #include "base/bits.h"
 #include "base/logging.h"
-#include "media/base/audio_bus.h"
 
 namespace chromecast {
 namespace media {
@@ -42,7 +41,7 @@
   DCHECK_LE(num_channels_, kMaxChannels);
   DCHECK_GT(sample_rate_, 0);
 
-  fade_buffer_ = ::media::AudioBus::Create(num_channels_, fade_frames_);
+  fade_buffer_ = CastAudioBus::Create(num_channels_, fade_frames_);
   fade_buffer_->Zero();
 }
 
diff --git a/chromecast/media/audio/audio_fader.h b/chromecast/media/audio/audio_fader.h
index dabc1dab..12dbca4a 100644
--- a/chromecast/media/audio/audio_fader.h
+++ b/chromecast/media/audio/audio_fader.h
@@ -11,10 +11,7 @@
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "chromecast/media/audio/audio_provider.h"
-
-namespace media {
-class AudioBus;
-}  // namespace media
+#include "chromecast/media/audio/cast_audio_bus.h"
 
 namespace chromecast {
 namespace media {
@@ -87,7 +84,7 @@
   const double playback_rate_;
 
   State state_ = State::kSilent;
-  std::unique_ptr<::media::AudioBus> fade_buffer_;
+  std::unique_ptr<CastAudioBus> fade_buffer_;
   int buffered_frames_ = 0;
   int fade_frames_remaining_ = 0;
 
diff --git a/chromecast/media/audio/cast_audio_bus.cc b/chromecast/media/audio/cast_audio_bus.cc
new file mode 100644
index 0000000..a260675
--- /dev/null
+++ b/chromecast/media/audio/cast_audio_bus.cc
@@ -0,0 +1,33 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromecast/media/audio/cast_audio_bus.h"
+
+#include <cstring>
+
+#include "base/memory/ptr_util.h"
+
+namespace chromecast {
+namespace media {
+
+CastAudioBus::CastAudioBus(int channels, int frames) : frames_(frames) {
+  data_.reset(new float[channels * frames]);
+  channel_data_.reserve(channels);
+  for (int i = 0; i < channels; ++i)
+    channel_data_.push_back(data_.get() + i * frames);
+}
+
+CastAudioBus::~CastAudioBus() = default;
+
+// static
+std::unique_ptr<CastAudioBus> CastAudioBus::Create(int channels, int frames) {
+  return base::WrapUnique(new CastAudioBus(channels, frames));
+}
+
+void CastAudioBus::Zero() {
+  std::fill_n(data_.get(), frames() * channels(), 0);
+}
+
+}  // namespace media
+}  // namespace chromecast
diff --git a/chromecast/media/audio/cast_audio_bus.h b/chromecast/media/audio/cast_audio_bus.h
new file mode 100644
index 0000000..27a380b
--- /dev/null
+++ b/chromecast/media/audio/cast_audio_bus.h
@@ -0,0 +1,50 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMECAST_MEDIA_AUDIO_CAST_AUDIO_BUS_H_
+#define CHROMECAST_MEDIA_AUDIO_CAST_AUDIO_BUS_H_
+
+#include <memory>
+#include <vector>
+
+namespace chromecast {
+namespace media {
+
+// This class is a simplified version of ::media::AudioBus without any
+// dependency on //media.
+class CastAudioBus {
+ public:
+  // Creates a new CastAudioBus and allocates |channels| of length |frames|.
+  static std::unique_ptr<CastAudioBus> Create(int channels, int frames);
+
+  // Returns a raw pointer to the requested channel.
+  float* channel(int channel) { return channel_data_[channel]; }
+  const float* channel(int channel) const { return channel_data_[channel]; }
+
+  // Returns the number of channels.
+  int channels() const { return static_cast<int>(channel_data_.size()); }
+  // Returns the number of frames.
+  int frames() const { return frames_; }
+
+  // Helper method for zeroing out all channels of audio data.
+  void Zero();
+
+  ~CastAudioBus();
+
+ private:
+  CastAudioBus(int channels, int frames);
+
+  // Contiguous block of channel memory.
+  std::unique_ptr<float[]> data_;
+
+  // One float pointer per channel pointing to a contiguous block of memory for
+  // that channel.
+  std::vector<float*> channel_data_;
+  int frames_;
+};
+
+}  // namespace media
+}  // namespace chromecast
+
+#endif  // CHROMECAST_MEDIA_AUDIO_CAST_AUDIO_BUS_H_
diff --git a/chromecast/media/cma/backend/mixer/BUILD.gn b/chromecast/media/cma/backend/mixer/BUILD.gn
index 02c3ed7e..c3870f8 100644
--- a/chromecast/media/cma/backend/mixer/BUILD.gn
+++ b/chromecast/media/cma/backend/mixer/BUILD.gn
@@ -72,6 +72,7 @@
     "//chromecast/base:chromecast_switches",
     "//chromecast/base:thread_health_checker",
     "//chromecast/media/audio:audio_io_thread",
+    "//chromecast/media/audio:interleaved_channel_mixer",
     "//chromecast/media/audio:libcast_external_audio_pipeline_1.0",
     "//chromecast/media/audio:processing",
     "//chromecast/media/audio/mixer_service:common",
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 7540c1f..910e60b0 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -330,7 +330,7 @@
 // For example, the user could choose to sync OS settings but not browser
 // settings.
 const base::Feature kSplitSettingsSync{"SplitSettingsSync",
-                                       base::FEATURE_DISABLED_BY_DEFAULT};
+                                       base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Introduces a new OOBE dialog for the OS sync feature. Uses the same browser
 // sync consent dialog as Windows/Mac/Linux. Allows the user to fully opt-out of
diff --git a/components/autofill_assistant/browser/controller.cc b/components/autofill_assistant/browser/controller.cc
index 3e29dc604..9433a15 100644
--- a/components/autofill_assistant/browser/controller.cc
+++ b/components/autofill_assistant/browser/controller.cc
@@ -315,16 +315,12 @@
   }
 }
 
-void Controller::AddListener(ScriptExecutorDelegate::Listener* listener) {
-  auto found = std::find(listeners_.begin(), listeners_.end(), listener);
-  if (found == listeners_.end())
-    listeners_.emplace_back(listener);
+void Controller::AddListener(NavigationListener* listener) {
+  navigation_listeners_.AddObserver(listener);
 }
 
-void Controller::RemoveListener(ScriptExecutorDelegate::Listener* listener) {
-  auto found = std::find(listeners_.begin(), listeners_.end(), listener);
-  if (found != listeners_.end())
-    listeners_.erase(found);
+void Controller::RemoveListener(NavigationListener* listener) {
+  navigation_listeners_.RemoveObserver(listener);
 }
 
 void Controller::SetExpandSheetForPromptAction(bool expand) {
@@ -575,9 +571,8 @@
 }
 
 void Controller::ReportNavigationStateChanged() {
-  // Listeners are called in the same order they were added.
-  for (auto* listener : listeners_) {
-    listener->OnNavigationStateChanged();
+  for (auto& listener : navigation_listeners_) {
+    listener.OnNavigationStateChanged();
   }
 }
 
diff --git a/components/autofill_assistant/browser/controller.h b/components/autofill_assistant/browser/controller.h
index 9b2db098..3080ab72 100644
--- a/components/autofill_assistant/browser/controller.h
+++ b/components/autofill_assistant/browser/controller.h
@@ -142,8 +142,8 @@
   // states where showing the UI is optional, such as RUNNING, in tracking mode.
   void RequireUI() override;
 
-  void AddListener(ScriptExecutorDelegate::Listener* listener) override;
-  void RemoveListener(ScriptExecutorDelegate::Listener* listener) override;
+  void AddListener(NavigationListener* listener) override;
+  void RemoveListener(NavigationListener* listener) override;
 
   void SetExpandSheetForPromptAction(bool expand) override;
 
@@ -406,7 +406,7 @@
 
   // Value for ScriptExecutorDelegate::HasNavigationError()
   bool navigation_error_ = false;
-  std::vector<ScriptExecutorDelegate::Listener*> listeners_;
+  base::ObserverList<NavigationListener> navigation_listeners_;
 
   // Tracks scripts and script execution. It's kept at the end, as it tend to
   // depend on everything the controller support, through script and script
diff --git a/components/autofill_assistant/browser/controller_unittest.cc b/components/autofill_assistant/browser/controller_unittest.cc
index 0edce12..a7969fa 100644
--- a/components/autofill_assistant/browser/controller_unittest.cc
+++ b/components/autofill_assistant/browser/controller_unittest.cc
@@ -246,11 +246,12 @@
 
 // A Listener that keeps track of the reported state of the delegate captured
 // from OnNavigationStateChanged.
-class NavigationStateChangeListener : public ScriptExecutorDelegate::Listener {
+class NavigationStateChangeListener
+    : public ScriptExecutorDelegate::NavigationListener {
  public:
   explicit NavigationStateChangeListener(ScriptExecutorDelegate* delegate)
       : delegate_(delegate) {}
-  ~NavigationStateChangeListener() = default;
+  ~NavigationStateChangeListener() override;
   void OnNavigationStateChanged() override;
 
   std::vector<NavigationState> events;
@@ -259,6 +260,8 @@
   ScriptExecutorDelegate* const delegate_;
 };
 
+NavigationStateChangeListener::~NavigationStateChangeListener() {}
+
 void NavigationStateChangeListener::OnNavigationStateChanged() {
   NavigationState state;
   state.navigating = delegate_->IsNavigatingToNewDocument();
diff --git a/components/autofill_assistant/browser/fake_script_executor_delegate.cc b/components/autofill_assistant/browser/fake_script_executor_delegate.cc
index e39bcf16..b16dd3e 100644
--- a/components/autofill_assistant/browser/fake_script_executor_delegate.cc
+++ b/components/autofill_assistant/browser/fake_script_executor_delegate.cc
@@ -161,11 +161,11 @@
   require_ui_ = true;
 }
 
-void FakeScriptExecutorDelegate::AddListener(Listener* listener) {
+void FakeScriptExecutorDelegate::AddListener(NavigationListener* listener) {
   listeners_.insert(listener);
 }
 
-void FakeScriptExecutorDelegate::RemoveListener(Listener* listener) {
+void FakeScriptExecutorDelegate::RemoveListener(NavigationListener* listener) {
   listeners_.erase(listener);
 }
 
diff --git a/components/autofill_assistant/browser/fake_script_executor_delegate.h b/components/autofill_assistant/browser/fake_script_executor_delegate.h
index efdf4d8..58b149b2 100644
--- a/components/autofill_assistant/browser/fake_script_executor_delegate.h
+++ b/components/autofill_assistant/browser/fake_script_executor_delegate.h
@@ -66,8 +66,8 @@
   bool HasNavigationError() override;
   bool IsNavigatingToNewDocument() override;
   void RequireUI() override;
-  void AddListener(Listener* listener) override;
-  void RemoveListener(Listener* listener) override;
+  void AddListener(NavigationListener* listener) override;
+  void RemoveListener(NavigationListener* listener) override;
   void SetExpandSheetForPromptAction(bool expand) override;
   void SetGenericUi(
       std::unique_ptr<GenericUserInterfaceProto> generic_ui,
@@ -136,7 +136,7 @@
   std::unique_ptr<UserData> payment_request_info_;
   bool navigating_to_new_document_ = false;
   bool navigation_error_ = false;
-  std::set<ScriptExecutorDelegate::Listener*> listeners_;
+  std::set<ScriptExecutorDelegate::NavigationListener*> listeners_;
   ViewportMode viewport_mode_ = ViewportMode::NO_RESIZE;
   ConfigureBottomSheetProto::PeekMode peek_mode_ =
       ConfigureBottomSheetProto::HANDLE;
diff --git a/components/autofill_assistant/browser/script_executor.h b/components/autofill_assistant/browser/script_executor.h
index a9ec8c1..06fb81e 100644
--- a/components/autofill_assistant/browser/script_executor.h
+++ b/components/autofill_assistant/browser/script_executor.h
@@ -32,7 +32,7 @@
 
 // Class to execute an assistant script.
 class ScriptExecutor : public ActionDelegate,
-                       public ScriptExecutorDelegate::Listener {
+                       public ScriptExecutorDelegate::NavigationListener {
  public:
   // Listens to events on ScriptExecutor.
   // TODO(b/806868): Make global_payload a part of callback instead of the
@@ -237,7 +237,7 @@
   // Helper for WaitForElementVisible that keeps track of the state required to
   // run interrupts while waiting for a specific element.
   class WaitForDomOperation : public ScriptExecutor::Listener,
-                              ScriptExecutorDelegate::Listener {
+                              ScriptExecutorDelegate::NavigationListener {
    public:
     // Let the caller know about either the result of looking for the element or
     // of an abnormal result from an interrupt.
@@ -267,7 +267,7 @@
     void Pause();
     void Continue();
 
-    // Implements ScriptExecutorDelegate::Listener
+    // Implements ScriptExecutorDelegate::NavigationListener
     void OnNavigationStateChanged() override;
 
     // Implements ScriptExecutor::Listener
diff --git a/components/autofill_assistant/browser/script_executor_delegate.h b/components/autofill_assistant/browser/script_executor_delegate.h
index 23a8af93..6bb0905 100644
--- a/components/autofill_assistant/browser/script_executor_delegate.h
+++ b/components/autofill_assistant/browser/script_executor_delegate.h
@@ -10,6 +10,7 @@
 #include <string>
 #include <vector>
 
+#include "base/observer_list_types.h"
 #include "components/autofill_assistant/browser/client_status.h"
 #include "components/autofill_assistant/browser/details.h"
 #include "components/autofill_assistant/browser/info_box.h"
@@ -39,7 +40,7 @@
 
 class ScriptExecutorDelegate {
  public:
-  class Listener {
+  class NavigationListener : public base::CheckedObserver {
    public:
     // The values returned by IsNavigatingToNewDocument() or
     // HasNavigationError() might have changed.
@@ -128,11 +129,11 @@
 
   // Register a listener that can be told about changes. Duplicate calls are
   // ignored.
-  virtual void AddListener(Listener* listener) = 0;
+  virtual void AddListener(NavigationListener* listener) = 0;
 
   // Removes a previously registered listener. Does nothing if no such listeners
   // exists.
-  virtual void RemoveListener(Listener* listener) = 0;
+  virtual void RemoveListener(NavigationListener* listener) = 0;
 
   // Set how the sheet should behave when entering a prompt state.
   virtual void SetExpandSheetForPromptAction(bool expand) = 0;
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
index 791e34d..7cf8cd26b 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
@@ -8,7 +8,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 /**
  * Provides an API for querying the status of Site Settings features.
@@ -34,31 +33,12 @@
     public static boolean isEnabled(String featureName) {
         Boolean testValue = FeatureList.getTestValueForFeature(featureName);
         if (testValue != null) return testValue;
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return SiteSettingsFeatureListJni.get().isEnabled(featureName);
     }
 
-    /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (FeatureList.hasTestFeatures()) return true;
-
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return SiteSettingsFeatureListJni.get().isInitialized();
-    }
-
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
     }
 }
diff --git a/components/browser_ui/site_settings/android/site_settings_feature_list.cc b/components/browser_ui/site_settings/android/site_settings_feature_list.cc
index f1b262d..ce85744 100644
--- a/components/browser_ui/site_settings/android/site_settings_feature_list.cc
+++ b/components/browser_ui/site_settings/android/site_settings_feature_list.cc
@@ -36,10 +36,6 @@
 
 }  // namespace
 
-static jboolean JNI_SiteSettingsFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_SiteSettingsFeatureList_IsEnabled(
     JNIEnv* env,
     const JavaParamRef<jstring>& jfeature_name) {
diff --git a/components/content_settings/android/content_settings_feature_list.cc b/components/content_settings/android/content_settings_feature_list.cc
index 60233777..5e9091b 100644
--- a/components/content_settings/android/content_settings_feature_list.cc
+++ b/components/content_settings/android/content_settings_feature_list.cc
@@ -36,10 +36,6 @@
 
 }  // namespace
 
-static jboolean JNI_ContentSettingsFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_ContentSettingsFeatureList_IsEnabled(
     JNIEnv* env,
     const JavaParamRef<jstring>& jfeature_name) {
diff --git a/components/content_settings/android/java/src/org/chromium/components/content_settings/ContentSettingsFeatureList.java b/components/content_settings/android/java/src/org/chromium/components/content_settings/ContentSettingsFeatureList.java
index 222f81ce..9f30af13 100644
--- a/components/content_settings/android/java/src/org/chromium/components/content_settings/ContentSettingsFeatureList.java
+++ b/components/content_settings/android/java/src/org/chromium/components/content_settings/ContentSettingsFeatureList.java
@@ -8,7 +8,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 /**
  * Provides an API for querying the status of Content Settings features.
@@ -24,12 +23,14 @@
     private ContentSettingsFeatureList() {}
 
     /**
+     * @deprecated Use {@link FeatureList#isInitialized()} instead
      * @return Whether the native FeatureList has been initialized. If this method returns false,
      *         none of the methods in this class that require native access should be called.
      */
+    // TODO(crbug.com/1060097): Migrate callers to the FeatureList equivalent function.
+    @Deprecated
     public static boolean isInitialized() {
-        if (FeatureList.hasTestFeatures()) return true;
-        return isNativeInitialized();
+        return FeatureList.isInitialized();
     }
 
     /**
@@ -45,31 +46,12 @@
     public static boolean isEnabled(String featureName) {
         Boolean testValue = FeatureList.getTestValueForFeature(featureName);
         if (testValue != null) return testValue;
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return ContentSettingsFeatureListJni.get().isEnabled(featureName);
     }
 
-    /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (FeatureList.hasTestFeatures()) return true;
-
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return ContentSettingsFeatureListJni.get().isInitialized();
-    }
-
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
     }
 }
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 1f9bee56..ab936761 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -667,6 +667,7 @@
   "*/multidex/*.class",
   "*/process_launcher/*.class",
   "*/SysUtils*.class",
+  "org/chromium/base/FeatureList*.class",
   "org/chromium/base/memory/MemoryPressureMonitor*.class",
 ]
 
diff --git a/components/exo/client_controlled_shell_surface.cc b/components/exo/client_controlled_shell_surface.cc
index 5c6bc88..77519a38 100644
--- a/components/exo/client_controlled_shell_surface.cc
+++ b/components/exo/client_controlled_shell_surface.cc
@@ -985,6 +985,8 @@
   accelerator_target_ =
       std::make_unique<ClientControlledAcceleratorTarget>(this);
 
+  // These shortcuts are same as ones used in chrome.
+  // TODO: investigate if we need to reassign.
   for (const auto& entry : kAccelerators) {
     focus_manager->RegisterAccelerator(
         ui::Accelerator(entry.keycode, entry.modifiers),
diff --git a/components/external_intents/android/external_intents_feature_list.cc b/components/external_intents/android/external_intents_feature_list.cc
index e442aca..71d82a4 100644
--- a/components/external_intents/android/external_intents_feature_list.cc
+++ b/components/external_intents/android/external_intents_feature_list.cc
@@ -38,10 +38,6 @@
     "IntentBlockExternalFormRedirectsNoGesture",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
-static jboolean JNI_ExternalIntentsFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_ExternalIntentsFeatureList_IsEnabled(
     JNIEnv* env,
     const base::android::JavaParamRef<jstring>& jfeature_name) {
diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatureList.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatureList.java
index 96cf47df..f4fbcba 100644
--- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatureList.java
+++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatureList.java
@@ -4,10 +4,10 @@
 
 package org.chromium.components.external_intents;
 
+import org.chromium.base.FeatureList;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 /**
  * Java accessor for base/feature_list.h state.
@@ -23,22 +23,6 @@
     private ExternalIntentsFeatureList() {}
 
     /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return ExternalIntentsFeatureListJni.get().isInitialized();
-    }
-
-    /**
      * Returns whether the specified feature is enabled or not.
      *
      * Note: Features queried through this API must be added to the array
@@ -54,7 +38,7 @@
      * @return Whether the feature is enabled or not.
      */
     public static boolean isEnabled(String featureName) {
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return ExternalIntentsFeatureListJni.get().isEnabled(featureName);
     }
 
@@ -64,7 +48,6 @@
 
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
     }
 }
diff --git a/components/image_fetcher/core/image_fetcher.h b/components/image_fetcher/core/image_fetcher.h
index 0844c4c..8e7be1f3 100644
--- a/components/image_fetcher/core/image_fetcher.h
+++ b/components/image_fetcher/core/image_fetcher.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/optional.h"
+#include "base/time/time.h"
 #include "components/image_fetcher/core/image_fetcher_types.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "ui/gfx/geometry/size.h"
@@ -88,6 +89,15 @@
     skip_disk_cache_read_ = skip_disk_cache_read;
   }
 
+  const base::Optional<base::TimeDelta>& expiration_interval() const {
+    return expiration_interval_;
+  }
+
+  void set_hold_for_expiration_interval(
+      const base::TimeDelta& expiration_interval) {
+    expiration_interval_ = expiration_interval;
+  }
+
  private:
   void set_skip_transcoding(bool skip_transcoding) {
     skip_transcoding_ = skip_transcoding;
@@ -100,6 +110,10 @@
   const net::NetworkTrafficAnnotationTag network_traffic_annotation_tag_;
 
   base::Optional<int64_t> max_download_bytes_;
+  // Only used in rare cases to keep the cache file on disk for certain period
+  // of time. Image files will stay in cache at least for |expiration_interval_|
+  // after last use.
+  base::Optional<base::TimeDelta> expiration_interval_;
   gfx::Size desired_frame_size_;
   std::string uma_client_name_;
   // When true, the image fetcher will skip transcoding whenever possible. Only
diff --git a/components/omnibox/browser/omnibox_popup_model.h b/components/omnibox/browser/omnibox_popup_model.h
index 82bd47f5..61e669c 100644
--- a/components/omnibox/browser/omnibox_popup_model.h
+++ b/components/omnibox/browser/omnibox_popup_model.h
@@ -233,10 +233,10 @@
   // Returns new selection.
   Selection ClearSelectionState();
 
- private:
   // Returns true if the |selection| is available according to result matches.
   bool IsSelectionAvailable(Selection selection) const;
 
+ private:
   // Returns the next line state that can be applied for given |from| selection,
   // with |direction| indicating the direction of step. May return NO_STATE.
   LineState GetNextAvailableLineState(Selection from,
diff --git a/components/optimization_guide/optimization_guide_features.cc b/components/optimization_guide/optimization_guide_features.cc
index a27d21e..81656ab 100644
--- a/components/optimization_guide/optimization_guide_features.cc
+++ b/components/optimization_guide/optimization_guide_features.cc
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/field_trial_params.h"
+#include "base/strings/string_split.h"
 #include "build/build_config.h"
 #include "components/optimization_guide/optimization_guide_constants.h"
 #include "components/optimization_guide/optimization_guide_switches.h"
@@ -255,5 +256,17 @@
                                           "fetch_random_max_delay_secs", 180);
 }
 
+base::flat_set<std::string> ExternalAppPackageNamesApprovedForFetch() {
+  std::string value = base::GetFieldTrialParamValueByFeature(
+      kRemoteOptimizationGuideFetching, "approved_external_app_packages");
+  if (value.empty())
+    return {};
+
+  std::vector<std::string> app_packages_list = base::SplitString(
+      value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+  return base::flat_set<std::string>(app_packages_list.begin(),
+                                     app_packages_list.end());
+}
+
 }  // namespace features
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/optimization_guide_features.h b/components/optimization_guide/optimization_guide_features.h
index 6dd16c4..eefb59b 100644
--- a/components/optimization_guide/optimization_guide_features.h
+++ b/components/optimization_guide/optimization_guide_features.h
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 
+#include "base/containers/flat_set.h"
 #include "base/feature_list.h"
 #include "base/optional.h"
 #include "base/time/time.h"
@@ -137,6 +138,10 @@
 // fetch for prediction models and host model features.
 int PredictionModelFetchRandomMaxDelaySecs();
 
+// Returns a set of external Android app packages whose predictions have been
+// approved for fetching from the remote Optimization Guide Service.
+base::flat_set<std::string> ExternalAppPackageNamesApprovedForFetch();
+
 }  // namespace features
 }  // namespace optimization_guide
 
diff --git a/components/page_info/android/BUILD.gn b/components/page_info/android/BUILD.gn
index dfbb1ae..a27e73e 100644
--- a/components/page_info/android/BUILD.gn
+++ b/components/page_info/android/BUILD.gn
@@ -8,11 +8,17 @@
   sources = [
     "certificate_chain_helper.cc",
     "certificate_viewer_android.cc",
+    "connection_info_popup_android.cc",
+    "connection_info_popup_android.h",
     "cookie_controls_status.h",
+    "page_info_client.cc",
+    "page_info_client.h",
   ]
   deps = [
     "//base",
+    "//components/page_info",
     "//components/page_info/android:jni_headers",
+    "//components/security_state/core:core",
     "//components/strings:components_strings_grit",
     "//content/public/browser:browser",
     "//net:net",
@@ -42,6 +48,7 @@
     "java/res/drawable-xxxhdpi/pageinfo_bad.png",
     "java/res/drawable-xxxhdpi/pageinfo_good.png",
     "java/res/drawable-xxxhdpi/pageinfo_warning.png",
+    "java/res/layout/connection_info.xml",
     "java/res/layout/cookie_controls_view.xml",
     "java/res/layout/page_info.xml",
     "java/res/layout/page_info_permission_row.xml",
@@ -59,10 +66,12 @@
   sources = [
     "java/src/org/chromium/components/page_info/CertificateChainHelper.java",
     "java/src/org/chromium/components/page_info/CertificateViewer.java",
+    "java/src/org/chromium/components/page_info/ConnectionInfoPopup.java",
     "java/src/org/chromium/components/page_info/CookieControlsView.java",
     "java/src/org/chromium/components/page_info/PageInfoDialog.java",
     "java/src/org/chromium/components/page_info/PageInfoView.java",
     "java/src/org/chromium/components/page_info/SystemSettingsActivityRequiredListener.java",
+    "java/src/org/chromium/components/page_info/VrHandler.java",
   ]
 
   deps = [
@@ -83,5 +92,6 @@
   sources = [
     "java/src/org/chromium/components/page_info/CertificateChainHelper.java",
     "java/src/org/chromium/components/page_info/CertificateViewer.java",
+    "java/src/org/chromium/components/page_info/ConnectionInfoPopup.java",
   ]
 }
diff --git a/chrome/browser/ui/android/page_info/connection_info_popup_android.cc b/components/page_info/android/connection_info_popup_android.cc
similarity index 87%
rename from chrome/browser/ui/android/page_info/connection_info_popup_android.cc
rename to components/page_info/android/connection_info_popup_android.cc
index 4d469796..afca5fa 100644
--- a/chrome/browser/ui/android/page_info/connection_info_popup_android.cc
+++ b/components/page_info/android/connection_info_popup_android.cc
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/android/page_info/connection_info_popup_android.h"
+#include "components/page_info/android/connection_info_popup_android.h"
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "chrome/android/chrome_jni_headers/ConnectionInfoPopup_jni.h"
-#include "chrome/browser/android/resource_mapper.h"
-#include "chrome/browser/infobars/infobar_service.h"
-#include "chrome/browser/ui/page_info/chrome_page_info_delegate.h"
+#include "components/page_info/android/jni_headers/ConnectionInfoPopup_jni.h"
+#include "components/page_info/android/page_info_client.h"
 #include "components/page_info/page_info.h"
+#include "components/page_info/page_info_delegate.h"
+#include "components/page_info/page_info_ui_delegate.h"
 #include "components/security_state/core/security_state.h"
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/browser_context.h"
@@ -23,8 +23,8 @@
 #include "ui/base/l10n/l10n_util.h"
 
 using base::android::CheckException;
-using base::android::ConvertUTF8ToJavaString;
 using base::android::ConvertUTF16ToJavaString;
+using base::android::ConvertUTF8ToJavaString;
 using base::android::GetClass;
 using base::android::JavaParamRef;
 using base::android::ScopedJavaLocalRef;
@@ -37,6 +37,7 @@
     const JavaParamRef<jobject>& java_web_contents) {
   content::WebContents* web_contents =
       content::WebContents::FromJavaWebContents(java_web_contents);
+  DCHECK(web_contents);
 
   return reinterpret_cast<intptr_t>(
       new ConnectionInfoPopupAndroid(env, obj, web_contents));
@@ -46,6 +47,9 @@
     JNIEnv* env,
     jobject java_page_info_pop,
     WebContents* web_contents) {
+  page_info_client_ = page_info::GetPageInfoClient();
+  DCHECK(page_info_client_);
+
   // Important to use GetVisibleEntry to match what's showing in the omnibox.
   content::NavigationEntry* nav_entry =
       web_contents->GetController().GetVisibleEntry();
@@ -55,13 +59,12 @@
   popup_jobject_.Reset(env, java_page_info_pop);
 
   presenter_ = std::make_unique<PageInfo>(
-      std::make_unique<ChromePageInfoDelegate>(web_contents), web_contents,
+      page_info_client_->CreatePageInfoDelegate(web_contents), web_contents,
       nav_entry->GetURL());
   presenter_->InitializeUiState(this);
 }
 
-ConnectionInfoPopupAndroid::~ConnectionInfoPopupAndroid() {
-}
+ConnectionInfoPopupAndroid::~ConnectionInfoPopupAndroid() {}
 
 void ConnectionInfoPopupAndroid::Destroy(JNIEnv* env,
                                          const JavaParamRef<jobject>& obj) {
@@ -80,7 +83,7 @@
   JNIEnv* env = base::android::AttachCurrentThread();
 
   {
-    int icon_id = ResourceMapper::MapToJavaDrawableId(
+    int icon_id = page_info_client_->GetJavaResourceId(
         PageInfoUI::GetIdentityIconID(identity_info.identity_status));
 
     // The headline and the certificate dialog link of the site's identity
@@ -119,7 +122,7 @@
   }
 
   {
-    int icon_id = ResourceMapper::MapToJavaDrawableId(
+    int icon_id = page_info_client_->GetJavaResourceId(
         PageInfoUI::GetConnectionIconID(identity_info.connection_status));
 
     ScopedJavaLocalRef<jstring> description = ConvertUTF8ToJavaString(
diff --git a/chrome/browser/ui/android/page_info/connection_info_popup_android.h b/components/page_info/android/connection_info_popup_android.h
similarity index 83%
rename from chrome/browser/ui/android/page_info/connection_info_popup_android.h
rename to components/page_info/android/connection_info_popup_android.h
index 6a2c206..742dfb7 100644
--- a/chrome/browser/ui/android/page_info/connection_info_popup_android.h
+++ b/components/page_info/android/connection_info_popup_android.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_ANDROID_PAGE_INFO_CONNECTION_INFO_POPUP_ANDROID_H_
-#define CHROME_BROWSER_UI_ANDROID_PAGE_INFO_CONNECTION_INFO_POPUP_ANDROID_H_
+#ifndef COMPONENTS_PAGE_INFO_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_
+#define COMPONENTS_PAGE_INFO_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_
 
 #include <jni.h>
 
@@ -17,6 +17,10 @@
 class WebContents;
 }
 
+namespace page_info {
+class PageInfoClient;
+}
+
 // Android implementation of the page info UI which displays detailed
 // connection and certificate information for the website.
 class ConnectionInfoPopupAndroid : public PageInfoUI {
@@ -45,10 +49,13 @@
   // The presenter that controls the Page Info UI.
   std::unique_ptr<PageInfo> presenter_;
 
+  // PageInfoClient outlives this class.
+  page_info::PageInfoClient* page_info_client_;
+
   // The java prompt implementation.
   base::android::ScopedJavaGlobalRef<jobject> popup_jobject_;
 
   DISALLOW_COPY_AND_ASSIGN(ConnectionInfoPopupAndroid);
 };
 
-#endif  // CHROME_BROWSER_UI_ANDROID_PAGE_INFO_CONNECTION_INFO_POPUP_ANDROID_H_
+#endif  // COMPONENTS_PAGE_INFO_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_s
diff --git a/chrome/android/java/res/layout/connection_info.xml b/components/page_info/android/java/res/layout/connection_info.xml
similarity index 100%
rename from chrome/android/java/res/layout/connection_info.xml
rename to components/page_info/android/java/res/layout/connection_info.xml
diff --git a/components/page_info/android/java/res/values/dimens.xml b/components/page_info/android/java/res/values/dimens.xml
index 3c20abf..b0b4862 100644
--- a/components/page_info/android/java/res/values/dimens.xml
+++ b/components/page_info/android/java/res/values/dimens.xml
@@ -3,5 +3,7 @@
      Use of this source code is governed by a BSD-style license that can be
      found in the LICENSE file. -->
 <resources>
+    <!-- Connection info popup dimensions -->
+    <dimen name="connection_info_padding_thin">16dp</dimen>
     <dimen name="connection_info_padding_wide">24dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java b/components/page_info/android/java/src/org/chromium/components/page_info/ConnectionInfoPopup.java
similarity index 86%
rename from chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java
rename to components/page_info/android/java/src/org/chromium/components/page_info/ConnectionInfoPopup.java
index 09c4b511..76b63e8f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/ConnectionInfoPopup.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.page_info;
+package org.chromium.components.page_info;
 
 import android.content.Context;
 import android.content.Intent;
@@ -22,12 +22,6 @@
 import org.chromium.base.Log;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ChromeActivity;
-import org.chromium.chrome.browser.vr.UiUnsupportedMode;
-import org.chromium.chrome.browser.vr.VrModuleProvider;
-import org.chromium.components.page_info.CertificateChainHelper;
-import org.chromium.components.page_info.CertificateViewer;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -61,23 +55,25 @@
     private ViewGroup mDescriptionLayout;
     private Button mResetCertDecisionsButton;
     private String mLinkUrl;
+    private VrHandler mVrHandler;
 
-    private ConnectionInfoPopup(
-            Context context, ModalDialogManager modalDialogManager, WebContents webContents) {
+    private ConnectionInfoPopup(Context context, WebContents webContents,
+            ModalDialogManager modalDialogManager, VrHandler vrHandler) {
         mContext = context;
         mModalDialogManager = modalDialogManager;
         mWebContents = webContents;
+        mVrHandler = vrHandler;
 
         mCertificateViewer = new CertificateViewer(mContext);
 
         mContainer = new LinearLayout(mContext);
         mContainer.setOrientation(LinearLayout.VERTICAL);
-        mPaddingWide = (int) context.getResources().getDimension(
-                R.dimen.connection_info_padding_wide);
-        mPaddingThin = (int) context.getResources().getDimension(
-                R.dimen.connection_info_padding_thin);
-        mContainer.setPadding(mPaddingWide, mPaddingWide, mPaddingWide,
-                mPaddingWide - mPaddingThin);
+        mPaddingWide =
+                (int) context.getResources().getDimension(R.dimen.connection_info_padding_wide);
+        mPaddingThin =
+                (int) context.getResources().getDimension(R.dimen.connection_info_padding_thin);
+        mContainer.setPadding(
+                mPaddingWide, mPaddingWide, mPaddingWide, mPaddingWide - mPaddingThin);
 
         // This needs to come after other member initialization.
         mNativeConnectionInfoPopup = ConnectionInfoPopupJni.get().init(this, mWebContents);
@@ -124,8 +120,7 @@
     }
 
     private View addSection(int iconId, String headline, String description) {
-        View section = LayoutInflater.from(mContext).inflate(R.layout.connection_info,
-                null);
+        View section = LayoutInflater.from(mContext).inflate(R.layout.connection_info, null);
         ImageView i = section.findViewById(R.id.connection_info_icon);
         i.setImageResource(iconId);
 
@@ -211,18 +206,17 @@
                 // ignore this request.
                 return;
             }
-            if (VrModuleProvider.getDelegate().isInVr()) {
-                VrModuleProvider.getDelegate().requestToExitVrAndRunOnSuccess(() -> {
+            if (mVrHandler.isInVr()) {
+                mVrHandler.exitVrAndRun(() -> {
                     mCertificateViewer.showCertificateChain(certChain);
-                }, UiUnsupportedMode.UNHANDLED_CERTIFICATE_INFO);
+                }, VrHandler.UiType.CERTIFICATE_INFO);
                 return;
             }
             mCertificateViewer.showCertificateChain(certChain);
         } else if (mMoreInfoLink == v) {
-            if (VrModuleProvider.getDelegate().isInVr()) {
-                VrModuleProvider.getDelegate().requestToExitVrAndRunOnSuccess(
-                        this ::showConnectionSecurityInfo,
-                        UiUnsupportedMode.UNHANDLED_CONNECTION_SECURITY_INFO);
+            if (mVrHandler.isInVr()) {
+                mVrHandler.exitVrAndRun(this::showConnectionSecurityInfo,
+                        VrHandler.UiType.CONNECTION_SECURITY_INFO);
                 return;
             }
             showConnectionSecurityInfo();
@@ -262,8 +256,9 @@
      * @param context Context which is used for launching a dialog.
      * @param webContents The WebContents for which to show website information
      */
-    public static void show(ChromeActivity context, WebContents webContents) {
-        new ConnectionInfoPopup(context, context.getModalDialogManager(), webContents);
+    public static void show(Context context, WebContents webContents,
+            ModalDialogManager modalDialogManager, VrHandler vrHandler) {
+        new ConnectionInfoPopup(context, webContents, modalDialogManager, vrHandler);
     }
 
     @NativeMethods
diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/VrHandler.java b/components/page_info/android/java/src/org/chromium/components/page_info/VrHandler.java
new file mode 100644
index 0000000..ca932d1
--- /dev/null
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/VrHandler.java
@@ -0,0 +1,33 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.page_info;
+
+import androidx.annotation.IntDef;
+
+/**
+ * A delegate class to handle unsupported UI in VR mode.
+ * TODO: Move to components/browser_ui if more components need this.
+ */
+public interface VrHandler {
+    @IntDef({UiType.CERTIFICATE_INFO, UiType.CONNECTION_SECURITY_INFO})
+    public @interface UiType {
+        int CERTIFICATE_INFO = 0;
+        int CONNECTION_SECURITY_INFO = 1;
+    };
+
+    /**
+     * Returns true if we're currently in VR mode, false otherwise.
+     */
+    boolean isInVr();
+
+    /**
+     * Exits VR mode and runs the runnable passed in. Must only be called when
+     * we're currently in VR mode.
+     * @param r The runnable to be run after exiting VR mode.
+     * @param uiType Used for logging the UI type that is unsupported in VR and
+     * caused us to exit VR mode.
+     */
+    void exitVrAndRun(Runnable r, @UiType int uiType);
+}
diff --git a/components/page_info/android/page_info_client.cc b/components/page_info/android/page_info_client.cc
new file mode 100644
index 0000000..1d89c32e
--- /dev/null
+++ b/components/page_info/android/page_info_client.cc
@@ -0,0 +1,30 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/page_info/android/page_info_client.h"
+
+#include "content/public/browser/web_contents.h"
+
+namespace page_info {
+
+static PageInfoClient* g_client;
+
+void SetPageInfoClient(PageInfoClient* client) {
+  g_client = client;
+}
+
+PageInfoClient* GetPageInfoClient() {
+  return g_client;
+}
+
+std::unique_ptr<PageInfoDelegate> PageInfoClient::CreatePageInfoDelegate(
+    content::WebContents* web_contents) {
+  return nullptr;
+}
+
+int PageInfoClient::GetJavaResourceId(int native_resource_id) {
+  return -1;
+}
+
+}  // namespace page_info
diff --git a/components/page_info/android/page_info_client.h b/components/page_info/android/page_info_client.h
new file mode 100644
index 0000000..288dacd5
--- /dev/null
+++ b/components/page_info/android/page_info_client.h
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_PAGE_INFO_ANDROID_PAGE_INFO_CLIENT_H_
+#define COMPONENTS_PAGE_INFO_ANDROID_PAGE_INFO_CLIENT_H_
+
+#include "components/page_info/page_info_delegate.h"
+#include "components/page_info/page_info_ui_delegate.h"
+
+#include <memory>
+
+namespace content {
+class WebContents;
+}
+
+namespace page_info {
+class PageInfoClient;
+
+// Setter and getter for the client.  The client should be set early, before any
+// PageInfo code is called.
+void SetPageInfoClient(PageInfoClient* page_info_client);
+PageInfoClient* GetPageInfoClient();
+
+class PageInfoClient {
+ public:
+  PageInfoClient() = default;
+  ~PageInfoClient() = default;
+
+  // Creates a PageInfoDelegate for |web_contents|.
+  virtual std::unique_ptr<PageInfoDelegate> CreatePageInfoDelegate(
+      content::WebContents* web_contents);
+
+  // Gets the Java resource ID corresponding to |native_resource_id|.
+  virtual int GetJavaResourceId(int native_resource_id);
+};
+
+}  // namespace page_info
+
+#endif  // COMPONENTS_PAGE_INFO_ANDROID_PAGE_INFO_CLIENT_H_
diff --git a/components/page_info/page_info_ui_delegate.h b/components/page_info/page_info_ui_delegate.h
index e5865512..f331f05 100644
--- a/components/page_info/page_info_ui_delegate.h
+++ b/components/page_info/page_info_ui_delegate.h
@@ -12,7 +12,7 @@
 
 class PageInfoUiDelegate {
  public:
-  ~PageInfoUiDelegate() = default;
+  virtual ~PageInfoUiDelegate() = default;
 #if !defined(OS_ANDROID)
   virtual bool IsBlockAutoPlayEnabled() = 0;
 #endif
diff --git a/components/paint_preview/player/android/java/src/org/chromium/components/paintpreview/player/PlayerManager.java b/components/paint_preview/player/android/java/src/org/chromium/components/paintpreview/player/PlayerManager.java
index e8b9903..8944e72d 100644
--- a/components/paint_preview/player/android/java/src/org/chromium/components/paintpreview/player/PlayerManager.java
+++ b/components/paint_preview/player/android/java/src/org/chromium/components/paintpreview/player/PlayerManager.java
@@ -37,11 +37,12 @@
     public PlayerManager(GURL url, Context context,
             NativePaintPreviewServiceProvider nativePaintPreviewServiceProvider,
             String directoryKey, @Nonnull LinkClickHandler linkClickHandler,
-            Callback<Boolean> viewReadyCallback) {
+            Callback<Boolean> viewReadyCallback, int backgroundColor) {
         mContext = context;
         mDelegate = new PlayerCompositorDelegateImpl(nativePaintPreviewServiceProvider, url,
                 directoryKey, this::onCompositorReady, linkClickHandler);
         mHostView = new FrameLayout(mContext);
+        mHostView.setBackgroundColor(backgroundColor);
         mViewReadyCallback = viewReadyCallback;
     }
 
diff --git a/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java b/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
index 32b03143..968799c 100644
--- a/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
+++ b/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
@@ -156,7 +156,7 @@
             PaintPreviewTestService service =
                     new PaintPreviewTestService(UrlUtils.getIsolatedTestFilePath(TEST_DATA_DIR));
             mPlayerManager = new PlayerManager(new GURL(TEST_URL), getActivity(), service,
-                    TEST_DIRECTORY_KEY, mLinkClickHandler, Assert::assertTrue);
+                    TEST_DIRECTORY_KEY, mLinkClickHandler, Assert::assertTrue, 0xffffffff);
             getActivity().setContentView(mPlayerManager.getView());
         });
 
diff --git a/components/paint_preview/player/android/player_compositor_delegate_android.cc b/components/paint_preview/player/android/player_compositor_delegate_android.cc
index 25886aed..5808a475 100644
--- a/components/paint_preview/player/android/player_compositor_delegate_android.cc
+++ b/components/paint_preview/player/android/player_compositor_delegate_android.cc
@@ -11,6 +11,7 @@
 #include "base/android/jni_string.h"
 #include "base/android/unguessable_token_android.h"
 #include "base/bind.h"
+#include "base/task/post_task.h"
 #include "base/unguessable_token.h"
 #include "components/paint_preview/browser/paint_preview_base_service.h"
 #include "components/paint_preview/player/android/jni_headers/PlayerCompositorDelegateImpl_jni.h"
@@ -46,6 +47,10 @@
   return ScopedJavaLocalRef<jobjectArray>(env, joa);
 }
 
+ScopedJavaGlobalRef<jobject> ConvertToJavaBitmap(const SkBitmap& sk_bitmap) {
+  return ScopedJavaGlobalRef<jobject>(gfx::ConvertToJavaBitmap(&sk_bitmap));
+}
+
 }  // namespace
 
 jlong JNI_PlayerCompositorDelegateImpl_Initialize(
@@ -182,8 +187,11 @@
     mojom::PaintPreviewCompositor::Status status,
     const SkBitmap& sk_bitmap) {
   if (status == mojom::PaintPreviewCompositor::Status::kSuccess) {
-    base::android::RunObjectCallbackAndroid(
-        j_bitmap_callback, gfx::ConvertToJavaBitmap(&sk_bitmap));
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::TaskPriority::USER_VISIBLE},
+        base::BindOnce(&ConvertToJavaBitmap, sk_bitmap),
+        base::BindOnce(&base::android::RunObjectCallbackAndroid,
+                       j_bitmap_callback));
   } else {
     base::android::RunRunnableAndroid(j_error_callback);
   }
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 0506d64..56ecba4 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -16,6 +16,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/platform_thread.h"
+#include "base/timer/timer.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_type.h"
@@ -828,8 +829,12 @@
 }
 
 void PasswordManager::OnLoginSuccessful() {
-  if (autofill_assistant_mode_ == AutofillAssistantMode::kManuallyCuratedScript)
+  if (autofill_assistant_mode_ == AutofillAssistantMode::kRunning) {
+    // Autofillassistan performs one login. Only one prompt should
+    // be suppressed.
+    SetAutofillAssistantMode(AutofillAssistantMode::kNotRunning);
     return;
+  }
 
   std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
@@ -1156,4 +1161,32 @@
   }
 }
 
+void PasswordManager::SetAutofillAssistantMode(AutofillAssistantMode mode) {
+  autofill_assistant_mode_ = mode;
+
+  if (autofill_assistant_mode_ == AutofillAssistantMode::kRunning) {
+    DCHECK(!disable_prompts_timer_.IsRunning())
+        << "Autofill Assistant tried to disable prompts twice in a row.";
+    disable_prompts_timer_.Start(FROM_HERE, GetTimeoutForDisablingPrompts(),
+                                 this,
+                                 &PasswordManager::ResetAutofillAssistantMode);
+  } else {
+    disable_prompts_timer_.Stop();
+  }
+}
+
+void PasswordManager::ResetAutofillAssistantMode() {
+  // The timeout is 0 only in the dedicated test. Otherwise, the call can happen
+  // only due to a bug.
+  DCHECK(disable_prompts_timeout_in_seconds_ == 0)
+      << "Autofill assistant failed to re-enable Password Manager's "
+         "prompts before timing out.";
+
+  autofill_assistant_mode_ = AutofillAssistantMode::kNotRunning;
+}
+
+base::TimeDelta PasswordManager::GetTimeoutForDisablingPrompts() {
+  return base::TimeDelta::FromSeconds(disable_prompts_timeout_in_seconds_);
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager.h b/components/password_manager/core/browser/password_manager.h
index 7a24709..daaf90fb 100644
--- a/components/password_manager/core/browser/password_manager.h
+++ b/components/password_manager/core/browser/password_manager.h
@@ -28,6 +28,10 @@
 
 class PrefRegistrySimple;
 
+namespace base {
+class TimeDelta;
+}
+
 namespace user_prefs {
 class PrefRegistrySyncable;
 }
@@ -47,16 +51,21 @@
 class PasswordManagerMetricsRecorder;
 struct PossibleUsernameData;
 
+// Propmpt are disabled while Autofill Assistant is running. In case there is
+// bug in Autofill Assistant logic and Autofill Assistant fails to reset
+// AutofillAssistantMode, after this timeout the timer will re-enable prompts.
+const int kDisablePromptsTimeoutInSeconds = 120;
+
 // Define the modes of collaboration between Password Manager and Autofill
 // Assistant (who handles form submissions, whether to show prompts or not).
 enum class AutofillAssistantMode {
   // Autofill Assistant is not running. Password Manager operates in the regular
   // mode - it handles submissions and shows prompts.
   kNotRunning = 0,
-  // Autofill Assistant runs a manually curated script. The password manager
+  // Autofill Assistant is running. The password manager
   // is basically off - it does not handle submissions and therefore does not
   // show prompts. The script does all the work instead.
-  kManuallyCuratedScript
+  kRunning
 };
 
 // Per-tab password manager. Handles creation and management of UI elements,
@@ -179,6 +188,10 @@
     leak_delegate_.set_leak_factory(std::move(factory));
   }
 
+  void SetDisablePromptsTimeoutToZero() {
+    disable_prompts_timeout_in_seconds_ = 0;
+  }
+
 #endif  // defined(UNIT_TEST)
 
   // Reports the success from the renderer's PasswordAutofillAgent to fill
@@ -191,10 +204,7 @@
   // Notifies that Credential Management API function store() is called.
   void NotifyStorePasswordCalled();
 
-  void set_autofill_assistance_mode(
-      AutofillAssistantMode autofill_assistant_mode) {
-    autofill_assistant_mode_ = autofill_assistant_mode;
-  }
+  void SetAutofillAssistantMode(AutofillAssistantMode mode);
 
 #if defined(OS_IOS)
   // TODO(https://crbug.com/866444): Use these methods instead olds ones when
@@ -320,6 +330,12 @@
   void ShowManualFallbackForSavingImpl(PasswordFormManager* form_manager,
                                        const autofill::FormData& form_data);
 
+  // Returns the timeout for the disabling Password Manager's prompts.
+  base::TimeDelta GetTimeoutForDisablingPrompts();
+
+  // Resets |autofill_assistant_mode_| to the default.
+  void ResetAutofillAssistantMode();
+
   // PasswordFormManager transition schemes:
   // 1. HTML submission with navigation afterwads.
   // form "seen"
@@ -376,6 +392,14 @@
   AutofillAssistantMode autofill_assistant_mode_ =
       AutofillAssistantMode::kNotRunning;
 
+  // Timeout in seconds for disabling Password Manager's prompts.
+  int disable_prompts_timeout_in_seconds_ = kDisablePromptsTimeoutInSeconds;
+
+  // When Autofill Assistant is running, it disables the password manager's
+  // prompts. This timer re-enables the prompts in case Autofill Assistant
+  // didn't do that due to an unexpected failure.
+  base::OneShotTimer disable_prompts_timer_;
+
   DISALLOW_COPY_AND_ASSIGN(PasswordManager);
 };
 
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index e2908c9..20e7e036 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -3543,8 +3543,7 @@
 }
 
 TEST_F(PasswordManagerTest, NoPromptAutofillAssistantManuallyCuratedScript) {
-  manager()->set_autofill_assistance_mode(
-      AutofillAssistantMode::kManuallyCuratedScript);
+  manager()->SetAutofillAssistantMode(AutofillAssistantMode::kRunning);
 
   PasswordForm form(MakeSimpleForm());
   EXPECT_CALL(client_, IsSavingAndFillingEnabled(form.origin))
@@ -3552,13 +3551,7 @@
   EXPECT_CALL(*store_, GetLogins)
       .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
   manager()->OnPasswordFormsParsed(&driver_, {form.form_data});
-
-  std::unique_ptr<PasswordFormManagerForUI> form_manager_to_save;
-  EXPECT_CALL(client_, ShowManualFallbackForSavingPtr(_, false, false))
-      .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save)));
   manager()->ShowManualFallbackForSaving(&driver_, form.form_data);
-  ASSERT_TRUE(form_manager_to_save);
-  EXPECT_THAT(form_manager_to_save->GetPendingCredentials(), FormMatches(form));
 
   // Check that a save prompt is not shown.
   EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr).Times(0);
@@ -3568,4 +3561,34 @@
                                      true /* did stop loading */);
 }
 
+// Tests the following scenario:
+// 1. Password Manager's prompts are disabled by Autofill Assistant because it
+// runs a script.
+// 2. The timeout for prompts disabling expires.
+// 3. The timer re-enables the prompts.
+// 4. A prompt is shown after a form submission.
+TEST_F(PasswordManagerTest, ResetAutofillAssistantModeAfterTimeout) {
+  manager()->SetDisablePromptsTimeoutToZero();
+
+  manager()->SetAutofillAssistantMode(AutofillAssistantMode::kRunning);
+
+  PasswordForm form(MakeSimpleForm());
+  EXPECT_CALL(client_, IsSavingAndFillingEnabled(form.origin))
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(*store_, GetLogins)
+      .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
+  manager()->OnPasswordFormsParsed(&driver_, {form.form_data});
+  manager()->ShowManualFallbackForSaving(&driver_, form.form_data);
+
+  // Timer should reset |autofill_assistant_mode| after timeout.
+  base::RunLoop().RunUntilIdle();
+
+  // Check that a save prompt is shown.
+  EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr);
+
+  manager()->DidNavigateMainFrame(true /* form_may_be_submitted */);
+  manager()->OnPasswordFormsRendered(&driver_, {} /* observed */,
+                                     true /* did stop loading */);
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 8abfba1..04e63e92 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -76,7 +76,7 @@
 
 // Enables support of filling and saving on username first flow.
 const base::Feature kUsernameFirstFlow = {"UsernameFirstFlow",
-                                          base::FEATURE_ENABLED_BY_DEFAULT};
+                                          base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Field trial identifier for password generation requirements.
 const char kGenerationRequirementsFieldTrial[] =
diff --git a/components/policy/core/common/policy_loader_ios.h b/components/policy/core/common/policy_loader_ios.h
index 1df6a39..c04a579 100644
--- a/components/policy/core/common/policy_loader_ios.h
+++ b/components/policy/core/common/policy_loader_ios.h
@@ -14,11 +14,14 @@
 
 namespace policy {
 
+class SchemaRegistry;
+
 // A policy loader that loads policy from the managed app configuration
 // introduced in iOS 7.
 class POLICY_EXPORT PolicyLoaderIOS : public AsyncPolicyLoader {
  public:
   explicit PolicyLoaderIOS(
+      SchemaRegistry* registry,
       scoped_refptr<base::SequencedTaskRunner> task_runner);
   ~PolicyLoaderIOS() override;
 
@@ -31,8 +34,18 @@
   void UserDefaultsChanged();
 
   // Loads the Chrome policies in |dictionary| into the given |bundle|.
-  static void LoadNSDictionaryToPolicyBundle(NSDictionary* dictionary,
-                                             PolicyBundle* bundle);
+  void LoadNSDictionaryToPolicyBundle(NSDictionary* dictionary,
+                                      PolicyBundle* bundle);
+
+  // Validates the given policy data against the stored |schema_|, converting
+  // data to the expected type if necessary.  The returned value is suitable for
+  // adding to a PolicyMap.
+  std::unique_ptr<base::Value> ConvertPolicyDataIfNecessary(
+      const std::string& key,
+      const base::Value& value);
+
+  // The schema used by |ValidatePolicyData()|.
+  const Schema* policy_schema_;
 
   // Used to manage the registration for NSNotificationCenter notifications.
   __strong id notification_observer_;
diff --git a/components/policy/core/common/policy_loader_ios.mm b/components/policy/core/common/policy_loader_ios.mm
index 105a24b..1d443f39 100644
--- a/components/policy/core/common/policy_loader_ios.mm
+++ b/components/policy/core/common/policy_loader_ios.mm
@@ -9,6 +9,7 @@
 #import <UIKit/UIKit.h>
 
 #include "base/bind.h"
+#include "base/json/json_reader.h"
 #include "base/location.h"
 #include "base/logging.h"
 #import "base/mac/foundation_util.h"
@@ -20,6 +21,8 @@
 #import "components/policy/core/common/policy_loader_ios_constants.h"
 #include "components/policy/core/common/policy_map.h"
 #include "components/policy/core/common/policy_namespace.h"
+#include "components/policy/core/common/schema.h"
+#include "components/policy/core/common/schema_registry.h"
 #include "components/policy/policy_constants.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -83,9 +86,12 @@
 namespace policy {
 
 PolicyLoaderIOS::PolicyLoaderIOS(
+    SchemaRegistry* registry,
     scoped_refptr<base::SequencedTaskRunner> task_runner)
-    : AsyncPolicyLoader(task_runner),
-      weak_factory_(this) {}
+    : AsyncPolicyLoader(task_runner), weak_factory_(this) {
+  PolicyNamespace ns(POLICY_DOMAIN_CHROME, std::string());
+  policy_schema_ = registry->schema_map()->GetSchema(ns);
+}
 
 PolicyLoaderIOS::~PolicyLoaderIOS() {
   DCHECK(task_runner()->RunsTasksInCurrentSequence());
@@ -136,7 +142,6 @@
   Reload(false);
 }
 
-// static
 void PolicyLoaderIOS::LoadNSDictionaryToPolicyBundle(NSDictionary* dictionary,
                                                      PolicyBundle* bundle) {
   // NSDictionary is toll-free bridged to CFDictionaryRef, which is a
@@ -150,9 +155,34 @@
     dict->RemoveKey(base::SysNSStringToUTF8(kPolicyLoaderIOSLoadPolicyKey));
 
     PolicyMap& map = bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, ""));
-    map.LoadFrom(dict, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
-                 POLICY_SOURCE_PLATFORM);
+    for (const auto& it : dict->DictItems()) {
+      map.Set(it.first, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
+              POLICY_SOURCE_PLATFORM,
+              ConvertPolicyDataIfNecessary(it.first, it.second), nullptr);
+    }
   }
 }
 
+std::unique_ptr<base::Value> PolicyLoaderIOS::ConvertPolicyDataIfNecessary(
+    const std::string& key,
+    const base::Value& value) {
+  const Schema schema = policy_schema_->GetKnownProperty(key);
+
+  if (!schema.valid()) {
+    return value.CreateDeepCopy();
+  }
+
+  // Handle the case of a JSON-encoded string for a dict policy.
+  if (schema.type() == base::Value::Type::DICTIONARY && value.is_string()) {
+    base::Optional<base::Value> decoded_value = base::JSONReader::Read(
+        value.GetString(), base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS);
+    if (decoded_value.has_value()) {
+      return base::Value::ToUniquePtrValue(std::move(decoded_value.value()));
+    }
+  }
+
+  // Otherwise return an unchanged value.
+  return value.CreateDeepCopy();
+}
+
 }  // namespace policy
diff --git a/components/policy/core/common/policy_loader_ios_unittest.mm b/components/policy/core/common/policy_loader_ios_unittest.mm
index aa30dff3..6b601ff1 100644
--- a/components/policy/core/common/policy_loader_ios_unittest.mm
+++ b/components/policy/core/common/policy_loader_ios_unittest.mm
@@ -10,6 +10,7 @@
 
 #include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/json/json_string_value_serializer.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/macros.h"
 #include "base/sequenced_task_runner.h"
@@ -34,21 +35,9 @@
 
 namespace {
 
-// Creates a new PolicyLoaderIOS and verifies that it does not load any
-// policies.
-void VerifyNoPoliciesAreLoaded() {
-  PolicyBundle empty;
-  scoped_refptr<base::TestSimpleTaskRunner> taskRunner =
-      new base::TestSimpleTaskRunner();
-  PolicyLoaderIOS loader(taskRunner);
-  std::unique_ptr<PolicyBundle> bundle = loader.Load();
-  ASSERT_TRUE(bundle);
-  EXPECT_TRUE(bundle->Equals(empty));
-}
-
 class TestHarness : public PolicyProviderTestHarness {
  public:
-  TestHarness();
+  TestHarness(bool encode_complex_data_as_json);
   ~TestHarness() override;
 
   void SetUp() override;
@@ -71,6 +60,7 @@
       const base::DictionaryValue* policy_value) override;
 
   static PolicyProviderTestHarness* Create();
+  static PolicyProviderTestHarness* CreateWithJSONEncoding();
 
  private:
   // Merges the policies in |policy| into the current policy dictionary
@@ -78,13 +68,18 @@
   // exists.
   void AddPolicies(NSDictionary* policy);
 
+  // If true, the test harness will encode complex data (dicts and lists) as
+  // JSON strings.
+  bool encode_complex_data_as_json_;
+
   DISALLOW_COPY_AND_ASSIGN(TestHarness);
 };
 
-TestHarness::TestHarness()
+TestHarness::TestHarness(bool encode_complex_data_as_json)
     : PolicyProviderTestHarness(POLICY_LEVEL_MANDATORY,
                                 POLICY_SCOPE_MACHINE,
-                                POLICY_SOURCE_PLATFORM) {}
+                                POLICY_SOURCE_PLATFORM),
+      encode_complex_data_as_json_(encode_complex_data_as_json) {}
 
 TestHarness::~TestHarness() {
   // Cleanup any policies left from the test.
@@ -106,7 +101,7 @@
     SchemaRegistry* registry,
     scoped_refptr<base::SequencedTaskRunner> task_runner) {
   return new AsyncPolicyProvider(
-      registry, std::make_unique<PolicyLoaderIOS>(task_runner));
+      registry, std::make_unique<PolicyLoaderIOS>(registry, task_runner));
 }
 
 void TestHarness::InstallEmptyPolicy() {
@@ -150,14 +145,29 @@
     const std::string& policy_name,
     const base::DictionaryValue* policy_value) {
   NSString* key = base::SysUTF8ToNSString(policy_name);
-  base::ScopedCFTypeRef<CFPropertyListRef> value(
-      ValueToProperty(*policy_value));
-  AddPolicies(@{key : (__bridge NSDictionary*)(value.get())});
+
+  if (encode_complex_data_as_json_) {
+    // Convert |policy_value| to a JSON-encoded string.
+    std::string json_string;
+    JSONStringValueSerializer serializer(&json_string);
+    ASSERT_TRUE(serializer.Serialize(*policy_value));
+
+    AddPolicies(@{key : base::SysUTF8ToNSString(json_string)});
+  } else {
+    base::ScopedCFTypeRef<CFPropertyListRef> value(
+        ValueToProperty(*policy_value));
+    AddPolicies(@{key : (__bridge NSDictionary*)(value.get())});
+  }
 }
 
 // static
 PolicyProviderTestHarness* TestHarness::Create() {
-  return new TestHarness();
+  return new TestHarness(false);
+}
+
+// static
+PolicyProviderTestHarness* TestHarness::CreateWithJSONEncoding() {
+  return new TestHarness(true);
 }
 
 void TestHarness::AddPolicies(NSDictionary* policy) {
@@ -182,14 +192,60 @@
                          ConfigurationPolicyProviderTest,
                          testing::Values(TestHarness::Create));
 
-using PolicyLoaderIOSTest = PlatformTest;
+INSTANTIATE_TEST_SUITE_P(PolicyProviderIOSChromePolicyJSONTest,
+                         ConfigurationPolicyProviderTest,
+                         testing::Values(TestHarness::CreateWithJSONEncoding));
+
+class PolicyLoaderIOSTest : public PlatformTest {
+ public:
+  void SetUp() override {
+    const std::string load_policy_key =
+        base::SysNSStringToUTF8(kPolicyLoaderIOSLoadPolicyKey);
+    const std::string test_schema = "{"
+                                    "  \"type\": \"object\","
+                                    "  \"properties\": {"
+                                    "    \"" +
+                                    load_policy_key +
+                                    "\": { \"type\": \"boolean\" },"
+                                    "    \"key1\": { \"type\": \"string\" },"
+                                    "    \"key2\": { \"type\": \"string\" },"
+                                    "  }"
+                                    "}";
+
+    std::string error;
+    Schema schema = Schema::Parse(test_schema, &error);
+    ASSERT_TRUE(schema.valid());
+
+    const PolicyNamespace ns(POLICY_DOMAIN_CHROME, "");
+    schema_registry_.RegisterComponent(ns, schema);
+
+    scoped_refptr<base::TestSimpleTaskRunner> task_runner =
+        new base::TestSimpleTaskRunner();
+    loader_ = std::make_unique<PolicyLoaderIOS>(&schema_registry_, task_runner);
+  }
+
+ protected:
+  // Verifies that |loader_| does not load any policies.
+  void VerifyNoPoliciesAreLoaded() {
+    PolicyBundle empty;
+    std::unique_ptr<PolicyBundle> bundle = loader_->Load();
+    ASSERT_TRUE(bundle);
+    EXPECT_TRUE(bundle->Equals(empty));
+  }
+
+  // The schema registry used while testing.
+  SchemaRegistry schema_registry_;
+
+  // The PolicyLoaderIOS under test.
+  std::unique_ptr<PolicyLoaderIOS> loader_;
+};
 
 // Verifies that policies are not loaded if kPolicyLoaderIOSLoadPolicyKey is not
 // present.
 TEST_F(PolicyLoaderIOSTest, NoPoliciesLoadedWithoutLoadPolicyKey) {
   NSDictionary* policy = @{
-    @"shared": @"wrong",
-    @"key1": @"value1",
+    @"key1" : @"value1",
+    @"key2" : @"value2",
   };
   [[NSUserDefaults standardUserDefaults]
       setObject:policy
@@ -203,8 +259,8 @@
 TEST_F(PolicyLoaderIOSTest, NoPoliciesLoadedWhenEnableChromeKeyIsFalse) {
   NSDictionary* policy = @{
     kPolicyLoaderIOSLoadPolicyKey : @NO,
-    @"shared" : @"wrong",
     @"key1" : @"value1",
+    @"key2" : @"value2",
   };
   [[NSUserDefaults standardUserDefaults]
       setObject:policy
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 01f4747..b0ca5b2 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -696,7 +696,6 @@
 <translation id="2024476116966025075">Erforderlichen Domainnamen für Remotezugriff-Clients konfigurieren</translation>
 <translation id="2030905906517501646">Suchbegriff der Standardsuchmaschine</translation>
 <translation id="203096360153626918">Diese Richtlinie hat keine Auswirkungen auf die Android-Apps. Der Vollbildmodus kann aktiviert werden, auch wenn diese Richtlinie auf <ph name="FALSE" /> gesetzt ist.</translation>
-<translation id="2042881179131103248">Kamera und die Funktion "Einstellungen" deaktivieren</translation>
 <translation id="2043749682619281558">Hiermit wird die Funktion "Mauscursor hervorheben" auf dem Anmeldebildschirm aktiviert</translation>
 <translation id="2043770014371753404">Deaktivierte Unternehmensdrucker</translation>
 <translation id="2050629715135525072">Damit wird gesteuert, ob ein Nutzer, der mit einem Host für den Remotezugriff verbunden ist, Dateien zwischen Client und Host übertragen kann. Verbindungen zur Remoteunterstützung sind hiervon ausgenommen, da sie keine Dateiübertragung unterstützen.
@@ -2928,7 +2927,6 @@
 
       Ist diese Richtlinie nicht konfiguriert (bis einschließlich Version M76), kann <ph name="PRODUCT_NAME" /> diese Protokolle standardmäßig weder erfassen noch hochladen. Ab Version M77 kann <ph name="PRODUCT_NAME" /> diese Protokolle standardmäßig von den meisten Profilen erfassen und hochladen, die von cloudbasierten Unternehmensrichtlinien auf Nutzerebene betroffen sind. Ab Version M77 bis einschließlich M80 kann <ph name="PRODUCT_NAME" /> diese Protokolle außerdem standardmäßig von Profilen erfassen und hochladen, die mit <ph name="PRODUCT_NAME" /> lokal verwaltet werden.</translation>
 <translation id="5331746669335642668">Cloud-Richtlinie von <ph name="PRODUCT_NAME" /> überschreibt Plattformrichtlinie.</translation>
-<translation id="53381168777357359">Funktion "Einstellungen"</translation>
 <translation id="5362531528507578966">Überschreibt den Standarddruckmodus mit Hintergrundgrafiken.</translation>
 <translation id="5365476955714838841">Befehlszeilenparameter für den alternativen Browser.</translation>
 <translation id="5365946944967967336">Startseiten-Schaltfläche auf Symbolleiste anzeigen</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 51f360f..5dd54641 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -699,7 +699,6 @@
 <translation id="2024476116966025075">Configurar el nombre de dominio requerido para los clientes de acceso remoto</translation>
 <translation id="2030905906517501646">Palabra clave del proveedor de búsqueda predeterminado</translation>
 <translation id="203096360153626918">Esta política no tiene efecto en las apps de Android. Podrán implementar el modo de pantalla completa, incluso si esta política se establece como <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Inhabilitar la configuración de la cámara y la función de configuración</translation>
 <translation id="2043749682619281558">Habilita la función para resaltar el cursor en la pantalla de acceso</translation>
 <translation id="2043770014371753404">Impresoras empresariales inhabilitadas</translation>
 <translation id="2050629715135525072">Controla la capacidad que tiene un usuario conectado a un host de acceso remoto para transferir archivos entre el cliente y el host. Esto no se aplica a las conexiones de asistencia remota, que no admiten la transferencia de archivos.
@@ -2925,7 +2924,6 @@
 
       Si no se configura la política, hasta la versión M76 inclusive, <ph name="PRODUCT_NAME" /> no podrá recopilar ni subir esos registros de forma predeterminada. A partir de la versión M77, <ph name="PRODUCT_NAME" /> podrá de forma predeterminada recopilar y subir esos registros de la mayoría de los perfiles afectados por las políticas empresariales en la nube para los usuarios. En las versiones posteriores a M77 y hasta la M80 inclusive, <ph name="PRODUCT_NAME" /> también podrá recopilar y subir de forma predeterminada esos registros de los perfiles afectados por la administración local de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">La política de nube de <ph name="PRODUCT_NAME" /> anula la política de la plataforma.</translation>
-<translation id="53381168777357359">Función de configuración</translation>
 <translation id="5362531528507578966">Anula el modo predeterminado de impresión de los gráficos de fondo.</translation>
 <translation id="5365476955714838841">Parámetros de la línea de comandos para el navegador alternativo</translation>
 <translation id="5365946944967967336">Mostrar el botón "Página principal" en la barra de herramientas</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 1282a94..12f136e 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -703,7 +703,6 @@
 <translation id="2024476116966025075">Configurar el nombre de dominio requerido para los clientes de acceso remoto</translation>
 <translation id="2030905906517501646">Palabra clave de proveedor de búsquedas predeterminadas</translation>
 <translation id="203096360153626918">Esta política no influye en las aplicaciones para Android. Aunque se le asigne el valor <ph name="FALSE" />, las aplicaciones podrán acceder al modo de pantalla completa.</translation>
-<translation id="2042881179131103248">Configurar la inhabilitación de la cámara y de las funciones</translation>
 <translation id="2043749682619281558">Habilita el resaltado del cursor en la pantalla de inicio de sesión</translation>
 <translation id="2043770014371753404">Impresoras de empresa inhabilitadas</translation>
 <translation id="2050629715135525072">Controla la capacidad de los usuarios conectados a un host de acceso remoto de transferir archivos entre el cliente y el host. No se aplica a las conexiones de asistencia remota, ya que no admiten la transferencia de archivos.
@@ -3000,7 +2999,6 @@
 
       Si no se establece esta política en las versiones hasta la M76 (incluida), <ph name="PRODUCT_NAME" /> no puede recoger ni subir esos registros de forma predeterminada. A partir de la versión M77, <ph name="PRODUCT_NAME" /> puede recoger y enviar esos registros de forma predeterminada de la mayoría de los perfiles afectados por políticas de empresa a nivel de usuario basadas en la nube. Desde la versión M77 hasta la M80 (incluida), <ph name="PRODUCT_NAME" /> también puede recoger y enviar esos registros de forma predeterminada de los perfiles afectados por la gestión on-premise de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">La política relativa a la nube de <ph name="PRODUCT_NAME" /> anula la política de la plataforma.</translation>
-<translation id="53381168777357359">Función de configuración</translation>
 <translation id="5362531528507578966">Anula el modo de impresión de gráficos de fondo predeterminado.</translation>
 <translation id="5365476955714838841">Parámetros de línea de comandos correspondientes al navegador alternativo.</translation>
 <translation id="5365946944967967336">Mostrar botón de página principal en la barra de herramientas</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 9cf5adca..857248a 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -712,7 +712,6 @@
 <translation id="2024476116966025075">Configurer le nom de domaine requis pour les clients d'accès à distance</translation>
 <translation id="2030905906517501646">Mot clé du moteur de recherche par défaut</translation>
 <translation id="203096360153626918">Cette règle n'a aucun effet sur les applications Android. L'utilisation du mode plein écran est possible même si cette règle est définie sur "<ph name="FALSE" />".</translation>
-<translation id="2042881179131103248">Configurer la caméra et la fonctionnalité de paramètres à désactiver</translation>
 <translation id="2043749682619281558">Activer la mise en surbrillance du curseur sur l'écran de connexion</translation>
 <translation id="2043770014371753404">Imprimantes d'entreprise désactivées</translation>
 <translation id="2050629715135525072">Vérifie la possibilité pour un utilisateur connecté à un hôte distant de transférer des fichiers entre le client et l'hôte. Cette règle ne s'applique pas aux connexions d'assistance à distance, qui ne sont pas compatibles avec le transfert de fichiers.
@@ -2997,7 +2996,6 @@
 
       Sur <ph name="PRODUCT_NAME" /> version M76 ou inférieure, si la règle n'est pas définie, l'application ne peut, par défaut, ni collecter ni importer ces journaux. À partir de la version M77, <ph name="PRODUCT_NAME" /> est, par défaut, en mesure de collecter et d'importer ces journaux à partir de la plupart des profils affectés par les règles d'entreprise au niveau de l'utilisateur dans le cloud. De la version M77 à la version M80, <ph name="PRODUCT_NAME" /> peut également, par défaut, collecter et importer ces journaux à partir des profils affectés par la fonction de gestion sur site de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Les règles relatives au cloud de <ph name="PRODUCT_NAME" /> sont prioritaires sur les règles relatives à la plate-forme.</translation>
-<translation id="53381168777357359">Fonctionnalité de paramètres</translation>
 <translation id="5362531528507578966">Permet d'ignorer le mode d'impression d'images de fond par défaut.</translation>
 <translation id="5365476955714838841">Paramètres de ligne de commande pour le navigateur secondaire.</translation>
 <translation id="5365946944967967336">Afficher le bouton Accueil sur la barre d'outils</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 976254fd..a427fa67 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -690,7 +690,6 @@
 <translation id="2024476116966025075">Mengonfigurasi nama domain yang diperlukan untuk klien akses jarak jauh</translation>
 <translation id="2030905906517501646">Kata kunci penyedia penelusuran default</translation>
 <translation id="203096360153626918">Kebijakan ini tidak memengaruhi aplikasi Android. Aplikasi akan dapat memasuki mode layar penuh meski kebijakan ini disetel ke <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Mengonfigurasi kamera dan fitur setelan untuk dinonaktifkan</translation>
 <translation id="2043749682619281558">Mengaktifkan sorotan kursor di layar login</translation>
 <translation id="2043770014371753404">Menonaktifkan printer perusahaan</translation>
 <translation id="2050629715135525072">Mengontrol kemampuan pengguna yang terhubung ke host akses jarak jauh untuk mentransfer file antara klien dan host. Kebijakan ini tidak berlaku untuk sambungan bantuan jarak jauh, yang tidak mendukung transfer file.
@@ -2929,7 +2928,6 @@
 
       Tidak menetapkan kebijakan pada versi hingga dan termasuk M76 berarti default <ph name="PRODUCT_NAME" /> tidak dapat mengumpulkan atau mengupload log tersebut. Mulai versi M77, default <ph name="PRODUCT_NAME" /> akan dapat mengumpulkan dan mengupload log tersebut dari sebagian besar profil yang terdampak oleh kebijakan perusahaan tingkat pengguna berbasis cloud. Mulai versi M77 hingga dan termasuk M80, <ph name="PRODUCT_NAME" /> juga dapat mengumpulkan dan mengupload log secara default dari profil yang terdampak oleh manajemen lokal <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Kebijakan cloud <ph name="PRODUCT_NAME" /> menggantikan kebijakan Platform.</translation>
-<translation id="53381168777357359">Fitur setelan</translation>
 <translation id="5362531528507578966">Mengganti mode pencetakan grafis latar belakang default.</translation>
 <translation id="5365476955714838841">Parameter command line untuk browser alternatif.</translation>
 <translation id="5365946944967967336">Tampilkan tombol Layar Utama di toolbar</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index f2282f5..e24aea7e 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -677,7 +677,6 @@
 <translation id="2024476116966025075">Configura il nome di dominio richiesto per i client di accesso remoto</translation>
 <translation id="2030905906517501646">Parola chiave del provider di ricerca predefinito</translation>
 <translation id="203096360153626918">Questa norma non ha effetto sulle app Android, che saranno in grado di entrare in modalità a schermo intero anche se la norma viene impostata su <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Configura la fotocamera e la funzionalità impostazioni da disattivare</translation>
 <translation id="2043749682619281558">Attiva l'evidenziazione del cursore sulla schermata di accesso</translation>
 <translation id="2043770014371753404">Stampanti aziendali disattivate</translation>
 <translation id="2050629715135525072">Controlla la capacità di un utente connesso a un host di accesso remoto di trasferire file dal client all'host e viceversa. Questa norma non si applica alle connessioni di assistenza remota, le quali non supportano il trasferimento di file.
@@ -2907,7 +2906,6 @@
 
       Se il criterio non viene impostato su versioni fino alla M76 inclusa, per impostazione predefinita <ph name="PRODUCT_NAME" /> non può raccogliere e caricare questi log. A partire dalla versione M77, per impostazione predefinita <ph name="PRODUCT_NAME" /> può raccogliere e caricare questi log dalla maggior parte dei profili interessati dai criteri aziendali a livello di utente basati sul cloud. Dalla versione M77 fino alla M80 inclusa, <ph name="PRODUCT_NAME" /> può anche raccogliere e caricare questi log per impostazione predefinita dai profili soggetti alla gestione on-premise di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">La norma relativa alla cloud <ph name="PRODUCT_NAME" /> esegue l'override della norma relativa alla piattaforma.</translation>
-<translation id="53381168777357359">Funzionalità impostazioni</translation>
 <translation id="5362531528507578966">Consente di sostituire la modalità di stampa predefinita delle immagini di sfondo.</translation>
 <translation id="5365476955714838841">Parametri della riga di comando per il browser alternativo.</translation>
 <translation id="5365946944967967336">Mostra il pulsante Pagina iniziale nella barra degli strumenti</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 405e367..83bfcbc1 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -699,7 +699,6 @@
 <translation id="2024476116966025075">リモート アクセスのクライアントに要求する必須のドメイン名を設定する</translation>
 <translation id="2030905906517501646">デフォルトの検索プロバイダのキーワード</translation>
 <translation id="203096360153626918">このポリシーは Android アプリには適用されません。このポリシーを <ph name="FALSE" /> に設定した場合でも、Android アプリの全画面表示は可能です。</translation>
-<translation id="2042881179131103248">カメラとその設定機能を無効にする</translation>
 <translation id="2043749682619281558">ログイン画面でカーソルによるハイライト表示を有効にする</translation>
 <translation id="2043770014371753404">無効な企業プリンタ</translation>
 <translation id="2050629715135525072">リモート アクセス ホストに接続しているユーザーが、クライアントとホスト間でファイルを転送できるかどうかを管理します。この設定は、リモート サポート接続には適用されません。リモート サポート接続ではファイル転送がサポートされていません。
@@ -2914,7 +2913,6 @@
 
       ポリシーが未設定の場合、<ph name="PRODUCT_NAME" /> M76 まではデフォルトの設定によりログの収集とアップロードは行えません。<ph name="PRODUCT_NAME" /> M77 以降では、クラウドベースのユーザーレベル エンタープライズ ポリシーの対象となるほとんどのプロファイルから、ログの収集とアップロードをデフォルトで行うことができます。<ph name="PRODUCT_NAME" /> M77 から M80 までは、<ph name="PRODUCT_NAME" /> オンプレミス管理の対象となるプロファイルからも、ログの収集とアップロードをデフォルトで行うことができます。</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> のクラウド ポリシーはプラットフォーム ポリシーに優先します。</translation>
-<translation id="53381168777357359">設定機能</translation>
 <translation id="5362531528507578966">背景のグラフィックのデフォルト印刷モードをオーバーライドします。</translation>
 <translation id="5365476955714838841">代替ブラウザに渡すコマンドラインのパラメータ。</translation>
 <translation id="5365946944967967336">ツールバーにホーム ボタンを表示する</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 524228d9..ff356cf 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -706,7 +706,6 @@
 <translation id="2024476116966025075">원격 액세스 클라이언트에게 필요한 도메인 이름 설정</translation>
 <translation id="2030905906517501646">기본 검색 공급자 키워드</translation>
 <translation id="203096360153626918">이 정책은 Android 앱에 아무런 영향도 미치지 않습니다. 이 정책이 <ph name="FALSE" />로 설정되더라도 Android 앱이 전체화면 모드로 전환될 수 있습니다.</translation>
-<translation id="2042881179131103248">카메라 및 사용 중지할 설정 기능 구성</translation>
 <translation id="2043749682619281558">로그인 화면에서 커서 강조표시 사용</translation>
 <translation id="2043770014371753404">사용 중지된 엔터프라이즈 프린터</translation>
 <translation id="2050629715135525072">원격 액세스 호스트에 연결된 사용자가 클라이언트와 호스트 사이에 파일을 전송할 수 있는 기능을 제어합니다. 원격 지원 연결은 파일 전송을 지원하지 않으므로 이 설정이 적용되지 않습니다.
@@ -2990,7 +2989,6 @@
 
       M76 이하의 버전에서 정책을 설정하지 않으면 기본적으로 <ph name="PRODUCT_NAME" />에서 이러한 로그를 수집하거나 업로드할 수 없습니다. M77부터는 <ph name="PRODUCT_NAME" />에서 기본적으로 클라우드 기반 사용자 수준 엔터프라이즈 정책의 영향을 받는 대부분의 프로필에 대해 이러한 로그를 수집하고 업로드할 수 있습니다. M77부터 M80까지는 <ph name="PRODUCT_NAME" />에서 기본적으로 <ph name="PRODUCT_NAME" /> 온프레미스 관리의 영향을 받는 프로필에 대해 이러한 로그를 수집하고 업로드할 수도 있습니다.</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 클라우드 정책이 플랫폼 정책에 우선합니다.</translation>
-<translation id="53381168777357359">설정 기능</translation>
 <translation id="5362531528507578966">기본 배경 그래픽 인쇄 모드를 재정의합니다.</translation>
 <translation id="5365476955714838841">대체 브라우저의 명령줄 매개변수입니다.</translation>
 <translation id="5365946944967967336">툴바에 홈 버튼 표시</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 1c53ba12..7020a3e 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -701,7 +701,6 @@
 <translation id="2024476116966025075">De vereiste domeinnaam configureren voor clients voor externe toegang</translation>
 <translation id="2030905906517501646">Zoekwoord voor standaardzoekprovider</translation>
 <translation id="203096360153626918">Dit beleid is niet van invloed op de Android-apps. Deze hebben toegang tot de modus voor volledig scherm, zelfs als dit beleid is ingesteld op <ph name="FALSE" /> (Onwaar).</translation>
-<translation id="2042881179131103248">De camera en de instellingenfunctie configureren om te worden uitgeschakeld</translation>
 <translation id="2043749682619281558">De cursormarkering op het inlogscherm inschakelen</translation>
 <translation id="2043770014371753404">Bedrijfsprinters uitgeschakeld</translation>
 <translation id="2050629715135525072">Regelt de mogelijkheid van een gebruiker die is verbonden met een host voor externe toegang om bestanden over te zetten tussen de client en de host. Dit is niet van toepassing op verbindingen voor hulp op afstand, die geen bestandsoverdracht ondersteunen.
@@ -2985,7 +2984,6 @@
 
       Als het beleid niet is ingesteld in versies tot en met M76, kan <ph name="PRODUCT_NAME" /> deze logboeken standaard niet verzamelen en uploaden. Vanaf M77 kan <ph name="PRODUCT_NAME" /> deze logboeken standaard verzamelen en uploaden vanuit de meeste profielen waarop cloudgebaseerde bedrijfsbeleidsregels op gebruikersniveau van toepassing zijn. Vanaf M77 tot en met M80 kan <ph name="PRODUCT_NAME" /> deze logboeken ook standaard verzamelen en uploaden vanuit profielen waarop <ph name="PRODUCT_NAME" />-beheer op locatie van toepassing is.</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" />-cloudbeleid krijgt voorrang op het platformbeleid.</translation>
-<translation id="53381168777357359">Instellingenfunctie</translation>
 <translation id="5362531528507578966">Hiermee wordt de standaardmodus voor afdrukken met achtergrondbeelden overschreven.</translation>
 <translation id="5365476955714838841">Opdrachtregelparameters voor de alternatieve browser.</translation>
 <translation id="5365946944967967336">Knop 'Homepage' in de werkbalk weergeven</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index e85feb6..9598be2 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -694,7 +694,6 @@
 <translation id="2024476116966025075">Configurar o nome de domínio obrigatório para clientes de acesso remoto</translation>
 <translation id="2030905906517501646">Palavra-chave do provedor de pesquisa padrão</translation>
 <translation id="203096360153626918">Esta política não tem nenhum efeito sobre os apps Android. Eles poderão entrar no modo de tela cheia mesmo se a política estiver definida como <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Configura a câmera e o recurso das configurações que serão desativados</translation>
 <translation id="2043749682619281558">Ativa o destaque de cursor na tela de login</translation>
 <translation id="2043770014371753404">Impressoras empresariais desativadas</translation>
 <translation id="2050629715135525072">Controla a habilidade de um usuário de transferir arquivos entre o cliente e o host quando ele está conectado a um host de acesso remoto. Isso não se aplica a conexões de assistência remota, que não são compatíveis com transferência de arquivos.
@@ -2923,7 +2922,6 @@
 
       Se a política não for definida em versões até a M76, o <ph name="PRODUCT_NAME" /> terá como padrão não coletar esses registros nem fazer upload deles. A partir da versão M77, o <ph name="PRODUCT_NAME" /> terá como padrão coletar os registros e fazer upload deles da maioria dos perfis afetados por políticas de empresas no nível de usuário baseadas em nuvem. A partir da versão M77 até a M80, o <ph name="PRODUCT_NAME" /> também pode coletar esses registros e fazer upload deles por padrão a partir de perfis afetados pelo gerenciamento local do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">A política de nuvem do <ph name="PRODUCT_NAME" /> substitui a política da plataforma.</translation>
-<translation id="53381168777357359">Recurso das configurações</translation>
 <translation id="5362531528507578966">Modifica o modo de impressão de gráficos de segundo plano padrão.</translation>
 <translation id="5365476955714838841">Parâmetros de linha de comando para o navegador alternativo.</translation>
 <translation id="5365946944967967336">Exibir o botão da Página inicial na barra de ferramentas</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 117b75ed..bf788f5 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -693,7 +693,6 @@
 <translation id="2024476116966025075">Выбор обязательного домена для клиентов удаленного доступа</translation>
 <translation id="2030905906517501646">Ключевое слово для поисковой системы по умолчанию</translation>
 <translation id="203096360153626918">Правило не влияет на приложения Android. Они смогут переходить в полноэкранный режим, даже если для правила задано значение <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Отключить камеру и доступ к настройкам</translation>
 <translation id="2043749682619281558">Включить подсветку указателя мыши на экране входа</translation>
 <translation id="2043770014371753404">Недоступные корпоративные принтеры</translation>
 <translation id="2050629715135525072">Определяет, может ли пользователь, подключенный к хосту удаленного доступа, перемещать файлы между клиентом и хостом. Это правило не действует для подключений удаленного помощника, не поддерживающих передачу файлов.
@@ -2926,7 +2925,6 @@
 
       Если правило не настроено и используется версия не выше M76, <ph name="PRODUCT_NAME" /> по умолчанию не может собирать и загружать эти журналы. Если используется версия не ниже M77, <ph name="PRODUCT_NAME" /> по умолчанию может собирать и загружать эти журналы из большинства профилей, к которым применяются корпоративные облачные правила на уровне пользователя. Если используется версия от M77 до M80 включительно, <ph name="PRODUCT_NAME" /> также по умолчанию может собирать и загружать эти журналы из профилей, которые находятся под локальным управлением <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Разрешить переопределять правило платформы при помощи облачного правила <ph name="PRODUCT_NAME" /></translation>
-<translation id="53381168777357359">Доступ к настройкам</translation>
 <translation id="5362531528507578966">Переопределяет режим печати фоновых цветов и изображений по умолчанию.</translation>
 <translation id="5365476955714838841">Параметры командной строки для альтернативного браузера</translation>
 <translation id="5365946944967967336">Отображать кнопку "Главная страница" на панели инструментов</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index deb35be..dbad088 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -693,7 +693,6 @@
 <translation id="2024476116966025075">กำหนดค่าชื่อโดเมนที่ต้องใช้สำหรับไคลเอ็นต์การเข้าถึงระยะไกล</translation>
 <translation id="2030905906517501646">คีย์เวิร์ดของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="203096360153626918">นโยบายนี้ไม่มีผลสำหรับแอป Android โดยแอปยังสามารถเข้าสู่โหมดเต็มหน้าจอได้แม้ตั้งค่านโยบายนี้เป็น <ph name="FALSE" /> ก็ตาม</translation>
-<translation id="2042881179131103248">กำหนดค่ากล้องและฟีเจอร์การตั้งค่าที่จะปิดใช้</translation>
 <translation id="2043749682619281558">เปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="2043770014371753404">เครื่องพิมพ์ขององค์กรที่มีการปิดใช้</translation>
 <translation id="2050629715135525072">ควบคุมความสามารถในการโอนไฟล์ระหว่างไคลเอ็นต์และโฮสต์ของผู้ใช้ที่เชื่อมต่อกับโฮสต์สำหรับการเข้าถึงระยะไกล นโยบายนี้ไม่มีผลกับการเชื่อมต่อความช่วยเหลือระยะไกล ซึ่งไม่รองรับการโอนไฟล์
@@ -2927,7 +2926,6 @@
 
       หากไม่ได้ตั้งค่านโยบายนี้ในเวอร์ชันตั้งแต่ M76 ลงมา โดยค่าเริ่มต้นของ <ph name="PRODUCT_NAME" /> จะรวบรวมหรืออัปโหลดบันทึกเหล่านี้ไม่ได้ เริ่มตั้งแต่เวอร์ชัน M77 ขึ้นไป โดยค่าเริ่มต้นของ <ph name="PRODUCT_NAME" /> จะรวบรวมและอัปโหลดบันทึกเหล่านี้ได้จากโปรไฟล์ส่วนใหญ่ที่ได้รับผลกระทบจากนโยบายองค์กรในระดับผู้ใช้บนระบบคลาวด์ ตั้งแต่เวอร์ชัน M77 ขึ้นไป รวมถึงเวอร์ชัน M80 โดยค่าเริ่มต้น <ph name="PRODUCT_NAME" /> จะรวบรวมและอัปโหลดบันทึกเหล่านี้ได้จากโปรไฟล์ที่ได้รับผลกระทบจากการจัดการภายในองค์กรของ <ph name="PRODUCT_NAME" /></translation>
 <translation id="5331746669335642668">นโยบายระบบคลาวด์ของ <ph name="PRODUCT_NAME" /> จะลบล้างนโยบายแพลตฟอร์ม</translation>
-<translation id="53381168777357359">ฟีเจอร์การตั้งค่า</translation>
 <translation id="5362531528507578966">ลบล้างโหมดการพิมพ์กราฟิกพื้นหลังที่เป็นค่าเริ่มต้น</translation>
 <translation id="5365476955714838841">พารามิเตอร์บรรทัดคำสั่งสำหรับเบราว์เซอร์สำรอง</translation>
 <translation id="5365946944967967336">แสดงปุ่ม "หน้าแรก" บนแถบเครื่องมือ</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 4275898..a0e2674 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -700,7 +700,6 @@
 <translation id="2024476116966025075">Uzaktan erişim istemcileri için gereken alan adını yapılandır</translation>
 <translation id="2030905906517501646">Varsayılan arama sağlayıcı anahtar kelimesi</translation>
 <translation id="203096360153626918">Bu politikanın Android uygulamaları üzerinde hiçbir etkisi yoktur. Bu politika <ph name="FALSE" /> seçeneğine ayarlansa bile uygulamalar tam ekran moduna girebilir.</translation>
-<translation id="2042881179131103248">Devre dışı bırakılacak kamera yapılandırması ve ayarlar özelliği</translation>
 <translation id="2043749682619281558">Giriş ekranında imleç vurgulamayı etkinleştir</translation>
 <translation id="2043770014371753404">Devre dışı bırakılmış kurumsal yazıcılar</translation>
 <translation id="2050629715135525072">Uzaktan erişim ana makinesine bağlı bir kullanıcının istemci ile ana makine arasında dosya aktarımı yapma imkanını kontrol eder. Bu politika, dosya aktarımını desteklemeyen uzaktan yardım bağlantıları için geçerli değildir.
@@ -2977,7 +2976,6 @@
 
       Bu politika ayarlanmadan bırakılırsa M76 ve önceki sürümlerde <ph name="PRODUCT_NAME" /> bu günlükleri toplayıp yükleyemez. M77'den başlayarak <ph name="PRODUCT_NAME" /> varsayılan olarak, bu günlükleri bulut tabanlı kullanıcı düzeyi kurumsal politikalardan etkilenen profillerin çoğundan toplayıp yükleyebilir. M77'den M80'e (dahil) kadar, <ph name="PRODUCT_NAME" /> bu günlükleri varsayılan olarak <ph name="PRODUCT_NAME" /> şirket içi yönetiminden etkilenen profillerden toplayıp yükleyebilir.</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> bulut politikası, Platform politikasını geçersiz kılar.</translation>
-<translation id="53381168777357359">Ayarlar özelliği</translation>
 <translation id="5362531528507578966">Varsayılan arka plan grafikleri yazdırma modunu geçersiz kılar.</translation>
 <translation id="5365476955714838841">Alternatif tarayıcı için komut satırı parametreleri.</translation>
 <translation id="5365946944967967336">Araç çubuğunda Ana Sayfa düğmesini göster</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 4ef01c8..a45ecca 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -708,7 +708,6 @@
 <translation id="2024476116966025075">Налаштувати назву домену, потрібного для віддаленого доступу</translation>
 <translation id="2030905906517501646">Ключове слово пошукової служби за умовчанням</translation>
 <translation id="203096360153626918">Це правило не впливає на додатки Android. Ними можна буде користуватися в повноекранному режимі, навіть якщо для правила встановлено значення "<ph name="FALSE" />".</translation>
-<translation id="2042881179131103248">Вимкнути камеру й функцію налаштувань</translation>
 <translation id="2043749682619281558">Увімкнути функцію "Виділення курсора" на екрані входу</translation>
 <translation id="2043770014371753404">Вимкнені принтери підприємства</translation>
 <translation id="2050629715135525072">Указує, чи можуть користувачі з віддаленим доступом до хосту переносити файли між клієнтом і хостом. Це не стосується з’єднань для віддаленої допомоги, що не підтримують перенесення файлів.
@@ -2967,7 +2966,6 @@
 
       Якщо це правило не налаштовано у версії М76 і старіших, <ph name="PRODUCT_NAME" /> за умовчанням не зможе збирати й завантажувати ці журнали. Починаючи з версії M77, <ph name="PRODUCT_NAME" /> за умовчанням може збирати й завантажувати ці журнали з більшості профілів, до яких застосовуються корпоративні правила для користувачів на основі хмари. У версіях від M77 до M80 включно <ph name="PRODUCT_NAME" /> також може збирати й завантажувати ці журнали за умовчанням із профілів, якими керують локально в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Правила використання хмарних сервісів у <ph name="PRODUCT_NAME" /> замінюють правила платформи.</translation>
-<translation id="53381168777357359">Функція налаштувань</translation>
 <translation id="5362531528507578966">Замінює режим друку з фоновими зображеннями за умовчанням.</translation>
 <translation id="5365476955714838841">Параметри командного рядка для альтернативного веб-переглядача.</translation>
 <translation id="5365946944967967336">Показати кнопку "Головна" на панелі інструментів</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index a84df1e2..dac1ad8 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -705,7 +705,6 @@
 <translation id="2024476116966025075">Định cấu hình tên miền được yêu cầu cho ứng dụng truy cập từ xa</translation>
 <translation id="2030905906517501646">Từ khóa nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="203096360153626918">Chính sách này không ảnh hưởng đến các ứng dụng Android. Các ứng dụng đó sẽ có thể vào chế độ toàn màn hình ngay cả khi chính sách này được đặt thành <ph name="FALSE" />.</translation>
-<translation id="2042881179131103248">Định cấu hình để tắt camera và tính năng cài đặt</translation>
 <translation id="2043749682619281558">Bật tính năng làm nổi bật con trỏ trên màn hình đăng nhập</translation>
 <translation id="2043770014371753404">Đã tắt máy in dành cho doanh nghiệp</translation>
 <translation id="2050629715135525072">Kiểm soát xem người dùng kết nối với máy chủ truy cập từ xa có thể chuyển tệp giữa máy chủ và máy khách không. Chính sách này không áp dụng cho các đường kết nối trợ giúp từ xa không hỗ trợ tính năng chuyển tệp.
@@ -2993,7 +2992,6 @@
 
       Nếu bạn không đặt chính sách này trên các phiên bản M76 trở xuống, thì <ph name="PRODUCT_NAME" /> sẽ không thể thu thập và tải các nhật ký này lên theo mặc định. Kể từ phiên bản M77, theo mặc định, <ph name="PRODUCT_NAME" /> sẽ có thể thu thập và tải các nhật ký này lên từ hầu hết các hồ sơ chịu ảnh hưởng bởi chính sách doanh nghiệp dựa trên đám mây ở cấp người dùng. Kể từ phiên bản M77 đến M80, theo mặc định, <ph name="PRODUCT_NAME" /> cũng có thể thu thập và tải các nhật ký này lên từ các hồ sơ chịu ảnh hưởng bởi tính năng quản lý tại chỗ của <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Chính sách đám mây <ph name="PRODUCT_NAME" /> ghi đè chính sách Nền tảng.</translation>
-<translation id="53381168777357359">Tính năng cài đặt</translation>
 <translation id="5362531528507578966">Ghi đè chế độ in đồ họa nền mặc định.</translation>
 <translation id="5365476955714838841">Các tham số dòng lệnh cho trình duyệt thay thế.</translation>
 <translation id="5365946944967967336">Hiển thị nút Trang chủ trên thanh công cụ</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 981fd4d..5760a6c 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -640,7 +640,6 @@
 <translation id="2024476116966025075">为远程访问客户端配置必要的域名</translation>
 <translation id="2030905906517501646">默认搜索服务提供商关键字</translation>
 <translation id="203096360153626918">此政策对 Android 应用没有任何影响。即使此政策设为 <ph name="FALSE" />,这些应用也将能够进入全屏模式。</translation>
-<translation id="2042881179131103248">配置要停用的摄像头和设置功能</translation>
 <translation id="2043749682619281558">在登录屏幕上启用“光标突出显示”</translation>
 <translation id="2043770014371753404">已停用企业打印机</translation>
 <translation id="2050629715135525072">控制用户能否连接到远程访问主机以在客户端和主机之间传输文件。此设置不适用于远程协助连接,因为远程协助连接不支持文件传输。
@@ -2782,7 +2781,6 @@
 
       在 M76 或更早版本中,不设置此政策意味着 <ph name="PRODUCT_NAME" /> 默认无法收集并上传这些日志。从 M77 开始,<ph name="PRODUCT_NAME" /> 默认能够从受基于云的用户级企业政策影响的大多数个人资料中收集并上传这些日志。从 M77 到 M80(含),<ph name="PRODUCT_NAME" /> 还默认能从受 <ph name="PRODUCT_NAME" /> 本地管理功能影响的个人资料中收集并上传这些日志。</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 云政策会替换平台政策。</translation>
-<translation id="53381168777357359">设置功能</translation>
 <translation id="5362531528507578966">覆盖默认背景图片打印模式。</translation>
 <translation id="5365476955714838841">用于启动替代浏览器的命令行参数。</translation>
 <translation id="5365946944967967336">在工具栏上显示“主页”按钮</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index a7c77924..2f7c64a 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -689,7 +689,6 @@
 <translation id="2024476116966025075">設定遠端存取用戶端的網域名稱 (必要)</translation>
 <translation id="2030905906517501646">預設搜尋引擎關鍵字</translation>
 <translation id="203096360153626918">這項政策對 Android 應用程式沒有影響。即使將這項政策設為 <ph name="FALSE" />,Android 應用程式仍可進入全螢幕模式。</translation>
-<translation id="2042881179131103248">配置要停用的攝影機及其設定功能</translation>
 <translation id="2043749682619281558">在登入畫面上啟用游標醒目顯示功能</translation>
 <translation id="2043770014371753404">停用的企業印表機</translation>
 <translation id="2050629715135525072">控管使用者在連線到遠端存取主機後,是否能在用戶端和主機之間傳輸檔案。這項政策不適用於遠端協助連線,這類連線並不支援檔案傳輸。
@@ -2898,7 +2897,6 @@
 
       如果 M76 以下版本 (包含 M76 版) 不設定這項政策,則 <ph name="PRODUCT_NAME" /> 根據預設無法收集及上傳這類記錄。自 M77 版起,針對大多數會受到雲端使用者層級企業政策影響的設定檔,<ph name="PRODUCT_NAME" /> 根據預設可以收集及上傳這類記錄。自 M77 版起 (包含 M80 版),針對會受到 <ph name="PRODUCT_NAME" /> 內部部署管理影響的設定檔,<ph name="PRODUCT_NAME" /> 根據預設也可以收集及上傳這類記錄。</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 雲端政策會覆寫平台政策。</translation>
-<translation id="53381168777357359">設定功能</translation>
 <translation id="5362531528507578966">覆寫預設的背景圖形列印模式。</translation>
 <translation id="5365476955714838841">替代瀏覽器的指令行參數。</translation>
 <translation id="5365946944967967336">在工具列上顯示 [首頁] 按鈕</translation>
diff --git a/components/policy/tools/syntax_check_policy_template_json.py b/components/policy/tools/syntax_check_policy_template_json.py
index f7d1504..f3cd674 100755
--- a/components/policy/tools/syntax_check_policy_template_json.py
+++ b/components/policy/tools/syntax_check_policy_template_json.py
@@ -69,6 +69,11 @@
     # complex schemas using stringified JSON - instead, store them as dicts.
 ]
 
+# List of policies where not all properties are required to be presented in the
+# example value. This could be useful e.g. in case of mutually exclusive fields.
+# See crbug.com/1068257 for the details.
+OPTIONAL_PROPERTIES_POLICIES_WHITELIST = []
+
 # 100 MiB upper limit on the total device policy external data max size limits
 # due to the security reasons.
 # You can increase this limit if you're introducing new external data type
@@ -625,9 +630,11 @@
       # admins.
       schema = policy.get('schema')
       example = policy.get('example_value')
+      enforce_use_entire_schema = policy.get(
+          'name') not in OPTIONAL_PROPERTIES_POLICIES_WHITELIST
       if not self.has_schema_error:
-        if not self.schema_validator.ValidateValue(
-            schema, example, enforce_use_entire_schema=True):
+        if not self.schema_validator.ValidateValue(schema, example,
+                                                   enforce_use_entire_schema):
           self._Error(('Example for policy %s does not comply to the policy\'s '
                        'schema or does not use all properties at least once.') %
                       policy.get('name'))
diff --git a/components/safe_browsing/content/web_ui/resources/safe_browsing.js b/components/safe_browsing/content/web_ui/resources/safe_browsing.js
index f5c94c08..bdb1195 100644
--- a/components/safe_browsing/content/web_ui/resources/safe_browsing.js
+++ b/components/safe_browsing/content/web_ui/resources/safe_browsing.js
@@ -132,22 +132,13 @@
       addReportingEvent(reportingEvent);
     });
 
-    cr.sendWithPromise('getDeepScanRequests', []).then((requests) => {
+    cr.sendWithPromise('getDeepScans', []).then((requests) => {
       requests.forEach(function(request) {
-        addDeepScanRequest(request);
+        addDeepScan(request);
       });
     });
     cr.addWebUIListener('deep-scan-request-update', function(result) {
-      addDeepScanRequest(result);
-    });
-
-    cr.sendWithPromise('getDeepScanResponses', []).then((responses) => {
-      responses.forEach(function(response) {
-        addDeepScanResponse(response);
-      });
-    });
-    cr.addWebUIListener('deep-scan-response-update', function(result) {
-      addDeepScanResponse(result);
+      addDeepScan(result);
     });
 
     $('get-referrer-chain-form').addEventListener('submit', addReferrerChain);
@@ -265,45 +256,53 @@
     row.insertCell().className = 'content';
   }
 
-  function addResultToTable(tableId, result, position) {
-    const token = result[0];
-    const request = result[1];
-
+  function addResultToTable(tableId, token, result, position) {
     if ($(tableId + '-' + token) === null) {
       insertTokenToTable(tableId, token);
     }
 
     const cell = $(tableId + '-' + token).cells[position];
-    appendChildWithInnerText(cell, request);
+    cell.innerText = result;
   }
 
   function addPGPing(result) {
-    addResultToTable('pg-ping-list', result, 0);
+    addResultToTable('pg-ping-list', result[0], result[1], 0);
   }
 
   function addPGResponse(result) {
-    addResultToTable('pg-ping-list', result, 1);
+    addResultToTable('pg-ping-list', result[0], result[1], 1);
   }
 
   function addRTLookupPing(result) {
-    addResultToTable('rt-lookup-ping-list', result, 0);
+    addResultToTable('rt-lookup-ping-list', result[0], result[1], 0);
   }
 
   function addRTLookupResponse(result) {
-    addResultToTable('rt-lookup-ping-list', result, 1);
+    addResultToTable('rt-lookup-ping-list', result[0], result[1], 1);
   }
 
-  function addDeepScanRequest(result) {
-    addResultToTable('deep-scan-list', result, 0);
-  }
+  function addDeepScan(result) {
+    if (result['request_time'] != null) {
+      const requestFormatted = '[' +
+          (new Date(result['request_time'])).toLocaleString() + ']\n' +
+          result['request'];
+      addResultToTable('deep-scan-list', result['token'], requestFormatted, 0);
+    }
 
-  function addDeepScanResponse(result) {
-    if (result[1] === 'SUCCESS') {
-      // Display the response instead
-      addResultToTable('deep-scan-list', [result[0], result[2]], 1);
-    } else {
-      // Display the error code
-      addResultToTable('deep-scan-list', [result[0], result[1]], 1);
+    if (result['response_time'] != null) {
+      if (result['response_status'] == 'SUCCESS') {
+        // Display the response instead
+        const resultFormatted = '[' +
+            (new Date(result['response_time'])).toLocaleString() + ']\n' +
+            result['response'];
+        addResultToTable('deep-scan-list', result['token'], resultFormatted, 1);
+      } else {
+        // Display the error
+        const resultFormatted = '[' +
+            (new Date(result['response_time'])).toLocaleString() + ']\n' +
+            result['response_status'];
+        addResultToTable('deep-scan-list', result['token'], resultFormatted, 1);
+      }
     }
   }
 
diff --git a/components/safe_browsing/content/web_ui/safe_browsing_ui.cc b/components/safe_browsing/content/web_ui/safe_browsing_ui.cc
index 6d0d381..82c9180 100644
--- a/components/safe_browsing/content/web_ui/safe_browsing_ui.cc
+++ b/components/safe_browsing/content/web_ui/safe_browsing_ui.cc
@@ -255,13 +255,18 @@
   if (!HasListener())
     return;
 
+  // Only update the request time the first time we see a token.
   if (deep_scan_requests_.find(request.request_token()) ==
       deep_scan_requests_.end()) {
-    for (auto* webui_listener : webui_instances_)
-      webui_listener->NotifyDeepScanRequestJsListener(request);
+    deep_scan_requests_[request.request_token()].request_time =
+        base::Time::Now();
   }
 
-  deep_scan_requests_[request.request_token()] = request;
+  deep_scan_requests_[request.request_token()].request = request;
+
+  for (auto* webui_listener : webui_instances_)
+    webui_listener->NotifyDeepScanJsListener(
+        request.request_token(), deep_scan_requests_[request.request_token()]);
 }
 
 void WebUIInfoSingleton::AddToDeepScanResponses(
@@ -271,15 +276,16 @@
   if (!HasListener())
     return;
 
-  for (auto* webui_listener : webui_instances_)
-    webui_listener->NotifyDeepScanResponseJsListener(token, status, response);
+  deep_scan_requests_[token].response_time = base::Time::Now();
+  deep_scan_requests_[token].response_status = status;
+  deep_scan_requests_[token].response = response;
 
-  deep_scan_responses_[token] = std::make_pair(status, response);
+  for (auto* webui_listener : webui_instances_)
+    webui_listener->NotifyDeepScanJsListener(token, deep_scan_requests_[token]);
 }
 
 void WebUIInfoSingleton::ClearDeepScans() {
-  DeepScanningRequestMap().swap(deep_scan_requests_);
-  StatusAndDeepScanningResponseMap().swap(deep_scan_responses_);
+  base::flat_map<std::string, DeepScanDebugData>().swap(deep_scan_requests_);
 }
 #endif
 void WebUIInfoSingleton::RegisterWebUIInstance(SafeBrowsingUIHandler* webui) {
@@ -337,6 +343,12 @@
   }
 }
 
+#if BUILDFLAG(FULL_SAFE_BROWSING)
+DeepScanDebugData::DeepScanDebugData() = default;
+DeepScanDebugData::DeepScanDebugData(const DeepScanDebugData&) = default;
+DeepScanDebugData::~DeepScanDebugData() = default;
+#endif
+
 namespace {
 #if BUILDFLAG(SAFE_BROWSING_DB_LOCAL)
 
@@ -1442,6 +1454,37 @@
   serializer.Serialize(response_dict);
   return response_serialized;
 }
+
+base::Value SerializeDeepScanDebugData(const std::string& token,
+                                       const DeepScanDebugData& data) {
+  base::DictionaryValue value;
+  value.SetStringKey("token", token);
+
+  if (!data.request_time.is_null()) {
+    value.SetDoubleKey("request_time", data.request_time.ToJsTime());
+  }
+
+  if (data.request.has_value()) {
+    value.SetStringKey("request",
+                       SerializeDeepScanningRequest(data.request.value()));
+  }
+
+  if (!data.response_time.is_null()) {
+    value.SetDoubleKey("response_time", data.response_time.ToJsTime());
+  }
+
+  if (!data.response_status.empty()) {
+    value.SetStringKey("response_status", data.response_status);
+  }
+
+  if (data.response.has_value()) {
+    value.SetStringKey("response",
+                       SerializeDeepScanningResponse(data.response.value()));
+  }
+
+  return std::move(value);
+}
+
 #endif
 }  // namespace
 
@@ -1821,15 +1864,12 @@
 }
 
 #if BUILDFLAG(FULL_SAFE_BROWSING)
-void SafeBrowsingUIHandler::GetDeepScanRequests(const base::ListValue* args) {
+void SafeBrowsingUIHandler::GetDeepScans(const base::ListValue* args) {
   base::ListValue pings_sent;
-  for (const auto& token_and_request :
+  for (const auto& token_and_data :
        WebUIInfoSingleton::GetInstance()->deep_scan_requests()) {
-    base::ListValue ping_entry;
-    ping_entry.Append(base::Value(token_and_request.first));
-    ping_entry.Append(
-        base::Value(SerializeDeepScanningRequest(token_and_request.second)));
-    pings_sent.Append(std::move(ping_entry));
+    pings_sent.Append(SerializeDeepScanDebugData(token_and_data.first,
+                                                 token_and_data.second));
   }
 
   AllowJavascript();
@@ -1837,31 +1877,8 @@
   args->GetString(0, &callback_id);
   ResolveJavascriptCallback(base::Value(callback_id), pings_sent);
 }
-
-void SafeBrowsingUIHandler::GetDeepScanResponses(const base::ListValue* args) {
-  const WebUIInfoSingleton::StatusAndDeepScanningResponseMap& responses =
-      WebUIInfoSingleton::GetInstance()->deep_scan_responses();
-
-  base::ListValue responses_sent;
-  for (const auto& token_and_status_and_response : responses) {
-    const std::string& token = token_and_status_and_response.first;
-    const std::string& status = token_and_status_and_response.second.first;
-    const DeepScanningClientResponse& response =
-        token_and_status_and_response.second.second;
-
-    base::ListValue response_entry;
-    response_entry.Append(base::Value(token));
-    response_entry.Append(base::Value(status));
-    response_entry.Append(base::Value(SerializeDeepScanningResponse(response)));
-    responses_sent.Append(std::move(response_entry));
-  }
-
-  AllowJavascript();
-  std::string callback_id;
-  args->GetString(0, &callback_id);
-  ResolveJavascriptCallback(base::Value(callback_id), responses_sent);
-}
 #endif
+
 void SafeBrowsingUIHandler::NotifyClientDownloadRequestJsListener(
     ClientDownloadRequest* client_download_request) {
   AllowJavascript();
@@ -1955,27 +1972,12 @@
 }
 
 #if BUILDFLAG(FULL_SAFE_BROWSING)
-void SafeBrowsingUIHandler::NotifyDeepScanRequestJsListener(
-    const DeepScanningClientRequest& request) {
-  base::ListValue request_list;
-  request_list.Append(base::Value(request.request_token()));
-  request_list.Append(base::Value(SerializeDeepScanningRequest(request)));
-
-  AllowJavascript();
-  FireWebUIListener("deep-scan-request-update", request_list);
-}
-
-void SafeBrowsingUIHandler::NotifyDeepScanResponseJsListener(
+void SafeBrowsingUIHandler::NotifyDeepScanJsListener(
     const std::string& token,
-    const std::string& status,
-    const DeepScanningClientResponse& response) {
-  base::ListValue response_list;
-  response_list.Append(base::Value(token));
-  response_list.Append(base::Value(status));
-  response_list.Append(base::Value(SerializeDeepScanningResponse(response)));
-
+    const DeepScanDebugData& deep_scan_data) {
   AllowJavascript();
-  FireWebUIListener("deep-scan-response-update", response_list);
+  FireWebUIListener("deep-scan-request-update",
+                    SerializeDeepScanDebugData(token, deep_scan_data));
 }
 #endif
 
@@ -2051,13 +2053,8 @@
                           base::Unretained(this)));
 #if BUILDFLAG(FULL_SAFE_BROWSING)
   web_ui()->RegisterMessageCallback(
-      "getDeepScanRequests",
-      base::BindRepeating(&SafeBrowsingUIHandler::GetDeepScanRequests,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "getDeepScanResponses",
-      base::BindRepeating(&SafeBrowsingUIHandler::GetDeepScanResponses,
-                          base::Unretained(this)));
+      "getDeepScans", base::BindRepeating(&SafeBrowsingUIHandler::GetDeepScans,
+                                          base::Unretained(this)));
 #endif
 }
 
diff --git a/components/safe_browsing/content/web_ui/safe_browsing_ui.h b/components/safe_browsing/content/web_ui/safe_browsing_ui.h
index 18154d9c..210fbec 100644
--- a/components/safe_browsing/content/web_ui/safe_browsing_ui.h
+++ b/components/safe_browsing/content/web_ui/safe_browsing_ui.h
@@ -34,6 +34,21 @@
 class WebUIInfoSingleton;
 class ReferrerChainProvider;
 
+#if BUILDFLAG(FULL_SAFE_BROWSING)
+struct DeepScanDebugData {
+  DeepScanDebugData();
+  DeepScanDebugData(const DeepScanDebugData&);
+  ~DeepScanDebugData();
+
+  base::Time request_time;
+  base::Optional<DeepScanningClientRequest> request;
+
+  base::Time response_time;
+  std::string response_status;
+  base::Optional<DeepScanningClientResponse> response;
+};
+#endif
+
 class SafeBrowsingUIHandler : public content::WebUIMessageHandler {
  public:
   SafeBrowsingUIHandler(content::BrowserContext* context);
@@ -115,12 +130,9 @@
 #if BUILDFLAG(FULL_SAFE_BROWSING)
   // Get the deep scanning requests that have been collected since the oldest
   // currently open chrome://safe-browsing tab was opened.
-  void GetDeepScanRequests(const base::ListValue* args);
-
-  // Get the deep scanning responses that have been collected since the oldest
-  // currently open chrome://safe-browsing tab was opened.
-  void GetDeepScanResponses(const base::ListValue* args);
+  void GetDeepScans(const base::ListValue* args);
 #endif
+
   // Register callbacks for WebUI messages.
   void RegisterMessages() override;
 
@@ -182,18 +194,12 @@
   void NotifyReportingEventJsListener(const base::Value& event);
 
 #if BUILDFLAG(FULL_SAFE_BROWSING)
-  // Called when any new deep scan requests are sent while one or more WebUI
+  // Called when any deep scans are updated while one or more WebUI
   // tabs are open.
-  void NotifyDeepScanRequestJsListener(
-      const DeepScanningClientRequest& request);
-
-  // Called when any new PhishGuard responses are received while one or more
-  // WebUI tabs are open.
-  void NotifyDeepScanResponseJsListener(
-      const std::string& token,
-      const std::string& status,
-      const DeepScanningClientResponse& response);
+  void NotifyDeepScanJsListener(const std::string& token,
+                                const DeepScanDebugData& request);
 #endif
+
   // Callback when the CookieManager has returned the cookie.
   void OnGetCookie(const std::string& callback_id,
                    const std::vector<net::CanonicalCookie>& cookies);
@@ -220,13 +226,6 @@
 
 class WebUIInfoSingleton {
  public:
-#if BUILDFLAG(FULL_SAFE_BROWSING)
-  using DeepScanningRequestMap =
-      std::map<std::string, DeepScanningClientRequest>;
-  using StatusAndDeepScanningResponseMap =
-      std::map<std::string, std::pair<std::string, DeepScanningClientResponse>>;
-#endif
-
   static WebUIInfoSingleton* GetInstance();
 
   // Returns true when there is a listening chrome://safe-browsing tab.
@@ -318,7 +317,7 @@
   // and response.
   void AddToDeepScanRequests(const DeepScanningClientRequest& request);
 
-  // Add the new response to |deep_scan_responses_| and send it to all the open
+  // Add the new response to |deep_scan_requests_| and send it to all the open
   // chrome://safe-browsing tabs.
   void AddToDeepScanResponses(const std::string& token,
                               const std::string& status,
@@ -400,15 +399,10 @@
   // Get the collection of deep scanning requests since the oldest currently
   // open chrome://safe-browsing tab was opened. Returns a map from a unique
   // token to the request proto.
-  const DeepScanningRequestMap& deep_scan_requests() const {
+  const base::flat_map<std::string, DeepScanDebugData>& deep_scan_requests()
+      const {
     return deep_scan_requests_;
   }
-
-  // Get the list of deep scan responses since the oldest currently open
-  // chrome://safe-browsing tab was opened.
-  const StatusAndDeepScanningResponseMap& deep_scan_responses() const {
-    return deep_scan_responses_;
-  }
 #endif
 
   ReferrerChainProvider* referrer_chain_provider() {
@@ -507,12 +501,8 @@
 #if BUILDFLAG(FULL_SAFE_BROWSING)
   // Map of deep scan requests sent since the oldest currently open
   // chrome://safe-browsing tab was opened. Maps from the unique token per
-  // request to the request proto.
-  DeepScanningRequestMap deep_scan_requests_;
-
-  // List of deep scan responses received since the oldest currently open
-  // chrome://safe-browsing tab was opened.
-  StatusAndDeepScanningResponseMap deep_scan_responses_;
+  // request to the data about the request.
+  base::flat_map<std::string, DeepScanDebugData> deep_scan_requests_;
 #endif
 
   // The current referrer chain provider, if any. Can be nullptr.
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 36d6c0c..9ed4820 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -1297,7 +1297,7 @@
 <translation id="6521745193039995384">არ არის აქტიური</translation>
 <translation id="6529602333819889595">წაშლის &amp;გამეორება</translation>
 <translation id="6534179046333460208">ფიზიკური ვების შემოთავაზებები</translation>
-<translation id="6543609420755597723">Chrome Enterprise მაერთებლების მიერ უსაფრთხოების მხრივ საყურადღებოდ მონიშნული მოვლენების მონაცემების გაზიარება თქვენს ადმინისტრატორთან. აღნიშნული შეიძლება მოიცავდეს თქვენ მიერ მონახულებული გვერდების URL-ებს, ფაილების სახელებსა და მეტამონაცემებს, ასე მომხმარებლის სახელს, რომელსაც თქვენს მოწყობილობაში და Chrome-ში შესასვლელად იყენებთ.</translation>
+<translation id="6543609420755597723">Chrome Enterprise მაერთებლების მიერ უსაფრთხოების მხრივ საყურადღებოდ მონიშნული მოვლენების მონაცემების გაზიარება თქვენს ადმინისტრატორთან. აღნიშნული შეიძლება მოიცავდეს თქვენ მიერ მონახულებული გვერდების URL-ებს, ფაილების სახელებსა და მეტამონაცემებს, ასევე მომხმარებლის სახელს, რომელსაც თქვენს მოწყობილობაში და Chrome-ში შესასვლელად იყენებთ.</translation>
 <translation id="6545864417968258051">Bluetooth სკანირება</translation>
 <translation id="6547208576736763147">ორმაგად გახვრეტა მარცხნივ</translation>
 <translation id="6554795675067793129">თქვენს ანგარიშს მართავს <ph name="ENROLLMENT_DOMAIN" />.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 82d6365..0f63e9d 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -1306,7 +1306,7 @@
 <translation id="6521745193039995384">활성화되지 않음</translation>
 <translation id="6529602333819889595">삭제 다시 실행(&amp;R)</translation>
 <translation id="6534179046333460208">피지컬 웹 제안</translation>
-<translation id="6543609420755597723">Chrome Enterprise Connectors에서 신고한 보안 이벤트에 관한 데이터를 관리자와 공유합니다. 여기에는 방문한 페이지 URL, 파일 이름 또는 메타데이터 및 기기와 Chrome 로그인에 사용한 사용자 이름이 포함될 수 있습니다.</translation>
+<translation id="6543609420755597723">Chrome Enterprise Connectors에서 신고한 보안 이벤트에 관한 데이터를 관리자와 공유합니다. 여기에는 방문한 페이지 URL, 파일 이름 또는 메타데이터, 기기와 Chrome 로그인에 사용한 사용자 이름이 포함될 수 있습니다.</translation>
 <translation id="6545864417968258051">블루투스 검색</translation>
 <translation id="6547208576736763147">왼쪽 2공 펀칭</translation>
 <translation id="6554795675067793129">사용자의 계정은 <ph name="ENROLLMENT_DOMAIN" />에서 관리합니다.</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index da453c3a..2b83450 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -169,7 +169,7 @@
 <translation id="1644574205037202324">Geçmiş</translation>
 <translation id="1645368109819982629">Desteklenmeyen protokol</translation>
 <translation id="1652415888492971589">JIS B8</translation>
-<translation id="1656024727720460136">Chrome, okumayı kolaylaştırmak için bu sayfayı basitleştirdi. Chrome, güvenli bir bağlantı üzerinden orijinal sayfayı aldı.</translation>
+<translation id="1656024727720460136">Chrome, okumayı kolaylaştırmak için bu sayfayı basitleştirdi. Chrome, orijinal sayfayı güvenli bir bağlantı üzerinden aldı.</translation>
 <translation id="1656489000284462475">Alma</translation>
 <translation id="1662550410081243962">Ödeme yöntemlerini kaydet ve doldur</translation>
 <translation id="1663943134801823270">Kartlar ve adresler Chrome'dan alınmaktadır. Bu bilgileri <ph name="BEGIN_LINK" />Ayarlar<ph name="END_LINK" />'dan yönetebilirsiniz.</translation>
@@ -1368,7 +1368,7 @@
 <translation id="6874604403660855544">Eklemeyi &amp;yeniden yap</translation>
 <translation id="6884662655240309489">Boyut 1</translation>
 <translation id="6886577214605505410"><ph name="LOCATION_TITLE" /> <ph name="SHORT_URL" /></translation>
-<translation id="6888584790432772780">Chrome, okumayı kolaylaştırmak için bu sayfayı basitleştirdi. Chrome, güvenli olmayan bir bağlantı üzerinden orijinal sayfayı aldı.</translation>
+<translation id="6888584790432772780">Chrome, okumayı kolaylaştırmak için bu sayfayı basitleştirdi. Chrome, orijinal sayfayı güvenli olmayan bir bağlantı üzerinden aldı.</translation>
 <translation id="6891596781022320156">Politika düzeyi desteklenmiyor.</translation>
 <translation id="6895330447102777224">Kartınız onaylandı</translation>
 <translation id="6897140037006041989">Kullanıcı Aracısı</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index cd71833..3aaad0a 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -168,7 +168,7 @@
 <translation id="1644574205037202324">Tarix</translation>
 <translation id="1645368109819982629">Protokol qo‘llab-quvvatlanmaydi</translation>
 <translation id="1652415888492971589">JIS B8</translation>
-<translation id="1656024727720460136">Mutoalani osonlashtirish uchun bu sahifa Chrome tomonidan soddalashtirildi. Chrome asl sahifani xavfsiz ulanish orqali yuklab oldi.</translation>
+<translation id="1656024727720460136">Mutolaani osonlashtirish uchun bu sahifa Chrome tomonidan soddalashtirildi. Chrome asl sahifani xavfsiz ulanish orqali yuklab oldi.</translation>
 <translation id="1656489000284462475">Olib ketish</translation>
 <translation id="1662550410081243962">To‘lov usullarini saqlash va avtomatik kiritish</translation>
 <translation id="1663943134801823270">Chrome brauzerida saqlangan karta va manzillar. Siz ularni <ph name="BEGIN_LINK" />Sozlamalar<ph name="END_LINK" /> orqali boshqarishingiz mumkin.</translation>
@@ -1302,7 +1302,7 @@
 <translation id="6521745193039995384">Faol emas</translation>
 <translation id="6529602333819889595">&amp;O‘chirishni qaytarish</translation>
 <translation id="6534179046333460208">Atrofimizdagi Internet takliflari</translation>
-<translation id="6543609420755597723">Administratoringizga Chrome korporativ konnektorlari tomonidan belgilangan xavfsizlik hodisalari haqidagi axborotlarni ulashing. Bu ochilgan sahifalarning URL manzillari, fayl nomlari yoki meta axborotlar, qurilma va Chrome foydalanuvchilari nomlaridan iborat boʻlishi mumkin.</translation>
+<translation id="6543609420755597723">Administratoringizga Chrome korporativ konnektorlari tomonidan belgilangan xavfsizlik hodisalari haqidagi axborotlarni ulashing. Bu ochilgan sahifalarning URL manzillari, fayl nomlari yoki meta-axborotlar, qurilma va Chrome foydalanuvchilari nomlaridan iborat boʻlishi mumkin.</translation>
 <translation id="6545864417968258051">Bluetooth qurilmalarni qidirish</translation>
 <translation id="6547208576736763147">Chapdan 2 ta teshik ochish</translation>
 <translation id="6554795675067793129">Hisobingiz <ph name="ENROLLMENT_DOMAIN" /> domenida boshqariladi.</translation>
@@ -1368,7 +1368,7 @@
 <translation id="6874604403660855544">&amp;Qaytadan qo‘shish</translation>
 <translation id="6884662655240309489">Hajmi: 1</translation>
 <translation id="6886577214605505410"><ph name="LOCATION_TITLE" /> <ph name="SHORT_URL" /></translation>
-<translation id="6888584790432772780">Mutoalani osonlashtirish uchun bu sahifa Chrome tomonidan soddalashtirildi. Chrome asl sahifani xavfli ulanish orqali yuklab oldi.</translation>
+<translation id="6888584790432772780">Mutolaani osonlashtirish uchun bu sahifa Chrome tomonidan soddalashtirildi. Chrome asl sahifani xavfli ulanish orqali yuklab oldi.</translation>
 <translation id="6891596781022320156">Qoida qiymati qo‘llab-quvvatlanmaydi.</translation>
 <translation id="6895330447102777224">Kartangiz tasdiqlandi</translation>
 <translation id="6897140037006041989">User Agent</translation>
diff --git a/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java b/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java
index 717a2572..c4164d68 100644
--- a/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java
+++ b/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java
@@ -4,10 +4,10 @@
 
 package org.chromium.components.subresource_filter;
 
+import org.chromium.base.FeatureList;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 /**
  * Provides an API for querying the status of subresource_filter component Features.
@@ -31,29 +31,12 @@
      * @return Whether the feature is enabled or not.
      */
     public static boolean isEnabled(String featureName) {
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return SubresourceFilterFeatureListJni.get().isEnabled(featureName);
     }
 
-    /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return SubresourceFilterFeatureListJni.get().isInitialized();
-    }
-
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
     }
 }
diff --git a/components/subresource_filter/android/subresource_filter_feature_list.cc b/components/subresource_filter/android/subresource_filter_feature_list.cc
index 64122b3..e9ecae93 100644
--- a/components/subresource_filter/android/subresource_filter_feature_list.cc
+++ b/components/subresource_filter/android/subresource_filter_feature_list.cc
@@ -35,10 +35,6 @@
 
 }  // namespace
 
-static jboolean JNI_SubresourceFilterFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_SubresourceFilterFeatureList_IsEnabled(
     JNIEnv* env,
     const JavaParamRef<jstring>& jfeature_name) {
diff --git a/components/update_client/component.cc b/components/update_client/component.cc
index 68a5befb..f5fe193 100644
--- a/components/update_client/component.cc
+++ b/components/update_client/component.cc
@@ -44,8 +44,8 @@
 //  kUpdateError <------------- [update?] -> [action?] -> kUpToDate  kUpdated
 //     ^                            |           |            ^        ^
 //     |                        yes |           | yes        |        |
-//     |                            V           |            |        |
-//     |                        kCanUpdate      +--------> kRun       |
+//     |     update disabled        V           |            |        |
+//     +-<--------------------- kCanUpdate      +--------> kRun       |
 //     |                            |                                 |
 //     |                no          V                                 |
 //     |               +-<- [differential update?]                    |
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn
index 1c131d53..48d0184 100644
--- a/components/viz/common/BUILD.gn
+++ b/components/viz/common/BUILD.gn
@@ -124,7 +124,6 @@
     deps = [
       "//base",
       "//third_party/dawn:libdawn_native",
-      "//third_party/dawn:libdawn_native_sources",
       "//third_party/dawn/src/dawn:dawncpp",
       "//third_party/dawn/src/dawn:libdawn_proc",
     ]
diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
index eb1a0ae..b8f0e29 100644
--- a/components/viz/service/BUILD.gn
+++ b/components/viz/service/BUILD.gn
@@ -414,7 +414,6 @@
 
     deps += [
       "//third_party/dawn:libdawn_native",
-      "//third_party/dawn:libdawn_native_sources",
       "//third_party/dawn/src/dawn:libdawn",
     ]
   }
diff --git a/components/viz/service/display_embedder/skia_output_device_vulkan.cc b/components/viz/service/display_embedder/skia_output_device_vulkan.cc
index f8bd34a6..25021f058 100644
--- a/components/viz/service/display_embedder/skia_output_device_vulkan.cc
+++ b/components/viz/service/display_embedder/skia_output_device_vulkan.cc
@@ -71,7 +71,9 @@
     return false;
 
   auto generation = vulkan_surface_->swap_chain_generation();
-  vulkan_surface_->Reshape(size, transform);
+  if (!vulkan_surface_->Reshape(size, transform))
+    return false;
+
   auto sk_color_space = color_space.ToSkColorSpace();
   if (vulkan_surface_->swap_chain_generation() != generation ||
       !SkColorSpace::Equals(sk_color_space.get(), sk_color_space_.get())) {
diff --git a/content/browser/bluetooth/README.md b/content/browser/bluetooth/README.md
index 4f1bcfa..f5c31b5 100644
--- a/content/browser/bluetooth/README.md
+++ b/content/browser/bluetooth/README.md
@@ -1,26 +1,103 @@
 # Web Bluetooth Service in Content
 
-`content/*/bluetooth` implements the [Web Bluetooth specification]
-using the [/device/bluetooth] code module.
+This directory contains the implementation of the [Web Bluetooth specification]
+using the Bluetooth abstraction module implemented in `//device/bluetooth`. See
+the [Bluetooth Abstraction README] for more details on the cross-platform
+implementation of Bluetooth in Chromium.
 
-This service is exposed to the web in the [blink bluetooth module].
+This service is exposed to the Web through the Blink Bluetooth module, which
+accesses the Web Bluetooth Service through Mojo IPC. For more details, see the
+[Web Bluetooth Blink Module README].
 
 [Web Bluetooth specification]: https://webbluetoothcg.github.io/web-bluetooth/
-[/device/bluetooth]: /device/bluetooth
-[blink bluetooth module]: /third_party/blink/renderer/modules/bluetooth/
+[Bluetooth Abstraction README]: ../../../device/bluetooth/README.md
+[Web Bluetooth Blink Module README]:
+../../../third_party/blink/renderer/modules/bluetooth/README.md
 
+## Web Bluetooth Permissions
+
+The legacy permissions system is implemented by `bluetooth_allowed_devices.h`,
+which is created per origin.
+
+The new permissions system is implemented by providing an implementation for
+the `//content/public/browser/bluetooth_delegate.h` interface. In Chrome, the
+implementation of this interface is provided by
+`//chrome/browser/chrome_bluetooth_delegate.h` which forwards permission
+queries to `//chrome/browser/bluetooth/bluetooth_chooser_context.h`. This
+class uses `//components/permissions/chooser_context_base.h` as the base.
+This base class is also in use by other device APIs, like WebUSB. The new
+permission system enables Web Bluetooth permissions to be persistent and to
+be exposed in the settings UI for users to manage more easily. For more
+details on the new permissions system, see the [Web Bluetooth Persistent
+Permissions] design document.
+
+[Web Bluetooth Persistent Permissions]:
+https://docs.google.com/document/d/1h3uAVXJARHrNWaNACUPiQhLt7XI-fFFQoARSs1WgMDM/edit?usp=sharing
 
 ## Testing
 
-Bluetooth web tests in `third_party/blink/web_tests/bluetooth/` rely on
-fake Bluetooth implementation classes constructed in
-`content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider`.
-These tests span JavaScript binding to the `device/bluetooth` API layer.
+The Web Bluetooth Service is primarily tested using Blink Web Tests and Web
+Platform Tests. These tests are found in
+`//third_party/blink/web_tests/bluetooth` and
+`//third_party/blink/web_tests/external/wpt/bluetooth`. There is currently an
+ongoing effort to refactor the Web Bluetooth tests using the legacy
+[BluetoothFakeAdapter] test infrastructure to use the new [FakeBluetooth]
+Test API. For more details, see the [Web Bluetooth Web Tests README] and the
+[Web Bluetooth Web Platform Tests README].
 
+TODO(https://crbug.com/509038): Update this document when the remaining tests
+have been submitted to W3C Web Platform Tests.
+
+The tests are run using `content_shell`, which fakes the Bluetooth related UI
+and the new permissions system. For more details, see the following files in
+`//content/shell/browser/web_test`:
+* [fake_bluetooth_chooser.h]
+* [fake_bluetooth_delegate.h]
+* [fake_bluetooth_scanning_prompt.h]
+* [web_test_bluetooth_adapter_provider.h][BluetoothFakeAdapter]
+* [web_test_first_device_bluetooth_chooser.h]
+
+[BluetoothFakeAdapter]:
+../../shell/browser/web_test/web_test_bluetooth_adapter_provider.h
+[FakeBluetooth]:
+../../../device/bluetooth/test/fake_bluetooth.h
+[Web Bluetooth Web Tests README]:
+../../../third_party/blink/web_tests/bluetooth/README.md
+[Web Bluetooth Web Platform Tests README]:
+../../../third_party/blink/web_tests/external/wpt/bluetooth/README.md
+[fake_bluetooth_chooser.h]:
+../../shell/browser/web_test/fake_bluetooth_chooser.h
+[fake_bluetooth_delegate.h]:
+../../shell/browser/web_test/fake_bluetooth_delegate.h
+[fake_bluetooth_scanning_prompt.h]:
+../../shell/browser/web_test/fake_bluetooth_scanning_prompt.h
+[web_test_first_device_bluetooth_chooser.h]:
+../../shell/browser/web_test/web_test_first_device_bluetooth_chooser.h
+
+# Resources and Documentation
+
+Mailing list: web-bluetooth@chromium.org
+
+Bug tracker: [Blink>Bluetooth]
+
+* [Web Bluetooth specification]
+* [Bluetooth Abstraction README]
+* [Web Bluetooth Blink Module README]
+* [BluetoothFakeAdapter]
+* [FakeBluetooth]
+
+[Blink>Bluetooth]: https://bugs.chromium.org/p/chromium/issues/list?q=component%3ABlink%3EBluetooth&can=2
 
 ## Design Documents
 
-See: [Class Diagram of Web Bluetooth through Bluetooth Android][Class]
+* [Class Diagram of Web Bluetooth through Bluetooth Android]
+* [Web Bluetooth Testing]
+* [Web Bluetooth Test Scanning]
+* [Web Bluetooth Persistent Permissions]
 
-[Class]: https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram
-
+[Class Diagram of Web Bluetooth through Bluetooth Android]:
+https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram
+[Web Bluetooth Testing]:
+https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/edit?usp=sharing
+[Web Bluetooth Test Scanning]:
+https://docs.google.com/document/d/1XFl_4ZAgO8ddM6U53A9AfUuZeWgJnlYD5wtbXqEpzeg/edit?usp=sharing
diff --git a/content/browser/conversions/conversion_host.cc b/content/browser/conversions/conversion_host.cc
index ce5f352..e343742 100644
--- a/content/browser/conversions/conversion_host.cc
+++ b/content/browser/conversions/conversion_host.cc
@@ -6,13 +6,16 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "content/browser/conversions/conversion_manager.h"
 #include "content/browser/conversions/conversion_manager_impl.h"
 #include "content/browser/conversions/conversion_policy.h"
-#include "content/browser/conversions/storable_conversion.h"
 #include "content/browser/storage_partition_impl.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/storage_partition.h"
 #include "content/public/browser/web_contents.h"
 #include "mojo/public/cpp/bindings/message.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
@@ -53,13 +56,73 @@
 }
 
 ConversionHost::ConversionHost(WebContents* web_contents)
-    : conversion_manager_provider_(
+    : WebContentsObserver(web_contents),
+      conversion_manager_provider_(
           std::make_unique<ConversionManagerProviderImpl>()),
-      web_contents_(web_contents),
       receiver_(web_contents, this) {}
 
 ConversionHost::~ConversionHost() = default;
 
+void ConversionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
+  ConversionManager* conversion_manager =
+      conversion_manager_provider_->GetManager(web_contents());
+  if (!conversion_manager)
+    return;
+
+  // Get the impression data off the navigation.
+  if (!navigation_handle->GetImpression())
+    return;
+  const Impression& impression = *(navigation_handle->GetImpression());
+
+  // If an impression is not associated with a main frame navigation, ignore it.
+  // If the navigation did not commit, committed to a Chrome error page, or was
+  // same document, ignore it. Impressions should never be attached to
+  // same-document navigations but can be the result of a bad renderer.
+  if (!navigation_handle->IsInMainFrame() ||
+      !navigation_handle->HasCommitted() || navigation_handle->IsErrorPage() ||
+      navigation_handle->IsSameDocument())
+    return;
+
+  // If the impression's conversion destination does not match the final top
+  // frame origin of this new navigation ignore it.
+  if (impression.conversion_destination !=
+      navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin())
+    return;
+
+  // TODO(johnidel): When impression_origin is available, we should default to
+  // it instead of conversion destination. We also need to verify that
+  // impression actually occurred on a secure site.
+  //
+  // Convert |impression| into a StorableImpression that can be forwarded to
+  // storage. If a reporting origin was not provided, default to the conversion
+  // destination for reporting.
+  const url::Origin& reporting_origin = !impression.reporting_origin
+                                            ? impression.conversion_destination
+                                            : *impression.reporting_origin;
+
+  // Conversion measurement is only allowed in secure contexts.
+  if (!network::IsOriginPotentiallyTrustworthy(reporting_origin) ||
+      !network::IsOriginPotentiallyTrustworthy(
+          impression.conversion_destination)) {
+    // TODO (1049654): This should log a console error when it occurs.
+    return;
+  }
+
+  base::Time impression_time = base::Time::Now();
+  const ConversionPolicy& policy = conversion_manager->GetConversionPolicy();
+
+  // TODO(https://crbug.com/1061645): The impression origin should be provided
+  // by looking up the navigation initiator frame's top frame origin.
+  StorableImpression storable_impression(
+      policy.GetSanitizedImpressionData(impression.impression_data),
+      url::Origin() /* impression_origin */, impression.conversion_destination,
+      reporting_origin, impression_time,
+      policy.GetExpiryTimeForImpression(impression.expiry, impression_time),
+      /*impression_id=*/base::nullopt);
+
+  conversion_manager->HandleImpression(storable_impression);
+}
+
 // TODO(https://crbug.com/1044099): Limit the number of conversion redirects per
 // page-load to a reasonable number.
 void ConversionHost::RegisterConversion(
@@ -77,7 +140,7 @@
   // If there is no conversion manager available, ignore any conversion
   // registrations.
   ConversionManager* conversion_manager =
-      conversion_manager_provider_->GetManager(web_contents_);
+      conversion_manager_provider_->GetManager(web_contents());
   if (!conversion_manager)
     return;
 
diff --git a/content/browser/conversions/conversion_host.h b/content/browser/conversions/conversion_host.h
index 2538b1a8..5968164 100644
--- a/content/browser/conversions/conversion_host.h
+++ b/content/browser/conversions/conversion_host.h
@@ -5,9 +5,12 @@
 #ifndef CONTENT_BROWSER_CONVERSIONS_CONVERSION_HOST_H_
 #define CONTENT_BROWSER_CONVERSIONS_CONVERSION_HOST_H_
 
+#include <memory>
+
 #include "base/gtest_prod_util.h"
 #include "content/browser/conversions/conversion_manager.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_receiver_set.h"
 #include "third_party/blink/public/mojom/conversions/conversions.mojom.h"
 
@@ -19,7 +22,8 @@
 // Class responsible for listening to conversion events originating from blink,
 // and verifying that they are valid. Owned by the WebContents. Lifetime is
 // bound to lifetime of the WebContents.
-class CONTENT_EXPORT ConversionHost : public blink::mojom::ConversionHost {
+class CONTENT_EXPORT ConversionHost : public WebContentsObserver,
+                                      public blink::mojom::ConversionHost {
  public:
   static std::unique_ptr<ConversionHost> CreateForTesting(
       WebContents* web_contents,
@@ -41,6 +45,9 @@
   // blink::mojom::ConversionHost:
   void RegisterConversion(blink::mojom::ConversionPtr conversion) override;
 
+  // WebContentsObserver:
+  void DidFinishNavigation(NavigationHandle* navigation_handle) override;
+
   // Sets the target frame on |receiver_|.
   void SetCurrentTargetFrameForTesting(RenderFrameHost* render_frame_host);
 
@@ -48,8 +55,6 @@
   // and conversion registrations to.
   std::unique_ptr<ConversionManager::Provider> conversion_manager_provider_;
 
-  WebContents* web_contents_;
-
   WebContentsFrameReceiverSet<blink::mojom::ConversionHost> receiver_;
 };
 
diff --git a/content/browser/conversions/conversion_host_unittest.cc b/content/browser/conversions/conversion_host_unittest.cc
index 5c3bb91..00e3a51 100644
--- a/content/browser/conversions/conversion_host_unittest.cc
+++ b/content/browser/conversions/conversion_host_unittest.cc
@@ -22,11 +22,29 @@
 
 namespace content {
 
+namespace {
+
+const char kConversionUrl[] = "https://b.com";
+
+Impression CreateValidImpression() {
+  Impression result;
+  result.conversion_destination = url::Origin::Create(GURL(kConversionUrl));
+  result.reporting_origin = url::Origin::Create(GURL("https://c.com"));
+  result.impression_data = 1UL;
+  return result;
+}
+
+}  // namespace
+
 class TestConversionManager : public ConversionManager {
  public:
   TestConversionManager() = default;
   ~TestConversionManager() override = default;
 
+  void HandleImpression(const StorableImpression& impression) override {
+    num_impressions_++;
+  }
+
   void HandleConversion(const StorableConversion& impression) override {
     num_conversions_++;
   }
@@ -167,4 +185,123 @@
   EXPECT_FALSE(bad_message_observer.got_bad_message());
 }
 
+TEST_F(ConversionHostTest, NavigationWithNoImpression_Ignored) {
+  NavigationSimulatorImpl::NavigateAndCommitFromDocument(GURL(kConversionUrl),
+                                                         main_rfh());
+
+  EXPECT_EQ(0u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest, ValidImpression_ForwardedToManager) {
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL(kConversionUrl), main_rfh());
+  navigation->set_impression(CreateValidImpression());
+  navigation->Commit();
+
+  EXPECT_EQ(1u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest, ImpressionWithNoManagerAvilable_NoCrash) {
+  // Replace the ConversionHost on the WebContents with one that is backed by a
+  // null ConversionManager.
+  static_cast<WebContentsImpl*>(web_contents())
+      ->RemoveReceiverSetForTesting(blink::mojom::ConversionHost::Name_);
+  auto conversion_host = ConversionHost::CreateForTesting(
+      web_contents(), std::make_unique<TestManagerProvider>(nullptr));
+
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL(kConversionUrl), main_rfh());
+  navigation->set_impression(CreateValidImpression());
+  navigation->Commit();
+}
+
+TEST_F(ConversionHostTest, ImpressionInSubframe_Ignored) {
+  contents()->NavigateAndCommit(GURL("https://a.com"));
+
+  // Create a subframe and use it as a target for the conversion registration
+  // mojo.
+  content::RenderFrameHostTester* rfh_tester =
+      content::RenderFrameHostTester::For(main_rfh());
+  content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
+
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL(kConversionUrl), subframe);
+  navigation->set_impression(CreateValidImpression());
+  navigation->Commit();
+
+  EXPECT_EQ(0u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest, ImpressionNavigationCommitsToErrorPage_Ignored) {
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL(kConversionUrl), main_rfh());
+  navigation->set_impression(CreateValidImpression());
+  navigation->Fail(net::ERR_FAILED);
+  navigation->CommitErrorPage();
+
+  EXPECT_EQ(0u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest, ImpressionNavigationAborts_Ignored) {
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL(kConversionUrl), main_rfh());
+  navigation->set_impression(CreateValidImpression());
+  navigation->AbortCommit();
+
+  EXPECT_EQ(0u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest,
+       CommittedOriginDiffersFromConversionDesintation_Ignored) {
+  auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+      GURL("https://different.com"), main_rfh());
+  navigation->set_impression(CreateValidImpression());
+  navigation->Commit();
+
+  EXPECT_EQ(0u, test_manager_.num_impressions());
+}
+
+TEST_F(ConversionHostTest,
+       ImpressionNavigation_OriginTrustworthyChecksPerformed) {
+  const char kLocalHost[] = "http://localhost";
+
+  struct {
+    std::string conversion_origin;
+    std::string reporting_origin;
+    bool impression_expected;
+  } kTestCases[] = {
+      {kLocalHost /* conversion_origin */, kLocalHost /* reporting_origin */,
+       true /* impression_expected */},
+      {"http://127.0.0.1" /* conversion_origin */,
+       "http://127.0.0.1" /* reporting_origin */,
+       true /* impression_expected */},
+      {kLocalHost /* conversion_origin */,
+       "http://insecure.com" /* reporting_origin */,
+       false /* impression_expected */},
+      {"http://insecure.com" /* conversion_origin */,
+       kLocalHost /* reporting_origin */, false /* impression_expected */},
+      {"https://secure.com" /* conversion_origin */,
+       "https://secure.com" /* reporting_origin */,
+       true /* impression_expected */},
+  };
+
+  for (const auto& test_case : kTestCases) {
+    auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
+        GURL(test_case.conversion_origin), main_rfh());
+
+    Impression impression;
+    impression.conversion_destination =
+        url::Origin::Create(GURL(test_case.conversion_origin));
+    impression.reporting_origin =
+        url::Origin::Create(GURL(test_case.reporting_origin));
+    navigation->set_impression(impression);
+    navigation->Commit();
+
+    EXPECT_EQ(test_case.impression_expected, test_manager_.num_impressions())
+        << "For test case: " << test_case.conversion_origin << " | "
+        << test_case.reporting_origin;
+    test_manager_.Reset();
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/conversions/conversion_manager.h b/content/browser/conversions/conversion_manager.h
index 33193ae..f1111d5 100644
--- a/content/browser/conversions/conversion_manager.h
+++ b/content/browser/conversions/conversion_manager.h
@@ -33,6 +33,10 @@
   };
   virtual ~ConversionManager() = default;
 
+  // Persists the given |impression| to storage. Called when a navigation
+  // originating from an impression tag finishes.
+  virtual void HandleImpression(const StorableImpression& impression) = 0;
+
   // Process a newly registered conversion. Will create and log any new
   // conversion reports to storage.
   virtual void HandleConversion(const StorableConversion& conversion) = 0;
diff --git a/content/browser/conversions/conversion_manager_impl.cc b/content/browser/conversions/conversion_manager_impl.cc
index 9ce8981..152716e2 100644
--- a/content/browser/conversions/conversion_manager_impl.cc
+++ b/content/browser/conversions/conversion_manager_impl.cc
@@ -38,6 +38,17 @@
 
 ConversionManagerImpl::~ConversionManagerImpl() = default;
 
+void ConversionManagerImpl::HandleImpression(
+    const StorableImpression& impression) {
+  if (!storage_)
+    return;
+
+  // Add the impression to storage.
+  storage_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&ConversionStorage::StoreImpression,
+                                base::Unretained(storage_.get()), impression));
+}
+
 void ConversionManagerImpl::HandleConversion(
     const StorableConversion& conversion) {
   if (!storage_)
diff --git a/content/browser/conversions/conversion_manager_impl.h b/content/browser/conversions/conversion_manager_impl.h
index 861de9c..96f067a 100644
--- a/content/browser/conversions/conversion_manager_impl.h
+++ b/content/browser/conversions/conversion_manager_impl.h
@@ -35,6 +35,7 @@
   ~ConversionManagerImpl() override;
 
   // ConversionManager:
+  void HandleImpression(const StorableImpression& impression) override;
   void HandleConversion(const StorableConversion& conversion) override;
   const ConversionPolicy& GetConversionPolicy() const override;
 
diff --git a/content/browser/conversions/conversion_policy.cc b/content/browser/conversions/conversion_policy.cc
index b66f311..62038b9 100644
--- a/content/browser/conversions/conversion_policy.cc
+++ b/content/browser/conversions/conversion_policy.cc
@@ -65,4 +65,23 @@
                             conversion_data % kMaxAllowedConversionValues);
 }
 
+std::string ConversionPolicy::GetSanitizedImpressionData(
+    uint64_t impression_data) const {
+  // Impression data is allowed the full 64 bits.
+  return base::StringPrintf("%" PRIx64, impression_data);
+}
+
+base::Time ConversionPolicy::GetExpiryTimeForImpression(
+    const base::Optional<base::TimeDelta>& declared_expiry,
+    base::Time impression_time) const {
+  static constexpr base::TimeDelta kDefaultImpressionExpiry =
+      base::TimeDelta::FromDays(30);
+
+  // Default to the maximum expiry time.
+  base::TimeDelta expiry = declared_expiry.value_or(kDefaultImpressionExpiry);
+
+  // If the impression specified its own expiry, clamp it to the maximum.
+  return impression_time + std::min(expiry, kDefaultImpressionExpiry);
+}
+
 }  // namespace content
diff --git a/content/browser/conversions/conversion_policy.h b/content/browser/conversions/conversion_policy.h
index 43f8423..bbba558 100644
--- a/content/browser/conversions/conversion_policy.h
+++ b/content/browser/conversions/conversion_policy.h
@@ -10,6 +10,8 @@
 #include <string>
 #include <vector>
 
+#include "base/optional.h"
+#include "base/time/time.h"
 #include "content/common/content_export.h"
 
 namespace content {
@@ -44,9 +46,20 @@
   virtual std::string GetSanitizedConversionData(
       uint64_t conversion_data) const;
 
+  // Gets the sanitized impression data for an impression. Returns the decoded
+  // number as a hexadecimal string.
+  virtual std::string GetSanitizedImpressionData(
+      uint64_t impression_data) const;
+
+  // Returns the expiry time for an impression that is clamped to a maximum
+  // value of 30 days from |impression_time|.
+  virtual base::Time GetExpiryTimeForImpression(
+      const base::Optional<base::TimeDelta>& declared_expiry,
+      base::Time impression_time) const;
+
  private:
   // For testing only.
-  ConversionPolicy(std::unique_ptr<NoiseProvider> noise_provider);
+  explicit ConversionPolicy(std::unique_ptr<NoiseProvider> noise_provider);
 
   std::unique_ptr<NoiseProvider> noise_provider_;
 };
diff --git a/content/browser/conversions/conversion_policy_unittest.cc b/content/browser/conversions/conversion_policy_unittest.cc
index 6eaf866..7eaf4abe 100644
--- a/content/browser/conversions/conversion_policy_unittest.cc
+++ b/content/browser/conversions/conversion_policy_unittest.cc
@@ -48,6 +48,15 @@
                      ->GetSanitizedConversionData(conversion_data));
 }
 
+TEST_F(ConversionPolicyTest, SanitizeHighEntropyImpressionData_Unchanged) {
+  uint64_t impression_data = 256LU;
+
+  // The policy should not alter the impression data, and return the hexadecimal
+  // representation.
+  EXPECT_EQ("100",
+            ConversionPolicy().GetSanitizedImpressionData(impression_data));
+}
+
 TEST_F(ConversionPolicyTest, ThreeBitConversionData_Unchanged) {
   std::unique_ptr<ConversionPolicy> policy = ConversionPolicy::CreateForTesting(
       std::make_unique<EmptyNoiseProvider>());
@@ -64,4 +73,27 @@
                      ->GetSanitizedConversionData(4UL));
 }
 
+TEST_F(ConversionPolicyTest, NoExpiryForImpression_DefaultUsed) {
+  base::Time impression_time = base::Time::Now();
+  EXPECT_EQ(impression_time + base::TimeDelta::FromDays(30),
+            ConversionPolicy().GetExpiryTimeForImpression(
+                /*declared_expiry=*/base::nullopt, impression_time));
+}
+
+TEST_F(ConversionPolicyTest, LargeImpressionExpirySpecified_ClampedTo30Days) {
+  constexpr base::TimeDelta declared_expiry = base::TimeDelta::FromDays(60);
+  base::Time impression_time = base::Time::Now();
+  EXPECT_EQ(impression_time + base::TimeDelta::FromDays(30),
+            ConversionPolicy().GetExpiryTimeForImpression(declared_expiry,
+                                                          impression_time));
+}
+
+TEST_F(ConversionPolicyTest, ImpressionExpirySpecified_ExpiryOverrideDefault) {
+  constexpr base::TimeDelta declared_expiry = base::TimeDelta::FromDays(10);
+  base::Time impression_time = base::Time::Now();
+  EXPECT_EQ(impression_time + base::TimeDelta::FromDays(10),
+            ConversionPolicy().GetExpiryTimeForImpression(declared_expiry,
+                                                          impression_time));
+}
+
 }  // namespace content
diff --git a/content/browser/conversions/conversion_storage_sql.cc b/content/browser/conversions/conversion_storage_sql.cc
index 66aa60c..696c294 100644
--- a/content/browser/conversions/conversion_storage_sql.cc
+++ b/content/browser/conversions/conversion_storage_sql.cc
@@ -28,16 +28,10 @@
     FILE_PATH_LITERAL("Conversions");
 
 std::string SerializeOrigin(const url::Origin& origin) {
-  // Conversion API is only designed to be used for secure contexts (targets and
-  // reporting endpoints). We should have filtered out bad origins at a higher
-  // layer.
-  //
-  // Because we only allow https origins to use the API, we could potentially
-  // omit the scheme from storage to save 8 bytes per origin. However this would
-  // require maintaining our own serialization logic and also complicates
-  // extending storage to other scheme in the future.
-  DCHECK(!origin.opaque());
-  DCHECK_EQ(url::kHttpsScheme, origin.scheme());
+  // TODO(johnidel): Conversion API is only designed to be used for secure
+  // contexts (targets and reporting endpoints). We should have filtered out bad
+  // origins at a higher layer. When impression origin is properly available,
+  // this can be enforced via DCHECK.
   return origin.Serialize();
 }
 
@@ -92,6 +86,12 @@
     const StorableImpression& impression) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
+  // Cleanup any impression that may be expired by this point. This is done when
+  // an impression is added to prevent additional logic for cleaning the table
+  // while providing a guarantee that the size of the table is proportional to
+  // the number of active impression.
+  DeleteExpiredImpressions();
+
   // Wrap the deactivation and insertion in the same transaction. If the
   // deactivation fails, we do not want to store the new impression as we may
   // return the wrong set of impressions for a conversion.
diff --git a/content/browser/conversions/impression_declaration_browsertest.cc b/content/browser/conversions/impression_declaration_browsertest.cc
new file mode 100644
index 0000000..70c90023
--- /dev/null
+++ b/content/browser/conversions/impression_declaration_browsertest.cc
@@ -0,0 +1,401 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stdint.h>
+#include <memory>
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "base/time/time.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/default_handlers.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "url/gurl.h"
+
+namespace content {
+
+// WebContentsObserver that waits until an impression is available on a
+// navigation handle for a finished navigation.
+class ImpressionObserver : public WebContentsObserver {
+ public:
+  explicit ImpressionObserver(WebContents* contents)
+      : WebContentsObserver(contents) {}
+
+  // WebContentsObserver
+  void DidFinishNavigation(NavigationHandle* navigation_handle) override {
+    if (!navigation_handle->GetImpression()) {
+      if (waiting_for_null_impression_)
+        impression_loop_.Quit();
+      return;
+    }
+
+    last_impression_ = *(navigation_handle->GetImpression());
+
+    if (!waiting_for_null_impression_)
+      impression_loop_.Quit();
+  }
+
+  const Impression& last_impression() { return *last_impression_; }
+
+  const Impression& WaitForImpression() {
+    impression_loop_.Run();
+    return last_impression();
+  }
+
+  bool WaitForNavigationWithNoImpression() {
+    waiting_for_null_impression_ = true;
+    impression_loop_.Run();
+    waiting_for_null_impression_ = false;
+    return true;
+  }
+
+ private:
+  base::Optional<Impression> last_impression_;
+  bool waiting_for_null_impression_ = false;
+  base::RunLoop impression_loop_;
+};
+
+class ImpressionDeclarationBrowserTest : public ContentBrowserTest {
+ public:
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    embedded_test_server()->ServeFilesFromSourceDirectory(
+        "content/test/data/conversions");
+    content::SetupCrossSiteRedirector(embedded_test_server());
+    ASSERT_TRUE(embedded_test_server()->Start());
+
+    https_server_ = std::make_unique<net::EmbeddedTestServer>(
+        net::EmbeddedTestServer::TYPE_HTTPS);
+    https_server_->SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES);
+    net::test_server::RegisterDefaultHandlers(https_server_.get());
+    https_server_->ServeFilesFromSourceDirectory(
+        "content/test/data/conversions");
+    SetupCrossSiteRedirector(https_server_.get());
+    ASSERT_TRUE(https_server_->Start());
+  }
+
+  WebContents* web_contents() { return shell()->web_contents(); }
+
+  net::EmbeddedTestServer* https_server() { return https_server_.get(); }
+
+ private:
+  std::unique_ptr<net::EmbeddedTestServer> https_server_;
+};
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionTagClicked_ImpressionReceived) {
+  ImpressionObserver impression_observer(web_contents());
+  GURL page_url =
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html");
+  EXPECT_TRUE(NavigateToURL(web_contents(), page_url));
+
+  // Create an anchor tag with impression attributes and click the link. By
+  // default the target is set to "_top".
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTagWithReportingAndExpiry("link" /* id */,
+                        "page_with_conversion_redirect.html" /* url */,
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */,
+                        "https://report.com" /* report_origin */,
+                        1000 /* expiry */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  // Wait for the impression to be seen by the observer.
+  Impression last_impression = impression_observer.WaitForImpression();
+
+  // Verify the attributes of the impression are set as expected.
+  EXPECT_EQ(1UL, last_impression.impression_data);
+  EXPECT_EQ(url::Origin::Create(GURL("https://a.com")),
+            last_impression.conversion_destination);
+  EXPECT_EQ(url::Origin::Create(GURL("https://report.com")),
+            last_impression.reporting_origin);
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), *last_impression.expiry);
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionTagNavigatesRemoteFrame_ImpressionReceived) {
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ShellAddedObserver new_shell_observer;
+
+  // Create an impression tag with a target frame that does not exist, which
+  // will open a new window to navigate.
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTagWithTarget("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */,
+                        "target" /* target */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  ImpressionObserver impression_observer(
+      new_shell_observer.GetShell()->web_contents());
+
+  // Wait for the impression to be seen by the observer.
+  Impression last_impression = impression_observer.WaitForImpression();
+  EXPECT_EQ(1UL, impression_observer.last_impression().impression_data);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    ImpressionDeclarationBrowserTest,
+    ImpressionTagNavigatesExistingRemoteFrame_ImpressionReceived) {
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  WebContents* initial_web_contents = web_contents();
+
+  ShellAddedObserver new_shell_observer;
+  GURL remote_url = https_server()->GetURL("c.test", "/title.html");
+  EXPECT_TRUE(ExecJs(web_contents(),
+                     JsReplace("window.open($1, 'target');", remote_url)));
+
+  // Get the new web contents associated with the remote frame.
+  WebContents* remote_web_contents =
+      new_shell_observer.GetShell()->web_contents();
+
+  // Click on the impression and target the existing remote frame.
+  EXPECT_TRUE(ExecJs(initial_web_contents, R"(
+    createImpressionTagWithTarget("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */,
+                        "target" /* target */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  ImpressionObserver impression_observer(remote_web_contents);
+
+  // Wait for the impression to be seen by the observer.
+  Impression last_impression = impression_observer.WaitForImpression();
+  EXPECT_EQ(1UL, impression_observer.last_impression().impression_data);
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionTagWithOutOfBoundData_DefaultedTo0) {
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  // The provided data overflows an unsigned 64 bit int, and should be handled
+  // properly.
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "FFFFFFFFFFFFFFFFFFFFFF" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  // Wait for the impression to be seen by the observer.
+  Impression last_impression = impression_observer.WaitForImpression();
+  EXPECT_EQ(0UL, impression_observer.last_impression().impression_data);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    ImpressionDeclarationBrowserTest,
+    ImpressionTagNavigatesFromMiddleClick_ImpressionReceived) {
+  GURL page_url =
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html");
+  EXPECT_TRUE(NavigateToURL(web_contents(), page_url));
+
+  ShellAddedObserver new_shell_observer;
+
+  // Create an impression tag that is opened via middle click. This navigates in
+  // a new WebContents.
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateMiddleClick(\'link\');"));
+
+  ImpressionObserver impression_observer(
+      new_shell_observer.GetShell()->web_contents());
+
+  Impression last_impression = impression_observer.WaitForImpression();
+
+  // Verify the attributes of the impression are set as expected.
+  EXPECT_EQ(1UL, last_impression.impression_data);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    ImpressionDeclarationBrowserTest,
+    ImpressionTagNavigatesFromEnterPress_ImpressionReceived) {
+  GURL page_url =
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html");
+  EXPECT_TRUE(NavigateToURL(web_contents(), page_url));
+
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+
+  // Focus the element, wait for it to receive focus, and simulate an enter
+  // press.
+  base::string16 expected_title = base::ASCIIToUTF16("focused");
+  content::TitleWatcher title_watcher(web_contents(), expected_title);
+  EXPECT_TRUE(ExecJs(shell(), R"(
+    let link = document.getElementById('link');
+    link.addEventListener('focus', function() { document.title = 'focused'; });
+    link.focus();)"));
+  EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+  content::SimulateKeyPress(web_contents(), ui::DomKey::ENTER,
+                            ui::DomCode::ENTER, ui::VKEY_RETURN, false, false,
+                            false, false);
+
+  ImpressionObserver impression_observer(web_contents());
+  Impression last_impression = impression_observer.WaitForImpression();
+
+  // Verify the attributes of the impression are set as expected.
+  EXPECT_EQ(1UL, last_impression.impression_data);
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionOnInsecureSite_NotDeclared) {
+  // Navigate to a page with the non-https server.
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(), embedded_test_server()->GetURL(
+                          "b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  // We should see a null impression on the navigation
+  EXPECT_TRUE(impression_observer.WaitForNavigationWithNoImpression());
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionWithInsecureDestination_NotDeclared) {
+  // Navigate to a page with the non-https server.
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "http://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  // We should see a null impression on the navigation
+  EXPECT_TRUE(impression_observer.WaitForNavigationWithNoImpression());
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionWithInsecureReportingOrigin_NotDeclared) {
+  // Navigate to a page with the non-https server.
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTagWithReportingAndExpiry("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */,
+                        "http://reporting.com" /* report_origin */,
+                        1000 /* expiry */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+
+  // We should see a null impression on the navigation
+  EXPECT_TRUE(impression_observer.WaitForNavigationWithNoImpression());
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       ImpressionNavigationReloads_NoImpression) {
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+  EXPECT_EQ(1UL, impression_observer.WaitForImpression().impression_data);
+
+  ImpressionObserver reload_observer(web_contents());
+  shell()->Reload();
+
+  // The reload navigation should not have an impression set.
+  EXPECT_TRUE(reload_observer.WaitForNavigationWithNoImpression());
+}
+
+// Same as the above test but via a renderer initiated reload.
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       RendererReloadImpressionNavigation_NoImpression) {
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), R"(
+    createImpressionTag("link",
+                        "page_with_conversion_redirect.html",
+                        "1" /* impression data */,
+                        "https://a.com" /* conversion_destination */);)"));
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'link\');"));
+  EXPECT_EQ(1UL, impression_observer.WaitForImpression().impression_data);
+
+  ImpressionObserver reload_observer(web_contents());
+  EXPECT_TRUE(ExecJs(web_contents(), "window.location.reload()"));
+
+  // The reload navigation should not have an impression set.
+  EXPECT_TRUE(reload_observer.WaitForNavigationWithNoImpression());
+}
+
+IN_PROC_BROWSER_TEST_F(ImpressionDeclarationBrowserTest,
+                       BackNavigateToImpressionNavigation_NoImpression) {
+  EXPECT_TRUE(NavigateToURL(
+      web_contents(),
+      https_server()->GetURL("b.test", "/page_with_impression_creator.html")));
+
+  ImpressionObserver impression_observer(web_contents());
+
+  // Click the default impression on the page.
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'impression_tag\');"));
+  EXPECT_EQ(1UL, impression_observer.WaitForImpression().impression_data);
+
+  // Navigate away so we can back navigate to the impression's navigated page.
+  EXPECT_TRUE(NavigateToURL(web_contents(), GURL("about:blank")));
+
+  // The back navigation should not have an impression set.
+  ImpressionObserver back_nav_observer(web_contents());
+  shell()->GoBackOrForward(-1);
+  EXPECT_TRUE(back_nav_observer.WaitForNavigationWithNoImpression());
+
+  // Navigate back to the original page and ensure subsequent clicks also log
+  // impressions.
+  ImpressionObserver second_back_nav_observer(web_contents());
+  shell()->GoBackOrForward(-1);
+  EXPECT_TRUE(second_back_nav_observer.WaitForNavigationWithNoImpression());
+
+  // Wait for the page to load and render the impression tag.
+  WaitForLoadStop(web_contents());
+  ImpressionObserver second_impression_observer(web_contents());
+  EXPECT_TRUE(ExecJs(shell(), "simulateClick(\'impression_tag\');"));
+  EXPECT_EQ(1UL,
+            second_impression_observer.WaitForImpression().impression_data);
+}
+
+}  // namespace content
diff --git a/content/browser/conversions/storable_impression.cc b/content/browser/conversions/storable_impression.cc
index 0236f69..e926a411 100644
--- a/content/browser/conversions/storable_impression.cc
+++ b/content/browser/conversions/storable_impression.cc
@@ -25,7 +25,6 @@
       impression_id_(impression_id) {
   // 30 days is the max allowed expiry for an impression.
   DCHECK_GE(base::TimeDelta::FromDays(30), expiry_time - impression_time);
-  DCHECK(!impression_origin.opaque());
   DCHECK(!reporting_origin.opaque());
   DCHECK(!conversion_origin.opaque());
 }
diff --git a/content/browser/frame_host/embedding_token_browsertest.cc b/content/browser/frame_host/embedding_token_browsertest.cc
index 5d8f929..b954dcf2 100644
--- a/content/browser/frame_host/embedding_token_browsertest.cc
+++ b/content/browser/frame_host/embedding_token_browsertest.cc
@@ -5,6 +5,7 @@
 #include "base/unguessable_token.h"
 #include "content/browser/frame_host/frame_tree.h"
 #include "content/browser/web_contents/web_contents_impl.h"
+#include "content/common/content_navigation_policy.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/content_browser_test.h"
 #include "content/public/test/content_browser_test_utils.h"
@@ -169,7 +170,13 @@
                       b_url.Resolve("valid.html"));
   auto new_child_0_token = root->child_at(0)->GetEmbeddingToken();
   ASSERT_TRUE(new_child_0_token.has_value());
-  EXPECT_EQ(child_0_token, new_child_0_token);
+  // If we are creating a new frame even for same-site navigations then we would
+  // expect a different token.
+  if (CreateNewHostForSameSiteSubframe()) {
+    EXPECT_NE(child_0_token, new_child_0_token);
+  } else {
+    EXPECT_EQ(child_0_token, new_child_0_token);
+  }
 
   // TODO(ckitagawa): Somehow assert that the parent and child have matching
   // embedding tokens in parent HTMLOwnerElement and child LocalFrame.
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index f950552a..369d15f 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -2224,7 +2224,8 @@
     const std::string& method,
     scoped_refptr<network::ResourceRequestBody> post_body,
     const std::string& extra_headers,
-    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory) {
+    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
+    const base::Optional<Impression>& impression) {
   if (is_renderer_initiated)
     DCHECK(initiator_origin.has_value());
 
@@ -2328,6 +2329,7 @@
   /* params.input_start: skip */
   params.was_activated = mojom::WasActivatedOption::kUnknown;
   /* params.reload_type: skip */
+  params.impression = impression;
 
   std::unique_ptr<NavigationRequest> request =
       CreateNavigationRequestFromLoadParams(
@@ -3243,7 +3245,8 @@
       node, std::move(common_params), std::move(commit_params),
       !params.is_renderer_initiated, extra_headers_crlf, frame_entry, entry,
       request_body,
-      params.navigation_ui_data ? params.navigation_ui_data->Clone() : nullptr);
+      params.navigation_ui_data ? params.navigation_ui_data->Clone() : nullptr,
+      params.impression);
   navigation_request->set_from_download_cross_origin_redirect(
       params.from_download_cross_origin_redirect);
   return navigation_request;
@@ -3352,7 +3355,8 @@
   return NavigationRequest::CreateBrowserInitiated(
       frame_tree_node, std::move(common_params), std::move(commit_params),
       !entry->is_renderer_initiated(), entry->extra_headers(), frame_entry,
-      entry, request_body, nullptr /* navigation_ui_data */);
+      entry, request_body, nullptr /* navigation_ui_data */,
+      base::nullopt /* impression */);
 }
 
 void NavigationControllerImpl::NotifyNavigationEntryCommitted(
@@ -3436,7 +3440,8 @@
           node, std::move(common_params), std::move(commit_params),
           true /* browser_initiated */, "" /* extra_headers */,
           nullptr /* frame_entry */, nullptr /* entry */,
-          nullptr /* post_body */, nullptr /* navigation_ui_data */);
+          nullptr /* post_body */, nullptr /* navigation_ui_data */,
+          base::nullopt /* impression */);
   navigation_request->set_post_commit_error_page_html(error_page_html);
   navigation_request->set_net_error(error);
   node->CreatedNavigationRequest(std::move(navigation_request));
diff --git a/content/browser/frame_host/navigation_controller_impl.h b/content/browser/frame_host/navigation_controller_impl.h
index 00ab09d..6a73d5f1 100644
--- a/content/browser/frame_host/navigation_controller_impl.h
+++ b/content/browser/frame_host/navigation_controller_impl.h
@@ -164,7 +164,8 @@
       const std::string& method,
       scoped_refptr<network::ResourceRequestBody> post_body,
       const std::string& extra_headers,
-      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory);
+      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
+      const base::Optional<Impression>& impression);
 
   // Whether this is the initial navigation in an unmodified new tab.  In this
   // case, we know there is no content displayed in the page.
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index 58365f2..6c5314d4 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -4841,7 +4841,7 @@
       true /* is_renderer_initiated */, main_test_rfh()->GetSiteInstance(),
       Referrer(), ui::PAGE_TRANSITION_LINK,
       false /* should_replace_current_entry */, NavigationDownloadPolicy(),
-      "GET", nullptr, "", nullptr);
+      "GET", nullptr, "", nullptr, base::nullopt);
 
   // Clean up the handler.
   BrowserURLHandlerImpl::GetInstance()->SetFixupHandlerForTesting(nullptr);
@@ -4876,7 +4876,7 @@
       frame, other_contents_url, url::Origin::Create(main_url),
       true /* is_renderer_initiated */, main_test_rfh()->GetSiteInstance(),
       Referrer(), ui::PAGE_TRANSITION_LINK, should_replace_current_entry,
-      NavigationDownloadPolicy(), "GET", nullptr, "", nullptr);
+      NavigationDownloadPolicy(), "GET", nullptr, "", nullptr, base::nullopt);
   NavigationRequest* request = node->navigation_request();
   ASSERT_TRUE(request);
 
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index a878b8a..5b22d00 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -678,7 +678,8 @@
     FrameNavigationEntry* frame_entry,
     NavigationEntryImpl* entry,
     const scoped_refptr<network::ResourceRequestBody>& post_body,
-    std::unique_ptr<NavigationUIData> navigation_ui_data) {
+    std::unique_ptr<NavigationUIData> navigation_ui_data,
+    const base::Optional<Impression>& impression) {
   // TODO(arthursonzogni): Form submission with the "GET" method is possible.
   // This is not currently handled here.
   bool is_form_submission = !!post_body;
@@ -692,7 +693,8 @@
       std::string() /* searchable_form_encoding */,
       GURL() /* client_side_redirect_url */,
       base::nullopt /* devtools_initiator_info */,
-      false /* attach_same_site_cookies */, nullptr /* trust_token_params */);
+      false /* attach_same_site_cookies */, nullptr /* trust_token_params */,
+      impression);
 
   // Shift-Reload forces bypassing caches and service workers.
   if (common_params->navigation_type ==
@@ -3978,6 +3980,10 @@
   return common_params().href_translate;
 }
 
+const base::Optional<Impression>& NavigationRequest::GetImpression() {
+  return begin_params()->impression;
+}
+
 const base::Optional<url::Origin>& NavigationRequest::GetInitiatorOrigin() {
   return common_params().initiator_origin;
 }
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index 9f41feb..b7a9824 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -33,6 +33,7 @@
 #include "content/public/browser/navigation_type.h"
 #include "content/public/browser/peak_gpu_memory_tracker.h"
 #include "content/public/browser/render_process_host_observer.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/previews_state.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
@@ -158,7 +159,8 @@
       FrameNavigationEntry* frame_entry,
       NavigationEntryImpl* entry,
       const scoped_refptr<network::ResourceRequestBody>& post_body,
-      std::unique_ptr<NavigationUIData> navigation_ui_data);
+      std::unique_ptr<NavigationUIData> navigation_ui_data,
+      const base::Optional<Impression>& impression);
 
   // Creates a request for a renderer-intiated navigation.
   // Note: |body| is sent to the IO thread when calling BeginNavigation, and
@@ -256,6 +258,7 @@
   bool WasResponseCached() override;
   const net::ProxyServer& GetProxyServer() override;
   const std::string& GetHrefTranslate() override;
+  const base::Optional<Impression>& GetImpression() override;
   const base::Optional<url::Origin>& GetInitiatorOrigin() override;
   bool IsSameProcess() override;
   int GetNavigationEntryOffset() override;
diff --git a/content/browser/frame_host/navigation_request_unittest.cc b/content/browser/frame_host/navigation_request_unittest.cc
index 3c36298..88e5370 100644
--- a/content/browser/frame_host/navigation_request_unittest.cc
+++ b/content/browser/frame_host/navigation_request_unittest.cc
@@ -195,7 +195,9 @@
     request_ = NavigationRequest::CreateBrowserInitiated(
         main_test_rfh()->frame_tree_node(), std::move(common_params),
         CreateCommitNavigationParams(), false /* browser-initiated */,
-        std::string(), nullptr, nullptr, nullptr, nullptr);
+        std::string() /* extra_headers */, nullptr /* frame_entry */,
+        nullptr /* entry */, nullptr /* post_body */,
+        nullptr /* navigation_ui_data */, base::nullopt /* impression */);
     request_->StartNavigation(true);
   }
 
diff --git a/content/browser/frame_host/navigator.h b/content/browser/frame_host/navigator.h
index 6b2a90e..23bda4c8 100644
--- a/content/browser/frame_host/navigator.h
+++ b/content/browser/frame_host/navigator.h
@@ -13,6 +13,7 @@
 #include "content/common/frame_messages.h"
 #include "content/common/navigation_params.mojom.h"
 #include "content/public/browser/navigation_controller.h"
+#include "content/public/common/impression.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/navigation/triggering_event_info.h"
@@ -108,7 +109,8 @@
       bool user_gesture,
       blink::TriggeringEventInfo triggering_event_info,
       const std::string& href_translate,
-      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory) {}
+      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
+      const base::Optional<Impression>& impression) {}
 
   // Called when a document requests a navigation in another document through a
   // RenderFrameProxy. If |method| is "POST", then |post_body| needs to specify
@@ -126,7 +128,8 @@
       scoped_refptr<network::ResourceRequestBody> post_body,
       const std::string& extra_headers,
       scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
-      bool has_user_gesture) {}
+      bool has_user_gesture,
+      const base::Optional<Impression>& impression) {}
 
   // Called after BeforeUnloadCompleted callback is invoked from the renderer.
   // If |frame_tree_node| has a NavigationRequest waiting for the renderer
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 32e9963b..3441101 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -362,7 +362,8 @@
     bool user_gesture,
     blink::TriggeringEventInfo triggering_event_info,
     const std::string& href_translate,
-    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory) {
+    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
+    const base::Optional<Impression>& impression) {
   // Note: This can be called for subframes (even when OOPIFs are not possible)
   // if the disposition calls for a different window.
 
@@ -425,6 +426,7 @@
 
   params.blob_url_loader_factory = std::move(blob_url_loader_factory);
   params.href_translate = href_translate;
+  params.impression = impression;
 
   if (delegate_)
     delegate_->OpenURL(params);
@@ -443,7 +445,8 @@
     scoped_refptr<network::ResourceRequestBody> post_body,
     const std::string& extra_headers,
     scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
-    bool has_user_gesture) {
+    bool has_user_gesture,
+    const base::Optional<Impression>& impression) {
   // |method != "POST"| should imply absence of |post_body|.
   if (method != "POST" && post_body) {
     NOTREACHED();
@@ -481,7 +484,7 @@
       render_frame_host, url, initiator_origin, is_renderer_initiated,
       source_site_instance, referrer_to_use, page_transition,
       should_replace_current_entry, download_policy, method, post_body,
-      extra_headers, std::move(blob_url_loader_factory));
+      extra_headers, std::move(blob_url_loader_factory), impression);
 }
 
 void NavigatorImpl::BeforeUnloadCompleted(FrameTreeNode* frame_tree_node,
diff --git a/content/browser/frame_host/navigator_impl.h b/content/browser/frame_host/navigator_impl.h
index 2ef39711..9007fe1 100644
--- a/content/browser/frame_host/navigator_impl.h
+++ b/content/browser/frame_host/navigator_impl.h
@@ -71,8 +71,8 @@
       bool user_gesture,
       blink::TriggeringEventInfo triggering_event_info,
       const std::string& href_translate,
-      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory)
-      override;
+      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
+      const base::Optional<Impression>& impression) override;
   void NavigateFromFrameProxy(
       RenderFrameHostImpl* render_frame_host,
       const GURL& url,
@@ -86,7 +86,8 @@
       scoped_refptr<network::ResourceRequestBody> post_body,
       const std::string& extra_headers,
       scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
-      bool has_user_gesture) override;
+      bool has_user_gesture,
+      const base::Optional<Impression>& impression) override;
   void BeforeUnloadCompleted(FrameTreeNode* frame_tree_node,
                              bool proceed,
                              const base::TimeTicks& proceed_time) override;
diff --git a/content/browser/frame_host/render_document_host_user_data_browsertest.cc b/content/browser/frame_host/render_document_host_user_data_browsertest.cc
new file mode 100644
index 0000000..9745046
--- /dev/null
+++ b/content/browser/frame_host/render_document_host_user_data_browsertest.cc
@@ -0,0 +1,558 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/public/browser/render_document_host_user_data.h"
+
+#include "base/command_line.h"
+#include "base/memory/weak_ptr.h"
+#include "base/test/bind_test_util.h"
+#include "base/test/scoped_feature_list.h"
+#include "content/browser/frame_host/frame_tree_node.h"
+#include "content/browser/frame_host/navigation_request.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/site_isolation_policy.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_features.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/navigation_handle_observer.h"
+#include "content/public/test/render_frame_host_test_support.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/test_navigation_throttle.h"
+#include "content/public/test/test_navigation_throttle_inserter.h"
+#include "content/public/test/test_utils.h"
+#include "content/public/test/url_loader_interceptor.h"
+#include "content/shell/browser/shell.h"
+#include "content/test/content_browser_test_utils_internal.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/test/url_request/url_request_failed_job.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace content {
+
+namespace {
+
+int next_id = 0;
+
+// Example class which inherits the RenderDocumentHostUserData, all the data is
+// associated to the lifetime of the document.
+class Data : public RenderDocumentHostUserData<Data> {
+ public:
+  ~Data() override = default;
+
+  base::WeakPtr<Data> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); }
+
+  int unique_id() { return unique_id_; }
+
+ private:
+  explicit Data(RenderFrameHost* render_frame_host) { unique_id_ = ++next_id; }
+
+  friend class content::RenderDocumentHostUserData<Data>;
+
+  int unique_id_;
+
+  base::WeakPtrFactory<Data> weak_ptr_factory_{this};
+
+  RENDER_DOCUMENT_HOST_USER_USER_DATA_KEY_DECL();
+};
+
+RENDER_DOCUMENT_HOST_USER_DATA_KEY_IMPL(Data)
+
+}  // namespace
+
+class RenderDocumentHostUserDataTest : public ContentBrowserTest {
+ public:
+  ~RenderDocumentHostUserDataTest() override = default;
+
+ protected:
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    ContentBrowserTest::SetUpOnMainThread();
+  }
+
+  WebContentsImpl* web_contents() const {
+    return static_cast<WebContentsImpl*>(shell()->web_contents());
+  }
+
+  RenderFrameHostImpl* top_frame_host() {
+    return web_contents()->GetFrameTree()->root()->current_frame_host();
+  }
+};
+
+// Test basic functionality of RenderDocumentHostUserData.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       GetAndCreateForCurrentDocument) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+
+  // 2) Get the Data associated with this RenderFrameHost. It should be null
+  // before creation.
+  Data* data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_FALSE(data);
+
+  // 3) Create Data and check that GetForCurrentDocument shouldn't return null
+  // now.
+  Data::CreateForCurrentDocument(rfh_a);
+  data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data);
+}
+
+// Tests that RenderDocumentHostUserData objects are different for each
+// RenderFrameHost in FrameTree when there are multiple frames.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       CheckForMultipleRFHsInFrameTree) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+
+  // 1) Navigate to a(b).
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+  RenderFrameHostImpl* rfh_b = rfh_a->child_at(0)->current_frame_host();
+
+  // 2) Create RenderDocumentHostUserData associated with both RenderFrameHosts
+  // a and b.
+  Data::CreateForCurrentDocument(rfh_a);
+  Data* data_a = Data::GetForCurrentDocument(rfh_a);
+  Data::CreateForCurrentDocument(rfh_b);
+  Data* data_b = Data::GetForCurrentDocument(rfh_b);
+  EXPECT_TRUE(data_a);
+  EXPECT_TRUE(data_b);
+
+  // 3) Check that RDHUD objects for both RenderFrameHost a and b have different
+  // unique_id's.
+  EXPECT_NE(data_a->unique_id(), data_b->unique_id());
+}
+
+// Tests that RenderDocumentHostUserData objects are cleared when the renderer
+// process crashes even when having RenderFrameHost that still exists.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, CheckForCrashedFrame) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+
+  // 2) Create RenderDocumentHostUserData associated with A.
+  Data::CreateForCurrentDocument(rfh_a);
+  base::WeakPtr<Data> data = Data::GetForCurrentDocument(rfh_a)->GetWeakPtr();
+  EXPECT_TRUE(data);
+
+  // 3) Make the renderer crash.
+  RenderProcessHost* renderer_process = rfh_a->GetProcess();
+  RenderProcessHostWatcher crash_observer(
+      renderer_process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
+  renderer_process->Shutdown(0);
+  crash_observer.Wait();
+
+  // 4) Check if the RDHUD object is deleted after renderer process crashes even
+  // when RFH is around.
+  EXPECT_EQ(top_frame_host(), rfh_a);
+  EXPECT_FALSE(rfh_a->IsRenderFrameLive());
+  EXPECT_FALSE(data);
+}
+
+// Tests that RenderDocumentHostUserData object is created for speculative
+// RenderFrameHost and check if they point to same object before and after
+// commit.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       CheckIDsForSpeculativeRFHBeforeAndAfterCommit) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title2.html"));
+
+  // Isolate "b.com" so we are guaranteed to get a different process
+  // for navigations to this origin on Android. Doing this ensures that a
+  // speculative RenderFrameHost is used.
+  IsolateOriginsForTesting(embedded_test_server(), shell()->web_contents(),
+                           {"b.com"});
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+
+  // 2) Start navigation to B, but don't commit yet.
+  TestNavigationManager manager(shell()->web_contents(), url_b);
+  shell()->LoadURL(url_b);
+  EXPECT_TRUE(manager.WaitForRequestStart());
+
+  FrameTreeNode* root = web_contents()->GetFrameTree()->root();
+  RenderFrameHostImpl* pending_rfh =
+      root->render_manager()->speculative_frame_host();
+  NavigationRequest* navigation_request = root->navigation_request();
+  EXPECT_EQ(navigation_request->associated_site_instance_type(),
+            NavigationRequest::AssociatedSiteInstanceType::SPECULATIVE);
+  EXPECT_TRUE(pending_rfh);
+
+  // 3) While there is a speculative RenderFrameHost in the root FrameTreeNode,
+  // get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(pending_rfh);
+  Data* data_before_commit = Data::GetForCurrentDocument(pending_rfh);
+  EXPECT_TRUE(data_before_commit);
+
+  // 4) Let the navigation finish and make sure it is succeeded.
+  manager.WaitForNavigationFinished();
+  EXPECT_EQ(url_b, web_contents()->GetMainFrame()->GetLastCommittedURL());
+
+  RenderFrameHostImpl* rfh_b = top_frame_host();
+  EXPECT_EQ(pending_rfh, rfh_b);
+  Data* data_after_commit = Data::GetForCurrentDocument(rfh_b);
+  EXPECT_TRUE(data_after_commit);
+
+  // 5) Check |data_before_commit| and |data_after_commit| have same ID.
+  EXPECT_EQ(data_before_commit->unique_id(), data_after_commit->unique_id());
+}
+
+// Tests that RenderDocumentHostUserData object is deleted when the speculative
+// RenderFrameHost gets deleted before being able to commit.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, SpeculativeRFHDeleted) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+  GURL url_c(embedded_test_server()->GetURL("c.com", "/hung"));
+  IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess());
+
+  // 1) Initial state: A(B).
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = web_contents()->GetMainFrame();
+  RenderFrameHostImpl* rfh_b = rfh_a->child_at(0)->current_frame_host();
+
+  // RFH B has an unload handler.
+  auto detach_filter_b = base::MakeRefCounted<DropMessageFilter>(
+      FrameMsgStart, FrameHostMsg_Detach::ID);
+  rfh_b->GetProcess()->AddFilter(detach_filter_b.get());
+  EXPECT_TRUE(ExecJs(rfh_b, "onunload=function(){}"));
+
+  // 2) Navigation from B to C. The server is slow to respond.
+  TestNavigationManager navigation_observer(web_contents(), url_c);
+  EXPECT_TRUE(ExecJs(rfh_b, JsReplace("location.href=$1;", url_c)));
+  EXPECT_TRUE(navigation_observer.WaitForRequestStart());
+  RenderFrameHostImpl* pending_rfh_c =
+      rfh_b->frame_tree_node()->render_manager()->speculative_frame_host();
+
+  // 3) While there is a speculative RenderFrameHost get the Data associated
+  // with it.
+  Data::CreateForCurrentDocument(pending_rfh_c);
+  base::WeakPtr<Data> data =
+      Data::GetForCurrentDocument(pending_rfh_c)->GetWeakPtr();
+  EXPECT_TRUE(data);
+
+  // 4) Delete the speculative RenderFrameHost by navigating from a
+  // RenderFrameHost in pending deletion.
+  RenderFrameDeletedObserver delete_speculative_c(pending_rfh_c);
+  EXPECT_TRUE(
+      ExecJs(rfh_a, JsReplace("document.querySelector('iframe').remove();")));
+  delete_speculative_c.WaitUntilDeleted();
+  EXPECT_TRUE(delete_speculative_c.deleted());
+
+  // 5) Once the speculative RenderFrameHost is deleted, the associated
+  // RenderDocumentHostUserData should be deleted.
+  EXPECT_FALSE(data);
+}
+
+// Tests that RenderDocumentHostUserData is cleared when the RenderFrameHost is
+// deleted.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, RenderFrameHostDeleted) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+
+  // 1) Navigate to a(b).
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  FrameTreeNode* root = web_contents()->GetFrameTree()->root();
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+  RenderFrameHostImpl* rfh_b = rfh_a->child_at(0)->current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_b(rfh_b);
+
+  // 2) Get the Data associated with the rfh_b and check the data gets cleared
+  // on RenderFrameHost deletion.
+  Data::CreateForCurrentDocument(rfh_b);
+  base::WeakPtr<Data> data = Data::GetForCurrentDocument(rfh_b)->GetWeakPtr();
+  EXPECT_TRUE(data);
+
+  // 3) Detach the child frame.
+  EXPECT_TRUE(ExecJs(root, "document.querySelector('iframe').remove()"));
+
+  // 4) Once the RenderFrameHost is deleted, the associated
+  // RenderDocumentHostUserData should be deleted.
+  delete_observer_rfh_b.WaitUntilDeleted();
+  EXPECT_FALSE(data);
+}
+
+// Tests that RenderDocumentHostUserData object is not cleared when the
+// RenderFrameHost is in pending deletion state for both main frame and sub
+// frame.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       CheckInPendingDeletionState) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess());
+  std::string onunload_script = "window.onunload = function(){ while(1); }";
+  GURL url_ab(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+  GURL url_c(embedded_test_server()->GetURL("c.com", "/title1.html"));
+
+  // 1) Navigate to A(B).
+  EXPECT_TRUE(NavigateToURL(shell(), url_ab));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+  RenderFrameHostImpl* rfh_b = rfh_a->child_at(0)->current_frame_host();
+
+  // 2) Act as if there is a slow unload handler on rfh_a and rfh_b.
+  LeaveInPendingDeletionState(rfh_a);
+  rfh_b->SetSubframeUnloadTimeoutForTesting(base::TimeDelta::FromSeconds(30));
+  auto detach_filter = base::MakeRefCounted<DropMessageFilter>(
+      FrameMsgStart, FrameHostMsg_Detach::ID);
+  rfh_b->GetProcess()->AddFilter(detach_filter.get());
+  EXPECT_TRUE(ExecuteScript(rfh_b->frame_tree_node(), onunload_script));
+
+  // 3) Create RDHUD object for both rfh_a and rfh_b before running unload
+  // handlers.
+  Data::CreateForCurrentDocument(rfh_a);
+  Data::CreateForCurrentDocument(rfh_b);
+
+  base::WeakPtr<Data> data_a = Data::GetForCurrentDocument(rfh_a)->GetWeakPtr();
+  base::WeakPtr<Data> data_b = Data::GetForCurrentDocument(rfh_b)->GetWeakPtr();
+  EXPECT_TRUE(data_a);
+  EXPECT_TRUE(data_b);
+
+  // 4) Navigate from A(B) to C.
+  EXPECT_TRUE(NavigateToURL(shell(), url_c));
+
+  // 5) Check RDHUD objects |data_a| and |data_b| are not cleared when rfh_a and
+  // rfh_b are in pending deletion state.
+  EXPECT_EQ(rfh_a->unload_state_, RenderFrameHostImpl::UnloadState::InProgress);
+  EXPECT_EQ(rfh_b->unload_state_, RenderFrameHostImpl::UnloadState::InProgress);
+  EXPECT_TRUE(data_a);
+  EXPECT_TRUE(data_b);
+
+  EXPECT_FALSE(rfh_a->IsCurrent());
+  EXPECT_FALSE(rfh_b->IsCurrent());
+}
+
+// Tests that RenderDocumentHostUserData associated with RenderFrameHost is not
+// cleared on same document navigation.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       CommitSameDocumentNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_a2(embedded_test_server()->GetURL("a.com", "/title1.html#2"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+
+  // 2) Get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(rfh_a);
+  Data* data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data);
+
+  // 3) Navigate to A#2 (same document navigation).
+  EXPECT_TRUE(ExecJs(shell(), JsReplace("location = $1", url_a2.spec())));
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+  EXPECT_EQ(url_a2, web_contents()->GetMainFrame()->GetLastCommittedURL());
+
+  // 4) Check if the RDHUD objects are pointing to the same instance after
+  // navigation.
+  Data* data2 = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data2);
+  EXPECT_EQ(data->unique_id(), data2->unique_id());
+}
+
+// Tests that RenderDocumentHostUserData object is not cleared when navigation
+// is cancelled.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, CancelledNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+
+  // 2) Get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(rfh_a);
+  Data* data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data);
+
+  // 3) Cancel all navigation attempts.
+  TestNavigationThrottleInserter throttle_inserter(
+      shell()->web_contents(),
+      base::BindLambdaForTesting(
+          [&](NavigationHandle* handle) -> std::unique_ptr<NavigationThrottle> {
+            auto throttle = std::make_unique<TestNavigationThrottle>(handle);
+            throttle->SetResponse(TestNavigationThrottle::WILL_START_REQUEST,
+                                  TestNavigationThrottle::SYNCHRONOUS,
+                                  NavigationThrottle::CANCEL_AND_IGNORE);
+            return throttle;
+          }));
+
+  // 4) Try navigating to B.
+  EXPECT_FALSE(NavigateToURL(shell(), url_b));
+
+  // 5) We should still be showing page A.
+  EXPECT_EQ(rfh_a, top_frame_host());
+
+  // 6) The data shouldn't be cleared in the case of cancelled navigations and
+  // should be pointing to the same instances.
+  Data* data2 = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data2);
+  EXPECT_EQ(data->unique_id(), data2->unique_id());
+}
+
+// Tests that RenderDocumentHostUserData object is cleared when a failed
+// navigation results in an error page.
+// TODO(crbug.com/1065495): Fix the test flakiness.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+                       DISABLED_FailedNavigation) {
+  // This test is only valid if error page isolation is enabled.
+  if (!SiteIsolationPolicy::IsErrorPageIsolationEnabled(true))
+    return;
+
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL error_url(embedded_test_server()->GetURL("/close-socket"));
+  std::unique_ptr<URLLoaderInterceptor> url_interceptor =
+      URLLoaderInterceptor::SetupRequestFailForURL(error_url,
+                                                   net::ERR_DNS_TIMED_OUT);
+
+  // 1) Start with a successful navigation to a document.
+  EXPECT_TRUE(NavigateToURL(shell(), url));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  // 2) Get the Data associated with RenderFrameHost associated with url.
+  Data::CreateForCurrentDocument(rfh_a);
+  base::WeakPtr<Data> data = Data::GetForCurrentDocument(rfh_a)->GetWeakPtr();
+  EXPECT_TRUE(data);
+
+  // 3) Browser-initiated navigation to an error page.
+  NavigationHandleObserver observer(shell()->web_contents(), error_url);
+  EXPECT_FALSE(NavigateToURL(shell(), error_url));
+  EXPECT_TRUE(observer.is_error());
+  EXPECT_EQ(net::ERR_DNS_TIMED_OUT, observer.net_error_code());
+
+  // 4) The associated RenderDocumentHostUserData object should be deleted.
+  delete_observer_rfh_a.WaitUntilDeleted();
+  EXPECT_FALSE(data);
+}
+
+// Tests that RenderDocumentHostUserData object is cleared when it is neither a
+// same document navigation nor when it is stored in back-forward cache after
+// navigating away.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, CrossSiteNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  // 2) Get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(rfh_a);
+  base::WeakPtr<Data> data = Data::GetForCurrentDocument(rfh_a)->GetWeakPtr();
+  EXPECT_TRUE(data);
+
+  // 3) Navigate to B.
+  EXPECT_TRUE(NavigateToURL(shell(), url_b));
+  EXPECT_NE(rfh_a, top_frame_host());
+
+  // 4) Both rfh_a and RDHUD should be deleted.
+  delete_observer_rfh_a.WaitUntilDeleted();
+  EXPECT_FALSE(data);
+}
+
+// Tests that RenderDocumentHostUserData object is cleared on performing same
+// site navigation.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest, SameSiteNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a1(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_a2(embedded_test_server()->GetURL("a.com", "/title2.html"));
+
+  // 1) Navigate to A1.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a1));
+  RenderFrameHostImpl* rfh_a1 = top_frame_host();
+
+  // 2) Get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(rfh_a1);
+  base::WeakPtr<Data> data = Data::GetForCurrentDocument(rfh_a1)->GetWeakPtr();
+
+  EXPECT_TRUE(data);
+
+  // 3) Navigate to A2.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a2));
+  EXPECT_EQ(rfh_a1, top_frame_host());
+
+  // 4) The associated RenderDocumentHostUserData should be deleted.
+  EXPECT_FALSE(data);
+}
+
+// Test RenderDocumentHostUserData with BackForwardCache feature enabled.
+class RenderDocumentHostUserDataWithBackForwardCacheTest
+    : public RenderDocumentHostUserDataTest {
+ public:
+  RenderDocumentHostUserDataWithBackForwardCacheTest() {
+    scoped_feature_list_.InitAndEnableFeatureWithParameters(
+        features::kBackForwardCache,
+        {
+            // Set a very long TTL before expiration (longer than the test
+            // timeout) so tests that are expecting deletion don't pass when
+            // they shouldn't.
+            {"TimeToLiveInBackForwardCacheInSeconds", "3600"},
+        });
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+// Tests that RenderDocumentHostUserData object is not cleared on storing and
+// restoring a page from back-forward cache.
+IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataWithBackForwardCacheTest,
+                       BackForwardCacheNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = top_frame_host();
+
+  // 2) Get the Data associated with this RenderFrameHost.
+  Data::CreateForCurrentDocument(rfh_a);
+  Data* data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data);
+
+  //  3) Navigate to B. A should be stored in back-forward cache.
+  EXPECT_TRUE(NavigateToURL(shell(), url_b));
+  EXPECT_TRUE(rfh_a->IsInBackForwardCache());
+
+  // 4) Data associated with document shouldn't have been cleared on navigating
+  // away with BackForwardCache.
+  data = Data::GetForCurrentDocument(rfh_a);
+  EXPECT_TRUE(data);
+
+  // 5) Go back to A.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  Data* data_after_restore =
+      Data::GetForCurrentDocument(web_contents()->GetMainFrame());
+  EXPECT_TRUE(data);
+
+  // 6) Both the instances of Data before and after restore should point to the
+  // same object and make sure they aren't null.
+  EXPECT_EQ(data_after_restore->unique_id(), data->unique_id());
+}
+
+}  // namespace content
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index ebcba9f..a608b5c1 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -2080,6 +2080,11 @@
       GetRemoteAssociatedInterfaces()->GetInterface(&frame_bindings_control_);
     frame_bindings_control_->AllowBindings(enabled_bindings_);
   }
+
+  // Clear all the user data associated with this RenderFrameHost in case if
+  // the renderer crashes and the RenderFrameHost still stays alive.
+  if (!created)
+    document_associated_data_.ClearAllUserData();
 }
 
 void RenderFrameHostImpl::Init() {
@@ -2499,7 +2504,7 @@
       params.extra_headers, params.referrer, params.disposition,
       params.should_replace_current_entry, params.user_gesture,
       params.triggering_event_info, params.href_translate,
-      std::move(blob_url_loader_factory));
+      std::move(blob_url_loader_factory), params.impression);
 }
 
 void RenderFrameHostImpl::CancelInitialHistoryLoad() {
@@ -7540,12 +7545,19 @@
   accessibility_reset_count_ = 0;
   appcache_handle_ = navigation_request->TakeAppCacheHandle();
 
-  if (navigation_request->IsInMainFrame() &&
-      !navigation_request->IsSameDocument() &&
+  if (navigation_request->IsInMainFrame() && !is_same_document_navigation &&
       !navigation_request->IsServedFromBackForwardCache()) {
     render_view_host_->ResetPerPageState();
   }
 
+  // Clear all the user data associated with the non speculative RenderFrameHost
+  // when the navigation is a cross-document navigation not served from the
+  // back-forward cache.
+  if (!is_same_document_navigation &&
+      !navigation_request->IsServedFromBackForwardCache() && IsCurrent()) {
+    document_associated_data_.ClearAllUserData();
+  }
+
   // If we still have a PeakGpuMemoryTracker, then the loading it was observing
   // never completed. Cancel it's callback so that we don't report partial
   // loads to UMA.
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index cdc8ca1..31475215 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -1440,6 +1440,20 @@
   // - Ignore any OnUnloadACK sent by the renderer process.
   void DoNotDeleteForTesting();
 
+  // Document-associated data. This is cleared whenever a new document is hosted
+  // by this RenderFrameHost. Please refer to the description at
+  // content/public/browser/render_document_host_user_data.h for more details.
+  base::SupportsUserData::Data* GetRenderDocumentHostUserData(
+      const void* key) const {
+    return document_associated_data_.GetUserData(key);
+  }
+
+  void SetRenderDocumentHostUserData(
+      const void* key,
+      std::unique_ptr<base::SupportsUserData::Data> data) {
+    document_associated_data_.SetUserData(key, std::move(data));
+  }
+
  protected:
   friend class RenderFrameHostFactory;
 
@@ -1582,6 +1596,8 @@
   FRIEND_TEST_ALL_PREFIXES(RenderFrameHostImplTest, ExpectedMainWorldOrigin);
   FRIEND_TEST_ALL_PREFIXES(SecurityExploitBrowserTest,
                            AttemptDuplicateRenderWidgetHost);
+  FRIEND_TEST_ALL_PREFIXES(RenderDocumentHostUserDataTest,
+                           CheckInPendingDeletionState);
 
   class DroppedInterfaceRequestLogger;
 
@@ -2753,6 +2769,15 @@
   scoped_refptr<WebAuthRequestSecurityChecker>
       webauth_request_security_checker_;
 
+  // Container for arbitrary document-associated feature-specific data. Should
+  // be reset when committing a cross-document navigation in this
+  // RenderFrameHost. Please refer to the description at
+  // content/public/browser/render_document_host_user_data.h for more details.
+  class DocumentAssociatedData : public base::SupportsUserData {
+    friend class RenderFrameHostImpl;
+  };
+  DocumentAssociatedData document_associated_data_;
+
   // This time is used to record the last WebXR DOM Overlay setup request.
   base::TimeTicks last_xr_overlay_setup_time_;
 
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index abdda41..617e66d8 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -416,7 +416,8 @@
         NavigationRequest::CreateBrowserInitiated(
             frame_tree_node, std::move(common_params), std::move(commit_params),
             !entry->is_renderer_initiated(), entry->extra_headers(),
-            frame_entry, entry, request_body, nullptr /* navigation_ui_data */);
+            frame_entry, entry, request_body, nullptr /* navigation_ui_data */,
+            base::nullopt /* impression */);
 
     // Simulates request creation that triggers the 1st internal call to
     // GetFrameHostForNavigation.
@@ -2867,7 +2868,8 @@
       NavigationRequest::CreateBrowserInitiated(
           frame_tree_node, std::move(common_params), std::move(commit_params),
           !entry.is_renderer_initiated(), entry.extra_headers(), frame_entry,
-          &entry, nullptr /* request_body */, nullptr /* navigation_ui_data */);
+          &entry, nullptr /* request_body */, nullptr /* navigation_ui_data */,
+          base::nullopt /* impression */);
   manager->DidCreateNavigationRequest(navigation_request.get());
 
   // As the initial RenderFrame was not live, the new RenderFrameHost should be
diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc
index c6bdaf87..a252e1b 100644
--- a/content/browser/frame_host/render_frame_proxy_host.cc
+++ b/content/browser/frame_host/render_frame_proxy_host.cc
@@ -443,7 +443,8 @@
       params.referrer, ui::PAGE_TRANSITION_LINK,
       params.should_replace_current_entry, download_policy,
       params.post_body ? "POST" : "GET", params.post_body, params.extra_headers,
-      std::move(blob_url_loader_factory), params.user_gesture);
+      std::move(blob_url_loader_factory), params.user_gesture,
+      params.impression);
 }
 
 void RenderFrameProxyHost::CheckCompleted() {
diff --git a/content/browser/loader/navigation_url_loader_impl_unittest.cc b/content/browser/loader/navigation_url_loader_impl_unittest.cc
index 0c9d8ce..7976473 100644
--- a/content/browser/loader/navigation_url_loader_impl_unittest.cc
+++ b/content/browser/loader/navigation_url_loader_impl_unittest.cc
@@ -181,7 +181,7 @@
             GURL() /* client_side_redirect_url */,
             base::nullopt /* devtools_initiator_info */,
             false /* attach_same_site_cookie */,
-            nullptr /* trust_token_params */);
+            nullptr /* trust_token_params */, base::nullopt /* impression */);
 
     auto common_params = CreateCommonNavigationParams();
     common_params->url = url;
diff --git a/content/browser/loader/navigation_url_loader_unittest.cc b/content/browser/loader/navigation_url_loader_unittest.cc
index d8b34f87..3e26df5 100644
--- a/content/browser/loader/navigation_url_loader_unittest.cc
+++ b/content/browser/loader/navigation_url_loader_unittest.cc
@@ -69,7 +69,7 @@
             GURL() /* client_side_redirect_url */,
             base::nullopt /* devtools_initiator_info */,
             false /* attach_same_site_cookies */,
-            nullptr /* trust_token_params */);
+            nullptr /* trust_token_params */, base::nullopt /* impression */);
     auto common_params = CreateCommonNavigationParams();
     common_params->url = url;
     common_params->initiator_origin = url::Origin::Create(url);
diff --git a/content/browser/media/audio_output_stream_broker.cc b/content/browser/media/audio_output_stream_broker.cc
index 4f11312..1649f51 100644
--- a/content/browser/media/audio_output_stream_broker.cc
+++ b/content/browser/media/audio_output_stream_broker.cc
@@ -111,15 +111,6 @@
   TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "AudioOutputStreamBroker", this,
                                   "disconnect reason",
                                   static_cast<uint32_t>(reason));
-
-  UMA_HISTOGRAM_ENUMERATION("Media.Audio.Render.StreamBrokerDisconnectReason2",
-                            reason);
-
-  if (AwaitingCreated()) {
-    UMA_HISTOGRAM_TIMES(
-        "Media.Audio.Render.StreamBrokerDocumentDestroyedAwaitingCreatedTime",
-        base::TimeTicks::Now() - stream_creation_start_time_);
-  }
 }
 
 void AudioOutputStreamBroker::CreateStream(
@@ -161,8 +152,6 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_);
   TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "CreateStream", this, "success",
                                   !!data_pipe);
-  UMA_HISTOGRAM_TIMES("Media.Audio.Render.StreamBrokerStreamCreationTime",
-                      base::TimeTicks::Now() - stream_creation_start_time_);
   stream_creation_start_time_ = base::TimeTicks();
 
   if (!data_pipe) {
diff --git a/content/browser/portal/portal.cc b/content/browser/portal/portal.cc
index b9c99f6..1dcc0b7 100644
--- a/content/browser/portal/portal.cc
+++ b/content/browser/portal/portal.cc
@@ -224,8 +224,8 @@
       portal_frame, url, owner_render_frame_host_->GetLastCommittedOrigin(),
       owner_render_frame_host_->GetSiteInstance(),
       mojo::ConvertTo<Referrer>(referrer), ui::PAGE_TRANSITION_LINK,
-      should_replace_entry, download_policy, "GET", nullptr, "", nullptr,
-      false);
+      should_replace_entry, download_policy, "GET", nullptr, "", nullptr, false,
+      base::nullopt);
 
   std::move(callback).Run();
 }
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc
index d50b89d..2be7018 100644
--- a/content/browser/security_exploit_browsertest.cc
+++ b/content/browser/security_exploit_browsertest.cc
@@ -137,7 +137,7 @@
       url::Origin::Create(foo), nullptr, std::string(), Referrer(),
       WindowOpenDisposition::CURRENT_TAB, false, true,
       blink::TriggeringEventInfo::kFromTrustedEvent, std::string(),
-      nullptr /* blob_url_loader_factory */);
+      nullptr /* blob_url_loader_factory */, base::nullopt /* impression */);
 
   // Since the navigation above requires a cross-process swap, there will be a
   // speculative/pending RenderFrameHost. Ensure it exists and is in a different
@@ -1528,7 +1528,7 @@
           GURL() /* client_side_redirect_url */,
           base::nullopt /* devtools_initiator_info */,
           false /* attach_same_site_cookies */,
-          nullptr /* trust_token_params */);
+          nullptr /* trust_token_params */, base::nullopt /* impression */);
 
   // Receiving the invalid IPC message should lead to renderer process
   // termination.
diff --git a/content/browser/service_worker/service_worker_client_utils.cc b/content/browser/service_worker/service_worker_client_utils.cc
index 58b232f..4b82012 100644
--- a/content/browser/service_worker/service_worker_client_utils.cc
+++ b/content/browser/service_worker/service_worker_client_utils.cc
@@ -13,6 +13,7 @@
 #include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/macros.h"
+#include "base/optional.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -311,7 +312,7 @@
       WindowOpenDisposition::CURRENT_TAB,
       false /* should_replace_current_entry */, false /* user_gesture */,
       blink::TriggeringEventInfo::kUnknown, std::string() /* href_translate */,
-      nullptr /* blob_url_loader_factory */);
+      nullptr /* blob_url_loader_factory */, base::nullopt);
   new OpenURLObserver(web_contents, frame_tree_node_id, std::move(callback));
 }
 
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index 93930c1..fb0f0737 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -196,8 +196,8 @@
   CookieStoreContext* GetCookieStoreContext();
   NativeFileSystemManagerImpl* GetNativeFileSystemManager();
   QuotaContext* GetQuotaContext();
-  ConversionManagerImpl* GetConversionManager();
   NativeIOContext* GetNativeIOContext();
+  ConversionManagerImpl* GetConversionManager();
 
   // blink::mojom::DomStorage interface.
   void OpenLocalStorage(
@@ -495,8 +495,8 @@
   std::unique_ptr<leveldb_proto::ProtoDatabaseProvider>
       proto_database_provider_;
   scoped_refptr<ContentIndexContextImpl> content_index_context_;
-  std::unique_ptr<ConversionManagerImpl> conversion_manager_;
   std::unique_ptr<NativeIOContext> native_io_context_;
+  std::unique_ptr<ConversionManagerImpl> conversion_manager_;
 
   // ReceiverSet for DomStorage, using the
   // ChildProcessSecurityPolicyImpl::Handle as the binding context type. The
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 45b6a64..fb98b18 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -744,6 +744,10 @@
     {
       types = [
         {
+          mojom = "content.mojom.Impression"
+          cpp = "::content::Impression"
+        },
+        {
           mojom = "content.mojom.MixedContentContextType"
           cpp = "::blink::WebMixedContentContextType"
         },
@@ -767,6 +771,7 @@
       traits_headers = [
         "//content/common/content_param_traits.h",
         "//content/common/navigation_params.h",
+        "//content/public/common/impression.h",
         "//content/public/common/navigation_policy.h",
         "//content/public/common/page_state.h",
         "//third_party/blink/public/platform/web_mixed_content_context_type.h",
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 118765f..a22941e 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -31,6 +31,7 @@
 #include "content/common/savable_subframe.h"
 #include "content/public/common/common_param_traits.h"
 #include "content/public/common/frame_navigate_params.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/navigation_policy.h"
 #include "content/public/common/page_state.h"
 #include "content/public/common/previews_state.h"
@@ -148,6 +149,13 @@
   IPC_STRUCT_TRAITS_MEMBER(blocking_downloads_in_sandbox_enabled)
 IPC_STRUCT_TRAITS_END()
 
+IPC_STRUCT_TRAITS_BEGIN(content::Impression)
+  IPC_STRUCT_TRAITS_MEMBER(conversion_destination)
+  IPC_STRUCT_TRAITS_MEMBER(reporting_origin)
+  IPC_STRUCT_TRAITS_MEMBER(impression_data)
+  IPC_STRUCT_TRAITS_MEMBER(expiry)
+IPC_STRUCT_TRAITS_END()
+
 IPC_STRUCT_TRAITS_BEGIN(blink::WebFloatSize)
   IPC_STRUCT_TRAITS_MEMBER(width)
   IPC_STRUCT_TRAITS_MEMBER(height)
@@ -412,6 +420,7 @@
   IPC_STRUCT_MEMBER(blink::TriggeringEventInfo, triggering_event_info)
   IPC_STRUCT_MEMBER(mojo::MessagePipeHandle, blob_url_token)
   IPC_STRUCT_MEMBER(std::string, href_translate)
+  IPC_STRUCT_MEMBER(base::Optional<content::Impression>, impression)
   IPC_STRUCT_MEMBER(content::NavigationDownloadPolicy, download_policy)
 IPC_STRUCT_END()
 
diff --git a/content/common/navigation_params.mojom b/content/common/navigation_params.mojom
index 385987a..b0cb58d3 100644
--- a/content/common/navigation_params.mojom
+++ b/content/common/navigation_params.mojom
@@ -24,6 +24,9 @@
 import "url/mojom/url.mojom";
 
 [Native]
+struct Impression;
+
+[Native]
 enum MixedContentContextType;
 
 [Native]
@@ -144,6 +147,11 @@
   // operation (https://github.com/wicg/trust-token-api) and attach headers
   // conveying the result of the operation. Set on some child frame navigations.
   network.mojom.TrustTokenParams? trust_token_params;
+
+  // Carries optional information associated with conversion measurement for
+  // this navigation. Only set on navigations originating from anchors with
+  // relevant impression attributes set.
+  Impression? impression;
 };
 
 // Provided by the browser or the renderer -------------------------------------
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ClipboardTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ClipboardTest.java
index 2899e65b..98c2220 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ClipboardTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ClipboardTest.java
@@ -17,6 +17,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.BaseJUnit4ClassRunner;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.content.browser.webcontents.WebContentsImpl;
@@ -60,6 +61,7 @@
     @LargeTest
     @Feature({"Clipboard", "TextInput"})
     @RerunWithUpdatedContainerView
+    @DisabledTest(message = "https://crbug.com/791021")
     public void testCopyDocumentFragment() {
         ClipboardManager clipboardManager =
                 TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<ClipboardManager>() {
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 702a5c6..be033ca7 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -278,6 +278,8 @@
     "push_messaging_service.h",
     "quota_permission_context.h",
     "reload_type.h",
+    "render_document_host_user_data.cc",
+    "render_document_host_user_data.h",
     "render_frame_host.h",
     "render_frame_metadata_provider.h",
     "render_process_host.h",
diff --git a/content/public/browser/navigation_controller.cc b/content/public/browser/navigation_controller.cc
index 472d1f9..29897ee 100644
--- a/content/public/browser/navigation_controller.cc
+++ b/content/public/browser/navigation_controller.cc
@@ -32,7 +32,8 @@
       started_from_context_menu(input.started_from_context_menu),
       blob_url_loader_factory(input.blob_url_loader_factory),
       href_translate(input.href_translate),
-      reload_type(input.reload_type) {
+      reload_type(input.reload_type),
+      impression(input.impression) {
 #if DCHECK_IS_ON()
   DCHECK(input.Valid());
 #endif
diff --git a/content/public/browser/navigation_controller.h b/content/public/browser/navigation_controller.h
index 7fa0063..15e8965 100644
--- a/content/public/browser/navigation_controller.h
+++ b/content/public/browser/navigation_controller.h
@@ -24,6 +24,7 @@
 #include "content/public/browser/restore_type.h"
 #include "content/public/browser/session_storage_namespace.h"
 #include "content/public/browser/site_instance.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/was_activated_option.mojom.h"
 #include "services/network/public/cpp/resource_request_body.h"
@@ -238,6 +239,10 @@
     // Indicates the reload type of this navigation.
     ReloadType reload_type = ReloadType::NONE;
 
+    // Impression info associated with this navigation. Should only be populated
+    // for navigations originating from a link click.
+    base::Optional<Impression> impression;
+
     explicit LoadURLParams(const GURL& url);
 
     // Copies |open_url_params| into LoadURLParams, attempting to copy all
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index fb82b594..d95816d 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -12,6 +12,7 @@
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/browser/reload_type.h"
 #include "content/public/browser/restore_type.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/transferrable_url_loader.mojom.h"
 #include "net/base/auth.h"
@@ -332,6 +333,11 @@
   // initiated from a link that had that attribute set.
   virtual const std::string& GetHrefTranslate() = 0;
 
+  // Returns, if available, the impression associated with the link clicked to
+  // initiate this navigation. The impression is available for the entire
+  // lifetime of the navigation.
+  virtual const base::Optional<Impression>& GetImpression() = 0;
+
   // Returns, if available, the origin of the document that has initiated the
   // navigation for this NavigationHandle.
   virtual const base::Optional<url::Origin>& GetInitiatorOrigin() = 0;
diff --git a/content/public/browser/page_navigator.h b/content/public/browser/page_navigator.h
index f90b19b..8f221d7 100644
--- a/content/public/browser/page_navigator.h
+++ b/content/public/browser/page_navigator.h
@@ -19,6 +19,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/site_instance.h"
 #include "content/public/common/child_process_host.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/referrer.h"
 #include "ipc/ipc_message.h"
 #include "services/network/public/cpp/resource_request_body.h"
@@ -137,6 +138,11 @@
 
   // Indicates if this navigation is a reload.
   ReloadType reload_type;
+
+  // Optional impression associated with this navigation. Only set on
+  // navigations that originate from links with impression attributes. Used for
+  // conversion measurement.
+  base::Optional<Impression> impression;
 };
 
 class PageNavigator {
diff --git a/content/public/browser/render_document_host_user_data.cc b/content/public/browser/render_document_host_user_data.cc
new file mode 100644
index 0000000..b1b3854
--- /dev/null
+++ b/content/public/browser/render_document_host_user_data.cc
@@ -0,0 +1,26 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/public/browser/render_document_host_user_data.h"
+
+#include "content/browser/frame_host/render_frame_host_impl.h"
+
+namespace content {
+
+base::SupportsUserData::Data* GetRenderDocumentHostUserData(
+    const RenderFrameHost* rfh,
+    const void* key) {
+  return static_cast<const RenderFrameHostImpl*>(rfh)
+      ->GetRenderDocumentHostUserData(key);
+}
+
+void SetRenderDocumentHostUserData(
+    RenderFrameHost* rfh,
+    const void* key,
+    std::unique_ptr<base::SupportsUserData::Data> data) {
+  static_cast<RenderFrameHostImpl*>(rfh)->SetRenderDocumentHostUserData(
+      key, std::move(data));
+}
+
+}  // namespace content
diff --git a/content/public/browser/render_document_host_user_data.h b/content/public/browser/render_document_host_user_data.h
new file mode 100644
index 0000000..87600154
--- /dev/null
+++ b/content/public/browser/render_document_host_user_data.h
@@ -0,0 +1,104 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_RENDER_DOCUMENT_HOST_USER_DATA_H_
+#define CONTENT_PUBLIC_BROWSER_RENDER_DOCUMENT_HOST_USER_DATA_H_
+
+#include "base/memory/ptr_util.h"
+#include "base/supports_user_data.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+class RenderFrameHost;
+
+CONTENT_EXPORT base::SupportsUserData::Data* GetRenderDocumentHostUserData(
+    const RenderFrameHost* rfh,
+    const void* key);
+
+CONTENT_EXPORT void SetRenderDocumentHostUserData(
+    RenderFrameHost* rfh,
+    const void* key,
+    std::unique_ptr<base::SupportsUserData::Data> data);
+
+// This class approximates the lifetime of a single blink::Document in the
+// browser process. At the moment RenderFrameHost can correspond to multiple
+// blink::Documents (when RenderFrameHost is reused for same-process
+// navigation). RenderDocumentHostUserData is created when a user of an API
+// inherits this class and calls CreateForCurrentDocument.
+//
+// RenderDocumentHostUserData is cleared when either:
+// - RenderFrameHost is deleted, or
+// - A cross-document non-bfcached navigation is committed in the same
+// RenderFrameHost i.e., RenderDocumentHostUserData persists when a document is
+// put in the BackForwardCache. It will still be present when the user navigates
+// back to the document.
+//
+// RenderDocumentHostUserData is assumed to be associated with the document in
+// the RenderFrameHost. It can be associated even before RenderFrameHost commits
+// i.e., on speculative RFHs and gets destroyed along with speculative RFHs if
+// it ends up never committing.
+//
+// Note: RenderFrameHost is being replaced with RenderDocumentHost
+// [https://crbug.com/936696]. After this is completed, every
+// RenderDocumentHostUserData object will be 1:1 with RenderFrameHost. Also
+// RenderFrameHost/RenderDocument would start inheriting directly from
+// SupportsUserData then we wouldn't need the use of
+// GetRenderDocumentHostUserData/SetRenderDocumentHostUserData anymore.
+//
+// This is similar to WebContentsUserData but attached to a document instead.
+// Example usage of RenderDocumentHostUserData:
+//
+// --- in foo_document_helper.h ---
+// class FooDocumentHelper : public
+// content::RenderDocumentHostUserData<FooDocumentHelper> {
+//  public:
+//   ~FooDocumentHelper() override;
+//   // ... more public stuff here ...
+//  private:
+//   explicit FooDocumentHelper(content::RenderFrameHost* rfh);
+//   friend class content::RenderDocumentHostUserData<FooDocumentHelper>;
+//   RENDER_DOCUMENT_HOST_USER_DATA_KEY_DECL();
+//   // ... more private stuff here ...
+// };
+//
+// --- in foo_document_helper.cc ---
+// RENDER_DOCUMENT_HOST_USER_DATA_KEY_IMPL(FooDocumentHelper)
+
+template <typename T>
+class RenderDocumentHostUserData : public base::SupportsUserData::Data {
+ public:
+  static void CreateForCurrentDocument(RenderFrameHost* rfh) {
+    DCHECK(rfh);
+    if (!GetForCurrentDocument(rfh)) {
+      T* data = new T(rfh);
+      SetRenderDocumentHostUserData(rfh, UserDataKey(), base::WrapUnique(data));
+    }
+  }
+
+  static T* GetForCurrentDocument(RenderFrameHost* rfh) {
+    DCHECK(rfh);
+    return static_cast<T*>(GetRenderDocumentHostUserData(rfh, UserDataKey()));
+  }
+
+  static const void* UserDataKey() { return &T::kUserDataKey; }
+};
+
+// Users won't be able to instantiate the template if they miss declaring the
+// user data key.
+// This macro declares a static variable inside the class that inherits from
+// RenderDocumentHostUserData. The address of this static variable is used as
+// the key to store/retrieve an instance of the class on/from a WebState.
+#define RENDER_DOCUMENT_HOST_USER_USER_DATA_KEY_DECL() \
+  static constexpr int kUserDataKey = 0
+
+// This macro instantiates the static variable declared by the previous macro.
+// It must live in a .cc file to ensure that there is only one instantiation
+// of the static variable.
+#define RENDER_DOCUMENT_HOST_USER_DATA_KEY_IMPL(Type) \
+  const int Type::kUserDataKey;
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_BROWSER_RENDER_DOCUMENT_HOST_USER_DATA_H_
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index 23b5f9b7..e420139 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -122,6 +122,8 @@
     "font_cache_dispatcher_win.h",
     "frame_navigate_params.cc",
     "frame_navigate_params.h",
+    "impression.cc",
+    "impression.h",
     "injection_test_mac.h",
     "injection_test_win.h",
     "input_event_ack_source.h",
diff --git a/content/public/common/impression.cc b/content/public/common/impression.cc
new file mode 100644
index 0000000..3cc2544
--- /dev/null
+++ b/content/public/common/impression.cc
@@ -0,0 +1,19 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/public/common/impression.h"
+
+#include "third_party/blink/public/platform/web_security_origin.h"
+
+namespace content {
+
+Impression::Impression() = default;
+
+Impression::Impression(const Impression& other) = default;
+
+Impression& Impression::operator=(const Impression& other) = default;
+
+Impression::~Impression() = default;
+
+}  // namespace content
diff --git a/content/public/common/impression.h b/content/public/common/impression.h
new file mode 100644
index 0000000..b009873
--- /dev/null
+++ b/content/public/common/impression.h
@@ -0,0 +1,52 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_COMMON_IMPRESSION_H_
+#define CONTENT_PUBLIC_COMMON_IMPRESSION_H_
+
+#include <stdint.h>
+#include <string>
+
+#include "base/time/time.h"
+#include "content/common/content_export.h"
+#include "url/origin.h"
+
+namespace content {
+
+// An impression represents a click on an anchor tag that has special Conversion
+// Measurement attributes declared. When the anchor is clicked, an impression is
+// generated from these attributes and associated with the resulting navigation.
+// When an action is performed on the linked site at a later date, the
+// impression information is used to provide context about the initial
+// navigation that resulted in that action.
+//
+// Used for IPC transport of WebImpression. WebImpression cannot be used
+// directly as it contains non-header-only blink types.
+struct CONTENT_EXPORT Impression {
+  Impression();
+  Impression(const Impression& other);
+  Impression& operator=(const Impression& other);
+  ~Impression();
+
+  // Intended committed top-level origin of the resulting navigation. Must match
+  // the committed navigation's origin to be a valid impression. Declared by
+  // the impression tag.
+  url::Origin conversion_destination;
+
+  // Optional origin that will receive all conversion measurement reports
+  // associated with this impression. Declared by the impression tag.
+  base::Optional<url::Origin> reporting_origin;
+
+  // Data that will be sent in conversion reports to identify this impression.
+  // Declared by the impression tag.
+  uint64_t impression_data;
+
+  // Optional expiry specifying the amount of time this impression can convert.
+  // Declared by the impression tag.
+  base::Optional<base::TimeDelta> expiry;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_COMMON_IMPRESSION_H_
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h
index 99dd9f45..f297bf57 100644
--- a/content/public/test/mock_navigation_handle.h
+++ b/content/public/test/mock_navigation_handle.h
@@ -104,6 +104,9 @@
   bool WasResponseCached() override { return was_response_cached_; }
   const net::ProxyServer& GetProxyServer() override { return proxy_server_; }
   const std::string& GetHrefTranslate() override { return href_translate_; }
+  const base::Optional<Impression>& GetImpression() override {
+    return impression_;
+  }
   const base::Optional<url::Origin>& GetInitiatorOrigin() override {
     return initiator_origin_;
   }
@@ -156,6 +159,9 @@
   void set_proxy_server(const net::ProxyServer& proxy_server) {
     proxy_server_ = proxy_server;
   }
+  void set_impression(const Impression& impression) {
+    impression_ = impression;
+  }
   void set_initiator_origin(const url::Origin& initiator_origin) {
     initiator_origin_ = initiator_origin;
   }
@@ -186,6 +192,7 @@
   base::Optional<url::Origin> initiator_origin_;
   ReloadType reload_type_ = content::ReloadType::NONE;
   std::string href_translate_;
+  base::Optional<Impression> impression_;
 };
 
 }  // namespace content
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 9a3f0c2..069a4af1 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -88,6 +88,8 @@
     "history_serialization.h",
     "ime_event_guard.cc",
     "ime_event_guard.h",
+    "impression_conversions.cc",
+    "impression_conversions.h",
     "in_process_renderer_thread.cc",
     "in_process_renderer_thread.h",
     "input/frame_input_handler_impl.cc",
diff --git a/content/renderer/impression_conversions.cc b/content/renderer/impression_conversions.cc
new file mode 100644
index 0000000..81c7aee
--- /dev/null
+++ b/content/renderer/impression_conversions.cc
@@ -0,0 +1,27 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/impression_conversions.h"
+
+#include <algorithm>
+#include <iterator>
+
+#include "third_party/blink/public/platform/web_security_origin.h"
+#include "third_party/blink/public/platform/web_string.h"
+
+namespace content {
+
+Impression ConvertWebImpressionToImpression(
+    const blink::WebImpression& web_impression) {
+  Impression result;
+
+  result.impression_data = web_impression.impression_data;
+  result.expiry = web_impression.expiry;
+  result.reporting_origin = web_impression.reporting_origin;
+  result.conversion_destination = web_impression.conversion_destination;
+
+  return result;
+}
+
+}  // namespace content
diff --git a/content/renderer/impression_conversions.h b/content/renderer/impression_conversions.h
new file mode 100644
index 0000000..bf856b9
--- /dev/null
+++ b/content/renderer/impression_conversions.h
@@ -0,0 +1,18 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_IMPRESSION_CONVERSIONS_H_
+#define CONTENT_RENDERER_IMPRESSION_CONVERSIONS_H_
+
+#include "content/public/common/impression.h"
+#include "third_party/blink/public/platform/web_impression.h"
+
+namespace content {
+
+Impression ConvertWebImpressionToImpression(
+    const blink::WebImpression& web_impression);
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_IMPRESSION_CONVERSIONS_H_
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 4bdce53..f18664d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -72,6 +72,7 @@
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/isolated_world_ids.h"
 #include "content/public/common/navigation_policy.h"
 #include "content/public/common/page_state.h"
@@ -102,6 +103,7 @@
 #include "content/renderer/history_entry.h"
 #include "content/renderer/history_serialization.h"
 #include "content/renderer/ime_event_guard.h"
+#include "content/renderer/impression_conversions.h"
 #include "content/renderer/input/frame_input_handler_impl.h"
 #include "content/renderer/input/input_target_client_impl.h"
 #include "content/renderer/input/widget_input_handler_manager.h"
@@ -6005,6 +6007,10 @@
       info->frame_load_type == WebFrameLoadType::kReplaceCurrentItem &&
       render_view_->history_list_length_;
   params.user_gesture = info->has_transient_user_activation;
+
+  if (info->impression)
+    params.impression = ConvertWebImpressionToImpression(*info->impression);
+
   if (GetContentClient()->renderer()->AllowPopup())
     params.user_gesture = true;
 
@@ -6305,6 +6311,7 @@
     initiator = base::DictionaryValue::From(
         base::JSONReader::ReadDeprecated(info->devtools_initiator_info.Utf8()));
   }
+
   mojom::BeginNavigationParamsPtr begin_navigation_params =
       mojom::BeginNavigationParams::New(
           GetWebURLRequestHeadersAsString(info->url_request), load_flags,
@@ -6319,7 +6326,11 @@
           info->url_request.GetExtraData()->attach_same_site_cookies(),
           info->url_request.TrustTokenParams()
               ? info->url_request.TrustTokenParams()->Clone()
-              : nullptr);
+              : nullptr,
+          info->impression
+              ? base::make_optional<Impression>(
+                    ConvertWebImpressionToImpression(*info->impression))
+              : base::nullopt);
 
   mojo::PendingAssociatedRemote<mojom::NavigationClient>
       navigation_client_remote;
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 9c82e330..dd2e5ed 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -1365,7 +1365,7 @@
   bool in_frame_tree_;
 
   RenderViewImpl* render_view_;
-  int routing_id_;
+  const int routing_id_;
 
   // If this RenderFrame was created to replace a previous object, this will
   // store its routing id. The previous object can be:
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 676217a..43149a95 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -21,10 +21,12 @@
 #include "content/common/view_messages.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/impression.h"
 #include "content/public/common/screen_info.h"
 #include "content/public/common/use_zoom_for_dsf_policy.h"
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/renderer/child_frame_compositing_helper.h"
+#include "content/renderer/impression_conversions.h"
 #include "content/renderer/loader/web_url_request_util.h"
 #include "content/renderer/mojo/blink_interface_registry_impl.h"
 #include "content/renderer/render_frame_impl.h"
@@ -628,13 +630,15 @@
   Send(new FrameHostMsg_RouteMessageEvent(routing_id_, params));
 }
 
-void RenderFrameProxy::Navigate(const blink::WebURLRequest& request,
-                                bool should_replace_current_entry,
-                                bool is_opener_navigation,
-                                bool initiator_frame_has_download_sandbox_flag,
-                                bool blocking_downloads_in_sandbox_enabled,
-                                bool initiator_frame_is_ad,
-                                mojo::ScopedMessagePipeHandle blob_url_token) {
+void RenderFrameProxy::Navigate(
+    const blink::WebURLRequest& request,
+    bool should_replace_current_entry,
+    bool is_opener_navigation,
+    bool initiator_frame_has_download_sandbox_flag,
+    bool blocking_downloads_in_sandbox_enabled,
+    bool initiator_frame_is_ad,
+    mojo::ScopedMessagePipeHandle blob_url_token,
+    const base::Optional<blink::WebImpression>& impression) {
   // The request must always have a valid initiator origin.
   DCHECK(!request.RequestorOrigin().IsNull());
 
@@ -652,6 +656,9 @@
   params.triggering_event_info = blink::TriggeringEventInfo::kUnknown;
   params.blob_url_token = blob_url_token.release();
 
+  if (impression)
+    params.impression = ConvertWebImpressionToImpression(*impression);
+
   // Note: For the AdFrame/Sandbox download policy here it only covers the case
   // where the navigation initiator frame is ad. The download_policy may be
   // further augmented in RenderFrameProxyHost::OnOpenURL if the navigating
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index d202bf5..d9c7d5b 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -178,13 +178,15 @@
                           blink::WebRemoteFrame* targetFrame,
                           blink::WebSecurityOrigin target,
                           blink::WebDOMMessageEvent event) override;
-  void Navigate(const blink::WebURLRequest& request,
-                bool should_replace_current_entry,
-                bool is_opener_navigation,
-                bool initiator_frame_has_download_sandbox_flag,
-                bool blocking_downloads_in_sandbox_enabled,
-                bool initiator_frame_is_ad,
-                mojo::ScopedMessagePipeHandle blob_url_token) override;
+  void Navigate(
+      const blink::WebURLRequest& request,
+      bool should_replace_current_entry,
+      bool is_opener_navigation,
+      bool initiator_frame_has_download_sandbox_flag,
+      bool blocking_downloads_in_sandbox_enabled,
+      bool initiator_frame_is_ad,
+      mojo::ScopedMessagePipeHandle blob_url_token,
+      const base::Optional<blink::WebImpression>& impression) override;
   void FrameRectsChanged(const blink::WebRect& local_frame_rect,
                          const blink::WebRect& screen_space_rect) override;
   void UpdateRemoteViewportIntersection(
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 3010e98c..f461c4e6 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -2687,8 +2687,10 @@
       !cmd.HasSwitch(cc::switches::kDisableCheckerImaging) && is_threaded;
 
 #if defined(OS_ANDROID)
-  if (!viz::AlwaysUseWideColorGamut())
-    settings.prefer_raster_in_srgb = true;
+  // WebView should always raster in the default color space.
+  // Synchronous compositing indicates WebView.
+  if (!compositor_deps->UsingSynchronousCompositing())
+    settings.prefer_raster_in_srgb = features::IsDynamicColorGamutEnabled();
 
   // We can use a more aggressive limit on Android since decodes tend to take
   // longer on these devices.
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc
index 79ac5ea7..ac5c7ec 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.cc
+++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
@@ -141,10 +141,10 @@
         const ChildProcessData& data,
         const ChildProcessTerminationInfo& info) override {
       // Child processes should not crash in web tests.
-      DLOG(ERROR) << "Child process crashed with\n"
-                     "   process_type: "
-                  << data.process_type << "\n"
-                  << "   name: " << data.name;
+      LOG(ERROR) << "Child process crashed with\n"
+                    "   process_type: "
+                 << data.process_type << "\n"
+                 << "   name: " << data.name;
       CHECK(false);
     }
   };
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 7e3e1ea..ea8d950 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -914,6 +914,7 @@
     "../browser/content_index/content_index_browsertest.cc",
     "../browser/content_service_browsertest.cc",
     "../browser/conversions/conversion_registration_browsertest.cc",
+    "../browser/conversions/impression_declaration_browsertest.cc",
     "../browser/cross_origin_opener_policy_browsertest.cc",
     "../browser/cross_site_transfer_browsertest.cc",
     "../browser/data_decoder_browsertest.cc",
@@ -947,6 +948,7 @@
     "../browser/frame_host/navigation_controller_impl_browsertest.cc",
     "../browser/frame_host/navigation_request_browsertest.cc",
     "../browser/frame_host/render_document_host_browsertest.cc",
+    "../browser/frame_host/render_document_host_user_data_browsertest.cc",
     "../browser/frame_host/render_frame_host_impl_browsertest.cc",
     "../browser/frame_host/render_frame_host_impl_mac_browsertest.mm",
     "../browser/frame_host/render_frame_host_manager_browsertest.cc",
diff --git a/content/test/data/conversions/page_with_impression_creator.html b/content/test/data/conversions/page_with_impression_creator.html
new file mode 100644
index 0000000..cb6165c
--- /dev/null
+++ b/content/test/data/conversions/page_with_impression_creator.html
@@ -0,0 +1,14 @@
+<html>
+  <head>
+    <script src="register_impression.js"></script>
+  </head>
+  <body>
+    This page has a script which creates anchor tags that declare impressions.
+    <script>
+      createImpressionTag("impression_tag",
+                          "page_with_conversion_redirect.html",
+                          "1" /* impression_data*/,
+                          window.location /* conversion_destination */);
+    </script>
+  </body>
+</html>
diff --git a/content/test/data/conversions/register_impression.js b/content/test/data/conversions/register_impression.js
new file mode 100644
index 0000000..582fd302
--- /dev/null
+++ b/content/test/data/conversions/register_impression.js
@@ -0,0 +1,49 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+function simulateClick(target) {
+  simulateClickWithButton(target, 0 /* left click */);
+}
+
+function simulateMiddleClick(target) {
+  simulateClickWithButton(target, 1 /* middle click */);
+}
+
+function simulateClickWithButton(target, button) {
+  target = document.getElementById(target);
+  var evt = new MouseEvent("click", {"button": button});
+  return target.dispatchEvent(evt);
+}
+
+function createImpressionTag(id, url, data, destination) {
+  createImpressionTagWithTarget(id, url, data, destination, "_top");
+}
+
+function createImpressionTagWithReportingAndExpiry(
+    id, url, data, destination, report_origin, expiry) {
+  let anchor = createImpressionTagWithTarget(
+      id, url, data, destination, "_top");
+  anchor.setAttribute("reportingorigin", report_origin);
+  anchor.setAttribute("impressionexpiry", expiry);
+}
+
+function createImpressionTagWithTarget(id, url, data, destination, target) {
+  let anchor = document.createElement("a");
+  anchor.href = url;
+  anchor.setAttribute("impressiondata", data);
+  anchor.setAttribute("conversiondestination", destination);
+  anchor.setAttribute("target", target);
+  anchor.width = 100;
+  anchor.height = 100;
+  anchor.id = id;
+
+  // Create the text node for anchor element.
+  var link = document.createTextNode("This is link");
+
+  // Append the text node to anchor element.
+  anchor.appendChild(link);
+  document.body.appendChild(anchor);
+
+  return anchor;
+}
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc
index 77668d5..ba0a565 100644
--- a/content/test/navigation_simulator_impl.cc
+++ b/content/test/navigation_simulator_impl.cc
@@ -1135,7 +1135,7 @@
           GURL() /* client_side_redirect_url */,
           base::nullopt /* detools_initiator_info */,
           false /* attach_same_site_cookies */,
-          nullptr /* trust_token_params */);
+          nullptr /* trust_token_params */, impression_);
   auto common_params = CreateCommonNavigationParams();
   common_params->navigation_start = base::TimeTicks::Now();
   common_params->url = navigation_url_;
diff --git a/content/test/navigation_simulator_impl.h b/content/test/navigation_simulator_impl.h
index 8db863e..c457d00 100644
--- a/content/test/navigation_simulator_impl.h
+++ b/content/test/navigation_simulator_impl.h
@@ -14,6 +14,7 @@
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/browser/web_contents_observer.h"
+#include "content/public/common/impression.h"
 #include "content/public/test/navigation_simulator.h"
 #include "content/test/test_render_frame_host.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
@@ -167,6 +168,10 @@
 
   void set_origin(const url::Origin& origin) { origin_ = origin; }
 
+  void set_impression(const Impression& impression) {
+    impression_ = impression;
+  }
+
   void SetIsPostWithId(int64_t post_id);
 
  private:
@@ -304,6 +309,7 @@
   base::Optional<net::SSLInfo> ssl_info_;
   base::Optional<PageState> page_state_;
   base::Optional<url::Origin> origin_;
+  base::Optional<Impression> impression_;
   int64_t post_id_ = -1;
 
   bool auto_advance_ = true;
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index 78fc504..88d81d98 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -336,7 +336,7 @@
           GURL() /* client_side_redirect_url */,
           base::nullopt /* devtools_initiator_info */,
           false /* attach_same_site_cookies */,
-          nullptr /* trust_token_params */);
+          nullptr /* trust_token_params */, base::nullopt /* impression */);
   auto common_params = CreateCommonNavigationParams();
   common_params->url = url;
   common_params->initiator_origin = GetLastCommittedOrigin();
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn
index 14c3482..3d2d1cc2 100644
--- a/extensions/browser/BUILD.gn
+++ b/extensions/browser/BUILD.gn
@@ -549,6 +549,8 @@
     "value_store/test_value_store_factory.h",
     "value_store/testing_value_store.cc",
     "value_store/testing_value_store.h",
+    "value_store/value_store_unittest.cc",
+    "value_store/value_store_unittest.h",
   ]
 
   deps = [
@@ -664,8 +666,6 @@
     "value_store/testing_value_store_unittest.cc",
     "value_store/value_store_change_unittest.cc",
     "value_store/value_store_frontend_unittest.cc",
-    "value_store/value_store_unittest.cc",
-    "value_store/value_store_unittest.h",
     "verified_contents_unittest.cc",
     "warning_service_unittest.cc",
   ]
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc
index f6b5e14..bac2d11 100644
--- a/extensions/browser/updater/extension_downloader.cc
+++ b/extensions/browser/updater/extension_downloader.cc
@@ -688,6 +688,9 @@
     VLOG(2) << "parsing manifest succeeded (" << fetch_data->full_url() << ")";
   }
 
+  // Report manifest update check status.
+  NotifyExtensionManifestUpdateCheckStatus(results->list);
+
   NotifyExtensionsDownloadStageChanged(
       fetch_data->extension_ids(),
       ExtensionDownloaderDelegate::Stage::MANIFEST_LOADED);
@@ -1168,6 +1171,14 @@
   extensions_queue_.StartNextRequest();
 }
 
+void ExtensionDownloader::NotifyExtensionManifestUpdateCheckStatus(
+    std::vector<UpdateManifestResult> results) {
+  for (const auto& manifest_result : results) {
+    delegate_->OnExtensionManifestUpdateCheckStatusReceived(
+        manifest_result.extension_id, manifest_result.status);
+  }
+}
+
 void ExtensionDownloader::NotifyExtensionsDownloadStageChanged(
     std::set<std::string> extension_ids,
     ExtensionDownloaderDelegate::Stage stage) {
diff --git a/extensions/browser/updater/extension_downloader.h b/extensions/browser/updater/extension_downloader.h
index 0d817a88..14b7ab2 100644
--- a/extensions/browser/updater/extension_downloader.h
+++ b/extensions/browser/updater/extension_downloader.h
@@ -294,6 +294,9 @@
   // Handles the result of a crx fetch.
   void OnExtensionLoadComplete(base::FilePath crx_path);
 
+  void NotifyExtensionManifestUpdateCheckStatus(
+      std::vector<UpdateManifestResult> results);
+
   // Invokes OnExtensionDownloadStageChanged() on the |delegate_| for each
   // extension in the set, with |stage| as the current stage. Make a copy of
   // arguments because there is no guarantee that callback won't indirectly
diff --git a/extensions/browser/updater/extension_downloader_delegate.cc b/extensions/browser/updater/extension_downloader_delegate.cc
index a9cd7aba..2342515 100644
--- a/extensions/browser/updater/extension_downloader_delegate.cc
+++ b/extensions/browser/updater/extension_downloader_delegate.cc
@@ -41,6 +41,10 @@
     const ExtensionId& id,
     CacheStatus cache_status) {}
 
+void ExtensionDownloaderDelegate::OnExtensionManifestUpdateCheckStatusReceived(
+    const ExtensionId& id,
+    const std::string& status) {}
+
 void ExtensionDownloaderDelegate::OnExtensionDownloadFailed(
     const ExtensionId& id,
     Error error,
diff --git a/extensions/browser/updater/extension_downloader_delegate.h b/extensions/browser/updater/extension_downloader_delegate.h
index d3ae122..471a4c8 100644
--- a/extensions/browser/updater/extension_downloader_delegate.h
+++ b/extensions/browser/updater/extension_downloader_delegate.h
@@ -190,6 +190,13 @@
       const ExtensionId& id,
       CacheStatus cache_status);
 
+  // Invoked after the fetched manifest update results are parsed successfully,
+  // |status| contains information about the status of update check as returned
+  // by the update server.
+  virtual void OnExtensionManifestUpdateCheckStatusReceived(
+      const ExtensionId& id,
+      const std::string& status);
+
   // Invoked if the extension couldn't be downloaded. |error| contains the
   // failure reason.
   virtual void OnExtensionDownloadFailed(const ExtensionId& id,
diff --git a/extensions/browser/updater/safe_manifest_parser.cc b/extensions/browser/updater/safe_manifest_parser.cc
index d771dd6..c73f6d5 100644
--- a/extensions/browser/updater/safe_manifest_parser.cc
+++ b/extensions/browser/updater/safe_manifest_parser.cc
@@ -65,7 +65,8 @@
   const base::Value* updatecheck =
       data_decoder::GetXmlElementChildWithTag(app_element, updatecheck_name);
 
-  if (GetXmlElementAttribute(*updatecheck, "status") == "noupdate") {
+  result->status = GetXmlElementAttribute(*updatecheck, "status");
+  if (result->status == "noupdate") {
     result->info = GetXmlElementAttribute(*updatecheck, "info");
     return true;
   }
diff --git a/extensions/browser/updater/safe_manifest_parser.h b/extensions/browser/updater/safe_manifest_parser.h
index 62db696..c7642c53 100644
--- a/extensions/browser/updater/safe_manifest_parser.h
+++ b/extensions/browser/updater/safe_manifest_parser.h
@@ -30,6 +30,9 @@
   // too aggressive.
   base::Optional<std::string> info;
 
+  // Indicates the outcome of the update check.
+  std::string status;
+
   // Attributes for the full update.
   GURL crx_url;
   std::string package_hash;
diff --git a/gpu/vulkan/BUILD.gn b/gpu/vulkan/BUILD.gn
index 5aa8061..f4fac365 100644
--- a/gpu/vulkan/BUILD.gn
+++ b/gpu/vulkan/BUILD.gn
@@ -166,6 +166,7 @@
         "tests/vulkan_test.cc",
         "tests/vulkan_tests_main.cc",
         "vulkan_fence_helper_unittest.cc",
+        "vulkan_image_unittest.cc",
       ]
 
       deps = [
@@ -179,6 +180,7 @@
         "//ui/events/platform",
         "//ui/gfx",
         "//ui/gfx:native_widget_types",
+        "//ui/gfx:test_support",
         "//ui/gfx/geometry",
       ]
 
diff --git a/gpu/vulkan/vulkan_image_unittest.cc b/gpu/vulkan/vulkan_image_unittest.cc
new file mode 100644
index 0000000..48051aa5
--- /dev/null
+++ b/gpu/vulkan/vulkan_image_unittest.cc
@@ -0,0 +1,118 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/vulkan/vulkan_image.h"
+
+#include "build/build_config.h"
+#include "gpu/vulkan/tests/basic_vulkan_test.h"
+#include "gpu/vulkan/vulkan_device_queue.h"
+#include "gpu/vulkan/vulkan_function_pointers.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace gpu {
+
+namespace {
+
+// TODO(penghuang): add more formats used by chrome.
+const VkFormat kFormats[] = {
+    VK_FORMAT_R8G8B8A8_UNORM,
+    VK_FORMAT_B8G8R8A8_UNORM,
+};
+
+}  // namespace
+
+using VulkanImageTest = BasicVulkanTest;
+
+TEST_F(VulkanImageTest, Create) {
+  constexpr gfx::Size size(100, 100);
+  constexpr VkImageUsageFlags usage =
+      VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
+      VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+  auto* device_queue = GetDeviceQueue();
+  for (auto format : kFormats) {
+    auto image = VulkanImage::Create(device_queue, size, format, usage);
+    EXPECT_TRUE(image);
+    EXPECT_EQ(image->size(), size);
+    EXPECT_EQ(image->format(), format);
+    EXPECT_GT(image->device_size(), 0u);
+    EXPECT_EQ(image->image_tiling(), VK_IMAGE_TILING_OPTIMAL);
+    EXPECT_EQ(image->image_layout(), VK_IMAGE_LAYOUT_UNDEFINED);
+    EXPECT_NE(image->image(), static_cast<VkImage>(VK_NULL_HANDLE));
+    EXPECT_NE(image->device_memory(),
+              static_cast<VkDeviceMemory>(VK_NULL_HANDLE));
+    EXPECT_EQ(image->handle_types(), 0u);
+    image->Destroy();
+  }
+}
+
+TEST_F(VulkanImageTest, CreateWithExternalMemory) {
+  constexpr gfx::Size size(100, 100);
+  constexpr VkImageUsageFlags usage =
+      VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
+      VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+  auto* device_queue = GetDeviceQueue();
+  for (auto format : kFormats) {
+    auto image = VulkanImage::CreateWithExternalMemory(device_queue, size,
+                                                       format, usage);
+    EXPECT_TRUE(image);
+    EXPECT_EQ(image->size(), size);
+    EXPECT_EQ(image->format(), format);
+    EXPECT_GT(image->device_size(), 0u);
+    EXPECT_EQ(image->image_tiling(), VK_IMAGE_TILING_OPTIMAL);
+    EXPECT_EQ(image->image_layout(), VK_IMAGE_LAYOUT_UNDEFINED);
+    EXPECT_NE(image->image(), static_cast<VkImage>(VK_NULL_HANDLE));
+    EXPECT_NE(image->device_memory(),
+              static_cast<VkDeviceMemory>(VK_NULL_HANDLE));
+
+#if defined(OS_POSIX)
+    EXPECT_TRUE(image->handle_types() &
+                VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
+        << std::hex << "handle_types = 0x" << image->handle_types();
+    const VkExternalMemoryHandleTypeFlagBits kHandleTypes[] = {
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
+    };
+    // Get fd for all supported types.
+    for (auto handle_type : kHandleTypes) {
+      if ((image->handle_types() & handle_type) == 0)
+        continue;
+      base::ScopedFD scoped_fd = image->GetMemoryFd(handle_type);
+      EXPECT_TRUE(scoped_fd.is_valid())
+          << std::hex << " handle_types = 0x" << image->handle_types()
+          << " handle_type = 0x" << handle_type;
+    }
+#elif defined(OS_WIN)
+    EXPECT_TRUE(image->handle_types() &
+                VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+        << std::hex << "handle_types = 0x" << image->handle_types();
+    const VkExternalMemoryHandleTypeFlagBits kHandleTypes[] = {
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
+    };
+    // Get fd for all supported types.
+    for (auto handle_type : kHandleTypes) {
+      if ((image->handle_types() & handle_type) == 0)
+        continue;
+      base::win::ScopedHandle scoped_handle = image->GetMemoryHandle(
+          static_cast<VkExternalMemoryHandleTypeFlagBits>(handle_type));
+      EXPECT_TRUE(scoped_handle.IsValid())
+          << std::hex << " handle_types = 0x" << image->handle_types()
+          << " handle_type = 0x" << handle_type;
+    }
+#elif defined(OS_FUCHSIA)
+    EXPECT_TRUE(image->handle_types() &
+                VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA);
+    zx::vmo handle = image->GetMemoryZirconHandle();
+    EXPECT_TRUE(handle);
+#endif
+
+    image->Destroy();
+  }
+}
+
+// TODO(penghuang): Add test for creating from GpuMemoryBufferHandle
+
+}  // namespace gpu
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg
index 5d024355..bb7c613 100644
--- a/infra/config/generated/commit-queue.cfg
+++ b/infra/config/generated/commit-queue.cfg
@@ -1339,6 +1339,7 @@
       >
       builders: <
         name: "chromium/try-m81/linux-ozone-rel"
+        includable_only: true
       >
       builders: <
         name: "chromium/try-m81/linux-rel"
diff --git a/infra/config/versioned/milestones/m81/buckets/try.star b/infra/config/versioned/milestones/m81/buckets/try.star
index 6ad62b3..4a6692a4 100644
--- a/infra/config/versioned/milestones/m81/buckets/try.star
+++ b/infra/config/versioned/milestones/m81/buckets/try.star
@@ -163,7 +163,6 @@
 
 try_.chromium_linux_builder(
     name = 'linux-ozone-rel',
-    tryjob = try_.job(),
 )
 
 try_.chromium_linux_builder(
diff --git a/ios/build/bots/chromium.clang/ToTiOS.json b/ios/build/bots/chromium.clang/ToTiOS.json
deleted file mode 100644
index 3b3712a..0000000
--- a/ios/build/bots/chromium.clang/ToTiOS.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
-  "comments": [
-    "Clang tip-of-tree builder for iOS."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "ios_enable_code_signing=false",
-    "is_component_build=false",
-    "is_debug=false",
-    "llvm_force_head_revision=true",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\""
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "env": {
-    "LLVM_FORCE_HEAD_REVISION": "1"
-  },
-  "configuration": "Release",
-  "tests": [
-    {
-      "app": "base_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "boringssl_crypto_tests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "boringssl_ssl_tests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "components_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "crypto_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "gfx_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "google_apis_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ios_chrome_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ios_net_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ios_web_inttests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ios_web_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ios_web_view_inttests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "net_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "skia_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "sql_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "ui_base_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    },
-    {
-      "app": "url_unittests",
-      "device type": "iPhone 6s",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "os": "13.3"
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.clang/ToTiOSDevice.json b/ios/build/bots/chromium.clang/ToTiOSDevice.json
deleted file mode 100644
index 7175605..0000000
--- a/ios/build/bots/chromium.clang/ToTiOSDevice.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "comments": [
-    "Clang tip-of-tree builder for iOS device."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "is_debug=false",
-    "llvm_force_head_revision=true",
-    "target_os=\"ios\"",
-    "target_cpu=\"arm64\""
-  ],
-  "additional_compile_targets": [
-    "base_unittests",
-    "boringssl_crypto_tests",
-    "boringssl_ssl_tests",
-    "components_unittests",
-    "crypto_unittests",
-    "gfx_unittests",
-    "google_apis_unittests",
-    "ios_chrome_unittests",
-    "ios_net_unittests",
-    "ios_web_inttests",
-    "ios_web_unittests",
-    "ios_web_view_inttests",
-    "net_unittests",
-    "skia_unittests",
-    "sql_unittests",
-    "ui_base_unittests",
-    "url_unittests"
-  ],
-  "env": {
-    "LLVM_FORCE_HEAD_REVISION": "1"
-  },
-  "configuration": "Release",
-  "device check": false,
-  "tests": [
-    {
-      "app": "base_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "boringssl_crypto_tests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "boringssl_ssl_tests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "components_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "crypto_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "gfx_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "google_apis_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ios_chrome_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ios_net_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ios_web_inttests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ios_web_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ios_web_view_inttests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "net_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "skia_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "sql_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "ui_base_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    },
-    {
-      "app": "url_unittests",
-      "device type": "iPhone 6s",
-      "os": "12.3.1"
-    }
-  ],
-  "expiration_time": 10800
-}
diff --git a/ios/build/bots/chromium.fyi/ios-simulator.json b/ios/build/bots/chromium.fyi/ios-simulator.json
deleted file mode 100644
index 9883178..0000000
--- a/ios/build/bots/chromium.fyi/ios-simulator.json
+++ /dev/null
@@ -1,107 +0,0 @@
-{
-  "comments": [
-    "Runs tests on FYI on iOS12 simulators."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "configuration": "Debug",
-  "tests": [
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_integration_egtests",
-      "test args": [
-        "--enable-features=CredentialManager"
-      ],
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_integration_egtests",
-      "test args": [
-        "--enable-features=CredentialManager"
-      ],
-      "device type": "iPad Air 2",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_integration_egtests",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_signin_egtests",
-      "test args": [
-        "--enable-features=SlimNavigationManager"
-      ],
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_smoke_egtests",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_web_egtests",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_web_shell_egtests",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_chrome_ui_egtests",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "xcode parallelization": true,
-      "xctest": true,
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
deleted file mode 100644
index d24b5f0..0000000
--- a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
+++ /dev/null
@@ -1,178 +0,0 @@
-{
-  "comments": [
-    "Runs tests with Xcode11 Beta SDK on iOS 13 beta simulators."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Debug",
-  "expiration_time": 14400,
-  "tests": [
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s Plus",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone 7",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30,
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30,
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30,
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30,
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30,
-      "xcode parallelization": true
-    },
-    {
-      "app": "ios_crash_xcuitests_module",
-      "host": "ios_crash_xcuitests",
-      "xcode parallelization": true,
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPad (6th generation)",
-      "os": "12.4",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Pro (12.9-inch)",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air (3rd generation)",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s Plus",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPad Air 2",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.goma/Chromium iOS Goma RBE ToT.json b/ios/build/bots/chromium.goma/Chromium iOS Goma RBE ToT.json
deleted file mode 100644
index 2b9d4af..0000000
--- a/ios/build/bots/chromium.goma/Chromium iOS Goma RBE ToT.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "comments": [
-    "Goma RBE ToT builder for iOS.",
-    "It is chromium.mac/ios-device.json + clobber."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_enable_code_signing=false",
-    "is_component_build=false",
-    "is_debug=false",
-    "symbol_level=0",
-    "target_cpu=\"arm64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Release",
-  "tests": [
-  ],
-  "clobber": true
-}
diff --git a/ios/build/bots/chromium.mac/ios-device.json b/ios/build/bots/chromium.mac/ios-device.json
deleted file mode 100644
index 99586563..0000000
--- a/ios/build/bots/chromium.mac/ios-device.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "comments": [
-    "Builder for devices.",
-    "Build is performed with gn+ninja.",
-    "If modified, please change chromium.fyi/ios-device-goma-canary-clobber.json too."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_enable_code_signing=false",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=false",
-    "symbol_level=0",
-    "target_cpu=\"arm64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Release",
-  "tests": [
-  ]
-}
diff --git a/ios/build/bots/chromium.mac/ios-simulator-cronet.json b/ios/build/bots/chromium.mac/ios-simulator-cronet.json
deleted file mode 100644
index 3992d37..0000000
--- a/ios/build/bots/chromium.mac/ios-simulator-cronet.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "comments": [
-    "Cronet tests 64-bit iOS 12 and 13 simulators."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "additional_target_cpus=[\"x86\"]",
-    "disable_brotli_filter=false",
-    "disable_file_support=true",
-    "disable_ftp_support=true",
-    "enable_websockets=false",
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_deployment_target=\"9.0\"",
-    "is_component_build=false",
-    "use_crash_key_stubs=true",
-    "is_cronet_build=true",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_platform_icu_alternatives=true"
-  ],
-  "tests": [
-    {
-      "app": "cronet_unittests_ios",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "app": "cronet_unittests_ios",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "app": "cronet_test",
-      "device type": "iPad Air 2",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "app": "cronet_test",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool": "chromium.tests.template",
-      "priority": 30
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json b/ios/build/bots/chromium.mac/ios-simulator-full-configs.json
deleted file mode 100644
index 10fa7d4..0000000
--- a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "comments": [
-    "Runs tests on 64-bit iOS 12 and 13 tests on iPad, iPhone,",
-    "@3x, and @2x on main waterfall ios-simulator-full-configs."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Debug",
-  "tests": [
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air 2",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Air 2",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone 7",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.mac/ios-simulator.json b/ios/build/bots/chromium.mac/ios-simulator.json
deleted file mode 100644
index 1f4e765..0000000
--- a/ios/build/bots/chromium.mac/ios-simulator.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "comments": [
-    "Runs tests on iOS 12.4 and 13.3 on iPad, iPhone, @3x, and @2x on",
-    "main and CQ ios-simulator.",
-    "Note: Xcode 11 requires Mac OS 10.14.4 or higher, hence 'host os'."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Debug",
-  "tests": [
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone 6s",
-      "os": "12.4",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s Plus",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone SE",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "priority": 30
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.mac/ios13-beta-simulator.json b/ios/build/bots/chromium.mac/ios13-beta-simulator.json
deleted file mode 100644
index ebdf9e7d..0000000
--- a/ios/build/bots/chromium.mac/ios13-beta-simulator.json
+++ /dev/null
@@ -1,147 +0,0 @@
-{
-  "comments": [
-    "Runs tests on iOS GM SDK on iOS 13 simulators.",
-    "Note: Xcode 11 requires OSX 10.14.4 and up",
-    "Note: This file exists only to support the trybot.",
-    "It should be kept in sync with the CI configuration in ../chromium.fyi/."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "tests": [
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPhone 7",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPad (6th generation)",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPhone X",
-      "os": "12.4",
-      "xcode build version": "11c29",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "xcode parallelization": true,
-      "include": "eg2_tests.json",
-      "device type": "iPad (6th generation)",
-      "os": "12.4",
-      "xcode build version": "11c29",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6"
-    },
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Pro (12.9-inch)",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air (3rd generation)",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template",
-      "xcode parallelization": true
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s Plus",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    },
-    {
-      "app": "ios_crash_xcuitests_module",
-      "host": "ios_crash_xcuitests",
-      "xcode parallelization": true,
-      "device type": "iPhone X",
-      "os": "13.3",
-      "xcode build version": "11c29",
-      "host os": "Mac-10.14.6",
-      "pool":"chromium.tests.template"
-    }
-  ]
-}
diff --git a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
deleted file mode 100644
index 705db30..0000000
--- a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "comments": [
-    "Runs tests with Xcode11 Beta SDK on iOS 13 beta simulators.",
-    "Note: Xcode 11 requires OSX 10.14.4 and up",
-    "Note: This file exists only to support the trybot.",
-    "It should be kept in sync with the CI configuration in ../chromium.fyi/."
-  ],
-  "xcode build version": "11c29",
-  "gn_args": [
-    "goma_dir=\"$(goma_dir)\"",
-    "ios_use_goma_rbe=true",
-    "is_component_build=false",
-    "is_debug=true",
-    "symbol_level=1",
-    "target_cpu=\"x64\"",
-    "target_os=\"ios\"",
-    "use_goma=true"
-  ],
-  "additional_compile_targets": [
-    "all"
-  ],
-  "configuration": "Debug",
-  "expiration_time": 14400,
-  "tests": [
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s Plus",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "screen_size_dependent_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "common_tests.json",
-      "device type": "iPhone 6s",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone 7",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPhone X",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    },
-    {
-      "include": "eg_cq_tests.json",
-      "device type": "iPad Air 2",
-      "os": "13.3",
-      "pool":"chromium.tests.template",
-      "host os": "Mac-10.14.6",
-      "priority": 30
-    }
-  ]
-}
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
index 2ee3e8a..653d7498 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -2,7 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
 <translation id="102360288709523007">‏ساعد في تحسين Chromium بإرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google.</translation>
-<translation id="1185134272377778587">‏حول Chromium</translation>
+<translation id="1185134272377778587">‏لمحة عامة عن Chromium</translation>
 <translation id="1472013873724362412">‏لا يعمل حسابك على Chromium. يُرجى الاتصال بمشرف النطاق أو استخدام حساب Google عادي لتسجيل الدخول.</translation>
 <translation id="1507010443238049608">‏المساعدة على تحسين ميزات Chromium وأدائه</translation>
 <translation id="1617663976202781617">‏البيانات من مزامنة Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 407b965..73fcd142 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">ምልክት አድርግበት…</translation>
 <translation id="3153862085237805241">ካርድ አስቀምጥ</translation>
 <translation id="3157684681743766797">ሁሉንም ምልክት አድርግባቸው…</translation>
+<translation id="3161291298470460782">ይህ እርስዎን ዘግቶ ያስወጣዎታል፣ ስምረትን ያጠፋል እና እንዲሁም ሁሉንም የChrome ውሂብ ያጸዳል። የእርስዎ የሰመረ ውሂብ በእርስዎ የGoogle መለያ ውስጥ ይቆያል።</translation>
 <translation id="3175081911749765310">የድር አገልግሎቶች</translation>
 <translation id="3178650076442119961">ገባሪ ዛሬ</translation>
 <translation id="3207960819495026254">ዕልባት ተደርጎበታል</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">የአሰሳ ውሂብን ማጽዳትን ያረጋግጡ</translation>
 <translation id="35083190962747987">${url} ክፈት</translation>
 <translation id="3519193562722059437">ድሩን ለማሰስ ትር ይክፈቱ።</translation>
+<translation id="3523473570015918798">ዘግተው በመውጣት የእርስዎ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌላ የChrome ውሂብ ከእንግዲህ ወደ የእርስዎ Google መለያ አይሰምሩም።</translation>
 <translation id="3527085408025491307">አቃፊ</translation>
 <translation id="3529024052484145543">ደህንነቱ አልተጠበቀም</translation>
 <translation id="3533202363250687977">ሁሉንም ማንነት የማያሳውቅ ትሮችን ዝጋ</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">የገጽ ደህንነት መረጃ</translation>
 <translation id="5443952882982198570">ክሬዲት ካርዶች</translation>
 <translation id="5457907402803865181">የይለፍ ቃሎችን ማስመር ላይ ስሕተት።</translation>
+<translation id="5508435575041083207">ዘግተህ ውጣ እና ከዚህ መሣሪያ ላይ ሁሉንም ውሂብ አጽዳ</translation>
 <translation id="5525269841082836315">የይለፍ ሐረግ ፍጠር</translation>
 <translation id="5548760955356983418">Handoff በዚህ መሣሪያ ላይ አንድ ድር ጣቢያ ማሰስ እንዲጀምሩና በቀላሉ በእርስዎ Mac ላይ እንዲቀጥሉ ያስችልዎታል። አሁን ክፍት የሆነው ድር ጣቢያ በእርስዎ Mac ላይ ባለው Dock ላይ ይታያል።
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">ድሩን በግል ለማሰስ አዲስ ትር ያክሉ።</translation>
 <translation id="7671141431838911305">ጫን</translation>
 <translation id="7765158879357617694">ውሰድ</translation>
+<translation id="7771470029643830783">ዘግተው በመውጣት የእርስዎ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌላ የChrome ውሂብ ከእንግዲህ ወደ የእርስዎ Google መለያ አይሰምሩም።
+
+የእርስዎ መለያ በ<ph name="HOSTED_DOMAIN" /> የሚተዳደር ስለሆነ ዘግተው ሲወጡ የChrome ውሂብዎ ከዚህ መሣሪያ ይሰረዛል። የእርስዎ የሰመረ ውሂብ በእርስዎ የGoogle መለያ ውስጥ ይቆያል።</translation>
 <translation id="7772032839648071052">የይለፍ ሐረግ ያረጋግጡ</translation>
 <translation id="7781011649027948662">ገጽ ይተርጎም?</translation>
 <translation id="7781829728241885113">ትናንት</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">ለውጦችን አስቀምጥ</translation>
 <translation id="8503813439785031346">የተጣቃሚ ስም</translation>
 <translation id="850600235656508448">ማንነት በማያሳውቅ ሁነታ ይክፈቱ</translation>
+<translation id="8510057420705599706">ይህ እርስዎን ዘግቶ ያስወጣል እና እንዲሁም ስምረትን ያጠፋል፣ ነገር ግን የእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌላ የChrome ውሂብ በዚህ መሣሪያ ላይ እንዳሉ ይቆያሉ።</translation>
 <translation id="8517375800490286174">የክፍት ምንጭ ፍቃዶች</translation>
 <translation id="8524799873541103884">ከ<ph name="NUMBER_OF_OPEN_TABS" /> <ph name="INCOGNITO" /> ትሮች ውስጥ ከ<ph name="FIRST_VISIBLE_TAB" /> እስከ <ph name="LAST_VISIBLE_TAB" /> ያሉት</translation>
 <translation id="8529767659511976195">አዲስ</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">የይለፍ ቃል ያዘምኑ</translation>
 <translation id="9100610230175265781">የይለፍ ሐረግ ያስፈልጋል</translation>
 <translation id="9148126808321036104">እንደገና ይግቡ</translation>
+<translation id="9152539721251340337">የQR ኮድ ይፍጠሩ</translation>
 <translation id="9157836665414082580">መገናኛዎችን አፍን</translation>
 <translation id="9188680907066685419">ከሚተዳደር መለያ ዘግግተህ ውጣ</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 85de3c5..2c7c1a1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">وضع علامة...</translation>
 <translation id="3153862085237805241">حفظ البطاقة</translation>
 <translation id="3157684681743766797">وضع علامة على الكل...</translation>
+<translation id="3161291298470460782">‏سيؤدي هذا الإجراء إلى تسجيل خروجك وإيقاف المزامنة ومحو جميع بيانات Chrome من هذا الجهاز. وستظل البيانات المتزامنة في حسابك على Google.</translation>
 <translation id="3175081911749765310">خدمات الويب</translation>
 <translation id="3178650076442119961">نشط اليوم</translation>
 <translation id="3207960819495026254">تمت إضافتها إلى الإشارات المرجعية.</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">تأكيد محو بيانات التصفّح</translation>
 <translation id="35083190962747987">‏فتح عنوان ${url}</translation>
 <translation id="3519193562722059437">افتح علامة تبويب لتصفح الويب.</translation>
+<translation id="3523473570015918798">‏سيؤدي تسجيل الخروج إلى إيقاف مزامنة الإشارات المرجعية والسجلّ وكلمات المرور وبيانات Chrome الأخرى مع حسابك على Google.</translation>
 <translation id="3527085408025491307">المجلد</translation>
 <translation id="3529024052484145543">غير آمن</translation>
 <translation id="3533202363250687977">إغلاق جميع علامات تبويب التصفُّح المتخفي</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">معلومات أمان الصفحة</translation>
 <translation id="5443952882982198570">بطاقات الائتمان</translation>
 <translation id="5457907402803865181">حدث خطأ أثناء مزامنة كلمات المرور</translation>
+<translation id="5508435575041083207">تسجيل الخروج ومحو البيانات من هذ الجهاز</translation>
 <translation id="5525269841082836315">إنشاء عبارة مرور</translation>
 <translation id="5548760955356983418">‏يتيح لك Handoff بدء تصفح موقع على هذا الجهاز ثم متابعة التصفح بسهولة على جهاز Mac. سيظهر الموقع المفتوح حاليًا على Dock بـ Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">لتصفح الويب بخصوصية تامّة، يمكنك إضافة علامة تبويب جديدة.</translation>
 <translation id="7671141431838911305">تثبيت</translation>
 <translation id="7765158879357617694">نقل</translation>
+<translation id="7771470029643830783">‏سيؤدي تسجيل الخروج إلى إيقاف مزامنة الإشارات المرجعية والسجلّ وكلمات المرور وبيانات Chrome الأخرى مع حسابك على Google.
+
+سيتم حذف بيانات Chrome من هذا الجهاز عند تسجيل الخروج، وذلك لأن حسابك تتم إدارته من خلال <ph name="HOSTED_DOMAIN" />. وستظل البيانات المتزامنة في حسابك على Google.</translation>
 <translation id="7772032839648071052">تأكيد عبارة المرور</translation>
 <translation id="7781011649027948662">هل تريد ترجمة الصفحة؟</translation>
 <translation id="7781829728241885113">أمس</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">حفظ التغييرات</translation>
 <translation id="8503813439785031346">اسم المستخدم</translation>
 <translation id="850600235656508448">فتح في وضع التصفح المتخفي</translation>
+<translation id="8510057420705599706">‏سيؤدي هذا الإجراء إلى تسجيل خروجك وإيقاف المزامنة، ولكن ستظل الإشارات المرجعية والسجلّ وكلمات المرور وبيانات Chrome الأخرى على هذا الجهاز.</translation>
 <translation id="8517375800490286174">تراخيص البرامج المفتوحة المصدر</translation>
 <translation id="8524799873541103884">علامات تبويب <ph name="INCOGNITO" /><ph name="FIRST_VISIBLE_TAB" /> عبر <ph name="LAST_VISIBLE_TAB" /> من <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">جديد</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">تحديث كلمة المرور</translation>
 <translation id="9100610230175265781">عبارة المرور مطلوبة</translation>
 <translation id="9148126808321036104">تسجيل الدخول مرة أخرى</translation>
+<translation id="9152539721251340337">إنشاء رمز استجابة سريعة</translation>
 <translation id="9157836665414082580">إيقاف مربعات الحوار</translation>
 <translation id="9188680907066685419">تسجيل الخروج من الحساب المُدار</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index 351a458..a6e8e18e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Qeyd edin...</translation>
 <translation id="3153862085237805241">Kartı Yadda saxlayın</translation>
 <translation id="3157684681743766797">Hamısını Qeyd Edin…</translation>
+<translation id="3161291298470460782">Bunun nəticəsində çıxacaqsınız, sinxronizasiya deaktiv ediləcək və bu cihazdakı bütün Chrome datası silinəcək. Sinxronlaşdırılmış data Google Hesabınızda qalacaq.</translation>
 <translation id="3175081911749765310">Veb Xidmətlər</translation>
 <translation id="3178650076442119961">Bu Gün Aktiv Olub</translation>
 <translation id="3207960819495026254">Əlfəcinlənib</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Brauzer Data Silinməsini Təsdiq Edin</translation>
 <translation id="35083190962747987">${url} keçidini açın</translation>
 <translation id="3519193562722059437">Vebdə baxmaq üçün panel açın.</translation>
+<translation id="3523473570015918798">Çıxsanız, əlfəcin, tarixçə, parol və digər Chrome datası artıq Google Hesabınıza sinxronizasiya edilməyəcək.</translation>
 <translation id="3527085408025491307">Qovluq</translation>
 <translation id="3529024052484145543">Təhlükəsiz deyil</translation>
 <translation id="3533202363250687977">Bütün Gizli Tabları bağlayın</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Səhifə güvənliyi məlumatı</translation>
 <translation id="5443952882982198570">Kredit Kartları</translation>
 <translation id="5457907402803865181">Parolları sinxronlaşdırarkən xəta baş verdi.</translation>
+<translation id="5508435575041083207">Çıxış edin və bu cihazdakı datanı silin</translation>
 <translation id="5525269841082836315">Parol söz yaradın</translation>
 <translation id="5548760955356983418">Handoff bu cihazda asanlıqla veb sayt açıb Mac cihazınızda davam etməyə imkan verir. Cari açıq veb sayt Mac cihazınızda görünəcək.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Vebdə məxfi axtarış etmək üçün yeni tab açın.</translation>
 <translation id="7671141431838911305">QURAŞDIRIN</translation>
 <translation id="7765158879357617694">Daşıyın</translation>
+<translation id="7771470029643830783">Çıxsanız, əlfəcin, tarixçə, parol və digər Chrome datası artıq Google Hesabınıza sinxronizasiya edilməyəcək.
+
+Hesabınız <ph name="HOSTED_DOMAIN" /> tərəfindən idarə edildiyinə görə, çıxış etdikdə Chrome datanız bu cihazdan silinəcək. Sinxronlaşdırılmış data Google Hesabınızda qalacaq.</translation>
 <translation id="7772032839648071052">Parolu təsdiq edin</translation>
 <translation id="7781011649027948662">Səhifə tərcümə edilsin?</translation>
 <translation id="7781829728241885113">Dünən</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Dəyişiklikləri yadda saxlayın</translation>
 <translation id="8503813439785031346">İstifadəçi adı</translation>
 <translation id="850600235656508448">Gizli rejimdə açın</translation>
+<translation id="8510057420705599706">Bunun nəticəsində çıxacaqsınız və sinxronizasiya deaktiv ediləcək, lakin əlfəcinlər, tarixçə, parollar və digər Chrome datası bu cihazda qalacaq.</translation>
 <translation id="8517375800490286174">Açıq mənbə lisenziyaları</translation>
 <translation id="8524799873541103884"><ph name="NUMBER_OF_OPEN_TABS" /> paneldən <ph name="LAST_VISIBLE_TAB" /> üzrə <ph name="FIRST_VISIBLE_TAB" /> <ph name="INCOGNITO" /> panel</translation>
 <translation id="8529767659511976195">Yeni</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Parolu güncəlləyin</translation>
 <translation id="9100610230175265781">Parol tələb olunur</translation>
 <translation id="9148126808321036104">Yenidən daxil olun</translation>
+<translation id="9152539721251340337">QR kodu yaradın</translation>
 <translation id="9157836665414082580">Dialoqların qarşısını alın</translation>
 <translation id="9188680907066685419">İdarə olunan hesabdan çıxın</translation>
 <translation id="9203116392574189331">Əldən-ələ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index 92a3c49..61f5266c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Пазначыць…</translation>
 <translation id="3153862085237805241">Захаваць картку</translation>
 <translation id="3157684681743766797">Пазначыць усе…</translation>
+<translation id="3161291298470460782">Вы выйдзеце з уліковага запісу, сінхранізацыя будзе выключана, усе даныя Chrome будуць выдалены з гэтай прылады. Сінхранізаваныя даныя застануцца ва Уліковым запісе Google.</translation>
 <translation id="3175081911749765310">Вэб-сэрвісы</translation>
 <translation id="3178650076442119961">Апошнія дзеянні адбываліся сёння</translation>
 <translation id="3207960819495026254">Дададзена ў закладкі</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Пацвердзіць выдаленне гісторыі праглядаў</translation>
 <translation id="35083190962747987">Адкрыць ${url}</translation>
 <translation id="3519193562722059437">Адкрыйце ўкладку для прагляду змесціва ў інтэрнэце.</translation>
+<translation id="3523473570015918798">Пасля выхаду закладкі, гісторыя, паролі і іншыя даныя Chrome больш не будуць сінхранізавацца з Уліковым запісам Google.</translation>
 <translation id="3527085408025491307">Папка</translation>
 <translation id="3529024052484145543">Небяспечнае змесціва</translation>
 <translation id="3533202363250687977">Закрыць усе ўкладкі інкогніта</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Інфармацыя пра бяспеку старонкі</translation>
 <translation id="5443952882982198570">Крэдытныя карты</translation>
 <translation id="5457907402803865181">Памылка пры сінхранізацыі пароляў.</translation>
+<translation id="5508435575041083207">Выйсці і выдаліць даныя з гэтай прылады</translation>
 <translation id="5525269841082836315">Стварэнне фразы-пароля</translation>
 <translation id="5548760955356983418">Функцыя перадачы вэб-сайта дазваляе пачаць прагляд вэб-старонкі на адной прыладзе, а затым працягнуць, перайшоўшы на Mac. Адкрыты вэб-сайт з'явіцца ў док-панэлі камп'ютара Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Для прагляду інтэрнэт-змесціва ў прыватным рэжыме дадайце новую ўкладку.</translation>
 <translation id="7671141431838911305">УСТАЛЯВАЦЬ</translation>
 <translation id="7765158879357617694">Перамясціць</translation>
+<translation id="7771470029643830783">Пасля выхаду закладкі, гісторыя, паролі і іншыя даныя Chrome больш не будуць сінхранізавацца з Уліковым запісам Google.
+
+Вашым уліковым запісам кіруе дамен <ph name="HOSTED_DOMAIN" />, таму пры выхадзе даныя Chrome будуць выдалены з гэтай прылады. Сінхранізаваныя даныя застануцца ва Уліковым запісе Google.</translation>
 <translation id="7772032839648071052">Пацвердзіце фразу-пароль</translation>
 <translation id="7781011649027948662">Перакласці старонку?</translation>
 <translation id="7781829728241885113">Учора</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Захаваць змяненні</translation>
 <translation id="8503813439785031346">Імя карыстальніка</translation>
 <translation id="850600235656508448">Адкрыць у рэжыме інкогніта</translation>
+<translation id="8510057420705599706">Вы выйдзеце з уліковага запісу, сінхранізацыя будзе выключана, але закладкі, гісторыя, паролі і іншыя даныя Chrome на гэтай прыладзе застануцца.</translation>
 <translation id="8517375800490286174">Ліцэнзіі ПЗ з адкрытым зыходным кодам</translation>
 <translation id="8524799873541103884">Укладкі <ph name="INCOGNITO" /> ад <ph name="FIRST_VISIBLE_TAB" /> да <ph name="LAST_VISIBLE_TAB" /> з <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Новае</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Абнавіць пароль</translation>
 <translation id="9100610230175265781">Патрабуецца фраза-пароль</translation>
 <translation id="9148126808321036104">Увайсці зноў</translation>
+<translation id="9152539721251340337">Стварыць QR-код</translation>
 <translation id="9157836665414082580">Не паказваць дыялогі</translation>
 <translation id="9188680907066685419">Выйсці з уліковага запісу пад кіраваннем</translation>
 <translation id="9203116392574189331">Перадача вэб-сайта</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 6f530e56..c481f01 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Označit…</translation>
 <translation id="3153862085237805241">Uložit kartu</translation>
 <translation id="3157684681743766797">Označit vše…</translation>
+<translation id="3161291298470460782">Tímto se odhlásíte, vypnete synchronizaci a vymažete z tohoto zařízení veškerá data prohlížeče Chrome. Synchronizovaná data vám v účtu Google zůstanou.</translation>
 <translation id="3175081911749765310">Webové služby</translation>
 <translation id="3178650076442119961">Aktivní dnes</translation>
 <translation id="3207960819495026254">Přidáno do záložek</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Potvrdit vymazání údajů o prohlížení</translation>
 <translation id="35083190962747987">Otevřít ${url}</translation>
 <translation id="3519193562722059437">Chcete-li prohlížet internet, otevřete novou kartu.</translation>
+<translation id="3523473570015918798">Pokud se odhlásíte, vaše záložky, historie, hesla a další data v Chromu se již nebudou synchronizovat do vašeho účtu Google.</translation>
 <translation id="3527085408025491307">Složka</translation>
 <translation id="3529024052484145543">Nezabezpečeno</translation>
 <translation id="3533202363250687977">Zavřít všechny anonymní karty</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Informace o zabezpečení stránky</translation>
 <translation id="5443952882982198570">Platební karty</translation>
 <translation id="5457907402803865181">Při synchronizaci došlo k chybě</translation>
+<translation id="5508435575041083207">Odhlásit se a vymazat z tohoto zařízení data</translation>
 <translation id="5525269841082836315">Vytvořit heslovou frázi</translation>
 <translation id="5548760955356983418">Handoff umožňuje začít web procházet v tomto zařízení a poté snadno pokračovat na počítači Mac. Akutální otevřený web se zobrazí v doku vašeho počítače Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Chcete-li procházet web v soukromí, přidejte novou kartu.</translation>
 <translation id="7671141431838911305">INSTALOVAT</translation>
 <translation id="7765158879357617694">Přesunout</translation>
+<translation id="7771470029643830783">Pokud se odhlásíte, vaše záložky, historie, hesla a další data v Chromu se již nebudou synchronizovat do vašeho účtu Google.
+
+Protože váš účet spravuje doména <ph name="HOSTED_DOMAIN" />, při odhlášení z tohoto zařízení se smažou vaše data v prohlížeči Chrome. Synchronizovaná data vám v účtu Google zůstanou.</translation>
 <translation id="7772032839648071052">Potvrďte heslovou frázi</translation>
 <translation id="7781011649027948662">Přeložit stránku?</translation>
 <translation id="7781829728241885113">Včera</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Uložit změny</translation>
 <translation id="8503813439785031346">Uživatelské jméno</translation>
 <translation id="850600235656508448">Otevřít v anonymním okně</translation>
+<translation id="8510057420705599706">Tímto se odhlásíte a vypnete synchronizaci, ale vaše záložky, historie, hesla a další data prohlížeče Chrome na tomto zařízení zůstanou.</translation>
 <translation id="8517375800490286174">Licence open source</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> – karty <ph name="FIRST_VISIBLE_TAB" /> až <ph name="LAST_VISIBLE_TAB" /> z <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nové</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Aktualizovat heslo</translation>
 <translation id="9100610230175265781">Je vyžadována heslová fráze</translation>
 <translation id="9148126808321036104">Znovu přihlásit</translation>
+<translation id="9152539721251340337">Vytvořit QR kód</translation>
 <translation id="9157836665414082580">Potlačit dialogová okna</translation>
 <translation id="9188680907066685419">Odhlásit se ze spravovaného účtu</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index d1db13f..74b1db0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Markieren…</translation>
 <translation id="3153862085237805241">Karte speichern</translation>
 <translation id="3157684681743766797">Alle markieren…</translation>
+<translation id="3161291298470460782">Hierdurch werden Sie abgemeldet, die Synchronisierung wird deaktiviert und alle Chrome-Daten werden von diesem Gerät gelöscht. Ihre synchronisierten Daten verbleiben jedoch in Ihrem Google-Konto.</translation>
 <translation id="3175081911749765310">Webdienste</translation>
 <translation id="3178650076442119961">Heute aktiv</translation>
 <translation id="3207960819495026254">Mit einem Lesezeichen versehen</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Löschen der Browserdaten bestätigen</translation>
 <translation id="35083190962747987">${url} öffnen</translation>
 <translation id="3519193562722059437">Öffnet einen Tab zum Surfen im Web</translation>
+<translation id="3523473570015918798">Wenn Sie sich abmelden, werden Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter und andere Chrome-Daten nicht mehr mit Ihrem Google-Konto synchronisiert.</translation>
 <translation id="3527085408025491307">Ordner</translation>
 <translation id="3529024052484145543">Nicht sicher</translation>
 <translation id="3533202363250687977">Alle Inkognito-Tabs schließen</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Sicherheitsinformationen zur Seite</translation>
 <translation id="5443952882982198570">Kreditkarten</translation>
 <translation id="5457907402803865181">Fehler beim Synchronisieren von Passwörtern.</translation>
+<translation id="5508435575041083207">Abmelden und Daten von diesem Gerät löschen</translation>
 <translation id="5525269841082836315">Passphrase erstellen</translation>
 <translation id="5548760955356983418">Mit Handoff können Sie auf diesem Gerät auf einer Website stöbern und dann einfach auf Ihrem Mac an derselben Stelle weitermachen. Die aktuell geöffnete Website wird im Dock Ihres Macs angezeigt.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Fügen Sie einen neuen Tab hinzu, um privat im Web zu surfen.</translation>
 <translation id="7671141431838911305">Installieren</translation>
 <translation id="7765158879357617694">Verschieben</translation>
+<translation id="7771470029643830783">Wenn Sie sich abmelden, werden Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter und andere Chrome-Daten nicht mehr mit Ihrem Google-Konto synchronisiert.
+
+Da Ihr Konto von <ph name="HOSTED_DOMAIN" /> verwaltet wird, werden Ihre Chrome-Daten beim Abmelden von diesem Gerät gelöscht. Ihre synchronisierten Daten verbleiben jedoch in Ihrem Google-Konto.</translation>
 <translation id="7772032839648071052">Passphrase bestätigen</translation>
 <translation id="7781011649027948662">Seite übersetzen?</translation>
 <translation id="7781829728241885113">Gestern</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Änderungen speichern</translation>
 <translation id="8503813439785031346">Nutzername</translation>
 <translation id="850600235656508448">Im Inkognitomodus öffnen</translation>
+<translation id="8510057420705599706">Hierdurch werden Sie abgemeldet und die Synchronisierung wird deaktiviert. Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter sowie andere Chrome-Daten verbleiben jedoch auf diesem Gerät.</translation>
 <translation id="8517375800490286174">Open Source-Lizenzen</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />-Tabs <ph name="FIRST_VISIBLE_TAB" /> bis <ph name="LAST_VISIBLE_TAB" /> von <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Neu</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Passwort aktualisieren</translation>
 <translation id="9100610230175265781">Passphrase erforderlich</translation>
 <translation id="9148126808321036104">Erneut anmelden</translation>
+<translation id="9152539721251340337">QR-Code erstellen</translation>
 <translation id="9157836665414082580">Dialogfelder unterdrücken</translation>
 <translation id="9188680907066685419">Von verwaltetem Konto abmelden</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index a1ccce9..e9ed7ed8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Marcar…</translation>
 <translation id="3153862085237805241">Guardar tarjeta</translation>
 <translation id="3157684681743766797">Marcar todas…</translation>
+<translation id="3161291298470460782">Si realizas esta acción, saldrás de tu cuenta, se desactivará la sincronización y se borrarán todos los datos de Chrome de este dispositivo. Los datos que tengas sincronizados permanecerán en tu Cuenta de Google.</translation>
 <translation id="3175081911749765310">Servicios web</translation>
 <translation id="3178650076442119961">Activo hoy</translation>
 <translation id="3207960819495026254">Agregada a favoritos</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Confirmar el borrado de los datos de navegación</translation>
 <translation id="35083190962747987">Abrir ${url}</translation>
 <translation id="3519193562722059437">Abre una pestaña para navegar por la Web.</translation>
+<translation id="3523473570015918798">Si sales de tu Cuenta de Google, ya no se sincronizarán allí los favoritos, el historial, las contraseñas ni otros datos de Chrome.</translation>
 <translation id="3527085408025491307">Carpeta</translation>
 <translation id="3529024052484145543">No seguro</translation>
 <translation id="3533202363250687977">Cerrar todas las pestañas de incógnito</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Información de seguridad de la página</translation>
 <translation id="5443952882982198570">Tarjetas de crédito</translation>
 <translation id="5457907402803865181">Se produjo un error al sincronizar las contraseñas.</translation>
+<translation id="5508435575041083207">Salir y borrar los datos de este dispositivo</translation>
 <translation id="5525269841082836315">Crear frase contras.</translation>
 <translation id="5548760955356983418">Handoff te permite comenzar a navegar en un sitio web en este dispositivo y, luego, continuar fácilmente en tu Mac. El sitio web que está abierto ahora aparecerá en el Dock de tu Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Para navegar en la Web de manera privada, agrega una pestaña nueva.</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
+<translation id="7771470029643830783">Si sales de tu Cuenta de Google, ya no se sincronizarán allí los favoritos, el historial, las contraseñas ni otros datos de Chrome.
+
+Como <ph name="HOSTED_DOMAIN" /> administra tu cuenta, los datos de Chrome se borrarán de este dispositivo cuando salgas. Los datos que tengas sincronizados permanecerán en tu Cuenta de Google.</translation>
 <translation id="7772032839648071052">Confirmar frase de contraseña</translation>
 <translation id="7781011649027948662">¿Quieres traducir la página?</translation>
 <translation id="7781829728241885113">Ayer</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Guardar cambios</translation>
 <translation id="8503813439785031346">Nombre de usuario</translation>
 <translation id="850600235656508448">Abrir en incógnito</translation>
+<translation id="8510057420705599706">Si realizas esta acción, saldrás de tu cuenta y se desactivará la sincronización, pero los favoritos, el historial, las contraseñas y otros datos de Chrome permanecerán en este dispositivo.</translation>
 <translation id="8517375800490286174">Licencias de código abierto</translation>
 <translation id="8524799873541103884">Pestaña de <ph name="INCOGNITO" />: <ph name="FIRST_VISIBLE_TAB" /> a <ph name="LAST_VISIBLE_TAB" /> de <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nuevo</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Actualizar contraseña</translation>
 <translation id="9100610230175265781">Se necesita una frase de contraseña.</translation>
 <translation id="9148126808321036104">Accede nuevamente</translation>
+<translation id="9152539721251340337">Crear un código QR</translation>
 <translation id="9157836665414082580">Suprimir diálogos</translation>
 <translation id="9188680907066685419">Salir de la cuenta administrada</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 2e0d33253..e0c53e1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Marcar…</translation>
 <translation id="3153862085237805241">Guardar tarjeta</translation>
 <translation id="3157684681743766797">Marcar todas…</translation>
+<translation id="3161291298470460782">Esta acción hará que se cierre tu sesión, se desactive la sincronización y se borren todos los datos de Chrome de este dispositivo. Los datos que hayas sincronizado permanecerán en tu cuenta de Google.</translation>
 <translation id="3175081911749765310">Servicios web</translation>
 <translation id="3178650076442119961">Activo hoy</translation>
 <translation id="3207960819495026254">Añadido a marcadores</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Confirma que quieres borrar los datos de navegación</translation>
 <translation id="35083190962747987">Abrir ${url}</translation>
 <translation id="3519193562722059437">Abre una pestaña para navegar por la Web.</translation>
+<translation id="3523473570015918798">Si cierras sesión, tus marcadores, tu historial, tus contraseñas y otros datos de Chrome dejarán de sincronizarse con tu cuenta de Google.</translation>
 <translation id="3527085408025491307">Carpeta</translation>
 <translation id="3529024052484145543">No es seguro</translation>
 <translation id="3533202363250687977">Cerrar todas las pestañas de incógnito</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Información de seguridad de la página</translation>
 <translation id="5443952882982198570">Tarjetas de crédito</translation>
 <translation id="5457907402803865181">No se han podido sincronizar las contraseñas.</translation>
+<translation id="5508435575041083207">Cerrar sesión y borrar los datos de este dispositivo</translation>
 <translation id="5525269841082836315">Crear frase de contraseña</translation>
 <translation id="5548760955356983418">Handoff te permite empezar a navegar en un sitio web en este dispositivo y continuar fácilmente en tu Mac más tarde. El sitio web abierto actualmente aparecerá en el Dock de tu Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Para navegar por la Web de forma privada, añade una nueva pestaña.</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
+<translation id="7771470029643830783">Si cierras sesión, tus marcadores, tu historial, tus contraseñas y otros datos de Chrome dejarán de sincronizarse con tu cuenta de Google.
+
+Tu cuenta está gestionada por <ph name="HOSTED_DOMAIN" />, por lo que tus datos de Chrome se eliminarán de este dispositivo cuando cierres sesión. Los datos que hayas sincronizado permanecerán en tu cuenta de Google.</translation>
 <translation id="7772032839648071052">Repite la contraseña</translation>
 <translation id="7781011649027948662">¿Quieres traducir esta página?</translation>
 <translation id="7781829728241885113">Ayer</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Guardar cambios</translation>
 <translation id="8503813439785031346">Nombre de usuario</translation>
 <translation id="850600235656508448">Abrir en modo de incógnito</translation>
+<translation id="8510057420705599706">Esta acción hará que se cierre tu sesión y se desactive la sincronización, pero tus marcadores, tu historial, tus contraseñas y otros datos de Chrome permanecerán en este dispositivo.</translation>
 <translation id="8517375800490286174">Licencias de código abierto</translation>
 <translation id="8524799873541103884">Pestañas de <ph name="INCOGNITO" />: de <ph name="FIRST_VISIBLE_TAB" /> a <ph name="LAST_VISIBLE_TAB" /> de <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nuevo</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Actualizar contraseña</translation>
 <translation id="9100610230175265781">La frase de contraseña es obligatoria</translation>
 <translation id="9148126808321036104">Volver a iniciar sesión</translation>
+<translation id="9152539721251340337">Crear un código QR</translation>
 <translation id="9157836665414082580">Quitar cuadros de diálogo</translation>
 <translation id="9188680907066685419">Cierra sesión en la cuenta gestionada</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 2143c73..37e544c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Märgi …</translation>
 <translation id="3153862085237805241">Salvesta kaart</translation>
 <translation id="3157684681743766797">Märgi kõik …</translation>
+<translation id="3161291298470460782">See logib teid välja, lülitab sünkroonimise välja ja kustutab sellest seadmest kõik Chrome'i andmed. Teie sünkroonitud andmed jäävad teie Google'i kontole.</translation>
 <translation id="3175081911749765310">Teenused</translation>
 <translation id="3178650076442119961">Aktiivne täna</translation>
 <translation id="3207960819495026254">Järjehoidjatesse lisatud</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Kinnita sirvimisandmete kustutamine</translation>
 <translation id="35083190962747987">Avage ${url}</translation>
 <translation id="3519193562722059437">Avage vaheleht veebi sirvimiseks.</translation>
+<translation id="3523473570015918798">Väljalogimisel ei sünkroonita teie järjehoidjaid, ajalugu, paroole ja muid Chrome'i andmeid enam teie Google'i kontoga.</translation>
 <translation id="3527085408025491307">Kaust</translation>
 <translation id="3529024052484145543">Pole turvaline</translation>
 <translation id="3533202363250687977">Sule kõik inkognito vahelehed</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Lehe turvateave</translation>
 <translation id="5443952882982198570">Krediitkaardid</translation>
 <translation id="5457907402803865181">Viga paroolide sünkroonimisel.</translation>
+<translation id="5508435575041083207">Logi välja ja kustuta andmed sellest seadmest</translation>
 <translation id="5525269841082836315">Parooli loomine</translation>
 <translation id="5548760955356983418">Handoffi abil saate alustada veebisaidi sirvimist selles seadmes ja jätkata seda hõlpsalt Macis. Praegu avatud veebisait kuvatakse Maci Dockis.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Privaatselt veebi sirvimiseks lisage uus vaheleht.</translation>
 <translation id="7671141431838911305">INSTALLI</translation>
 <translation id="7765158879357617694">Liiguta</translation>
+<translation id="7771470029643830783">Väljalogimisel ei sünkroonita teie järjehoidjaid, ajalugu, paroole ja muid Chrome'i andmeid enam teie Google'i kontoga.
+
+Kuna teie kontot haldab domeen <ph name="HOSTED_DOMAIN" />, kustutatakse teie Chrome'i andmed väljalogimisel sellest seadmest. Teie sünkroonitud andmed jäävad teie Google'i kontole.</translation>
 <translation id="7772032839648071052">Kinnitage parool</translation>
 <translation id="7781011649027948662">Kas tõlkida leht?</translation>
 <translation id="7781829728241885113">Eile</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Salvesta muudatused</translation>
 <translation id="8503813439785031346">Kasutajanimi</translation>
 <translation id="850600235656508448">Ava inkognito režiimis</translation>
+<translation id="8510057420705599706">See logib teid välja ja lülitab sünkroonimise välja, kuid teie järjehoidjad, ajalugu, paroolid ja muud Chrome'i andmed jäävad sellesse seadmesse.</translation>
 <translation id="8517375800490286174">Avatud lähtekoodi litsentsid</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> vahelehed <ph name="FIRST_VISIBLE_TAB" />–<ph name="LAST_VISIBLE_TAB" />/<ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Uus</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Värskenda parooli</translation>
 <translation id="9100610230175265781">Parool on vajalik</translation>
 <translation id="9148126808321036104">Logige uuesti sisse</translation>
+<translation id="9152539721251340337">QR-koodi loomine</translation>
 <translation id="9157836665414082580">Blokeeri dialoogid</translation>
 <translation id="9188680907066685419">Hallatud kontolt väljalogimine</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index f45528a..20a7189 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Markatu…</translation>
 <translation id="3153862085237805241">Gorde txartela</translation>
 <translation id="3157684681743766797">Markatu guztiak…</translation>
+<translation id="3161291298470460782">Horrela, saioa amaitu, sinkronizazioa desaktibatu eta Chrome-ko datu guztiak gailu honetatik kenduko dira. Sinkronizatutako datuek Google-ko kontuan jarraituko dute.</translation>
 <translation id="3175081911749765310">Web-zerbitzuak</translation>
 <translation id="3178650076442119961">Aktibo gaur</translation>
 <translation id="3207960819495026254">Laster-marka gisa gordea</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Berretsi arakatze-datuak garbitu nahi dituzula</translation>
 <translation id="35083190962747987">Ireki ${url}</translation>
 <translation id="3519193562722059437">Sarea arakatzeko, ireki fitxa bat.</translation>
+<translation id="3523473570015918798">Saioa amaitzen baduzu, aurrerantzean ez dira sinkronizatuko laster-markak, historia, pasahitzak eta Chrome-ko beste datu batzuk Google-ko kontuarekin.</translation>
 <translation id="3527085408025491307">Karpeta</translation>
 <translation id="3529024052484145543">Ez da segurua</translation>
 <translation id="3533202363250687977">Itxi ezkutuko moduko fitxa guztiak</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Orriaren segurtasunaren informazioa</translation>
 <translation id="5443952882982198570">Kreditu-txartelak</translation>
 <translation id="5457907402803865181">Errore bat gertatu da pasahitzak sinkronizatzean.</translation>
+<translation id="5508435575041083207">Amaitu saioa eta garbitu gailu honetako datuak</translation>
 <translation id="5525269841082836315">Sortu pasaesaldia</translation>
 <translation id="5548760955356983418">Handoff eginbidea erabiltzen baduzu, gailu honetan has zaitezke webguneak ikusten eta Mac-ean jarrai dezakezu haiek arakatzen.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Sarea modu pribatuan arakatzeko, gehitu fitxa berri bat.</translation>
 <translation id="7671141431838911305">INSTALATU</translation>
 <translation id="7765158879357617694">Eraman</translation>
+<translation id="7771470029643830783">Saioa amaitzen baduzu, aurrerantzean ez dira sinkronizatuko laster-markak, historia, pasahitzak eta Chrome-ko beste datu batzuk Google-ko kontuarekin.
+
+Kontua <ph name="HOSTED_DOMAIN" /> domeinuak kudeatzen duenez, saioa amaitzen duzunean Chrome-ko datuak ezabatu egingo dira gailu honetatik. Sinkronizatutako datuek Google-ko kontuan jarraituko dute.</translation>
 <translation id="7772032839648071052">Berretsi pasaesaldia</translation>
 <translation id="7781011649027948662">Orria itzuli nahi duzu?</translation>
 <translation id="7781829728241885113">Atzo</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Gorde aldaketak</translation>
 <translation id="8503813439785031346">Erabiltzaile-izena</translation>
 <translation id="850600235656508448">Ireki ezkutuko moduan</translation>
+<translation id="8510057420705599706">Horrela, saioa amaitu eta sinkronizazioa desaktibatuko da, baina laster-markek, historiak, pasahitzek eta Chrome-ko beste datu batzuek gailuan jarraituko dute.</translation>
 <translation id="8517375800490286174">Kode irekiko lizentziak</translation>
 <translation id="8524799873541103884"><ph name="FIRST_VISIBLE_TAB" />-<ph name="LAST_VISIBLE_TAB" />/<ph name="NUMBER_OF_OPEN_TABS" /> <ph name="INCOGNITO" /> fitxak</translation>
 <translation id="8529767659511976195">Berria</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Aldatu pasahitza</translation>
 <translation id="9100610230175265781">Pasaesaldia behar da</translation>
 <translation id="9148126808321036104">Hasi saioa berriro</translation>
+<translation id="9152539721251340337">Sortu QR kode bat</translation>
 <translation id="9157836665414082580">Ezkutatu leihoak</translation>
 <translation id="9188680907066685419">Amaitu saioa kontu kudeatuan</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index b777675..efb88658 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">علامت‌گذاری...</translation>
 <translation id="3153862085237805241">ذخیره کردن کارت</translation>
 <translation id="3157684681743766797">علامت‌گذاری همه...</translation>
+<translation id="3161291298470460782">‏با این کار، از سیستم خارج می‌شوید، همگام‌سازی خاموش می‌شود، و همه داده‌های Chrome از این دستگاه پاک می‌شود. داده‌های همگام‌سازی‌شده در «حساب Google» شما باقی خواهد ماند.</translation>
 <translation id="3175081911749765310">خدمات وب</translation>
 <translation id="3178650076442119961">آخرین فعالیت: امروز</translation>
 <translation id="3207960819495026254">نشانک‌گذاری شده</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">تأیید پاک کردن داده‌های مرور</translation>
 <translation id="35083190962747987">‏باز کردن {url}$</translation>
 <translation id="3519193562722059437">برگه‌ای برای مرور وب باز کنید.</translation>
+<translation id="3523473570015918798">‏با خروج از سیستم، نشانک‌ها، سابقه، گذرواژه‌ها، و سایر داده‌های Chrome دیگر با «حساب Google» شما همگام‌سازی نمی‌شوند.</translation>
 <translation id="3527085408025491307">پوشه</translation>
 <translation id="3529024052484145543">ناامن</translation>
 <translation id="3533202363250687977">بستن همه برگه‌های حالت ناشناس</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">اطلاعات امنیتی صفحه</translation>
 <translation id="5443952882982198570">کارت‌های اعتباری</translation>
 <translation id="5457907402803865181">خطا در همگام‌سازی گذرواژه‌ها.</translation>
+<translation id="5508435575041083207">خروج از سیستم و پاک کردن داده‌ها در این دستگاه</translation>
 <translation id="5525269841082836315">ایجاد عبارت عبور</translation>
 <translation id="5548760955356983418">‏با Handoff می‌توانید شروع به مرور وب‌سایت در این دستگاه کنید و سپس به‌آسانی در دستگاه Mac خود به مرور ادامه دهید. وب‌سایتی که اکنون باز است در Dock (لنگرگاه) شما در Mac نمایان می‌شود.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">برای مرور وب به‌صورت خصوصی، برگه جدیدی اضافه کنید.</translation>
 <translation id="7671141431838911305">نصب</translation>
 <translation id="7765158879357617694">انتقال</translation>
+<translation id="7771470029643830783">‏با خروج از سیستم، نشانک‌ها، سابقه، گذرواژه‌ها، و سایر داده‌های Chrome دیگر با «حساب Google» شما همگام‌سازی نمی‌شوند.
+
+چون <ph name="HOSTED_DOMAIN" /> حسابتان را مدیریت می‌کند، با خروج از سیستم، داده‌های Chrome شما در این دستگاه پاک می‌شود. داده‌های همگام‌سازی‌شده در «حساب Google» شما باقی خواهد ماند.</translation>
 <translation id="7772032839648071052">تأیید عبارت عبور</translation>
 <translation id="7781011649027948662">صفحه ترجمه شود؟</translation>
 <translation id="7781829728241885113">دیروز</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">ذخیره تغییرات</translation>
 <translation id="8503813439785031346">نام کاربری</translation>
 <translation id="850600235656508448">باز کردن در حالت ناشناس</translation>
+<translation id="8510057420705599706">‏با این کار، از سیستم خارج می‌شوید و همگام‌سازی خاموش می‌شود، اما نشانک‌ها، سابقه، گذرواژه‌ها، و داده‌های دیگر Chrome در این دستگاه باقی خواهند ماند.</translation>
 <translation id="8517375800490286174">مجوزهای منبع باز</translation>
 <translation id="8524799873541103884">برگه‌های <ph name="INCOGNITO" />،‏ <ph name="FIRST_VISIBLE_TAB" /> تا <ph name="LAST_VISIBLE_TAB" /> از <ph name="NUMBER_OF_OPEN_TABS" /> برگه</translation>
 <translation id="8529767659511976195">جدید</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">به‌روزرسانی گذرواژه</translation>
 <translation id="9100610230175265781">عبارت عبور لازم است</translation>
 <translation id="9148126808321036104">ورود مجدد به سیستم</translation>
+<translation id="9152539721251340337">‏ایجاد کد QR</translation>
 <translation id="9157836665414082580">توقف نمایش کادرهای گفتگو</translation>
 <translation id="9188680907066685419">خروج از حساب مدیریت‌شده</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 081ab6e..232afe2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Merkitse…</translation>
 <translation id="3153862085237805241">Tallenna kortti</translation>
 <translation id="3157684681743766797">Merkitse kaikki…</translation>
+<translation id="3161291298470460782">Tämä kirjaa sinut ulos, laittaa synkronoinnin pois päältä ja tyhjentää kaiken Chrome-datan tältä laitteelta. Synkronoitu datasi pysyy Google-tililläsi.</translation>
 <translation id="3175081911749765310">Verkkopalvelut</translation>
 <translation id="3178650076442119961">Aktiivinen tänään</translation>
 <translation id="3207960819495026254">Kirjanmerkeissä</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Vahvista selaustietojen poistaminen</translation>
 <translation id="35083190962747987">Avaa ${url}</translation>
 <translation id="3519193562722059437">Avaa välilehti selailua varten.</translation>
+<translation id="3523473570015918798">Jos kirjaudut ulos, kirjanmerkkejä, historiaa, salasanoja tai muuta Chrome-dataasi ei enää synkronoida Google-tilillesi.</translation>
 <translation id="3527085408025491307">Kansio</translation>
 <translation id="3529024052484145543">Ei turvallinen</translation>
 <translation id="3533202363250687977">Sulje kaikki incognito-välilehdet</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Sivun suojaustiedot</translation>
 <translation id="5443952882982198570">Luottokortit</translation>
 <translation id="5457907402803865181">Virhe synkronoitaessa salasanoja</translation>
+<translation id="5508435575041083207">Kirjaudu ulos ja tyhjennä data tältä laitteelta</translation>
 <translation id="5525269841082836315">Luo tunnuslause</translation>
 <translation id="5548760955356983418">Handoffin avulla voit aloittaa verkkosivuston lukemisen laitteellasi ja jatkaa sitä Macilla. Avoin verkkosivusto näytetään Dockissa.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Jos haluat selata verkkoa yksityisesti, lisää uusi välilehti.</translation>
 <translation id="7671141431838911305">ASENNA</translation>
 <translation id="7765158879357617694">Siirrä</translation>
+<translation id="7771470029643830783">Jos kirjaudut ulos, kirjanmerkkejä, historiaa, salasanoja tai muuta Chrome-dataasi ei enää synkronoida Google-tilillesi.
+
+Koska <ph name="HOSTED_DOMAIN" /> ylläpitää tiliäsi, Chrome-datasi poistetaan tältä laitteelta uloskirjautumisen yhteydessä. Synkronoitu datasi pysyy Google-tililläsi.</translation>
 <translation id="7772032839648071052">Vahvista tunnuslause</translation>
 <translation id="7781011649027948662">Käännetäänkö sivu?</translation>
 <translation id="7781829728241885113">Eilen</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Tallenna muutokset</translation>
 <translation id="8503813439785031346">Käyttäjätunnus</translation>
 <translation id="850600235656508448">Avaa incognito-tilassa</translation>
+<translation id="8510057420705599706">Tämä kirjaa sinut ulos ja laittaa synkronoinnin pois päältä, mutta kirjanmerkit, historia, salasanat ja muu Chrome-datasi pysyy tällä laitteella.</translation>
 <translation id="8517375800490286174">Avoimen lähdekoodin käyttöluv.</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />-välilehdet: <ph name="FIRST_VISIBLE_TAB" />–<ph name="LAST_VISIBLE_TAB" />/<ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Uusi</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Päivitä salasana</translation>
 <translation id="9100610230175265781">Tunnuslause tarvitaan</translation>
 <translation id="9148126808321036104">Kirjaudu sisään uudelleen</translation>
+<translation id="9152539721251340337">Luo QR-koodi</translation>
 <translation id="9157836665414082580">Estä valintaikkunat</translation>
 <translation id="9188680907066685419">Kirjaudu ulos hallinnoidulta tililtä</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index fab8c8e..105f8d0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Markahan…</translation>
 <translation id="3153862085237805241">I-save ang Card</translation>
 <translation id="3157684681743766797">Markahan Lahat...</translation>
+<translation id="3161291298470460782">Kapag ginawa ito, masa-sign out ka, mao-off ang pag-sync, at maki-clear ang lahat ng data ng Chrome sa device na ito. Mananatili sa iyong Google Account ang naka-sync mong data.</translation>
 <translation id="3175081911749765310">Web Services</translation>
 <translation id="3178650076442119961">Aktibo Ngayong Araw</translation>
 <translation id="3207960819495026254">Naka-bookmark</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Kumpirmahin ang Pag-clear ng Data sa Pag-browse</translation>
 <translation id="35083190962747987">Buksan ang ${url}</translation>
 <translation id="3519193562722059437">Magbukas ng tab upang i-browse ang web.</translation>
+<translation id="3523473570015918798">Sa pamamagitan ng pag-sign out, hindi na masi-sync sa iyong Google Account ang mga bookmark, history, mga password, at iba mo pang data ng Chrome.</translation>
 <translation id="3527085408025491307">Folder</translation>
 <translation id="3529024052484145543">Hindi secure</translation>
 <translation id="3533202363250687977">Isara ang Lahat ng Tab na Incognito</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Impormasyon sa Seguridad ng Pahina</translation>
 <translation id="5443952882982198570">Mga Credit Card</translation>
 <translation id="5457907402803865181">Nagka-error sa pag-sync ng mga password.</translation>
+<translation id="5508435575041083207">Mag-sign Out at I-clear ang Data sa Device na ito</translation>
 <translation id="5525269841082836315">Lumikha ng Passphrase</translation>
 <translation id="5548760955356983418">Nagbibigay-daan sa iyo ang handoff na magsimula sa pagba-browse sa isang website sa device na ito at pagkatapos ay magpatuloy kaagad sa iyong Mac. Lalabas ang kasalukuyang nakabukas na website sa Dock ng iyong Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Para pribadong mag-browse sa web, magdagdag ng bagong tab.</translation>
 <translation id="7671141431838911305">INSTALL</translation>
 <translation id="7765158879357617694">Ilipat</translation>
+<translation id="7771470029643830783">Sa pamamagitan ng pag-sign out, hindi na masi-sync sa iyong Google Account ang mga bookmark, history, mga password, at iba mo pang data ng Chrome.
+
+Dahil pinapamahalaan ng <ph name="HOSTED_DOMAIN" /> ang iyong account, made-delete ang data ng Chrome mo sa device na ito kapag nag-sign out ka. Mananatili sa iyong Google Account ang naka-sync mong data.</translation>
 <translation id="7772032839648071052">Kumpirmahin ang passphrase</translation>
 <translation id="7781011649027948662">Isalin ang Page?</translation>
 <translation id="7781829728241885113">Kahapon</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">I-save ang Mga Pagbabago</translation>
 <translation id="8503813439785031346">Username</translation>
 <translation id="850600235656508448">Buksan sa Incognito</translation>
+<translation id="8510057420705599706">Kapag ginawa ito, masa-sign out ka at mao-off ang pag-sync, pero mananatili sa device na ito ang iyong mga bookmark, history, mga password, at iba pang data ng Chrome.</translation>
 <translation id="8517375800490286174">Mga Lisensya ng Open Source</translation>
 <translation id="8524799873541103884">Mga Tab na <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> hanggang <ph name="LAST_VISIBLE_TAB" /> ng <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Bago</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">I-update ang password</translation>
 <translation id="9100610230175265781">Kinakailangan ang passphrase</translation>
 <translation id="9148126808321036104">Muling mag-sign in</translation>
+<translation id="9152539721251340337">Gumawa ng QR Code</translation>
 <translation id="9157836665414082580">Pigilan ang Mga Dialog</translation>
 <translation id="9188680907066685419">Mag-sign out sa pinamamahalaang account</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index 7753f6f5..4612b98b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Marquer…</translation>
 <translation id="3153862085237805241">Enregistrer la carte</translation>
 <translation id="3157684681743766797">Tout marquer…</translation>
+<translation id="3161291298470460782">Cette action vous déconnectera, désactivera la synchronisation et effacera toutes les données de Chrome sur cet appareil. Vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="3175081911749765310">Servic Web</translation>
 <translation id="3178650076442119961">Actif aujourd'hui</translation>
 <translation id="3207960819495026254">Favori</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Confirmer l'effacement des données de navigation</translation>
 <translation id="35083190962747987">Ouvrir ${url}</translation>
 <translation id="3519193562722059437">Ouvrez un onglet pour naviguer sur le Web.</translation>
+<translation id="3523473570015918798">Si vous vous déconnectez, vos favoris, votre historique, vos mots de passe et d'autres données de Chrome ne seront plus synchronisés avec votre compte Google.</translation>
 <translation id="3527085408025491307">Dossier</translation>
 <translation id="3529024052484145543">Pas sécuritaire</translation>
 <translation id="3533202363250687977">Fermer les onglets de navigation privée</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Information sur la sécurité de la page</translation>
 <translation id="5443952882982198570">Cartes de crédit</translation>
 <translation id="5457907402803865181">Une erreur s'est produite lors de la synchronisation des mots de passe.</translation>
+<translation id="5508435575041083207">Se déconnecter et effacer les données sur cet appareil</translation>
 <translation id="5525269841082836315">Créer phrase passe</translation>
 <translation id="5548760955356983418">La fonction de transfert vous permet de commencer à naviguer sur un site Web sur cet appareil et de continuer facilement sur votre Mac. Le site Web actuellement ouvert apparaîtra dans le Dock de votre Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Pour naviguer confidentiellement sur le Web, ajoutez un nouvel onglet.</translation>
 <translation id="7671141431838911305">INSTALLER</translation>
 <translation id="7765158879357617694">Déplacer</translation>
+<translation id="7771470029643830783">Si vous vous déconnectez, vos favoris, votre historique, vos mots de passe et d'autres données de Chrome ne seront plus synchronisés avec votre compte Google.
+
+Comme votre compte est géré par <ph name="HOSTED_DOMAIN" />, vos données Chrome seront supprimées de cet appareil lorsque vous vous déconnecterez. Vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="7772032839648071052">Confirmer la phrase de passe</translation>
 <translation id="7781011649027948662">Traduire la page?</translation>
 <translation id="7781829728241885113">Hier</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Enregistrer les modifications</translation>
 <translation id="8503813439785031346">Nom d'utilisateur</translation>
 <translation id="850600235656508448">Ouvrir en mode de navigation privée</translation>
+<translation id="8510057420705599706">Cette action vous déconnectera et désactivera la synchronisation, mais vos favoris, votre historique, vos mots de passe et d'autres données de Chrome resteront sur cet appareil.</translation>
 <translation id="8517375800490286174">Licences de logiciels libres</translation>
 <translation id="8524799873541103884">Onglets <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> à <ph name="LAST_VISIBLE_TAB" /> sur <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nouveau</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Mettre à jour le mot de passe</translation>
 <translation id="9100610230175265781">Une phrase de passe est requise</translation>
 <translation id="9148126808321036104">Connectez-vous de nouveau</translation>
+<translation id="9152539721251340337">Créer un code QR</translation>
 <translation id="9157836665414082580">Supprimer les boîtes de dialogue</translation>
 <translation id="9188680907066685419">Se déconnecter du compte géré</translation>
 <translation id="9203116392574189331">Transférer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index 784c809..e073328 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Marquer…</translation>
 <translation id="3153862085237805241">Enregistrer la carte</translation>
 <translation id="3157684681743766797">Tout marquer…</translation>
+<translation id="3161291298470460782">Vous serez alors déconnecté, la synchronisation sera désactivée, et toutes les données Chrome seront supprimées de cet appareil. En revanche, vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="3175081911749765310">Services Web</translation>
 <translation id="3178650076442119961">Actif aujourd'hui</translation>
 <translation id="3207960819495026254">Favori</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Confirmer la suppression des données de navigation</translation>
 <translation id="35083190962747987">Ouvrir ${url}</translation>
 <translation id="3519193562722059437">Ouvrez un onglet pour naviguer sur le Web.</translation>
+<translation id="3523473570015918798">Si vous vous déconnectez, vos favoris, votre historique, vos mots de passe et d'autres données Chrome ne seront plus synchronisés avec votre compte Google.</translation>
 <translation id="3527085408025491307">Dossier</translation>
 <translation id="3529024052484145543">Non sécurisé</translation>
 <translation id="3533202363250687977">Fermer tous les onglets de navigation privée</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Informations sur la sécurité de cette page</translation>
 <translation id="5443952882982198570">Cartes de crédit</translation>
 <translation id="5457907402803865181">Erreur lors de la synchronisation des mots de passe.</translation>
+<translation id="5508435575041083207">Se déconnecter et effacer les données de cet appareil</translation>
 <translation id="5525269841082836315">Créer une phrase secrète</translation>
 <translation id="5548760955356983418">Avec Handoff, vous pouvez commencer à consulter un site Web sur cet appareil et poursuivre votre lecture facilement sur votre Mac. Le site Web actuellement ouvert apparaît alors dans le Dock.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Pour naviguer sur le Web en toute discrétion, ajoutez un onglet.</translation>
 <translation id="7671141431838911305">INSTALLER</translation>
 <translation id="7765158879357617694">Déplacer</translation>
+<translation id="7771470029643830783">Si vous vous déconnectez, vos favoris, votre historique, vos mots de passe et d'autres données Chrome ne seront plus synchronisés avec votre compte Google.
+
+Votre compte étant géré par <ph name="HOSTED_DOMAIN" />, vos données Chrome seront supprimées de cet appareil lors de votre déconnexion. En revanche, vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="7772032839648071052">Confirmer la phrase secrète</translation>
 <translation id="7781011649027948662">Traduire la page ?</translation>
 <translation id="7781829728241885113">Hier</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Enregistrer les modifications</translation>
 <translation id="8503813439785031346">Nom d'utilisateur</translation>
 <translation id="850600235656508448">Ouvrir en mode navigation privée</translation>
+<translation id="8510057420705599706">Vous serez alors déconnecté et la synchronisation sera désactivée, mais vos favoris, votre historique, vos mots de passe et d'autres données Chrome resteront sur cet appareil.</translation>
 <translation id="8517375800490286174">Licences Open Source</translation>
 <translation id="8524799873541103884">Onglets <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> à <ph name="LAST_VISIBLE_TAB" /> sur <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nouveau</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Modifier le mot de passe</translation>
 <translation id="9100610230175265781">Veuillez saisir la phrase secrète.</translation>
 <translation id="9148126808321036104">Nouvelle connexion</translation>
+<translation id="9152539721251340337">Créer un code QR</translation>
 <translation id="9157836665414082580">Supprimer les boîtes de dialogue</translation>
 <translation id="9188680907066685419">Se déconnecter d'un compte géré</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
index 1867bbc2..b65a3706 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Marcar como...</translation>
 <translation id="3153862085237805241">Gardar tarxeta</translation>
 <translation id="3157684681743766797">Marcar todo como...</translation>
+<translation id="3161291298470460782">Pecharás sesión, desactivarase a sincronización e borraranse deste dispositivo todos os teus datos de Chrome. Os datos sincronizados conservaranse na túa Conta de Google.</translation>
 <translation id="3175081911749765310">Servizos web</translation>
 <translation id="3178650076442119961">Dispositivo activo hoxe</translation>
 <translation id="3207960819495026254">Engadida a marcadores</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Confirmar a eliminación dos datos de navegación</translation>
 <translation id="35083190962747987">Abrir ${url}</translation>
 <translation id="3519193562722059437">Abre unha pestana para examinar a web.</translation>
+<translation id="3523473570015918798">Ao pechar sesión, os marcadores, o historial, os contrasinais e outros datos de Chrome deixarán de sincronizarse coa túa Conta de Google.</translation>
 <translation id="3527085408025491307">Cartafol</translation>
 <translation id="3529024052484145543">Contido non-seguro</translation>
 <translation id="3533202363250687977">Pechar todas as pestanas do modo de incógnito</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Información de seguranza da páxina</translation>
 <translation id="5443952882982198570">Tarxetas de crédito</translation>
 <translation id="5457907402803865181">Produciuse un erro ao sincronizar os contrasinais.</translation>
+<translation id="5508435575041083207">Pechar sesión e borrar datos deste dispositivo</translation>
 <translation id="5525269841082836315">Crear contrasinal</translation>
 <translation id="5548760955356983418">Handoff permíteche comezar a navegar nun sitio web neste dispositivo e despois continuar facilmente no teu Mac. O sitio web aberto actualmente aparecerá no Dock do teu Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Para navegar pola web de forma privada, engade unha nova pestana.</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
+<translation id="7771470029643830783">Ao pechar sesión, os marcadores, o historial, os contrasinais e outros datos de Chrome deixarán de sincronizarse coa túa Conta de Google.
+
+Ademais, dado que a conta está xestionada por <ph name="HOSTED_DOMAIN" />, os teus datos de Chrome eliminaranse deste dispositivo cando peches sesión. Os datos sincronizados conservaranse na túa Conta de Google.</translation>
 <translation id="7772032839648071052">Confirmar frase de acceso</translation>
 <translation id="7781011649027948662">Traducir esta páxina?</translation>
 <translation id="7781829728241885113">Onte</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Gardar cambios</translation>
 <translation id="8503813439785031346">Nome de usuario</translation>
 <translation id="850600235656508448">Abrir marcador no modo de incógnito</translation>
+<translation id="8510057420705599706">Pecharás sesión e desactivarase a sincronización, pero conservaranse neste dispositivo os marcadores, o historial, os contrasinais e outros datos de Chrome.</translation>
 <translation id="8517375800490286174">Licenzas de código aberto</translation>
 <translation id="8524799873541103884">Etiquetas de <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> a <ph name="LAST_VISIBLE_TAB" /> de <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Novidade</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Actualizar contrasinal</translation>
 <translation id="9100610230175265781">Contrasinal obrigatorio</translation>
 <translation id="9148126808321036104">Iniciar sesión de novo</translation>
+<translation id="9152539721251340337">Crear código QR</translation>
 <translation id="9157836665414082580">Suprimir cadros de diálogos</translation>
 <translation id="9188680907066685419">Pechar sesión na conta xestionada</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index a365744..ea475a1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">चिह्नित करें...</translation>
 <translation id="3153862085237805241">कार्ड सेव करें</translation>
 <translation id="3157684681743766797">सभी को चिह्नित करें...</translation>
+<translation id="3161291298470460782">ऐसा करने से, आप साइन आउट हो जाएंगे और सिंक की सुविधा बंद हो जाएगी. साथ ही, इस डिवाइस से सारा Chrome डेटा मिट जाएगा. आपने जो डेटा सिंक किया हुआ है वह आपके Google खाते में ही रहेगा.</translation>
 <translation id="3175081911749765310">वेब सेवाएं</translation>
 <translation id="3178650076442119961">आज चालू था</translation>
 <translation id="3207960819495026254">बुकमार्क किया गया</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">ब्राउज़िंग डेटा साफ़ करने की पुष्टि करें</translation>
 <translation id="35083190962747987">${url} खोलें</translation>
 <translation id="3519193562722059437">वेब ब्राउज़ करने के लिए टैब खोलें.</translation>
+<translation id="3523473570015918798">साइन आउट करने पर, आपके बुकमार्क, इतिहास, पासवर्ड, और Chrome पर मौजूद अन्य डेटा अब Google खाते में सिंक नहीं होगा.</translation>
 <translation id="3527085408025491307">फ़ोल्डर</translation>
 <translation id="3529024052484145543">सुरक्षित नहीं है</translation>
 <translation id="3533202363250687977">सभी 'गुप्त' टैब बंद करें</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">पेज सुरक्षा जानकारी</translation>
 <translation id="5443952882982198570">क्रेडिट कार्ड</translation>
 <translation id="5457907402803865181">पासवर्ड सिंक करने में गड़बड़ी हुई.</translation>
+<translation id="5508435575041083207">इस डिवाइस से साइन आउट करें और अपना डेटा मिटाएं</translation>
 <translation id="5525269841082836315">'पासफ़्रेज़' बनाएं</translation>
 <translation id="5548760955356983418">Handoff से आप इस डिवाइस पर वेबसाइट ब्राउज़ करना प्रारंभ करके उसे अपने Mac पर आसानी से जारी रख सकते हैं. वर्तमान में खुली हुई वेबसाइट आपके Mac के Dock में दिखाई देगी.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">निजी रूप से वेब ब्राउज़ करने के लिए, एक नया टैब जोड़ें.</translation>
 <translation id="7671141431838911305">इंस्टॉल करें</translation>
 <translation id="7765158879357617694">ले जाएं</translation>
+<translation id="7771470029643830783">साइन आउट करने पर, आपके बुकमार्क, इतिहास, पासवर्ड, और Chrome पर मौजूद अन्य डेटा अब Google खाते में सिंक नहीं होगा.
+
+आपका खाता <ph name="HOSTED_DOMAIN" /> से प्रबंधित होता है. इसलिए, साइन आउट करने पर आपका Chrome डेटा इस डिवाइस से मिट जाएगा. आपने जो डेटा सिंक किया हुआ है वह आपके Google खाते में ही रहेगा.</translation>
 <translation id="7772032839648071052">'पासफ़्रेज' की पुष्टि करें</translation>
 <translation id="7781011649027948662">पेज का अनुवाद करें?</translation>
 <translation id="7781829728241885113">बीता कल</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">बदलावों को सेव करें</translation>
 <translation id="8503813439785031346">उपयोगकर्ता नाम</translation>
 <translation id="850600235656508448">गुप्त में खोलें</translation>
+<translation id="8510057420705599706">ऐसा करने से, आप साइन आउट हो जाएंगे और सिंक की सुविधा बंद हो जाएगी. हालांकि, आपके बुकमार्क, इतिहास, पासवर्ड, और अन्य Chrome डेटा इस डिवाइस पर ही रहेगा.</translation>
 <translation id="8517375800490286174">ओपन सोर्स लाइसेंस</translation>
 <translation id="8524799873541103884"><ph name="NUMBER_OF_OPEN_TABS" /> में से <ph name="FIRST_VISIBLE_TAB" /> से लेकर <ph name="LAST_VISIBLE_TAB" /> तक <ph name="INCOGNITO" /> टैब</translation>
 <translation id="8529767659511976195">नई</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">पासवर्ड अपडेट करें</translation>
 <translation id="9100610230175265781">पासफ़्रेज़ ज़रूरी है</translation>
 <translation id="9148126808321036104">फिर से साइन इन करें</translation>
+<translation id="9152539721251340337">क्यूआर कोड बनाएं</translation>
 <translation id="9157836665414082580">संवाद छिपाएं</translation>
 <translation id="9188680907066685419">प्रबंधित खाते से प्रस्थान करें</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 540c9c6..b5109bf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Tandai…</translation>
 <translation id="3153862085237805241">Simpan Kartu</translation>
 <translation id="3157684681743766797">Tandai Semua...</translation>
+<translation id="3161291298470460782">Ini akan membuat Anda logout, menonaktifkan sinkronisasi, dan menghapus semua data Chrome dari perangkat ini. Data yang disinkronkan akan tetap berada di Akun Google Anda.</translation>
 <translation id="3175081911749765310">Layanan Web</translation>
 <translation id="3178650076442119961">Aktif Hari Ini</translation>
 <translation id="3207960819495026254">Diberi bookmark</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Konfirmasi Hapus Data Penjelajahan</translation>
 <translation id="35083190962747987">Buka ${url}</translation>
 <translation id="3519193562722059437">Buka tab untuk menjelajahi web.</translation>
+<translation id="3523473570015918798">Jika Anda logout, bookmark, histori, sandi, dan data Chrome lainnya tidak akan lagi disinkronkan dengan Akun Google Anda.</translation>
 <translation id="3527085408025491307">Folder</translation>
 <translation id="3529024052484145543">Tidak aman</translation>
 <translation id="3533202363250687977">Tutup Semua Tab Samaran</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Informasi Keamanan Halaman</translation>
 <translation id="5443952882982198570">Kartu Kredit</translation>
 <translation id="5457907402803865181">Terjadi error saat menyinkronkan sandi.</translation>
+<translation id="5508435575041083207">Logout dan Hapus Data dari Perangkat ini</translation>
 <translation id="5525269841082836315">Buat Frasa Sandi</translation>
 <translation id="5548760955356983418">Handoff memungkinkan Anda memulai penjelajahan situs web pada perangkat ini dan melanjutkan di Mac dengan mudah. Situs web yang saat ini terbuka akan muncul di Dock pada Mac Anda.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Untuk browsing web secara rahasia, tambahkan tab baru.</translation>
 <translation id="7671141431838911305">INSTAL</translation>
 <translation id="7765158879357617694">Pindahkan</translation>
+<translation id="7771470029643830783">Jika Anda logout, bookmark, histori, sandi, dan data Chrome lainnya tidak akan lagi disinkronkan dengan Akun Google Anda.
+
+Karena akun Anda dikelola oleh <ph name="HOSTED_DOMAIN" />, data Chrome Anda akan dihapus dari perangkat ini jika Anda logout. Data yang disinkronkan akan tetap berada di Akun Google Anda.</translation>
 <translation id="7772032839648071052">Konfirmasi frasa sandi</translation>
 <translation id="7781011649027948662">Terjemahkan Halaman?</translation>
 <translation id="7781829728241885113">Kemarin</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Simpan Perubahan</translation>
 <translation id="8503813439785031346">Nama Pengguna</translation>
 <translation id="850600235656508448">Buka di Samaran</translation>
+<translation id="8510057420705599706">Ini akan membuat Anda logout dan menonaktifkan sinkronisasi, tetapi bookmark, histori, sandi, dan data Chrome lainnya akan tetap berada di perangkat ini.</translation>
 <translation id="8517375800490286174">Lisensi Open Source</translation>
 <translation id="8524799873541103884">Tab <ph name="FIRST_VISIBLE_TAB" /> hingga <ph name="LAST_VISIBLE_TAB" /> dari <ph name="NUMBER_OF_OPEN_TABS" /> dalam mode <ph name="INCOGNITO" /></translation>
 <translation id="8529767659511976195">Baru</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Perbarui sandi</translation>
 <translation id="9100610230175265781">Frasa sandi diwajibkan</translation>
 <translation id="9148126808321036104">Login sekali lagi</translation>
+<translation id="9152539721251340337">Buat Kode QR</translation>
 <translation id="9157836665414082580">Sembunyikan Dialog</translation>
 <translation id="9188680907066685419">Keluar dari akun terkelola</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index a3101da2..9706456 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">マーク...</translation>
 <translation id="3153862085237805241">カードを保存</translation>
 <translation id="3157684681743766797">すべてマーク...</translation>
+<translation id="3161291298470460782">この操作を行うと、ログアウトして同期がオフになり、このデバイスから Chrome のデータがすべて削除されます。同期データは Google アカウントに残ります。</translation>
 <translation id="3175081911749765310">ウェブサービス</translation>
 <translation id="3178650076442119961">最終同期: 今日</translation>
 <translation id="3207960819495026254">ブックマークしました</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">閲覧データの削除を確定</translation>
 <translation id="35083190962747987">${url} を開く</translation>
 <translation id="3519193562722059437">ウェブを閲覧するにはタブを開きます。</translation>
+<translation id="3523473570015918798">ログアウトすると、ブックマーク、履歴、パスワード、その他の Chrome データは、Google アカウントに同期されなくなります。</translation>
 <translation id="3527085408025491307">フォルダ</translation>
 <translation id="3529024052484145543">保護されていません</translation>
 <translation id="3533202363250687977">すべてのシークレット タブを閉じる</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">ページのセキュリティ情報</translation>
 <translation id="5443952882982198570">クレジット カード</translation>
 <translation id="5457907402803865181">パスワードの同期中にエラーが発生しました。</translation>
+<translation id="5508435575041083207">ログアウトしてこのデバイスからデータを消去</translation>
 <translation id="5525269841082836315">パスフレーズの作成</translation>
 <translation id="5548760955356983418">Handoffを使うと、このデバイスで見ているウェブサイトの続きをMacで見ることができます。現在開いているウェブサイトはMacのDockに表示されます。
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">ウェブをプライベートに閲覧するには新しいタブを追加してください。</translation>
 <translation id="7671141431838911305">インストール</translation>
 <translation id="7765158879357617694">移動</translation>
+<translation id="7771470029643830783">ログアウトすると、ブックマーク、履歴、パスワード、その他の Chrome データは、Google アカウントに同期されなくなります。
+
+アカウントは <ph name="HOSTED_DOMAIN" /> で管理されているため、ログアウトすると、Chrome データはこのデバイスから削除されます。同期データは Google アカウントに残ります。</translation>
 <translation id="7772032839648071052">パスフレーズの確認</translation>
 <translation id="7781011649027948662">ページを翻訳しますか?</translation>
 <translation id="7781829728241885113">昨日</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">変更を保存</translation>
 <translation id="8503813439785031346">ユーザー名</translation>
 <translation id="850600235656508448">シークレット モードで開く</translation>
+<translation id="8510057420705599706">この操作を行うと、ログアウトして同期がオフになりますが、ブックマーク、履歴、パスワード、その他の Chrome のデータはこのデバイスに残ります。</translation>
 <translation id="8517375800490286174">オープンソースライセンス</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />タブ: <ph name="FIRST_VISIBLE_TAB" />~<ph name="LAST_VISIBLE_TAB" />/<ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">新規</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">パスワードを更新</translation>
 <translation id="9100610230175265781">パスフレーズを入力してください</translation>
 <translation id="9148126808321036104">もう一度ログインする</translation>
+<translation id="9152539721251340337">QR コードを作成</translation>
 <translation id="9157836665414082580">ダイアログを表示しない</translation>
 <translation id="9188680907066685419">管理対象アカウントからログアウトする</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
index 294960c..d24fe21 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Белгілеу…</translation>
 <translation id="3153862085237805241">Картаны сақтау</translation>
 <translation id="3157684681743766797">Барлығын белгілеу…</translation>
+<translation id="3161291298470460782">Бұл сізді есептік жазбадан шығарады, синхрондауды өшіреді және осы құрылғыдағы барлық Chrome деректерін жояды. Синхрондалған деректер Google есептік жазбасында сақталады.</translation>
 <translation id="3175081911749765310">Веб қызметтер</translation>
 <translation id="3178650076442119961">Бүгін белсенді болды</translation>
 <translation id="3207960819495026254">Бетбелгі қойылған</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Шолу деректерін өшіруді растау</translation>
 <translation id="35083190962747987">${url} ашу</translation>
 <translation id="3519193562722059437">Интернетті шолу үшін қойындыны ашыңыз.</translation>
+<translation id="3523473570015918798">Есептік жазбадан шықсаңыз, бетбелгілер, тарих, құпия сөздер және басқа Chrome деректері бұдан кейін Google есептік жазбасымен синхрондалмайтын болады.</translation>
 <translation id="3527085408025491307">Қалта</translation>
 <translation id="3529024052484145543">Қауіпсіз емес</translation>
 <translation id="3533202363250687977">Барлық инкогнито қойындыларын жабу</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Беттің қауіпсіздік ақпараты</translation>
 <translation id="5443952882982198570">Несиелік карталар</translation>
 <translation id="5457907402803865181">Құпия сөздерді синхрондау кезінде қате шықты.</translation>
+<translation id="5508435575041083207">Есептік жазбадан шығу және деректерді осы құрылғыдан жою</translation>
 <translation id="5525269841082836315">Құпия фраза жасау</translation>
 <translation id="5548760955356983418">Handoff функциясы веб-сайтты осы құрылғыда ашып, шолуды Mac жүйесінде жеңіл жалғастыруға мүмкіндік береді. Ағымдағы ашылған веб-сайт Мac жүйеңіздегі Dock тақтасында пайда болады.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Интернетті құпия режимде шолу үшін жаңа қойынды ашыңыз.</translation>
 <translation id="7671141431838911305">ОРНАТУ</translation>
 <translation id="7765158879357617694">Жылжыту</translation>
+<translation id="7771470029643830783">Есептік жазбадан шықсаңыз, бетбелгілер, тарих, құпия сөздер және басқа Chrome деректері бұдан кейін Google есептік жазбасымен синхрондалмайтын болады.
+
+Есептік жазбаңызды <ph name="HOSTED_DOMAIN" /> басқаратындықтан, одан шыққан кезде, Chrome деректері осы құрылғыдан жойылады. Синхрондалған деректер Google есептік жазбасында сақталады.</translation>
 <translation id="7772032839648071052">Құпия фразаны растау</translation>
 <translation id="7781011649027948662">Бетті аудару қажет пе?</translation>
 <translation id="7781829728241885113">Кеше</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Өзгерістерді сақтау</translation>
 <translation id="8503813439785031346">Пайдаланушы аты</translation>
 <translation id="850600235656508448">Инкогнито режимінде ашу</translation>
+<translation id="8510057420705599706">Бұл сізді есептік жазбадан шығарады және синхрондауды өшіреді, бірақ бетбелгілер, тарих, құпия сөздер және басқа Chrome деректері осы құрылғыда сақталады.</translation>
 <translation id="8517375800490286174">Ашық кодты бағдарлама лицензиялары</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />, <ph name="FIRST_VISIBLE_TAB" /> және <ph name="LAST_VISIBLE_TAB" /> арасындағы қойындылар, барлығы <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Жаңа</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Құпия сөзді жаңарту</translation>
 <translation id="9100610230175265781">Құпия фраза қажет</translation>
 <translation id="9148126808321036104">Қайта кіру</translation>
+<translation id="9152539721251340337">QR кодын жасау</translation>
 <translation id="9157836665414082580">Диалогтік терезелерді бөгеу</translation>
 <translation id="9188680907066685419">Басқарылатын есептік жазбадан шығу</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index 8329ed63..8ea4be5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">សម្គាល់…</translation>
 <translation id="3153862085237805241">រក្សាទុក​បណ្ណ</translation>
 <translation id="3157684681743766797">សម្គាល់ទាំងអស់…</translation>
+<translation id="3161291298470460782">ការធ្វើបែបនេះនឹងនាំអ្នកចេញពីគណនី បិទសមកាលកម្ម និងសម្អាតទិន្នន័យ Chrome ទាំងអស់​ចេញពីឧបករណ៍នេះ។ ទិន្នន័យ​ដែលអ្នកបានធ្វើសមកាលកម្ម​នឹងនៅតែមាននៅក្នុងគណនី Google របស់អ្នកដដែល។</translation>
 <translation id="3175081911749765310">សេវាកម្មបណ្តាញ</translation>
 <translation id="3178650076442119961">ដំណើរការ​ថ្ងៃនេះ</translation>
 <translation id="3207960819495026254">បានចំណាំ</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">បញ្ជាក់ការសម្អាតទិន្នន័យរុករក</translation>
 <translation id="35083190962747987">បើក ${url}</translation>
 <translation id="3519193562722059437">បើកផ្ទាំងដើម្បីរុករកលើអ៊ីនធឺណិត</translation>
+<translation id="3523473570015918798">ប្រសិនបើចេញពីគណនី នោះចំណាំ​ ប្រវត្តិ ​ពាក្យសម្ងាត់ និងទិន្នន័យ Chrome ផ្សេងទៀត​របស់អ្នកនឹងមិន​ធ្វើ​សម​កាល​កម្មទៅក្នុងគណនី​ Google របស់អ្នកទៀតទេ។</translation>
 <translation id="3527085408025491307">ថតឯកសារ</translation>
 <translation id="3529024052484145543">គ្មានសុវត្ថិភាពទេ</translation>
 <translation id="3533202363250687977">បិទផ្ទាំងឯកជនទាំងអស់</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">ព័ត៌មានសុវត្ថិភាពទំព័រ</translation>
 <translation id="5443952882982198570">បណ្ណឥណទាន</translation>
 <translation id="5457907402803865181">មានបញ្ហា​ក្នុងការ​ធ្វើសមកាលកម្ម​ពាក្យសម្ងាត់​។</translation>
+<translation id="5508435575041083207">ចេញពីគណនី និងសម្អាតទិន្នន័យចេញ​ពីឧបករណ៍នេះ</translation>
 <translation id="5525269841082836315">បង្កើតឃ្លាសម្ងាត់</translation>
 <translation id="5548760955356983418">Handoff អនុញ្ញាតឲ្យអ្នកចាប់ផ្តើមរុករកគេហទំព័រលើឧបករណ៍នេះ ហើយបន្តប្រើប្រាស់យ៉ាងងាយស្រួលនៅលើឧបករណ៍ Mac របស់អ្នក។ គេហទំព័រដែលបើកពេលបច្ចុប្បន្ននឹងបង្ហាញលើរបារកម្មវិធីនៃឧបករណ៍ Mac របស់អ្នក។
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">ដើម្បី​រុករក​លើ​បណ្ដាញ​ជាលក្ខណៈឯកជន សូមបញ្ចូលផ្ទាំង​ថ្មី។</translation>
 <translation id="7671141431838911305">ដំឡើង</translation>
 <translation id="7765158879357617694">ផ្លាស់ទី</translation>
+<translation id="7771470029643830783">ប្រសិនបើចេញពីគណនី នោះចំណាំ​ ប្រវត្តិ ​ពាក្យសម្ងាត់ និងទិន្នន័យ Chrome ផ្សេងទៀត​របស់អ្នកនឹងមិន​ធ្វើ​សម​កាល​កម្មទៅក្នុងគណនី​ Google របស់អ្នកទៀតទេ។
+
+ដោយសារគណនីរបស់អ្នកស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="HOSTED_DOMAIN" /> ទិន្នន័យ Chrome របស់អ្នក​នឹងត្រូវលុប​ចេញពីឧបករណ៍នេះ នៅពេលចេញពីគណនី។ ទិន្នន័យ​ដែលអ្នកបានធ្វើសមកាលកម្ម​នឹងនៅតែមាននៅក្នុងគណនី Google របស់អ្នកដដែល។</translation>
 <translation id="7772032839648071052">អះអាងឃ្លាសម្ងាត់</translation>
 <translation id="7781011649027948662">បកប្រែទំព័រ​ឬ?</translation>
 <translation id="7781829728241885113">ម្សិលមិញ</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">រក្សាទុក​ការផ្លាស់ប្ដូរ</translation>
 <translation id="8503813439785031346">ឈ្មោះអ្នកប្រើ</translation>
 <translation id="850600235656508448">បើកនៅ​ក្នុងផ្ទាំងឯក​ជន</translation>
+<translation id="8510057420705599706">ការធ្វើបែបនេះនឹងនាំអ្នកចេញពីគណនី និងបិទសមកាលកម្ម ប៉ុន្តែ​ចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងទិន្នន័យ Chrome ផ្សេងទៀតរបស់អ្នក​នឹងនៅតែមាននៅក្នុងឧបករណ៍នេះដដែល។</translation>
 <translation id="8517375800490286174">អាជ្ញាប័ណ្ណប្រភពបើកចំហ</translation>
 <translation id="8524799873541103884">ផ្ទាំង <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> តាមរយៈ <ph name="LAST_VISIBLE_TAB" /> នៃ <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">ថ្មី</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">ធ្វើបច្ចុប្បន្នភាពពាក្យសម្ងាត់</translation>
 <translation id="9100610230175265781">តម្រូវឲ្យមានឃ្លាសម្ងាត់</translation>
 <translation id="9148126808321036104">ចូលម្តងទៀត</translation>
+<translation id="9152539721251340337">បង្កើតកូដ QR</translation>
 <translation id="9157836665414082580">បង្ហាប់ប្រអប់បញ្ចូល</translation>
 <translation id="9188680907066685419">ចេញពីគណនីដែលត្រូវបានគ្រប់គ្រង</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index 64ce059..e40b6be 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">표시…</translation>
 <translation id="3153862085237805241">카드 저장</translation>
 <translation id="3157684681743766797">모두 표시...</translation>
+<translation id="3161291298470460782">로그아웃되고 동기화가 사용 중지되며 기기에서 모든 Chrome 데이터가 삭제됩니다. 동기화된 데이터는 Google 계정에 그대로 유지됩니다.</translation>
 <translation id="3175081911749765310">웹 서비스</translation>
 <translation id="3178650076442119961">오늘 사용됨</translation>
 <translation id="3207960819495026254">북마크에 추가됨</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">인터넷 사용 기록 삭제 확인</translation>
 <translation id="35083190962747987">${url} 열기</translation>
 <translation id="3519193562722059437">새 탭을 열어 웹을 탐색하세요.</translation>
+<translation id="3523473570015918798">로그아웃하면 북마크, 방문 기록, 비밀번호 및 기타 Chrome 데이터가 더 이상 Google 계정과 동기화되지 않습니다.</translation>
 <translation id="3527085408025491307">폴더</translation>
 <translation id="3529024052484145543">안전하지 않음</translation>
 <translation id="3533202363250687977">모든 시크릿 탭 닫기</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">페이지 보안 정보</translation>
 <translation id="5443952882982198570">신용카드</translation>
 <translation id="5457907402803865181">비밀번호 동기화 중에 오류가 발생했습니다.</translation>
+<translation id="5508435575041083207">로그아웃 및 기기에서 데이터 삭제</translation>
 <translation id="5525269841082836315">암호 만들기</translation>
 <translation id="5548760955356983418">Handoff를 이용하면 이 기기에서 웹사이트를 탐색하다가 Mac에서 간편하게 보던 페이지부터 계속할 수 있습니다. 현재 열어놓은 웹사이트가 Mac의 Dock에 표시됩니다.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">비공개로 웹을 탐색하려면 새 탭을 추가하세요.</translation>
 <translation id="7671141431838911305">설치</translation>
 <translation id="7765158879357617694">이동</translation>
+<translation id="7771470029643830783">로그아웃하면 북마크, 방문 기록, 비밀번호 및 기타 Chrome 데이터가 더 이상 Google 계정과 동기화되지 않습니다.
+
+<ph name="HOSTED_DOMAIN" />에서 계정을 관리하므로 로그아웃하면 기기에서 Chrome 데이터가 삭제됩니다. 동기화된 데이터는 Google 계정에 그대로 유지됩니다.</translation>
 <translation id="7772032839648071052">암호 확인</translation>
 <translation id="7781011649027948662">페이지를 번역하시겠습니까?</translation>
 <translation id="7781829728241885113">어제</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">변경사항 저장</translation>
 <translation id="8503813439785031346">사용자이름</translation>
 <translation id="850600235656508448">시크릿 모드에서 열기</translation>
+<translation id="8510057420705599706">로그아웃되고 동기화가 사용 중지되지만 북마크, 방문 기록, 비밀번호 및 기타 Chrome 데이터는 기기에 그대로 유지됩니다.</translation>
 <translation id="8517375800490286174">오픈소스 라이선스</translation>
 <translation id="8524799873541103884">전체 <ph name="NUMBER_OF_OPEN_TABS" />개 탭 중 <ph name="FIRST_VISIBLE_TAB" />~<ph name="LAST_VISIBLE_TAB" />번째 탭이 <ph name="INCOGNITO" /> 탭입니다.</translation>
 <translation id="8529767659511976195">신규</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">비밀번호 업데이트</translation>
 <translation id="9100610230175265781">암호를 입력해야 합니다.</translation>
 <translation id="9148126808321036104">다시 로그인</translation>
+<translation id="9152539721251340337">QR 코드 만들기</translation>
 <translation id="9157836665414082580">대화상자 숨기기</translation>
 <translation id="9188680907066685419">관리 계정에서 로그아웃</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
index 53181a9b..b31300a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Белгилөө…</translation>
 <translation id="3153862085237805241">Карточканы сактоо</translation>
 <translation id="3157684681743766797">Баарын белгилөө…</translation>
+<translation id="3161291298470460782">Ушуну менен, аккаунтуңуздан чыгарыласыз, шайкештирүү өчүрүлүп, Chrome'догу бардык дайындар бул түзмөктөн тазаланат. Шайкештирилген маалымат Google аккаунтуңузда сакталып турат.</translation>
 <translation id="3175081911749765310">Желе кызмт</translation>
 <translation id="3178650076442119961">Акыркы аракеттер: бүгүн</translation>
 <translation id="3207960819495026254">Кыстармаланды</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Серептөө дайындарын тазалоону ырастоо</translation>
 <translation id="35083190962747987">${url} ачуу</translation>
 <translation id="3519193562722059437">Интернетте серептөө үчүн өтмөк ачыңыз.</translation>
+<translation id="3523473570015918798">Аккаунттан чыксаңыз, кыстармаларыңыз, таржымалыңыз, сырсөздөрүңүз жана Chrome'догу башка дайындар мындан ары Google аккаунтуңузга шайкештирилбейт.</translation>
 <translation id="3527085408025491307">Куржун</translation>
 <translation id="3529024052484145543">Кооптуу</translation>
 <translation id="3533202363250687977">Бардык жашыруун өтмөктөрдү жабуу</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Баракчанын коопсуздук маалыматы</translation>
 <translation id="5443952882982198570">Насыя карталары</translation>
 <translation id="5457907402803865181">Сырсөздөрдү шайкештирүүдө ката кетти.</translation>
+<translation id="5508435575041083207">Аккаунттан чыгып, бул түзмөктөгү маалыматты тазалоо</translation>
 <translation id="5525269841082836315">Купя сөз айкшын тзүү</translation>
 <translation id="5548760955356983418">Handoff аркылуу вебсайтты ушул түзмөктөн серептеп баштап, Mac компьютериңизде улантып кете аласыз. Учурда ачылып турган вебсайт Мас компьютериңиздин Dock тактасында көрүнөт.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Интернетти купуя серептөө үчүн жаңы өтмөк кошуңуз.</translation>
 <translation id="7671141431838911305">ОРНОТУУ</translation>
 <translation id="7765158879357617694">Жылуу</translation>
+<translation id="7771470029643830783">Аккаунттан чыксаңыз, кыстармаларыңыз, таржымалыңыз, сырсөздөрүңүз жана Chrome'догу башка дайындар мындан ары Google аккаунтуңузга шайкештирилбейт.
+
+Аккаунтуңуз <ph name="HOSTED_DOMAIN" /> домени тарабынан башкарылгандыктан, аккаунтуңуздан чыксаңыз, Chrome’догу дайындарыңыз бул түзмөктөн жок кылынат. Шайкештирилген маалымат Google аккаунтуңузда сакталып турат.</translation>
 <translation id="7772032839648071052">Купуя сөз айкашын ырастаңыз</translation>
 <translation id="7781011649027948662">Бул баракча которулсунбу?</translation>
 <translation id="7781829728241885113">Кечээ</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Өзгөртүүлөрдү сактоо</translation>
 <translation id="8503813439785031346">Колдонуучунун ысымы</translation>
 <translation id="850600235656508448">Жашыруун режимде ачуу</translation>
+<translation id="8510057420705599706">Ушуну менен, аккаунтуңуздан чыгарыласыз, шайкештирүү өчүрүлөт. Бирок кыстармаларыңыз, таржымалыңыз, сырсөздөрүңүз жана Chrome'догу башка маалымат түзмөктө сакталган бойдон калат.</translation>
 <translation id="8517375800490286174">Ачык программа уруксаттамалары</translation>
 <translation id="8524799873541103884"><ph name="FIRST_VISIBLE_TAB" /> аркылуу <ph name="NUMBER_OF_OPEN_TABS" /> ичинен <ph name="LAST_VISIBLE_TAB" /> <ph name="INCOGNITO" /> өтмөк</translation>
 <translation id="8529767659511976195">Жаңы</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Сырсөздү жаңыртуу</translation>
 <translation id="9100610230175265781">Купуя сөз айкашы талап кылынат</translation>
 <translation id="9148126808321036104">Кайра кириңиз</translation>
+<translation id="9152539721251340337">QR кодун түзүү</translation>
 <translation id="9157836665414082580">Диалогдорду жашыруу</translation>
 <translation id="9188680907066685419">Башкарылган каттоо эсебинен чыгуу</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index c2a9044e..97f3f5c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Atzīmēt…</translation>
 <translation id="3153862085237805241">Saglabāt karti</translation>
 <translation id="3157684681743766797">Atzīmēt visus…</translation>
+<translation id="3161291298470460782">Tādējādi jūs tiksiet izrakstīts, tiks izslēgta sinhronizācija un no šīs ierīces tiks dzēsti visi Chrome dati. Jūsu sinhronizētie dati joprojām būs pieejami jūsu Google kontā.</translation>
 <translation id="3175081911749765310">Tīm. pak.</translation>
 <translation id="3178650076442119961">Aktīva šodien</translation>
 <translation id="3207960819495026254">Atzīmēts kā grāmatzīme</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Apstiprināt pārlūkošanas datu notīrīšanu</translation>
 <translation id="35083190962747987">Atvērt ${url}</translation>
 <translation id="3519193562722059437">Atveriet cilni, lai pārlūkotu tīmekli.</translation>
+<translation id="3523473570015918798">Izrakstoties jūsu grāmatzīmes, vēsture, paroles un citi Chrome dati vairs netiks sinhronizēti ar jūsu Google kontu.</translation>
 <translation id="3527085408025491307">Mape</translation>
 <translation id="3529024052484145543">Nav droši</translation>
 <translation id="3533202363250687977">Aizvērt visas inkognito cilnes</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Lapas drošības informācija</translation>
 <translation id="5443952882982198570">Kredītkartes</translation>
 <translation id="5457907402803865181">Sinhronizējot paroles, radās kļūda.</translation>
+<translation id="5508435575041083207">Izrakstīties un dzēst datus no šīs ierīces</translation>
 <translation id="5525269841082836315">Ieejas frāz. izveide</translation>
 <translation id="5548760955356983418">Izmantojot funkciju Handoff, varat pārlūkot vietni šajā ierīcē un pēc tam turpināt pārlūkošanu Mac datorā. Atvērtā vietne būs redzama Mac datora ikonjoslā Dock.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Lai pārlūkotu tīmekli privāti, pievienojiet jaunu cilni.</translation>
 <translation id="7671141431838911305">INSTALĒT</translation>
 <translation id="7765158879357617694">Pārvietot</translation>
+<translation id="7771470029643830783">Izrakstoties jūsu grāmatzīmes, vēsture, paroles un citi Chrome dati vairs netiks sinhronizēti ar jūsu Google kontu.
+
+Tā kā jūsu kontu pārvalda <ph name="HOSTED_DOMAIN" />, jūsu Chrome dati tiks dzēsti no šīs ierīces, kad izrakstīsieties. Jūsu sinhronizētie dati joprojām būs pieejami jūsu Google kontā.</translation>
 <translation id="7772032839648071052">Apstipriniet ieejas frāzi</translation>
 <translation id="7781011649027948662">Vai tulkot lapu?</translation>
 <translation id="7781829728241885113">Vakar</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Saglabāt izmaiņas</translation>
 <translation id="8503813439785031346">Lietotājvārds</translation>
 <translation id="850600235656508448">Atvērt inkognito režīmā</translation>
+<translation id="8510057420705599706">Tādējādi jūs tiksiet izrakstīts un tiks izslēgta sinhronizācija, taču jūsu grāmatzīmes, vēsture, paroles un citi Chrome dati joprojām būs pieejami šajā ierīcē.</translation>
 <translation id="8517375800490286174">Atklātā pirmkoda licences</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" />.–<ph name="LAST_VISIBLE_TAB" />. cilne no <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Jaunums</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Atjaunināt paroli</translation>
 <translation id="9100610230175265781">Jāievada ieejas frāze.</translation>
 <translation id="9148126808321036104">Pierakstieties vēlreiz</translation>
+<translation id="9152539721251340337">Izveidot ātrās atbildes kodu</translation>
 <translation id="9157836665414082580">Nerādīt dialoglodziņus</translation>
 <translation id="9188680907066685419">Izrakstīšanās no pārvaldīta konta</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index a886b635..835fc1e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Тэмдэглэх...</translation>
 <translation id="3153862085237805241">Картыг хадгалах</translation>
 <translation id="3157684681743766797">Бүгдийг тэмдэглэх...</translation>
+<translation id="3161291298470460782">Ингэснээр таныг гаргаж, синк хийхийг унтраах бөгөөд Chrome-н бүх өгөгдлийг энэ төхөөрөмжөөс устгана. Таны cинк хийсэн өгөгдөл Google Бүртгэлд тань үлдэнэ.</translation>
 <translation id="3175081911749765310">Вэб үйлчилгээнүүд</translation>
 <translation id="3178650076442119961">Өнөөдөр идэвхтэй</translation>
 <translation id="3207960819495026254">Хавчуурга хадгалагдсан</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Хайлтын өгөгдөл цэвэрлэхийг зөвшөөрөх</translation>
 <translation id="35083190962747987">${url}-г нээх</translation>
 <translation id="3519193562722059437">Вэб-д зочлохын тулд цонх нээнэ үү.</translation>
+<translation id="3523473570015918798">Гарснаар таны хавчуурга, түүх, нууц үгс болон Chrome-н бусад өгөгдлийг таны Google Бүртгэлд цаашид синк хийхгүй.</translation>
 <translation id="3527085408025491307">Хавтас</translation>
 <translation id="3529024052484145543">Аюултай</translation>
 <translation id="3533202363250687977">Нууцлалын бүх чихтэй хуудсыг хаах</translation>
@@ -332,6 +334,7 @@
 <translation id="54401264925851789">Хуудасны аюулгүй байдалтай холбоотой мэдээлэл</translation>
 <translation id="5443952882982198570">Кредит картууд</translation>
 <translation id="5457907402803865181">Нууц үгийг синк хийхэд алдаа гарлаа.</translation>
+<translation id="5508435575041083207">Гарч, энэ төхөөрөмжөөс өгөгдлийг устгах</translation>
 <translation id="5525269841082836315">Нэвтрэх үгийг үүсгэх</translation>
 <translation id="5548760955356983418">Handoff нь танд энэ төхөөрөмж дээр вэб хуудсыг ачаалж, дараа нь Mac дээр хялбархан үргэжлүүлэн ажиллах боломжийг олгодог. Одоо нээлттэй байгаа вэбсайт таны Mac-ийн Dock дотор гарч ирнэ.
 
@@ -505,6 +508,9 @@
 <translation id="766891008101699113">Вэбийг нуугдаж хөтлөхийн тулд шинэ чихтэй хуудас нэмнэ үү.</translation>
 <translation id="7671141431838911305">СУУЛГАХ</translation>
 <translation id="7765158879357617694">Зөөх</translation>
+<translation id="7771470029643830783">Гарснаар таны хавчуурга, түүх, нууц үгс болон Chrome-н бусад өгөгдлийг таны Google Бүртгэлд цаашид синк хийхгүй.
+
+Таны бүртгэлийг <ph name="HOSTED_DOMAIN" />-с удирддаг тул таныг гарах үед Chrome-н өгөгдлийг тань энэ төхөөрөмжөөс устгана. Таны cинк хийсэн өгөгдөл Google Бүртгэлд тань үлдэнэ.</translation>
 <translation id="7772032839648071052">Нэвтрэх үгүүдийг баталгаажуул</translation>
 <translation id="7781011649027948662">Хуудсыг орчуулах уу?</translation>
 <translation id="7781829728241885113">Өчигдөр</translation>
@@ -554,6 +560,7 @@
 <translation id="8490978609246021741">Өөрчлөлтийг хадгалах</translation>
 <translation id="8503813439785031346">Хэрэглэгчийн нэр</translation>
 <translation id="850600235656508448">Нууцлалын горимд нээх</translation>
+<translation id="8510057420705599706">Ингэснээр таныг гаргаж, синк хийхийг унтраах боловч таны хавчуурга, түүх, нууц үгc болон Chrome-н бусад өгөгдөл энэ төхөөрөмж дээр үлдэнэ.</translation>
 <translation id="8517375800490286174">Нээлттэй эхийн лицензүүд</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> Цонхнууд<ph name="FIRST_VISIBLE_TAB" /> -аар <ph name="LAST_VISIBLE_TAB" /> -аас <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Шинэ</translation>
@@ -596,6 +603,7 @@
 <translation id="9094033019050270033">Нууц үг шинэчлэх</translation>
 <translation id="9100610230175265781">Нэвтрэх үг шаардлагатай</translation>
 <translation id="9148126808321036104">Дансандаа дахин нэвтрэх</translation>
+<translation id="9152539721251340337">Хурдан хариу үйлдлийн код үүсгэх</translation>
 <translation id="9157836665414082580">Харилцах цонхыг зогсоох</translation>
 <translation id="9188680907066685419">Удирдсан бүртгэлээс гарах</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 2c229b8..d99b4f5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Merk…</translation>
 <translation id="3153862085237805241">Lagre kortet</translation>
 <translation id="3157684681743766797">Merk alle…</translation>
+<translation id="3161291298470460782">Dette medfører at du blir logget av, synkronisering blir slått av og alle Chrome-data blir slettet fra denne enheten. Du beholder de synkroniserte dataene i Google-kontoen din.</translation>
 <translation id="3175081911749765310">Nettjenester</translation>
 <translation id="3178650076442119961">Aktiv i dag</translation>
 <translation id="3207960819495026254">Bokmerket</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Bekreft at du vil slette nettleserdataene</translation>
 <translation id="35083190962747987">Åpne ${url}</translation>
 <translation id="3519193562722059437">Åpne en fane for å surfe på nettet.</translation>
+<translation id="3523473570015918798">Når du logger av, blir ikke bokmerker, loggen, passord og andre Chrome-data synkronisert med Google-kontoen din lenger.</translation>
 <translation id="3527085408025491307">Mappe</translation>
 <translation id="3529024052484145543">Ikke sikker</translation>
 <translation id="3533202363250687977">Lukk alle inkognitofaner</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Sikkerhetsinformasjon for siden</translation>
 <translation id="5443952882982198570">Kredittkort</translation>
 <translation id="5457907402803865181">Feil under synkronisering av passord.</translation>
+<translation id="5508435575041083207">Logg av og slett data fra denne enheten</translation>
 <translation id="5525269841082836315">Opprett en passordfrase</translation>
 <translation id="5548760955356983418">Med Handoff kan du begynne å se gjennom en nettside på denne enheten og deretter fortsette på Mac-en din uten problemer. Den åpne nettsiden vises i dokken til Mac-en din.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">For å surfe på nettet privat, legg til en ny fane.</translation>
 <translation id="7671141431838911305">INSTALLER</translation>
 <translation id="7765158879357617694">Flytt</translation>
+<translation id="7771470029643830783">Når du logger av, blir ikke bokmerker, loggen, passord og andre Chrome-data synkronisert med Google-kontoen din lenger.
+
+Fordi kontoen din administreres av <ph name="HOSTED_DOMAIN" />, slettes Chrome-dataene dine fra denne enheten når du logger av. Du beholder de synkroniserte dataene i Google-kontoen din.</translation>
 <translation id="7772032839648071052">Bekreft passord</translation>
 <translation id="7781011649027948662">Vil du oversette siden?</translation>
 <translation id="7781829728241885113">I går</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Lagre endringene</translation>
 <translation id="8503813439785031346">Brukernavn</translation>
 <translation id="850600235656508448">Åpne i inkognitomodus</translation>
+<translation id="8510057420705599706">Dette medfører at du blir logget av og synkronisering blir slått av, men bokmerker, loggen, passord og andre Chrome-data blir værende på denne enheten.</translation>
 <translation id="8517375800490286174">Lisenser for åpen kildekode</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />fane <ph name="FIRST_VISIBLE_TAB" /> til og med <ph name="LAST_VISIBLE_TAB" /> av <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Ny</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Oppdater passordet</translation>
 <translation id="9100610230175265781">Det kreves en passordfrase</translation>
 <translation id="9148126808321036104">Logg på igjen</translation>
+<translation id="9152539721251340337">Lag en QR-kode</translation>
 <translation id="9157836665414082580">Ignorer dialogbokser</translation>
 <translation id="9188680907066685419">Logg av administrert konto</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index dd8c796..429d764 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Отметить…</translation>
 <translation id="3153862085237805241">Сохранить подсказку</translation>
 <translation id="3157684681743766797">Отметить все…</translation>
+<translation id="3161291298470460782">Вы выйдете из аккаунта, синхронизация будет отключена, а все данные Chrome – удалены с этого устройства. Синхронизированные данные останутся в вашем аккаунте Google.</translation>
 <translation id="3175081911749765310">Веб-сервисы</translation>
 <translation id="3178650076442119961">Последние действия: сегодня</translation>
 <translation id="3207960819495026254">Добавлено в закладки.</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Подтвердить удаление данных о работе в браузере</translation>
 <translation id="35083190962747987">Открыть URL ${url}</translation>
 <translation id="3519193562722059437">Чтобы просматривать веб-страницы, откройте вкладку.</translation>
+<translation id="3523473570015918798">После выхода из аккаунта ваши закладки, история, пароли и другие данные Chrome перестанут синхронизироваться с аккаунтом Google.</translation>
 <translation id="3527085408025491307">Папка</translation>
 <translation id="3529024052484145543">Автозаполнение не используется</translation>
 <translation id="3533202363250687977">Закрыть все вкладки инкогнито</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Сведения о надежности страницы</translation>
 <translation id="5443952882982198570">Кредитные карты</translation>
 <translation id="5457907402803865181">Ошибка при синхронизации паролей.</translation>
+<translation id="5508435575041083207">Выйти из аккаунта и удалить данные с этого устройства</translation>
 <translation id="5525269841082836315">Создание код. фразы</translation>
 <translation id="5548760955356983418">Функция Handoff позволит начать просмотр веб-сайта на одном устройстве и продолжить на другом. Открытый сайт появится на панели Dock вашего компьютера Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Чтобы просматривать веб-страницы анонимно, откройте новую вкладку.</translation>
 <translation id="7671141431838911305">УСТАНОВИТЬ</translation>
 <translation id="7765158879357617694">Переместить</translation>
+<translation id="7771470029643830783">После выхода из аккаунта ваши закладки, история, пароли и другие данные Chrome перестанут синхронизироваться с аккаунтом Google.
+
+С этого устройства будут удалены все данные Chrome, так как вашим аккаунтом управляет администратор домена <ph name="HOSTED_DOMAIN" />. Синхронизированные данные останутся в вашем аккаунте Google.</translation>
 <translation id="7772032839648071052">Подтвердите кодовую фразу</translation>
 <translation id="7781011649027948662">Перевести страницу?</translation>
 <translation id="7781829728241885113">Вчера</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Сохранить изменения</translation>
 <translation id="8503813439785031346">Имя пользователя</translation>
 <translation id="850600235656508448">Открыть в режиме инкогнито</translation>
+<translation id="8510057420705599706">Вы выйдете из аккаунта, синхронизация будет отключена, но ваши закладки, история, пароли и другие данные Chrome останутся на этом устройстве.</translation>
 <translation id="8517375800490286174">Лицензии открытого ПО</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />, вкладки между <ph name="FIRST_VISIBLE_TAB" /> и <ph name="LAST_VISIBLE_TAB" />, всего <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Новинка</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Обновить пароль</translation>
 <translation id="9100610230175265781">Необходима кодовая фраза</translation>
 <translation id="9148126808321036104">Повторите вход</translation>
+<translation id="9152539721251340337">Создать QR-код</translation>
 <translation id="9157836665414082580">Блокировать диалоговые окна</translation>
 <translation id="9188680907066685419">Выход из управляемого аккаунта</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 6123e73b..57ffd43 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Označiť…</translation>
 <translation id="3153862085237805241">Uložiť kartu</translation>
 <translation id="3157684681743766797">Označiť všetko…</translation>
+<translation id="3161291298470460782">Touto akciou sa odhlásite, vypnete synchronizáciu a vymažete všetky údaje Chromu z tohto zariadenia. Synchronizované údaje zostanú vo vašom účte Google.</translation>
 <translation id="3175081911749765310">Web. služ.</translation>
 <translation id="3178650076442119961">Aktívne dnes</translation>
 <translation id="3207960819495026254">Pridané medzi záložky</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Potvrdiť vymazanie dát prehliadania</translation>
 <translation id="35083190962747987">Otvoriť ${url}</translation>
 <translation id="3519193562722059437">Otvorte kartu a prehliadajte web.</translation>
+<translation id="3523473570015918798">Po odhlásení nebudú vaše záložky, história, heslá ani ďalšie údaje Chromu naďalej synchronizované s vaším účtom Google</translation>
 <translation id="3527085408025491307">Priečinok</translation>
 <translation id="3529024052484145543">Nezabezpečené</translation>
 <translation id="3533202363250687977">Zavrieť všetky karty inkognito</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Informácie o zabezpečení stránky</translation>
 <translation id="5443952882982198570">Kreditné karty</translation>
 <translation id="5457907402803865181">Chyba pri synchronizovaní hesiel.</translation>
+<translation id="5508435575041083207">Odhlásiť sa a vymazať údaje z tohto zariadenia</translation>
 <translation id="5525269841082836315">Vytv. prístup. frázu</translation>
 <translation id="5548760955356983418">Funkcia Handoff umožňuje začať prehliadanie webových stránok na tomto zariadení a potom jednoducho pokračovať na počítači Mac. Aktuálne otvorené stránky sa zobrazia v doku na počítači Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Ak chcete internet prehliadať v súkromí, pridajte novú kartu.</translation>
 <translation id="7671141431838911305">INŠTALOVAŤ</translation>
 <translation id="7765158879357617694">Presunúť</translation>
+<translation id="7771470029643830783">Po odhlásení nebudú vaše záložky, história, heslá ani ďalšie údaje Chromu naďalej synchronizované s vaším účtom Google
+
+Váš účet ovláda doména <ph name="HOSTED_DOMAIN" />, takže vaše údaje Chromu budú po odhlásení odstránené z tohto zariadenia. Synchronizované údaje zostanú vo vašom účte Google.</translation>
 <translation id="7772032839648071052">Potvrďte prístupovú frázu</translation>
 <translation id="7781011649027948662">Chcete preložiť stránku?</translation>
 <translation id="7781829728241885113">Včera</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Uložiť zmeny</translation>
 <translation id="8503813439785031346">Meno používateľa</translation>
 <translation id="850600235656508448">Otvoriť v režime inkognito</translation>
+<translation id="8510057420705599706">Touto akciou sa odhlásite a vypnete synchronizáciu, ale vaše záložky, história, heslá a ďalšie údaje Chromu zostanú v tomto zariadení.</translation>
 <translation id="8517375800490286174">Licencie open source</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> – karty <ph name="FIRST_VISIBLE_TAB" /> až <ph name="LAST_VISIBLE_TAB" /> z <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nové</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Aktualizovať heslo</translation>
 <translation id="9100610230175265781">Vyžaduje sa prístupová fráza</translation>
 <translation id="9148126808321036104">Znova sa prihlásiť</translation>
+<translation id="9152539721251340337">Vytvoriť QR kód</translation>
 <translation id="9157836665414082580">Obmedziť dialógové okná</translation>
 <translation id="9188680907066685419">Odhlásenie zo spravovaného účtu</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index b380923..c977f53c3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Shëno...</translation>
 <translation id="3153862085237805241">Ruaj kartën</translation>
 <translation id="3157684681743766797">Shëno të gjitha…</translation>
+<translation id="3161291298470460782">Kjo do të të nxjerrë nga llogaria, do të çaktivizojë sinkronizimin dhe do të pastrojë të gjitha të dhënat e Chrome nga kjo pajisje. Të dhënat e tua të sinkronizuara do të mbeten në "Llogarinë tënde të Google".</translation>
 <translation id="3175081911749765310">Shërbimet e uebit</translation>
 <translation id="3178650076442119961">Aktiv sot</translation>
 <translation id="3207960819495026254">Regjistruar në faqeshënues</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Konfirmo pastrimin e të dhënave të shfletimit</translation>
 <translation id="35083190962747987">Hap ${url}</translation>
 <translation id="3519193562722059437">Hap një skedë për të shfletuar uebin.</translation>
+<translation id="3523473570015918798">Nëse del, faqeshënuesit, historiku, fjalëkalimet dhe të dhënat e tjera të Chrome nuk do të sinkronizohen më në "Llogarinë tënde të Google".</translation>
 <translation id="3527085408025491307">Dosje</translation>
 <translation id="3529024052484145543">Jo e sigurt</translation>
 <translation id="3533202363250687977">Mbylli të gjitha skedat "e fshehta"</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Informacioni i sigurisë së faqes</translation>
 <translation id="5443952882982198570">Kartat e kreditit</translation>
 <translation id="5457907402803865181">Gabim gjatë sinkronizimit të fjalëkalimeve.</translation>
+<translation id="5508435575041083207">Dil dhe pastro të dhënat nga kjo pajisje</translation>
 <translation id="5525269841082836315">Krijo fjalëkalim</translation>
 <translation id="5548760955356983418">Handoff të lejon të fillosh të shfletosh një faqe interneti në këtë pajisje dhe pastaj me lehtësi të vazhdosh në kompjuterin tënd Mac. Faqja aktuale e hapur e internetit do të shfaqet në Dock të kompjuterit tënd Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Për të shfletuar uebin në mënyrë private, shto një skedë të re.</translation>
 <translation id="7671141431838911305">INSTALO</translation>
 <translation id="7765158879357617694">Zhvendos</translation>
+<translation id="7771470029643830783">Nëse del, faqeshënuesit, historiku, fjalëkalimet dhe të dhënat e tjera të Chrome nuk do të sinkronizohen më në "Llogarinë tënde të Google".
+
+Duke qenë se llogaria jote menaxhohet nga <ph name="HOSTED_DOMAIN" />, të dhënat e tua të Chrome do të fshihen nga kjo pajisje kur të dalësh. Të dhënat e tua të sinkronizuara do të mbeten në "Llogarinë tënde të Google".</translation>
 <translation id="7772032839648071052">Konfirmo shprehjen e kalimit</translation>
 <translation id="7781011649027948662">Të përkthehet faqja?</translation>
 <translation id="7781829728241885113">Dje</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Ruaj ndryshimet</translation>
 <translation id="8503813439785031346">Emri i përdoruesit</translation>
 <translation id="850600235656508448">Hape në modalitetin "e fshehtë"</translation>
+<translation id="8510057420705599706">Kjo do të të nxjerrë nga llogaria dhe do ta çaktivizojë sinkronizimin, por faqeshënuesit, historiku, fjalëkalimet dhe të dhënat e tjera të Chrome do të mbeten në këtë pajisje.</translation>
 <translation id="8517375800490286174">Licencat me burim të hapur</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> Skeda <ph name="FIRST_VISIBLE_TAB" /> deri <ph name="LAST_VISIBLE_TAB" /> nga <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Risi</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Përditëso fjalëkalimin</translation>
 <translation id="9100610230175265781">Kërkohet shprehja e kalimit</translation>
 <translation id="9148126808321036104">Identifikohu sërish</translation>
+<translation id="9152539721251340337">Krijo një kod QR</translation>
 <translation id="9157836665414082580">Fshih dialogjet</translation>
 <translation id="9188680907066685419">Dil nga llogaria e menaxhuar</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index dfa80f5..b2d9f88 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Markera …</translation>
 <translation id="3153862085237805241">Spara kortet</translation>
 <translation id="3157684681743766797">Markera alla …</translation>
+<translation id="3161291298470460782">Med den här åtgärden loggas du ut, synkroniseringen inaktiveras och all data i Chrome rensas från enheten. Din synkroniserade data finns kvar i Google-kontot.</translation>
 <translation id="3175081911749765310">Webbtjänster</translation>
 <translation id="3178650076442119961">Aktiv i dag</translation>
 <translation id="3207960819495026254">Bokmärkt</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Bekräfta rensning av webbinformation</translation>
 <translation id="35083190962747987">Öppna ${url}</translation>
 <translation id="3519193562722059437">Öppna en flik om du vill surfa på webben.</translation>
+<translation id="3523473570015918798">När du loggar ut synkroniseras inte längre bokmärken, lösenord och annan data i Chrome till Google-kontot.</translation>
 <translation id="3527085408025491307">Mapp</translation>
 <translation id="3529024052484145543">Inte säkert</translation>
 <translation id="3533202363250687977">Stäng alla inkognitoflikar</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Sidans säkerhetsinfo</translation>
 <translation id="5443952882982198570">Kreditkort</translation>
 <translation id="5457907402803865181">Det gick inte att synkronisera lösenord.</translation>
+<translation id="5508435575041083207">Logga ut och rensa data från enheten</translation>
 <translation id="5525269841082836315">Skapa lösenfras</translation>
 <translation id="5548760955356983418">Med Handoff kan du börja visa en webbplats på den här enheten och sedan enkelt fortsätta på din Mac. Den aktuella öppna webbplatsen visas i Dock på din Mac.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Öppna en ny flik om du vill använda internet privat.</translation>
 <translation id="7671141431838911305">INSTALLERA</translation>
 <translation id="7765158879357617694">Flytta</translation>
+<translation id="7771470029643830783">När du loggar ut synkroniseras inte längre bokmärken, lösenord och annan data i Chrome till Google-kontot.
+
+Eftersom ditt konto hanteras av <ph name="HOSTED_DOMAIN" /> raderas din data i Chrome från enheten när du loggar ut. Din synkroniserade data finns kvar i Google-kontot.</translation>
 <translation id="7772032839648071052">Bekräfta lösenfras</translation>
 <translation id="7781011649027948662">Vill du översätta sidan?</translation>
 <translation id="7781829728241885113">Igår</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Spara ändringar</translation>
 <translation id="8503813439785031346">Användarnamn</translation>
 <translation id="850600235656508448">Öppna i inkognitoläge</translation>
+<translation id="8510057420705599706">Med den här åtgärden loggas du ut och synkroniseringen inaktiveras, men bokmärken, historik, lösenord och annan data i Chrome finns kvar på enheten.</translation>
 <translation id="8517375800490286174">Licenser för öppen källkod</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />-flikarna <ph name="FIRST_VISIBLE_TAB" /> till <ph name="LAST_VISIBLE_TAB" /> av <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Nytt</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Uppdatera lösenordet</translation>
 <translation id="9100610230175265781">Lösenfras krävs</translation>
 <translation id="9148126808321036104">Logga in igen</translation>
+<translation id="9152539721251340337">Skapa en QR-kod</translation>
 <translation id="9157836665414082580">Visa inte dialogrutor</translation>
 <translation id="9188680907066685419">Logga ut från hanterat konto</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 78b6e6f..87ea889a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -160,7 +160,7 @@
 <translation id="2923448633003185837">ஒட்டிவிட்டுச் செல்</translation>
 <translation id="292639812446257861">படிக்காததாகக் குறி</translation>
 <translation id="2958718410589002129">கடவுச்சொற்கள்</translation>
-<translation id="2964349545761222050">மூன்றாம் தரப்புக் குக்கீகளைத் தடுத்தல்</translation>
+<translation id="2964349545761222050">மூன்றாம் தரப்புக் குக்கீகளைத் தடு</translation>
 <translation id="2969979262385602596">உள்நுழைவு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.</translation>
 <translation id="298306318844797842">கட்டண முறையைச் சேர்...</translation>
 <translation id="2989805286512600854">புதிய தாவலில் திற</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 263962a..29e740b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">İşaretle…</translation>
 <translation id="3153862085237805241">Kartı Kaydet</translation>
 <translation id="3157684681743766797">Tümünü İşaretle…</translation>
+<translation id="3161291298470460782">Bu işlem, oturumunuzun ve senkronizasyonun kapatılmasını, ayrıca tüm Chrome verilerinin bu cihazdan temizlenmesini sağlayacak. Senkronize edilmiş verileriniz Google Hesabınızda kalmaya devam edecek.</translation>
 <translation id="3175081911749765310">Web Hizmetleri</translation>
 <translation id="3178650076442119961">Bugün Etkin</translation>
 <translation id="3207960819495026254">Yer işareti koyuldu</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Tarama Verilerini Temizlemeyi Onayla</translation>
 <translation id="35083190962747987">Aç: ${url}</translation>
 <translation id="3519193562722059437">Web'e göz atmak için bir sekme açın.</translation>
+<translation id="3523473570015918798">Oturumu kapattığınızda, yer işaretleri, geçmiş, şifreler ve diğer Chrome verileriniz artık Google Hesabınız ile senkronize edilmeyecek.</translation>
 <translation id="3527085408025491307">Klasör</translation>
 <translation id="3529024052484145543">Güvenli değil</translation>
 <translation id="3533202363250687977">Tüm Gizli Sekmeleri Kapat</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Sayfa Güvenlik Bilgileri</translation>
 <translation id="5443952882982198570">Kredi Kartları</translation>
 <translation id="5457907402803865181">Şifreler senkronize edilirken hata oluştu.</translation>
+<translation id="5508435575041083207">Oturumu Kapat ve Bu Cihazdaki Verileri Temizle</translation>
 <translation id="5525269841082836315">Parola oluşturma</translation>
 <translation id="5548760955356983418">Handoff, web sitelerine göz atmaya bu cihazda başlamanıza ve sonra kolayca Mac'te devam etmenize olanak sağlar. Geçerli olarak açık olan web sitesi Mac bilgisayarınızın Dock bölümünde görünür.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Web'e gizli modda göz atmak için yeni bir sekme ekleyin.</translation>
 <translation id="7671141431838911305">YÜKLE</translation>
 <translation id="7765158879357617694">Taşı</translation>
+<translation id="7771470029643830783">Oturumu kapattığınızda, yer işaretleri, geçmiş, şifreler ve diğer Chrome verileriniz artık Google Hesabınız ile senkronize edilmeyecek.
+
+Hesabınız <ph name="HOSTED_DOMAIN" /> tarafından yönetildiği için oturumunuzu kapatırken Chrome verileriniz bu cihazdan silinecek. Senkronize edilmiş verileriniz Google Hesabınızda kalmaya devam edecek.</translation>
 <translation id="7772032839648071052">Parolayı onayla</translation>
 <translation id="7781011649027948662">Sayfa Çevrilsin mi?</translation>
 <translation id="7781829728241885113">Dün</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Değişiklikleri Kaydet</translation>
 <translation id="8503813439785031346">Kullanıcı adı</translation>
 <translation id="850600235656508448">Gizli modda aç</translation>
+<translation id="8510057420705599706">Bu işlem, oturumunuzun ve senkronizasyonun kapatılmasını sağlayacak, ancak yer işaretleri, geçmiş, şifreler ve diğer Chrome verileriniz bu cihazda kalmaya devam edecek.</translation>
 <translation id="8517375800490286174">Açık Kaynak Lisansları</translation>
 <translation id="8524799873541103884"><ph name="NUMBER_OF_OPEN_TABS" /> sekmeden <ph name="FIRST_VISIBLE_TAB" />-<ph name="LAST_VISIBLE_TAB" /> arasındakiler <ph name="INCOGNITO" /> Sekmelerdir</translation>
 <translation id="8529767659511976195">Yeni</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Şifreyi güncelle</translation>
 <translation id="9100610230175265781">Parola gerekli</translation>
 <translation id="9148126808321036104">Tekrar oturum açın</translation>
+<translation id="9152539721251340337">QR Kodu oluşturma</translation>
 <translation id="9157836665414082580">İletişim Kutularını Gizle</translation>
 <translation id="9188680907066685419">Yönetilen hesabın oturumunu kapat</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index e667564..cec05c7f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">نشان زد کریں…</translation>
 <translation id="3153862085237805241">کارڈ محفوظ کریں</translation>
 <translation id="3157684681743766797">سبھی کو نشان زد کریں…</translation>
+<translation id="3161291298470460782">‏یہ آپ کو سائن آؤٹ، مطابقت پذیری کو آف اور اس آلہ سے تمام Chrome ڈیٹا کو صاف کر دے گا۔ آپ کا مطابقت پذیر ڈیٹا آپ کے Google اکاؤنٹ میں رہے گا۔</translation>
 <translation id="3175081911749765310">ویب سروسز</translation>
 <translation id="3178650076442119961">آج فعال تھا</translation>
 <translation id="3207960819495026254">بُک مارک بنایا ہوا</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">براؤزنگ ڈیٹا صاف کرنے کی توثیق کریں</translation>
 <translation id="35083190962747987">‏{url}$ کھولیں</translation>
 <translation id="3519193562722059437">ویب براؤز کرنے کیلئے ایک ٹیب کھولیں۔</translation>
+<translation id="3523473570015918798">‏سائن آؤٹ کر کے، آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور Chrome کے دیگر ڈیٹا کی اب آپ کے Google اکاؤنٹ کے ساتھ مطابقت پذیری نہیں کی جائے گی۔</translation>
 <translation id="3527085408025491307">فولڈر</translation>
 <translation id="3529024052484145543">محفوظ نہیں</translation>
 <translation id="3533202363250687977">سبھی پوشیدگی ٹیبز بند کریں</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">صفحہ کی سیکیورٹی کی معلومات</translation>
 <translation id="5443952882982198570">کریڈٹ کارڈز</translation>
 <translation id="5457907402803865181">پاس ورڈز کی مطابقت پذیری کرنے میں خرابی۔</translation>
+<translation id="5508435575041083207">اس آلہ سے سائن آؤٹ کریں اور ڈیٹا صاف کریں</translation>
 <translation id="5525269841082836315">پاس فریز بنائیں</translation>
 <translation id="5548760955356983418">‏Handoff آپ کو اس آلہ پر کسی ویب سائٹ کی براؤزنگ شروع کرنے اور پھر آسانی سےآپ کے Mac پر جاری رکھنے دیتا ہے۔ موجودہ کھلی ویب سائٹ آپ کے Mac کے ڈاک میں ظاہر ہوگی۔
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">نجی طور پر ویب پر براوز کرنے کیلئے، نیا ٹیب شامل کریں۔</translation>
 <translation id="7671141431838911305">انسٹال کریں</translation>
 <translation id="7765158879357617694">منتقل کریں</translation>
+<translation id="7771470029643830783">‏سائن آؤٹ کر کے، آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور Chrome کے دیگر ڈیٹا کی اب آپ کے Google اکاؤنٹ کے ساتھ مطابقت پذیری نہیں کی جائے گی۔
+
+چونکہ آپ کا اکاؤنٹ <ph name="HOSTED_DOMAIN" /> کے زیر نظم ہیں، اس لیے سائن آؤٹ کرنے پر آپ کا Chrome ڈیٹا اس آلہ سے حذف کر دیا جائے گا۔ آپ کا مطابقت پذیر ڈیٹا آپ کے Google اکاؤنٹ میں رہے گا۔</translation>
 <translation id="7772032839648071052">پاس فریز کی توثیق کریں</translation>
 <translation id="7781011649027948662">صفحہ کا ترجمہ کریں؟</translation>
 <translation id="7781829728241885113">گزشتہ کل</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">تبدیلیاں محفوظ کریں</translation>
 <translation id="8503813439785031346">صارف کا نام</translation>
 <translation id="850600235656508448">پوشیدگی وضع میں کھولیں</translation>
+<translation id="8510057420705599706">‏یہ آپ کو سائن آؤٹ اور مطابقت پذیری کو آف کر دے گا لیکن آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور Chrome کا دیگر ڈیٹا اس آلہ پر رہے گا۔</translation>
 <translation id="8517375800490286174">اوپن سورس لائسنسز</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> ٹیبز <ph name="FIRST_VISIBLE_TAB" /> سے <ph name="LAST_VISIBLE_TAB" /> از <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">نئی</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">پاس ورڈ اپ ڈیٹ کریں</translation>
 <translation id="9100610230175265781">پاس فریز درکار ہے</translation>
 <translation id="9148126808321036104">دوبارہ سائن ان کریں</translation>
+<translation id="9152539721251340337">‏QR کوڈ تخلیق کریں</translation>
 <translation id="9157836665414082580">ڈائیلاگز کو دبائیں</translation>
 <translation id="9188680907066685419">نظم کردہ اکاؤنٹ سے سائن آؤٹ کریں</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 66a31af8..6e67a791 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">Đánh dấu...</translation>
 <translation id="3153862085237805241">Lưu thẻ</translation>
 <translation id="3157684681743766797">Đánh dấu tất cả...</translation>
+<translation id="3161291298470460782">Thao tác này sẽ đăng xuất bạn, tắt tính năng đồng bộ hóa và xóa tất cả dữ liệu trên Chrome khỏi thiết bị này. Dữ liệu đã đồng bộ hóa với Tài khoản Google của bạn sẽ không bị ảnh hưởng.</translation>
 <translation id="3175081911749765310">Dịch vụ web</translation>
 <translation id="3178650076442119961">Hoạt động hôm nay</translation>
 <translation id="3207960819495026254">Đã đánh dấu trang</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">Xác nhận xóa dữ liệu duyệt web</translation>
 <translation id="35083190962747987">Mở ${url}</translation>
 <translation id="3519193562722059437">Mở tab để duyệt web.</translation>
+<translation id="3523473570015918798">Khi bạn đăng xuất, dấu trang, lịch sử, mật khẩu và các dữ liệu khác của bạn trên Chrome sẽ không được đồng bộ hóa với Tài khoản Google nữa.</translation>
 <translation id="3527085408025491307">Thư mục</translation>
 <translation id="3529024052484145543">Không an toàn</translation>
 <translation id="3533202363250687977">Đóng tất cả các tab ẩn danh</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">Thông tin bảo mật trang</translation>
 <translation id="5443952882982198570">Thẻ tín dụng</translation>
 <translation id="5457907402803865181">Lỗi khi đồng bộ hóa các mật khẩu.</translation>
+<translation id="5508435575041083207">Đăng xuất và xóa dữ liệu khỏi thiết bị này</translation>
 <translation id="5525269841082836315">Tạo cụm mật khẩu</translation>
 <translation id="5548760955356983418">Tính năng tiếp nối cho phép bạn bắt đầu duyệt web trên thiết bị này và sau đó dễ dàng tiếp tục trên máy Mac của mình. Trang web hiện đang mở sẽ xuất hiện trong thanh Dock trên máy Mac của bạn.
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">Để duyệt web ở chế độ riêng tư, hãy thêm tab mới.</translation>
 <translation id="7671141431838911305">CÀI ĐẶT</translation>
 <translation id="7765158879357617694">Di chuyển</translation>
+<translation id="7771470029643830783">Khi bạn đăng xuất, dấu trang, lịch sử, mật khẩu và các dữ liệu khác của bạn trên Chrome sẽ không được đồng bộ hóa với Tài khoản Google nữa.
+
+Vì tài khoản của bạn do <ph name="HOSTED_DOMAIN" /> quản lý, nên dữ liệu trên Chrome sẽ bị xóa khỏi thiết bị này khi bạn đăng xuất. Dữ liệu đã đồng bộ hóa với Tài khoản Google của bạn sẽ không bị ảnh hưởng.</translation>
 <translation id="7772032839648071052">Xác nhận cụm mật khẩu</translation>
 <translation id="7781011649027948662">Dịch trang?</translation>
 <translation id="7781829728241885113">Hôm qua</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">Lưu các thay đổi</translation>
 <translation id="8503813439785031346">Tên người dùng</translation>
 <translation id="850600235656508448">Mở trong chế độ ẩn danh</translation>
+<translation id="8510057420705599706">Thao tác này sẽ đăng xuất bạn và tắt tính năng đồng bộ hóa nhưng không xóa dấu trang, lịch sử, mật khẩu và các dữ liệu khác của bạn trên Chrome khỏi thiết bị này.</translation>
 <translation id="8517375800490286174">Giấy phép nguồn mở</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" /> Tab <ph name="FIRST_VISIBLE_TAB" /> qua <ph name="LAST_VISIBLE_TAB" /> / <ph name="NUMBER_OF_OPEN_TABS" /></translation>
 <translation id="8529767659511976195">Mới</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">Cập nhật mật khẩu</translation>
 <translation id="9100610230175265781">Yêu cầu cụm mật khẩu</translation>
 <translation id="9148126808321036104">Đăng nhập lại</translation>
+<translation id="9152539721251340337">Tạo mã QR</translation>
 <translation id="9157836665414082580">Hộp thoại loại bỏ</translation>
 <translation id="9188680907066685419">Đăng xuất khỏi tài khoản được quản lý</translation>
 <translation id="9203116392574189331">Tiếp nối</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index 14bf5bd3..97643e48 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">标为…</translation>
 <translation id="3153862085237805241">保存卡片</translation>
 <translation id="3157684681743766797">全部标为…</translation>
+<translation id="3161291298470460782">执行此操作会使您退出帐号、关闭同步功能并从此设备中清除所有 Chrome 数据。已同步的数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="3175081911749765310">网络服务</translation>
 <translation id="3178650076442119961">今天曾有活动</translation>
 <translation id="3207960819495026254">已加书签</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">确认清除浏览数据</translation>
 <translation id="35083190962747987">打开 ${url}</translation>
 <translation id="3519193562722059437">打开一个标签页即可浏览网络。</translation>
+<translation id="3523473570015918798">退出帐号后,您的书签、历史记录、密码及其他 Chrome 数据将不再同步到您的 Google 帐号中。</translation>
 <translation id="3527085408025491307">文件夹</translation>
 <translation id="3529024052484145543">不安全</translation>
 <translation id="3533202363250687977">关闭所有无痕式标签页</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">网页安全信息</translation>
 <translation id="5443952882982198570">信用卡</translation>
 <translation id="5457907402803865181">同步密码时出错。</translation>
+<translation id="5508435575041083207">退出帐号并清除此设备中的数据</translation>
 <translation id="5525269841082836315">创建密码</translation>
 <translation id="5548760955356983418">借助 Handoff 功能,您在此设备上浏览网站时,可轻松改用 Mac 继续浏览。当前打开的网站将显示在 Mac 的 Dock 中。
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">要以私密方式浏览网页,请添加新标签页。</translation>
 <translation id="7671141431838911305">安装</translation>
 <translation id="7765158879357617694">移动</translation>
+<translation id="7771470029643830783">退出帐号后,您的书签、历史记录、密码及其他 Chrome 数据将不再同步到您的 Google 帐号中。
+
+由于您的帐号是由 <ph name="HOSTED_DOMAIN" /> 管理,因此在退出帐号后,您的 Chrome 数据将会从此设备中删除。已同步的数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="7772032839648071052">确认密码</translation>
 <translation id="7781011649027948662">翻译网页?</translation>
 <translation id="7781829728241885113">昨天</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">保存更改</translation>
 <translation id="8503813439785031346">用户名</translation>
 <translation id="850600235656508448">在无痕模式下打开</translation>
+<translation id="8510057420705599706">执行此操作会使您退出帐号并关闭同步功能,但您的书签、历史记录、密码及其他 Chrome 数据仍会保留在此设备上。</translation>
 <translation id="8517375800490286174">开放源代码许可</translation>
 <translation id="8524799873541103884"><ph name="INCOGNITO" />标签页<ph name="FIRST_VISIBLE_TAB" />-<ph name="LAST_VISIBLE_TAB" />(共<ph name="NUMBER_OF_OPEN_TABS" />个)</translation>
 <translation id="8529767659511976195">新功能</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">更新密码</translation>
 <translation id="9100610230175265781">必须提供密码</translation>
 <translation id="9148126808321036104">重新登录</translation>
+<translation id="9152539721251340337">生成二维码</translation>
 <translation id="9157836665414082580">禁止显示对话框</translation>
 <translation id="9188680907066685419">退出受管理的帐号</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index b696cd246..410f1c3a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">標示…</translation>
 <translation id="3153862085237805241">儲存付款卡</translation>
 <translation id="3157684681743766797">標示全部…</translation>
+<translation id="3161291298470460782">此操作會將您登出、關閉同步處理功能,並清除此裝置上的所有 Chrome 資料。但已同步處理的資料會繼續保留在 Google 帳戶中。</translation>
 <translation id="3175081911749765310">網路服務</translation>
 <translation id="3178650076442119961">今天在線</translation>
 <translation id="3207960819495026254">已加入書籤</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">確認清除瀏覽資料</translation>
 <translation id="35083190962747987">開啟 ${url}</translation>
 <translation id="3519193562722059437">透過新開啟的分頁瀏覽網頁。</translation>
+<translation id="3523473570015918798">登出帳戶後,您的書籤、記錄、密碼和其他 Chrome 資料將不會再同步至您的 Google 帳戶。</translation>
 <translation id="3527085408025491307">資料夾</translation>
 <translation id="3529024052484145543">不安全</translation>
 <translation id="3533202363250687977">關閉所有無痕式分頁</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">網頁安全性資料</translation>
 <translation id="5443952882982198570">信用卡</translation>
 <translation id="5457907402803865181">同步處理密碼時發生錯誤。</translation>
+<translation id="5508435575041083207">登出並清除此裝置上的資料</translation>
 <translation id="5525269841082836315">建立通關密語</translation>
 <translation id="5548760955356983418">有了 Handoff,您使用這個裝置開始瀏覽網站後,可輕鬆改用 Mac 繼續瀏覽。目前開啟的網站會自動顯示在 Mac 的 Dock 中。
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">如要以無痕模式瀏覽網頁,請開啟新分頁。</translation>
 <translation id="7671141431838911305">安裝</translation>
 <translation id="7765158879357617694">移動</translation>
+<translation id="7771470029643830783">登出帳戶後,您的書籤、記錄、密碼和其他 Chrome 資料將不會再同步至您的 Google 帳戶。
+
+由於您的帳戶由 <ph name="HOSTED_DOMAIN" /> 管理,當您登出帳戶時,Chrome 資料亦會從此裝置上刪除,但已同步處理的資料會繼續保留在 Google 帳戶中。</translation>
 <translation id="7772032839648071052">確認複雜密碼</translation>
 <translation id="7781011649027948662">要翻譯網頁嗎?</translation>
 <translation id="7781829728241885113">昨天</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">儲存變更</translation>
 <translation id="8503813439785031346">使用者名稱</translation>
 <translation id="850600235656508448">以無痕模式開啟</translation>
+<translation id="8510057420705599706">此操作會將您登出並關閉同步處理功能,但您的書籤、記錄、密碼和其他 Chrome 資料會繼續保留在此裝置上。</translation>
 <translation id="8517375800490286174">開放原始碼授權</translation>
 <translation id="8524799873541103884">第 <ph name="FIRST_VISIBLE_TAB" /> 至 <ph name="LAST_VISIBLE_TAB" /> 個<ph name="INCOGNITO" />分頁,共 <ph name="NUMBER_OF_OPEN_TABS" /> 個</translation>
 <translation id="8529767659511976195">新功能</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">更新密碼</translation>
 <translation id="9100610230175265781">請輸入複雜密碼</translation>
 <translation id="9148126808321036104">重新登入</translation>
+<translation id="9152539721251340337">建立二維條碼</translation>
 <translation id="9157836665414082580">隱藏對話框</translation>
 <translation id="9188680907066685419">登出受管理的帳戶</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index ca60af7..5a645fb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -168,6 +168,7 @@
 <translation id="3112556859945124369">標示…</translation>
 <translation id="3153862085237805241">儲存卡片</translation>
 <translation id="3157684681743766797">全部標示…</translation>
+<translation id="3161291298470460782">這項操作會將你登出帳戶、關閉同步功能,並清除這部裝置上的所有 Chrome 資料,但是已同步處理的資料會繼續保留在你的 Google 帳戶中。</translation>
 <translation id="3175081911749765310">網路服務</translation>
 <translation id="3178650076442119961">上次使用時間:今天</translation>
 <translation id="3207960819495026254">已加入書籤</translation>
@@ -200,6 +201,7 @@
 <translation id="3494788280727468875">確認清除瀏覽資料</translation>
 <translation id="35083190962747987">開啟 ${url}</translation>
 <translation id="3519193562722059437">透過新開啟的分頁瀏覽網頁。</translation>
+<translation id="3523473570015918798">登出帳戶之後,你的書籤、歷史記錄、密碼和其他 Chrome 資料將停止同步到你的 Google 帳戶。</translation>
 <translation id="3527085408025491307">資料夾</translation>
 <translation id="3529024052484145543">不安全</translation>
 <translation id="3533202363250687977">關閉所有無痕式分頁</translation>
@@ -333,6 +335,7 @@
 <translation id="54401264925851789">網頁安全性資訊</translation>
 <translation id="5443952882982198570">信用卡</translation>
 <translation id="5457907402803865181">同步密碼時發生錯誤。</translation>
+<translation id="5508435575041083207">登出帳戶並清除這部裝置上的資料</translation>
 <translation id="5525269841082836315">建立通關密語</translation>
 <translation id="5548760955356983418">有了 Handoff,您使用這個裝置開始瀏覽網站後,可輕鬆改用 Mac 繼續瀏覽。目前開啟的網站會自動顯示在 Mac 的 Dock 中。
 
@@ -506,6 +509,9 @@
 <translation id="766891008101699113">如要以私密模式瀏覽網頁,請開啟新分頁。</translation>
 <translation id="7671141431838911305">安裝</translation>
 <translation id="7765158879357617694">移動</translation>
+<translation id="7771470029643830783">登出帳戶之後,你的書籤、歷史記錄、密碼和其他 Chrome 資料將停止同步到你的 Google 帳戶。
+
+由於你的帳戶是由 <ph name="HOSTED_DOMAIN" /> 管理,因此當你登出帳戶時,系統會將你的 Chrome 資料從這部裝置上刪除,但是已同步處理的資料會繼續保留在你的 Google 帳戶中。</translation>
 <translation id="7772032839648071052">確認通關密語</translation>
 <translation id="7781011649027948662">是否要翻譯網頁?</translation>
 <translation id="7781829728241885113">昨天</translation>
@@ -555,6 +561,7 @@
 <translation id="8490978609246021741">儲存變更</translation>
 <translation id="8503813439785031346">使用者名稱</translation>
 <translation id="850600235656508448">以無痕模式開啟</translation>
+<translation id="8510057420705599706">這項操作會將你登出帳戶並關閉同步功能,但是你的書籤、歷史記錄、密碼和其他 Chrome 資料會繼續保留在這部裝置上。</translation>
 <translation id="8517375800490286174">開放原始碼授權</translation>
 <translation id="8524799873541103884">第 <ph name="FIRST_VISIBLE_TAB" /> 至 <ph name="LAST_VISIBLE_TAB" /> 個<ph name="INCOGNITO" />分頁,共 <ph name="NUMBER_OF_OPEN_TABS" /> 個</translation>
 <translation id="8529767659511976195">新功能</translation>
@@ -597,6 +604,7 @@
 <translation id="9094033019050270033">更新密碼</translation>
 <translation id="9100610230175265781">請提供通關密語</translation>
 <translation id="9148126808321036104">重新登入</translation>
+<translation id="9152539721251340337">建立 QR 圖碼</translation>
 <translation id="9157836665414082580">禁止顯示對話方塊</translation>
 <translation id="9188680907066685419">登出受管理的帳戶</translation>
 <translation id="9203116392574189331">Handoff</translation>
diff --git a/ios/chrome/browser/credential_provider/BUILD.gn b/ios/chrome/browser/credential_provider/BUILD.gn
index 8379c9a..81c09c9 100644
--- a/ios/chrome/browser/credential_provider/BUILD.gn
+++ b/ios/chrome/browser/credential_provider/BUILD.gn
@@ -11,10 +11,10 @@
   sources = [
     "archivable_credential+password_form.h",
     "archivable_credential+password_form.mm",
-    "credential_provider_service.cc",
     "credential_provider_service.h",
-    "credential_provider_service_factory.cc",
+    "credential_provider_service.mm",
     "credential_provider_service_factory.h",
+    "credential_provider_service_factory.mm",
     "credential_provider_support.cc",
     "credential_provider_support.h",
   ]
@@ -46,7 +46,7 @@
   testonly = true
   sources = [
     "archivable_credential+password_form_unittest.mm",
-    "credential_provider_service_unittest.cc",
+    "credential_provider_service_unittest.mm",
   ]
   deps = [
     ":credential_provider",
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service.cc b/ios/chrome/browser/credential_provider/credential_provider_service.mm
similarity index 86%
rename from ios/chrome/browser/credential_provider/credential_provider_service.cc
rename to ios/chrome/browser/credential_provider/credential_provider_service.mm
index 8f2e809..42f2c66a 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_service.cc
+++ b/ios/chrome/browser/credential_provider/credential_provider_service.mm
@@ -9,6 +9,10 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 CredentialProviderService::CredentialProviderService(
     scoped_refptr<password_manager::PasswordStore> password_store)
     : password_store_(password_store) {}
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service_factory.cc b/ios/chrome/browser/credential_provider/credential_provider_service_factory.mm
similarity index 94%
rename from ios/chrome/browser/credential_provider/credential_provider_service_factory.cc
rename to ios/chrome/browser/credential_provider/credential_provider_service_factory.mm
index e8058e6c..fdac93c 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_service_factory.cc
+++ b/ios/chrome/browser/credential_provider/credential_provider_service_factory.mm
@@ -10,6 +10,10 @@
 #include "ios/chrome/browser/credential_provider/credential_provider_service.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 // static
 CredentialProviderService* CredentialProviderServiceFactory::GetForBrowserState(
     ChromeBrowserState* browser_state) {
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.cc b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
similarity index 84%
rename from ios/chrome/browser/credential_provider/credential_provider_service_unittest.cc
rename to ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
index 08af58a..e9de276 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.cc
+++ b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
@@ -5,13 +5,17 @@
 #include "ios/chrome/browser/credential_provider/credential_provider_service.h"
 
 #include "components/password_manager/core/browser/test_password_store.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
 
 namespace {
 
 using password_manager::TestPasswordStore;
 
-class CredentialProviderServiceTest : public testing::Test {
+class CredentialProviderServiceTest : public PlatformTest {
  public:
   CredentialProviderServiceTest() {}
 
diff --git a/ios/chrome/browser/policy/browser_policy_connector_ios.mm b/ios/chrome/browser/policy/browser_policy_connector_ios.mm
index c2b19d3..ccf47a7 100644
--- a/ios/chrome/browser/policy/browser_policy_connector_ios.mm
+++ b/ios/chrome/browser/policy/browser_policy_connector_ios.mm
@@ -76,9 +76,10 @@
 
 std::unique_ptr<ConfigurationPolicyProvider>
 BrowserPolicyConnectorIOS::CreatePlatformProvider() {
-  std::unique_ptr<AsyncPolicyLoader> loader(
-      new PolicyLoaderIOS(base::ThreadPool::CreateSequencedTaskRunner(
-          {base::MayBlock(), base::TaskPriority::BEST_EFFORT})));
+  auto loader = std::make_unique<PolicyLoaderIOS>(
+      GetSchemaRegistry(),
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
 
   return std::make_unique<AsyncPolicyProvider>(GetSchemaRegistry(),
                                                std::move(loader));
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
index 7c13f37..fdfcc93 100644
--- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
@@ -185,7 +185,9 @@
                               identity:(ChromeIdentity*)identity {
   DCHECK(!self.alertCoordinator);
   DCHECK(!self.userSigninCoordinator);
-  [self runCompletionCallbackWithSigninResult:signinResult identity:identity];
+  [self runCompletionCallbackWithSigninResult:signinResult
+                                     identity:identity
+                   showAdvancedSettingsSignin:NO];
 }
 
 // Presents the user consent screen with |identity| pre-selected.
@@ -200,12 +202,14 @@
                                       promoAction:self.promoAction];
 
   __weak AddAccountSigninCoordinator* weakSelf = self;
-  self.userSigninCoordinator.signinCompletion = ^(
-      SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
-    [weakSelf.userSigninCoordinator stop];
-    weakSelf.userSigninCoordinator = nil;
-    [weakSelf addAccountDoneWithSigninResult:signinResult identity:identity];
-  };
+  self.userSigninCoordinator.signinCompletion =
+      ^(SigninCoordinatorResult signinResult,
+        SigninCompletionInfo* signinCompletionInfo) {
+        [weakSelf.userSigninCoordinator stop];
+        weakSelf.userSigninCoordinator = nil;
+        [weakSelf addAccountDoneWithSigninResult:signinResult
+                                        identity:signinCompletionInfo.identity];
+      };
   [self.userSigninCoordinator start];
 }
 
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.mm
index 2671b53b..ecfee24 100644
--- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.mm
@@ -181,7 +181,9 @@
   AuthenticationService* authService =
       AuthenticationServiceFactory::GetForBrowserState(self.browserState);
   ChromeIdentity* identity = authService->GetAuthenticatedIdentity();
-  [self runCompletionCallbackWithSigninResult:signinResult identity:identity];
+  [self runCompletionCallbackWithSigninResult:signinResult
+                                     identity:identity
+                   showAdvancedSettingsSignin:NO];
 }
 
 - (void)showCancelConfirmationAlert {
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.h b/ios/chrome/browser/ui/authentication/signin/signin_constants.h
index a1d57d8..9e36f62 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_constants.h
+++ b/ios/chrome/browser/ui/authentication/signin/signin_constants.h
@@ -7,6 +7,8 @@
 
 #import <Foundation/Foundation.h>
 
+@class ChromeIdentity;
+
 // Sign-in result returned Sign-in result.
 typedef NS_ENUM(NSUInteger, SigninCoordinatorResult) {
   // Sign-in has been canceled by the user or by another reason.
@@ -31,4 +33,42 @@
 // Name of notification sent when the user has attempted a sign-in.
 extern NSString* const kUserSigninAttemptedNotification;
 
+// Action that is required to do to complete the sign-in. This action is in
+// charge of the SigninCoordinator's owner.
+typedef NS_ENUM(NSUInteger, SigninCompletionAction) {
+  // No action needed.
+  SigninCompletionActionNone,
+  // The advanced settings sign-in view is needed to finish the sign-in.
+  // This case is only used for the first run sign-in.
+  SigninCompletionActionShowAdvancedSettingsSignin,
+};
+
+// Embed different values related to the sign-in completion.
+@interface SigninCompletionInfo : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+// Designated initializer.
+// |identity| is the identity chosen by the user to sign-in.
+// |signinCompletionAction| is the action required to complete the sign-in.
+- (instancetype)initWithIdentity:(ChromeIdentity*)identity
+          signinCompletionAction:(SigninCompletionAction)signinCompletionAction
+    NS_DESIGNATED_INITIALIZER;
+
+// Identity used by the user to sign-in.
+@property(nonatomic, strong, readonly) ChromeIdentity* identity;
+// Action to take to finish the sign-in. This action is in charged of the
+// SigninCoordinator's owner.
+@property(nonatomic, assign, readonly)
+    SigninCompletionAction signinCompletionAction;
+
+@end
+
+// Called when the sign-in dialog is closed.
+// |result| is the sign-in result state.
+// |signinCompletionInfo| different values related to the sign-in, see
+// SigninCompletionInfo class.
+using SigninCoordinatorCompletionCallback =
+    void (^)(SigninCoordinatorResult result, SigninCompletionInfo* info);
+
 #endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm b/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
index 1f6ab128..ddef1af8 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
@@ -9,3 +9,18 @@
 #endif
 
 NSString* const kUserSigninAttemptedNotification = @"kUserSigninAttempted";
+
+@implementation SigninCompletionInfo
+
+- (instancetype)initWithIdentity:(ChromeIdentity*)identity
+          signinCompletionAction:
+              (SigninCompletionAction)signinCompletionAction {
+  self = [super init];
+  if (self) {
+    _identity = identity;
+    _signinCompletionAction = signinCompletionAction;
+  }
+  return self;
+}
+
+@end
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h b/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h
index e451690..564bb5a 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h
@@ -15,9 +15,12 @@
 // Runs the sign-in completion callback.
 // |signinResult| is the state of sign-in at add account flow completion.
 // |identity| is the identity of the added account.
+// |showAdvancedSettingsSignin| is YES if the user wants to open the
+// advanced settings signin.
 - (void)runCompletionCallbackWithSigninResult:
             (SigninCoordinatorResult)signinResult
                                      identity:(ChromeIdentity*)identity
+                   showAdvancedSettingsSignin:(BOOL)showAdvancedSettingsSignin
     NS_REQUIRES_SUPER;
 
 @end
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
index a047581..91ba61f7 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
@@ -15,13 +15,6 @@
 class Browser;
 @class ChromeIdentity;
 
-// Called when the sign-in dialog is closed.
-// |result| is the sign-in result state.
-// |identity| is the identity chosen by the user during the sign-in.
-typedef void (^SigninCoordinatorCompletionCallback)(
-    SigninCoordinatorResult signinResult,
-    ChromeIdentity* identity);
-
 // Main class for sign-in coordinator. This class should not be instantiated
 // directly, this should be done using the class methods.
 @interface SigninCoordinator : ChromeCoordinator
@@ -51,7 +44,10 @@
                                     promoAction:(signin_metrics::PromoAction)
                                                     promoAction;
 
-// Returns a coordinator for first run sign-in workflow.
+// Returns a coordinator for first run sign-in workflow. If the user tap on the
+// settings link to open the advanced settings sign-in, the SigninCoordinator
+// owner is in charge open this view, according to -[SigninCompletionInfo
+// signinCompletionAction] in |signinCompletionInfo| from |signinCompletion|.
 // |navigationController| presents the sign-in. Will be responsible for
 // dismissing itself upon sign-in completion.
 + (instancetype)firstRunCoordinatorWithBaseNavigationController:
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
index 560b35d..3093c5ee 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
@@ -104,8 +104,9 @@
 }
 
 - (void)dealloc {
-  // -[SigninCoordinator runCompletionCallbackWithSigninResult:identity:] has
-  // to be called by the subclass before the coordinator is deallocated.
+  // -[SigninCoordinator runCompletionCallbackWithSigninResult:identity:
+  // showAdvancedSettingsSignin:] has to be called by the subclass before
+  // the coordinator is deallocated.
   DCHECK(!self.signinCompletion);
 }
 
@@ -124,8 +125,9 @@
 }
 
 - (void)stop {
-  // -[SigninCoordinator runCompletionCallbackWithSigninResult:identity:] has
-  // to be called by the subclass before -[SigninCoordinator stop] is called.
+  // -[SigninCoordinator runCompletionCallbackWithSigninResult:identity:
+  // showAdvancedSettingsSignin:] has to be called by the subclass before
+  // -[SigninCoordinator stop] is called.
   DCHECK(!self.signinCompletion);
 }
 
@@ -140,15 +142,23 @@
 
 - (void)runCompletionCallbackWithSigninResult:
             (SigninCoordinatorResult)signinResult
-                                     identity:(ChromeIdentity*)identity {
+                                     identity:(ChromeIdentity*)identity
+                   showAdvancedSettingsSignin:(BOOL)showAdvancedSettingsSignin {
+  SigninCompletionAction signinCompletionAction =
+      showAdvancedSettingsSignin
+          ? SigninCompletionActionShowAdvancedSettingsSignin
+          : SigninCompletionActionNone;
+  SigninCompletionInfo* signinCompletionInfo =
+      [[SigninCompletionInfo alloc] initWithIdentity:identity
+                              signinCompletionAction:signinCompletionAction];
   // If |self.signinCompletion| is nil, this method has been probably called
   // twice.
   DCHECK(self.signinCompletion);
   SigninCoordinatorCompletionCallback signinCompletion = self.signinCompletion;
-  self.signinCompletion = nil;
   // The owner should call the stop method, during the callback.
   // |self.signinCompletion| needs to be set to nil before calling it.
-  signinCompletion(signinResult, identity);
+  self.signinCompletion = nil;
+  signinCompletion(signinResult, signinCompletionInfo);
 }
 
 @end
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/gradient_view.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/gradient_view.mm
index 831d0d94..44cb6fd 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/gradient_view.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/gradient_view.mm
@@ -23,6 +23,7 @@
   self = [super initWithFrame:CGRectZero];
   if (self) {
     self.userInteractionEnabled = NO;
+    [self updateColors];
   }
   return self;
 }
@@ -31,8 +32,7 @@
   return base::mac::ObjCCastStrict<CAGradientLayer>(self.layer);
 }
 
-- (void)traitCollectionDidChange:
-    (nullable UITraitCollection*)previousTraitCollection {
+- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
   [super traitCollectionDidChange:previousTraitCollection];
   if (@available(iOS 13, *)) {
     if ([self.traitCollection
@@ -54,7 +54,7 @@
 
   self.gradientLayer.colors = @[
     (id)[UIColor.cr_systemBackgroundColor colorWithAlphaComponent:0].CGColor,
-    (id)UIColor.cr_systemBackgroundColor.CGColor
+    (id)UIColor.cr_systemBackgroundColor.CGColor,
   ];
   [CATransaction commit];
 }
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
index eb08a1e..8095384 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
@@ -232,9 +232,11 @@
 
   __weak UserSigninCoordinator* weakSelf = self;
   self.addAccountSigninCoordinator.signinCompletion =
-      ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+      ^(SigninCoordinatorResult signinResult,
+        SigninCompletionInfo* signinCompletionInfo) {
         if (signinResult == SigninCoordinatorResultSuccess) {
-          weakSelf.unifiedConsentCoordinator.selectedIdentity = identity;
+          weakSelf.unifiedConsentCoordinator.selectedIdentity =
+              signinCompletionInfo.identity;
           weakSelf.addedAccount = YES;
         }
         [weakSelf.addAccountSigninCoordinator stop];
@@ -342,8 +344,12 @@
   self.unifiedConsentCoordinator = nil;
   self.mediator = nil;
   self.viewController = nil;
-  if (!settingsWasTapped) {
-    [self runCompletionCallbackWithSigninResult:signinResult identity:identity];
+  if (!settingsWasTapped || self.signinIntent == UserSigninIntentFirstRun) {
+    // For first run intent, the UserSigninCoordinator owner is reponsible to
+    // open the advanced settings sign-in.
+    [self runCompletionCallbackWithSigninResult:signinResult
+                                       identity:identity
+                     showAdvancedSettingsSignin:settingsWasTapped];
     return;
   }
   self.advancedSettingsSigninCoordinator = [SigninCoordinator
@@ -353,11 +359,11 @@
   __weak UserSigninCoordinator* weakSelf = self;
   self.advancedSettingsSigninCoordinator.signinCompletion = ^(
       SigninCoordinatorResult advancedSigninResult,
-      ChromeIdentity* advancedSigninIdentity) {
+      SigninCompletionInfo* signinCompletionInfo) {
     [weakSelf
         advancedSettingsSigninCoordinatorFinishedWithResult:advancedSigninResult
-                                                   identity:
-                                                       advancedSigninIdentity];
+                                                   identity:signinCompletionInfo
+                                                                .identity];
   };
   [self.advancedSettingsSigninCoordinator start];
 }
@@ -366,6 +372,7 @@
 // controller. First run requires an additional transitional fade animation when
 // presenting this view.
 - (void)presentUserSigninViewController {
+  self.viewController.modalPresentationStyle = UIModalPresentationFormSheet;
   switch (self.signinIntent) {
     case UserSigninIntentFirstRun: {
       // Displays the sign-in screen with transitions specific to first-run.
@@ -395,7 +402,8 @@
             runCompletionCallbackWithSigninResult:
                 SigninCoordinatorResultInterrupted
                                          identity:self.unifiedConsentCoordinator
-                                                      .selectedIdentity];
+                                                      .selectedIdentity
+                       showAdvancedSettingsSignin:NO];
         return;
       }
 
@@ -406,7 +414,7 @@
     }
     case UserSigninIntentSignin: {
       DCHECK(self.baseViewController);
-      self.viewController.modalPresentationStyle = UIModalPresentationFormSheet;
+
       [self.baseViewController presentViewController:self.viewController
                                             animated:YES
                                           completion:nil];
@@ -432,7 +440,8 @@
     [weakSelf
         runCompletionCallbackWithSigninResult:SigninCoordinatorResultInterrupted
                                      identity:self.unifiedConsentCoordinator
-                                                  .selectedIdentity];
+                                                  .selectedIdentity
+                   showAdvancedSettingsSignin:NO];
     if (completion) {
       completion();
     }
@@ -497,7 +506,9 @@
   DCHECK(self.advancedSettingsSigninCoordinator);
   [self.advancedSettingsSigninCoordinator stop];
   self.advancedSettingsSigninCoordinator = nil;
-  [self runCompletionCallbackWithSigninResult:signinResult identity:identity];
+  [self runCompletionCallbackWithSigninResult:signinResult
+                                     identity:identity
+                   showAdvancedSettingsSignin:NO];
 }
 
 @end
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
index 085a5098..affbf9e 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
@@ -62,9 +62,6 @@
 // Constraint for the maximum height of the header view (also used to hide the
 // the header view if needed).
 @property(nonatomic, strong) NSLayoutConstraint* headerViewMaxHeightConstraint;
-// Constraint for the proportiortional size of the header view.
-@property(nonatomic, strong)
-    NSLayoutConstraint* headerViewProportionalHeightConstraint;
 // Settings link controller.
 @property(nonatomic, strong) LabelLinkController* settingsLinkController;
 // Label related to customize sync text.
@@ -253,12 +250,10 @@
   AddSameCenterXConstraint(self.view, headerImageView);
   // |headerView| fills 20% of |view|, capped at
   // |kAuthenticationHeaderImageHeight|.
-  self.headerViewProportionalHeightConstraint = [headerImageView.heightAnchor
-      constraintEqualToAnchor:self.view.heightAnchor
-                   multiplier:0.2];
-  self.headerViewProportionalHeightConstraint.priority =
-      UILayoutPriorityDefaultHigh;
-  self.headerViewProportionalHeightConstraint.active = YES;
+  [headerImageView.heightAnchor
+      constraintLessThanOrEqualToAnchor:self.view.heightAnchor
+                             multiplier:0.2]
+      .active = YES;
   self.headerViewMaxHeightConstraint = [headerImageView.heightAnchor
       constraintLessThanOrEqualToConstant:kAuthenticationHeaderImageHeight];
   self.headerViewMaxHeightConstraint.active = YES;
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index 27ef560..3ac4343 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -127,7 +127,6 @@
     "//ios/chrome/browser/ui/popup_menu",
     "//ios/chrome/browser/ui/presenters",
     "//ios/chrome/browser/ui/print",
-    "//ios/chrome/browser/ui/qr_generator",
     "//ios/chrome/browser/ui/qr_scanner:coordinator",
     "//ios/chrome/browser/ui/reading_list",
     "//ios/chrome/browser/ui/recent_tabs",
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
index 545cdd7..2369add 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -53,7 +53,6 @@
 #import "ios/chrome/browser/ui/page_info/page_info_legacy_coordinator.h"
 #import "ios/chrome/browser/ui/passwords/password_breach_coordinator.h"
 #import "ios/chrome/browser/ui/print/print_controller.h"
-#import "ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.h"
 #import "ios/chrome/browser/ui/qr_scanner/qr_scanner_legacy_coordinator.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_coordinator.h"
 #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
@@ -63,7 +62,6 @@
 #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h"
 #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h"
 #import "ios/chrome/browser/ui/translate/legacy_translate_infobar_coordinator.h"
-#include "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
 #import "ios/chrome/browser/url_loading/url_loading_params.h"
 #import "ios/chrome/browser/web/features.h"
@@ -154,9 +152,6 @@
 // TODO(crbug.com/910017): Convert to coordinator.
 @property(nonatomic, strong) PrintController* printController;
 
-// Coordinator for the QR generator UI.
-@property(nonatomic, strong) QRGeneratorCoordinator* qrGeneratorCoordinator;
-
 // Coordinator for the QR scanner.
 @property(nonatomic, strong) QRScannerLegacyCoordinator* qrScannerCoordinator;
 
@@ -273,9 +268,6 @@
   [self.readingListCoordinator stop];
   self.readingListCoordinator = nil;
 
-  [self.qrGeneratorCoordinator stop];
-  self.qrGeneratorCoordinator = nil;
-
   [self.passwordBreachCoordinator stop];
 
   [self.pageInfoCoordinator stop];
@@ -382,8 +374,6 @@
                          browser:self.browser];
   [self.qrScannerCoordinator start];
 
-  /* QRGeneratorCoordinator is created and started by a command. */
-
   /* ReadingListCoordinator is created and started by a BrowserCommand */
 
   /* RecentTabsCoordinator is created and started by a BrowserCommand */
@@ -450,9 +440,6 @@
 
   self.printController = nil;
 
-  [self.qrGeneratorCoordinator stop];
-  self.qrGeneratorCoordinator = nil;
-
   [self.qrScannerCoordinator stop];
   self.qrScannerCoordinator = nil;
 
@@ -731,18 +718,7 @@
 #pragma mark - QRGenerationCommands
 
 - (void)generateQRCode:(GenerateQRCodeCommand*)command {
-  DCHECK(base::FeatureList::IsEnabled(kQRCodeGeneration));
-  self.qrGeneratorCoordinator = [[QRGeneratorCoordinator alloc]
-      initWithBaseViewController:self.viewController
-                         browser:self.browser
-                           title:command.title
-                             URL:command.URL];
-  [self.qrGeneratorCoordinator start];
-}
-
-- (void)hideQRCode {
-  [self.qrGeneratorCoordinator stop];
-  self.qrGeneratorCoordinator = nil;
+  // TODO(crbug.com/1064990): Implement Coordinator and starting here.
 }
 
 #pragma mark - FormInputAccessoryCoordinatorNavigator
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
index c34e06d..8887236 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -15,21 +15,9 @@
 #import "ios/public/provider/chrome/browser/voice/logo_animation_controller.h"
 
 class Browser;
-class ChromeBrowserState;
-class FullscreenController;
-@protocol ApplicationCommands;
-@protocol BrowserCommands;
-@protocol BrowsingDataCommands;
 @class BrowserContainerViewController;
 @class BrowserViewControllerDependencyFactory;
-@protocol FindInPageCommands;
-@protocol PasswordBreachCommands;
-@protocol PopupMenuCommands;
-@protocol FakeboxFocuser;
-@protocol SnackbarCommands;
-@class TabModel;
 @class ToolbarAccessoryPresenter;
-@protocol ToolbarCommands;
 
 // The top-level view controller for the browser UI. Manages other controllers
 // which implement the interface.
@@ -57,35 +45,9 @@
 
 - (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
 
-@property(nonatomic, readonly) id<ApplicationCommands,
-                                  BrowserCommands,
-                                  BrowsingDataCommands,
-                                  FindInPageCommands,
-                                  PasswordBreachCommands,
-                                  PopupMenuCommands,
-                                  FakeboxFocuser,
-                                  SnackbarCommands,
-                                  ToolbarCommands>
-    dispatcher;
-
-// The top-level browser container view.
-@property(nonatomic, strong, readonly) UIView* contentArea;
-
-// Invisible button used to dismiss the keyboard.
-@property(nonatomic, strong) UIButton* typingShield;
-
 // Returns whether or not text to speech is playing.
 @property(nonatomic, assign, readonly, getter=isPlayingTTS) BOOL playingTTS;
 
-// The Browser's TabModel.
-@property(nonatomic, weak, readonly) TabModel* tabModel;
-
-// The Browser's ChromeBrowserState.
-@property(nonatomic, assign, readonly) ChromeBrowserState* browserState;
-
-// The FullscreenController.
-@property(nonatomic, assign) FullscreenController* fullscreenController;
-
 // The container used for infobar banner overlays.
 @property(nonatomic, strong)
     UIViewController* infobarBannerOverlayContainerViewController;
@@ -101,9 +63,6 @@
 // Whether the receiver is currently the primary BVC.
 - (void)setPrimary:(BOOL)primary;
 
-// Called when the typing shield is tapped.
-- (void)shieldWasTapped:(id)sender;
-
 // Called when the user explicitly opens the tab switcher.
 - (void)userEnteredTabSwitcher;
 
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 6d8b603..60425c39 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -8,7 +8,6 @@
 #import <MessageUI/MessageUI.h>
 
 #include "base/base64.h"
-#include "base/ios/ios_util.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
 #include "base/metrics/histogram_macros.h"
@@ -17,7 +16,6 @@
 #include "base/strings/sys_string_conversions.h"
 #include "components/feature_engagement/public/event_constants.h"
 #include "components/feature_engagement/public/tracker.h"
-#import "components/language/ios/browser/ios_language_detection_tab_helper.h"
 #include "components/omnibox/browser/location_bar_model_impl.h"
 #include "components/reading_list/core/reading_list_model.h"
 #include "components/search_engines/template_url_service.h"
@@ -79,8 +77,8 @@
 #import "ios/chrome/browser/ui/browser_view/key_commands_provider.h"
 #import "ios/chrome/browser/ui/bubble/bubble_presenter.h"
 #import "ios/chrome/browser/ui/bubble/bubble_presenter_delegate.h"
-#import "ios/chrome/browser/ui/commands/browsing_data_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#import "ios/chrome/browser/ui/commands/help_commands.h"
 #import "ios/chrome/browser/ui/commands/reading_list_add_command.h"
 #import "ios/chrome/browser/ui/commands/send_tab_to_self_command.h"
 #import "ios/chrome/browser/ui/commands/show_signin_command.h"
@@ -90,12 +88,10 @@
 #import "ios/chrome/browser/ui/dialogs/dialog_features.h"
 #import "ios/chrome/browser/ui/dialogs/dialog_presenter.h"
 #import "ios/chrome/browser/ui/dialogs/java_script_dialog_presenter_impl.h"
-#import "ios/chrome/browser/ui/dialogs/overlay_java_script_dialog_presenter.h"
 #import "ios/chrome/browser/ui/download/download_manager_coordinator.h"
 #import "ios/chrome/browser/ui/elements/activity_overlay_coordinator.h"
 #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_animator.h"
-#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
@@ -112,7 +108,6 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_coordinator.h"
 #import "ios/chrome/browser/ui/ntp/ntp_util.h"
 #import "ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.h"
-#import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.h"
 #import "ios/chrome/browser/ui/presenters/vertical_animation_container.h"
 #import "ios/chrome/browser/ui/sad_tab/sad_tab_coordinator.h"
@@ -126,7 +121,6 @@
 #import "ios/chrome/browser/ui/tabs/requirements/tab_strip_presentation.h"
 #import "ios/chrome/browser/ui/tabs/switch_to_tab_animation_view.h"
 #import "ios/chrome/browser/ui/tabs/tab_strip_legacy_coordinator.h"
-#import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h"
 #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h"
 #import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_coordinator.h"
 #import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.h"
@@ -140,7 +134,6 @@
 #import "ios/chrome/browser/ui/toolbar/toolbar_coordinator_adaptor.h"
 #import "ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.h"
 #import "ios/chrome/browser/ui/toolbar_container/toolbar_container_features.h"
-#include "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/ui/util/keyboard_observer_helper.h"
 #import "ios/chrome/browser/ui/util/multi_window_support.h"
 #import "ios/chrome/browser/ui/util/named_guide.h"
@@ -185,10 +178,8 @@
 #import "ios/web/public/deprecated/crw_js_injection_receiver.h"
 #import "ios/web/public/deprecated/crw_web_controller_util.h"
 #include "ios/web/public/navigation/navigation_item.h"
-#include "ios/web/public/thread/web_thread.h"
 #import "ios/web/public/ui/context_menu_params.h"
 #import "ios/web/public/ui/crw_web_view_proxy.h"
-#include "ios/web/public/web_client.h"
 #import "ios/web/public/web_state_delegate_bridge.h"
 #import "ios/web/public/web_state_observer_bridge.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -482,6 +473,8 @@
 // Browser container view controller.
 @property(nonatomic, strong)
     BrowserContainerViewController* browserContainerViewController;
+// Invisible button used to dismiss the keyboard.
+@property(nonatomic, strong) UIButton* typingShield;
 // Command dispatcher.
 @property(nonatomic, weak) CommandDispatcher* commandDispatcher;
 // The browser's side swipe controller.  Lazily instantiated on the first call.
@@ -551,6 +544,9 @@
 // Command handler for omnibox commands
 @property(nonatomic, weak) id<OmniboxCommands> omniboxHandler;
 
+// The FullscreenController.
+@property(nonatomic, assign) FullscreenController* fullscreenController;
+
 // Primary toolbar.
 @property(nonatomic, strong)
     PrimaryToolbarCoordinator* primaryToolbarCoordinator;
@@ -789,18 +785,12 @@
 
 - (id<ApplicationCommands,
       BrowserCommands,
-      BrowsingDataCommands,
       FindInPageCommands,
       PasswordBreachCommands,
-      PopupMenuCommands,
-      FakeboxFocuser,
-      SnackbarCommands,
       ToolbarCommands>)dispatcher {
   return static_cast<
-      id<ApplicationCommands, BrowserCommands, BrowsingDataCommands,
-         FindInPageCommands, PasswordBreachCommands, PopupMenuCommands,
-         FakeboxFocuser, SnackbarCommands, ToolbarCommands>>(
-      self.commandDispatcher);
+      id<ApplicationCommands, BrowserCommands, FindInPageCommands,
+         PasswordBreachCommands, ToolbarCommands>>(self.commandDispatcher);
 }
 
 - (UIView*)contentArea {
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
index 7092b60ee..0019de5 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
@@ -159,11 +159,10 @@
             chrome_browser_state_.get());
     template_url_service->Load();
 
-    bvc_ = [[BrowserViewController alloc]
-                       initWithBrowser:browser_.get()
-                     dependencyFactory:factory
-        browserContainerViewController:[[BrowserContainerViewController alloc]
-                                           init]];
+    container_ = [[BrowserContainerViewController alloc] init];
+    bvc_ = [[BrowserViewController alloc] initWithBrowser:browser_.get()
+                                        dependencyFactory:factory
+                           browserContainerViewController:container_];
 
     // Force the view to load.
     UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectZero];
@@ -201,28 +200,17 @@
   PKAddPassesViewController* passKitViewController_;
   OCMockObject* dependencyFactory_;
   CommandDispatcher* command_dispatcher_;
+  BrowserContainerViewController* container_;
   BrowserViewController* bvc_;
   UIWindow* window_;
 };
 
 TEST_F(BrowserViewControllerTest, TestWebStateSelected) {
   [bvc_ webStateSelected:ActiveWebState() notifyToolbar:YES];
-  EXPECT_EQ([ActiveWebState()->GetView() superview], [bvc_ contentArea]);
+  EXPECT_EQ(ActiveWebState()->GetView().superview, container_.view);
   EXPECT_TRUE(ActiveWebState()->IsVisible());
 }
 
-// TODO(altse): Needs a testing |Profile| that implements AutocompleteClassifier
-//             before enabling again.
-TEST_F(BrowserViewControllerTest, DISABLED_TestShieldWasTapped) {
-  [HandlerForProtocol(browser_->GetCommandDispatcher(), OmniboxCommands)
-      focusOmnibox];
-  EXPECT_TRUE([[bvc_ typingShield] superview] != nil);
-  EXPECT_FALSE([[bvc_ typingShield] isHidden]);
-  [bvc_ shieldWasTapped:nil];
-  EXPECT_TRUE([[bvc_ typingShield] superview] == nil);
-  EXPECT_TRUE([[bvc_ typingShield] isHidden]);
-}
-
 // Verifies that editing the omnimbox while the page is loading will stop the
 // load on a handset, but not stop the load on a tablet.
 TEST_F(BrowserViewControllerTest,
diff --git a/ios/chrome/browser/ui/commands/qr_generation_commands.h b/ios/chrome/browser/ui/commands/qr_generation_commands.h
index 8a4b2eb..5d910cf 100644
--- a/ios/chrome/browser/ui/commands/qr_generation_commands.h
+++ b/ios/chrome/browser/ui/commands/qr_generation_commands.h
@@ -14,9 +14,6 @@
 // Generates a QR code based on the |command| properties and displays it.
 - (void)generateQRCode:(GenerateQRCodeCommand*)command;
 
-// Dismisses the view showing a QR code, if present.
-- (void)hideQRCode;
-
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_COMMANDS_QR_GENERATION_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/download/download_manager_coordinator.mm b/ios/chrome/browser/ui/download/download_manager_coordinator.mm
index d6fed09f..1bf7b0f39 100644
--- a/ios/chrome/browser/ui/download/download_manager_coordinator.mm
+++ b/ios/chrome/browser/ui/download/download_manager_coordinator.mm
@@ -271,6 +271,14 @@
                           confirmTitle:IDS_OK
                            cancelTitle:IDS_CANCEL
                      completionHandler:^(BOOL confirmed) {
+                       if (confirmed) {
+                         base::RecordAction(base::UserMetricsAction(
+                             "IOSDownloadConfirmReplace"));
+                       } else {
+                         base::RecordAction(base::UserMetricsAction(
+                             "IOSDownloadDoNotReplace"));
+                       }
+
                        base::UmaHistogramBoolean("Download.IOSDownloadReplaced",
                                                  confirmed);
                        handler(confirmed ? kNewDownloadPolicyReplace
@@ -313,10 +321,12 @@
     base::UmaHistogramEnumeration("Download.IOSDownloadFileResult",
                                   DownloadFileResult::NotStarted,
                                   DownloadFileResult::Count);
+    base::RecordAction(base::UserMetricsAction("IOSDownloadClose"));
     [self cancelDownload];
     return;
   }
-
+  base::RecordAction(
+      base::UserMetricsAction("IOSDownloadTryCloseWhenInProgress"));
   __weak DownloadManagerCoordinator* weakSelf = self;
   int title = IDS_IOS_DOWNLOAD_MANAGER_CANCEL_CONFIRMATION;
   [self runConfirmationDialogWithTitle:title
@@ -330,13 +340,19 @@
                              DownloadFileResult::Cancelled,
                              DownloadFileResult::Count);
 
+                         base::RecordAction(base::UserMetricsAction(
+                             "IOSDownloadConfirmClose"));
                          [weakSelf cancelDownload];
+                       } else {
+                         base::RecordAction(
+                             base::UserMetricsAction("IOSDownloadDoNotClose"));
                        }
                      }];
 }
 
 - (void)installDriveForDownloadManagerViewController:
     (DownloadManagerViewController*)controller {
+  base::RecordAction(base::UserMetricsAction("IOSDownloadInstallGoogleDrive"));
   [self presentStoreKitForGoogleDriveApp];
 }
 
@@ -345,6 +361,7 @@
   if (_downloadTask->GetErrorCode() != net::OK) {
     base::RecordAction(base::UserMetricsAction("MobileDownloadRetryDownload"));
   } else {
+    base::RecordAction(base::UserMetricsAction("IOSDownloadStartDownload"));
     _unopenedDownloads.Add(_downloadTask);
   }
   _mediator.StartDowloading();
@@ -352,6 +369,7 @@
 
 - (void)presentOpenInForDownloadManagerViewController:
     (DownloadManagerViewController*)controller {
+  base::RecordAction(base::UserMetricsAction("IOSDownloadOpenIn"));
   base::FilePath path = _mediator.GetDownloadPath();
   NSURL* URL = [NSURL fileURLWithPath:base::SysUTF8ToNSString(path.value())];
 
diff --git a/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm b/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
index bca4b33..3af96e4 100644
--- a/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
@@ -340,6 +340,7 @@
   DownloadManagerViewController* viewController =
       base_view_controller_.childViewControllers.firstObject;
   ASSERT_EQ([DownloadManagerViewController class], [viewController class]);
+  ASSERT_EQ(0, user_action_tester_.GetActionCount("IOSDownloadClose"));
   @autoreleasepool {
     // This call will retain coordinator, which should outlive thread bundle.
     [viewController.delegate
@@ -357,6 +358,7 @@
       1);
   histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive",
                                      0);
+  EXPECT_EQ(1, user_action_tester_.GetActionCount("IOSDownloadClose"));
 }
 
 // Tests presenting Install Google Drive dialog. Coordinator presents StoreKit
@@ -377,6 +379,8 @@
   // button changes it's alpha.
   ASSERT_EQ(1.0f, viewController.installDriveButton.superview.alpha);
 
+  ASSERT_EQ(
+      0, user_action_tester_.GetActionCount("IOSDownloadInstallGoogleDrive"));
   @autoreleasepool {
     // This call will retain coordinator, which should outlive thread bundle.
     [viewController.delegate
@@ -393,8 +397,10 @@
     return viewController.installDriveButton.superview.alpha == 0.0f;
   }));
 
-  // Simulate Google Drive app installation and verify that expected user action
-  // has been recorded.
+  // Simulate Google Drive app installation and verify that expected histograms
+  // have been recorded.
+  EXPECT_EQ(
+      1, user_action_tester_.GetActionCount("IOSDownloadInstallGoogleDrive"));
   histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive",
                                      0);
   // SKStoreProductViewController uses UIApplication, so it's not possible to
@@ -438,6 +444,8 @@
         EXPECT_EQ(open_in_controller.excludedActivityTypes.count, 2.0);
       });
 
+  ASSERT_EQ(0, user_action_tester_.GetActionCount("IOSDownloadOpenIn"));
+
   // Present Open In... menu.
   @autoreleasepool {
     // These calls will retain coordinator, which should outlive thread bundle.
@@ -470,6 +478,7 @@
       1);
   histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive",
                                      1);
+  EXPECT_EQ(1, user_action_tester_.GetActionCount("IOSDownloadOpenIn"));
 }
 
 // Tests destroying download task for in progress download.
@@ -570,6 +579,8 @@
   DownloadManagerViewController* viewController =
       base_view_controller_.childViewControllers.firstObject;
   ASSERT_EQ([DownloadManagerViewController class], [viewController class]);
+  ASSERT_EQ(0, user_action_tester_.GetActionCount(
+                   "IOSDownloadTryCloseWhenInProgress"));
   @autoreleasepool {
     // This call will retain coordinator, which should outlive thread bundle.
     [viewController.delegate
@@ -595,6 +606,10 @@
       WaitUntilConditionOrTimeout(base::test::ios::kWaitForUIElementTimeout, ^{
         return !base_view_controller_.presentedViewController;
       }));
+  EXPECT_EQ(1, user_action_tester_.GetActionCount(
+                   "IOSDownloadTryCloseWhenInProgress"));
+  EXPECT_EQ(0, user_action_tester_.GetActionCount("IOSDownloadConfirmClose"));
+  EXPECT_EQ(0, user_action_tester_.GetActionCount("IOSDownloadDoNotClose"));
 }
 
 // Tests downloadManagerTabHelper:decidePolicyForDownload:completionHandler:.
@@ -660,8 +675,9 @@
   EXPECT_TRUE(download_dir.IsParent(file));
 
   histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileInBackground", 0);
-  ASSERT_EQ(0,
+  EXPECT_EQ(0,
             user_action_tester_.GetActionCount("MobileDownloadRetryDownload"));
+  EXPECT_EQ(1, user_action_tester_.GetActionCount("IOSDownloadStartDownload"));
 }
 
 // Tests retrying the download. Verifies that kDownloadManagerRetryDownload UMA
@@ -677,6 +693,7 @@
   DownloadManagerViewController* viewController =
       base_view_controller_.childViewControllers.firstObject;
   ASSERT_EQ([DownloadManagerViewController class], [viewController class]);
+  ASSERT_EQ(0, user_action_tester_.GetActionCount("IOSDownloadStartDownload"));
   @autoreleasepool {
     // This call will retain coordinator, which should outlive thread bundle.
     [viewController.delegate
@@ -684,6 +701,7 @@
   }
   task.SetErrorCode(net::ERR_INTERNET_DISCONNECTED);
   task.SetDone(true);
+  ASSERT_EQ(1, user_action_tester_.GetActionCount("IOSDownloadStartDownload"));
 
   @autoreleasepool {
     // This call will retain coordinator, which should outlive thread bundle.
@@ -708,7 +726,7 @@
       static_cast<base::HistogramBase::Sample>(
           DownloadFileInBackground::FailedWithoutBackgrounding),
       1);
-  ASSERT_EQ(1,
+  EXPECT_EQ(1,
             user_action_tester_.GetActionCount("MobileDownloadRetryDownload"));
 }
 
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm
index 753a4d3..a4107e6 100644
--- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm
@@ -20,6 +20,7 @@
 #include "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_constants.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h"
+#include "ios/chrome/browser/ui/commands/application_commands.h"
 #include "ios/chrome/browser/ui/fancy_ui/primary_action_button.h"
 #import "ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.h"
 #import "ios/chrome/browser/ui/first_run/first_run_constants.h"
@@ -201,10 +202,12 @@
              object:self.coordinator];
     __weak WelcomeToChromeViewController* weakSelf = self;
     self.coordinator.signinCompletion =
-        ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+        ^(SigninCoordinatorResult signinResult,
+          SigninCompletionInfo* signinCompletionInfo) {
           [weakSelf.coordinator stop];
           weakSelf.coordinator = nil;
-          [weakSelf finishFirstRunWithSigninResult:signinResult];
+          [weakSelf finishFirstRunWithSigninResult:signinResult
+                              signinCompletionInfo:signinCompletionInfo];
         };
 
     [self.coordinator start];
@@ -227,7 +230,9 @@
 }
 
 // Completes the first run operation depending on the |signinResult| state.
-- (void)finishFirstRunWithSigninResult:(SigninCoordinatorResult)signinResult {
+- (void)finishFirstRunWithSigninResult:(SigninCoordinatorResult)signinResult
+                  signinCompletionInfo:
+                      (SigninCompletionInfo*)signinCompletionInfo {
   switch (signinResult) {
     case SigninCoordinatorResultSuccess: {
       // User is considered done with First Run only after successful sign-in.
@@ -251,10 +256,20 @@
       NOTREACHED();
     }
   }
+  UIViewController* presentingViewController =
+      self.navigationController.presentingViewController;
+  BOOL needsAvancedSettingsSignin =
+      signinCompletionInfo.signinCompletionAction ==
+      SigninCompletionActionShowAdvancedSettingsSignin;
   [self.navigationController.presentingViewController
       dismissViewControllerAnimated:YES
                          completion:^{
                            FirstRunDismissed();
+                           if (needsAvancedSettingsSignin) {
+                             [self.dispatcher
+                                 showAdvancedSigninSettingsFromViewController:
+                                     presentingViewController];
+                           }
                          }];
 }
 
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm
index 2d10697..42f98bc 100644
--- a/ios/chrome/browser/ui/main/scene_controller.mm
+++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -526,7 +526,7 @@
                                                       browser:browser];
       __weak SceneController* weakSelf = self;
       self.signinCoordinator.signinCompletion =
-          ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+          ^(SigninCoordinatorResult signinResult, SigninCompletionInfo*) {
             [weakSelf.signinCoordinator stop];
             weakSelf.signinCoordinator = nil;
           };
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn
index 0a1daea..5728ca1 100644
--- a/ios/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -241,8 +241,8 @@
   sources = [ "new_tab_page_perftest.mm" ]
   deps = [
     "//base/test:test_support",
+    "//ios/chrome/browser/main",
     "//ios/chrome/browser/sessions",
-    "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/test:perf_test_support",
     "//ios/chrome/browser/ui/browser_view",
     "//ios/chrome/browser/ui/commands",
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_perftest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_perftest.mm
index ae6c1819..eabf327c 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_perftest.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_perftest.mm
@@ -3,13 +3,14 @@
 // found in the LICENSE file.
 
 #import "base/test/ios/wait_util.h"
+#import "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
-#import "ios/chrome/browser/tabs/tab_model.h"
 #include "ios/chrome/browser/test/perf_test_with_bvc_ios.h"
 #import "ios/chrome/browser/ui/browser_view/browser_view_controller.h"
 #import "ios/chrome/browser/ui/browser_view/browser_view_controller_dependency_factory.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
+#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -40,7 +41,9 @@
   }
   base::TimeDelta TimedNewTab() {
     base::Time startTime = base::Time::NowFromSystemTime();
-    [[bvc_ dispatcher] openURLInNewTab:[OpenNewTabCommand command]];
+    id<ApplicationCommands> open_url_handler = HandlerForProtocol(
+        browser_->GetCommandDispatcher(), ApplicationCommands);
+    [open_url_handler openURLInNewTab:[OpenNewTabCommand command]];
     return base::Time::NowFromSystemTime() - startTime;
   }
   void SettleUI() {
diff --git a/ios/chrome/browser/ui/qr_generator/BUILD.gn b/ios/chrome/browser/ui/qr_generator/BUILD.gn
deleted file mode 100644
index b43a487..0000000
--- a/ios/chrome/browser/ui/qr_generator/BUILD.gn
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2020 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("ui") {
-  configs += [ "//build/config/compiler:enable_arc" ]
-  sources = [
-    "qr_generator_view_controller.h",
-    "qr_generator_view_controller.mm",
-  ]
-  deps = [
-    "//base",
-    "//ios/chrome/browser/ui/commands",
-    "//ios/chrome/common/ui/colors",
-    "//ui/base",
-    "//url:url",
-  ]
-  libs = [ "UIKit.framework" ]
-}
-
-source_set("qr_generator") {
-  configs += [ "//build/config/compiler:enable_arc" ]
-  sources = [
-    "qr_generator_coordinator.h",
-    "qr_generator_coordinator.mm",
-  ]
-  deps = [
-    ":ui",
-    "//base",
-    "//ios/chrome/browser/main:public",
-    "//ios/chrome/browser/ui/commands",
-    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
-  ]
-}
-
-source_set("unit_tests") {
-  configs += [ "//build/config/compiler:enable_arc" ]
-  testonly = true
-  sources = [ "qr_generator_view_controller_unittest.mm" ]
-  deps = [
-    ":ui",
-    "//base",
-    "//base/test:test_support",
-    "//ios/chrome/browser/ui/commands",
-    "//ios/chrome/common/ui/colors",
-    "//ios/chrome/test/fakes",
-    "//ios/web",
-    "//ios/web/public/test",
-    "//testing/gtest",
-    "//third_party/ocmock",
-    "//ui/base",
-  ]
-}
diff --git a/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.h b/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.h
deleted file mode 100644
index 7130b58..0000000
--- a/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_COORDINATOR_H_
-
-#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
-#include "url/gurl.h"
-
-// QRGeneratorCoordinator presents the public interface for the QR code
-// generation feature.
-@interface QRGeneratorCoordinator : ChromeCoordinator
-
-// Initializes an instance with a base |viewController|, the current |browser|,
-// the |title| and |URL| of a webpage to generate a QR code for.
-- (instancetype)initWithBaseViewController:(UIViewController*)viewController
-                                   browser:(Browser*)browser
-                                     title:(NSString*)title
-                                       URL:(const GURL&)URL
-    NS_DESIGNATED_INITIALIZER;
-
-// Unavailable, use -initWithBaseViewController:browser:title:URL:.
-- (instancetype)initWithBaseViewController:(UIViewController*)viewController
-                              browserState:(ChromeBrowserState*)browserState
-    NS_UNAVAILABLE;
-
-// Unavailable, use -initWithBaseViewController:browser:title:URL:.
-- (instancetype)initWithBaseViewController:(UIViewController*)viewController
-                                   browser:(Browser*)browser NS_UNAVAILABLE;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.mm b/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.mm
deleted file mode 100644
index 1788e47..0000000
--- a/ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.mm
+++ /dev/null
@@ -1,82 +0,0 @@
-
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/ui/qr_generator/qr_generator_coordinator.h"
-
-#include "ios/chrome/browser/main/browser.h"
-#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
-#import "ios/chrome/browser/ui/commands/qr_generation_commands.h"
-#import "ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-@interface QRGeneratorCoordinator () {
-  // URL of a page to generate a QR code for.
-  GURL _URL;
-}
-
-// To be used to dispatch commands to the browser.
-@property(nonatomic, strong) CommandDispatcher* dispatcher;
-
-// Main view controller which will be the parent, or ancestor, of other
-// view controllers related to this feature.
-@property(nonatomic, strong) UINavigationController* viewController;
-
-// View controller used to display the QR code and actions.
-@property(nonatomic, strong)
-    QRGeneratorViewController* qrGeneratorViewController;
-
-// Title of a page to generate a QR code for.
-@property(nonatomic, copy) NSString* title;
-
-@end
-
-@implementation QRGeneratorCoordinator
-
-- (instancetype)initWithBaseViewController:(UIViewController*)viewController
-                                   browser:(Browser*)browser
-                                     title:(NSString*)title
-                                       URL:(const GURL&)URL {
-  if (self = [super initWithBaseViewController:viewController
-                                       browser:browser]) {
-    _title = title;
-    _URL = URL;
-  }
-  return self;
-}
-
-#pragma mark - Chrome Coordinator
-
-- (void)start {
-  self.dispatcher = self.browser->GetCommandDispatcher();
-
-  self.qrGeneratorViewController = [[QRGeneratorViewController alloc] init];
-  self.qrGeneratorViewController.handler =
-      HandlerForProtocol(self.dispatcher, QRGenerationCommands);
-
-  self.viewController = [[UINavigationController alloc]
-      initWithRootViewController:self.qrGeneratorViewController];
-  [self.viewController setModalPresentationStyle:UIModalPresentationFormSheet];
-
-  [self.baseViewController presentViewController:self.viewController
-                                        animated:YES
-                                      completion:nil];
-  [super start];
-}
-
-- (void)stop {
-  [self.viewController.presentingViewController
-      dismissViewControllerAnimated:YES
-                         completion:nil];
-
-  self.qrGeneratorViewController = nil;
-  self.viewController = nil;
-
-  [super stop];
-}
-
-@end
diff --git a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h b/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h
deleted file mode 100644
index 0039158..0000000
--- a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_VIEW_CONTROLLER_H_
-
-#import "ios/chrome/browser/ui/commands/qr_generation_commands.h"
-
-#import <UIKit/UIKit.h>
-
-// View controller that displays a QR code representing a given website.
-@interface QRGeneratorViewController : UIViewController
-
-// Command handler for communicating with other components of the app.
-@property(nonatomic, weak) id<QRGenerationCommands> handler;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_QR_GENERATOR_QR_GENERATOR_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.mm b/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.mm
deleted file mode 100644
index e3a0a04..0000000
--- a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.mm
+++ /dev/null
@@ -1,49 +0,0 @@
-
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h"
-
-#import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-NSString* const kQRGeneratorDoneButtonId = @"kQRGeneratorDoneButtonId";
-
-@implementation QRGeneratorViewController
-
-#pragma mark - UIViewController
-
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
-  [self setUpNavigation];
-}
-
-#pragma mark - Private Methods
-
-- (void)setUpNavigation {
-  // Set shadowImage to an empty image to remove the separator between the
-  // navigation bar and the main content.
-  self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
-
-  // Set background color.
-  [self.navigationController.navigationBar setTranslucent:NO];
-  [self.navigationController.navigationBar
-      setBarTintColor:UIColor.cr_systemBackgroundColor];
-  [self.navigationController.view
-      setBackgroundColor:UIColor.cr_systemBackgroundColor];
-
-  // Add a Done button to the navigation bar.
-  UIBarButtonItem* doneButton = [[UIBarButtonItem alloc]
-      initWithBarButtonSystemItem:UIBarButtonSystemItemDone
-                           target:self.handler
-                           action:@selector(hideQRCode)];
-  doneButton.accessibilityIdentifier = kQRGeneratorDoneButtonId;
-  self.navigationItem.rightBarButtonItem = doneButton;
-}
-
-@end
diff --git a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller_unittest.mm b/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller_unittest.mm
deleted file mode 100644
index af441ee..0000000
--- a/ios/chrome/browser/ui/qr_generator/qr_generator_view_controller_unittest.mm
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/ui/qr_generator/qr_generator_view_controller.h"
-
-#import "ios/chrome/browser/ui/commands/qr_generation_commands.h"
-#import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h"
-#include "testing/platform_test.h"
-#import "third_party/ocmock/OCMock/OCMock.h"
-#include "url/gurl.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-class QRGeneratorViewControllerTest : public PlatformTest {
- public:
-  QRGeneratorViewControllerTest()
-      : view_controller_([[QRGeneratorViewController alloc] init]) {}
-
- protected:
-  QRGeneratorViewController* view_controller_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(QRGeneratorViewControllerTest);
-};
-
-// Tests the navigation controller's background is properly set-up.
-TEST_F(QRGeneratorViewControllerTest, NavigationController_Background) {
-  UIColor* backgroundColor = UIColor.cr_systemBackgroundColor;
-  id mockNavController = OCMStrictClassMock([UINavigationController class]);
-
-  id mockNavBar = OCMStrictClassMock([UINavigationBar class]);
-  OCMStub([mockNavController navigationBar]).andReturn(mockNavBar);
-  [[mockNavBar expect] setBarTintColor:backgroundColor];
-  [[mockNavBar expect] setTranslucent:NO];
-  [[mockNavBar expect] setShadowImage:[[UIImage alloc] init]];
-
-  id mockNavView = OCMStrictClassMock([UIView class]);
-  OCMStub([mockNavController view]).andReturn(mockNavView);
-  [[mockNavView expect] setBackgroundColor:backgroundColor];
-
-  id vcPartialMock = OCMPartialMock(view_controller_);
-  OCMStub([vcPartialMock navigationController]).andReturn(mockNavController);
-
-  [view_controller_ viewDidLoad];
-
-  [mockNavView verify];
-  [mockNavBar verify];
-}
-
-// Tests that a Done button gets added to the navigation bar, and its action
-// dispatches the right command.
-TEST_F(QRGeneratorViewControllerTest, DoneButton_DispatchesCommand) {
-  // Set-up mocked handler.
-  id mockedHandler = OCMStrictProtocolMock(@protocol(QRGenerationCommands));
-  [[mockedHandler expect] hideQRCode];
-  [view_controller_ setHandler:mockedHandler];
-
-  // Set-up mocked navigation item.
-  __block UIBarButtonItem* capturedButton;
-  id navItemMock = OCMStrictClassMock([UINavigationItem class]);
-  [[navItemMock expect]
-      setRightBarButtonItem:[OCMArg
-                                checkWithBlock:^BOOL(UIBarButtonItem* button) {
-                                  capturedButton = button;
-                                  return !!capturedButton;
-                                }]];
-
-  id vcPartialMock = OCMPartialMock(view_controller_);
-  OCMStub([vcPartialMock navigationItem]).andReturn(navItemMock);
-
-  [view_controller_ viewDidLoad];
-
-  // Button should've been given to the navigationItem.
-  [navItemMock verify];
-
-  // Simulate a click on the button.
-  [[UIApplication sharedApplication] sendAction:capturedButton.action
-                                             to:capturedButton.target
-                                           from:nil
-                                       forEvent:nil];
-
-  // Callback should've gotten invoked.
-  [mockedHandler verify];
-}
diff --git a/ios/chrome/browser/ui/signin_interaction/signin_interaction_coordinator.mm b/ios/chrome/browser/ui/signin_interaction/signin_interaction_coordinator.mm
index 72d0d30d..a8054b9 100644
--- a/ios/chrome/browser/ui/signin_interaction/signin_interaction_coordinator.mm
+++ b/ios/chrome/browser/ui/signin_interaction/signin_interaction_coordinator.mm
@@ -71,7 +71,7 @@
 
     __weak SigninInteractionCoordinator* weakSelf = self;
     self.coordinator.signinCompletion =
-        ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+        ^(SigninCoordinatorResult signinResult, SigninCompletionInfo*) {
           if (completion) {
             completion(signinResult == SigninCoordinatorResultSuccess);
           }
@@ -110,7 +110,7 @@
 
     __weak SigninInteractionCoordinator* weakSelf = self;
     self.coordinator.signinCompletion =
-        ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+        ^(SigninCoordinatorResult signinResult, SigninCompletionInfo*) {
           if (completion) {
             completion(signinResult == SigninCoordinatorResultSuccess);
           }
@@ -145,7 +145,7 @@
 
   __weak SigninInteractionCoordinator* weakSelf = self;
   self.coordinator.signinCompletion =
-      ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+      ^(SigninCoordinatorResult signinResult, SigninCompletionInfo*) {
         if (completion) {
           completion(signinResult == SigninCoordinatorResultSuccess);
         }
@@ -309,7 +309,7 @@
                                                       browser:self.browser];
   __weak SigninInteractionCoordinator* weakSelf = self;
   self.coordinator.signinCompletion =
-      ^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
+      ^(SigninCoordinatorResult signinResult, SigninCompletionInfo*) {
         [weakSelf advancedSigninDoneWithSigninResult:signinResult];
       };
   [self.coordinator start];
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
index 61e9a048..dc779cc 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">በChrome ውስጥ ያስቀመጧቸው የሁሉም ይለፍ ቃላት መዳረሻ ያግኙ። በማንኛውም መተግበሪያ ውስጥ። በማንኛውም ጊዜ።</translation>
 <translation id="3660601625129812825">የChrome ይለፍ ቃላትን በራስ-ሙላ</translation>
 <translation id="4695654165345019650">የይለፍ ቃላትን መድረስ...</translation>
+<translation id="5178539339249989017">ምንም የፍለጋ ውጤቶች አልተገኙም</translation>
 <translation id="5313485577007399362">ራስ-ሙላን ያንቁ...</translation>
 <translation id="6494101196118320406">የChrome ይለፍ ቃላት የሉም</translation>
 <translation id="6846906712230932330">የይለፍ ቃላትን ለመጠቀም በመጀመሪያ በመሣሪያዎ ላይ የይለፍ ኮድ ማቀናበር አለብዎት።</translation>
 <translation id="6965382102122355670">እሺ</translation>
 <translation id="7870350829250847712">የChrome ይለፍ ቃላት የሉም</translation>
+<translation id="8208791657167738630">ሁሉም የይለፍ ቃላት</translation>
 <translation id="8602573493531049509">እንዴት እንደሆነ ይወቁ</translation>
+<translation id="8982444110803529242">በጥቆማ ሐሳብ የቀረቡ የይለፍ ቃላት</translation>
 <translation id="9087836967653912639">ይቅር</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
index 89590c4..8c66272 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">‏الحصول على إذن بالوصول إلى جميع كلمات المرور المحفوظة في Chrome في أي تطبيق، وفي أي وقت</translation>
 <translation id="3660601625129812825">‏الملء التلقائي لكلمات المرور في Chrome</translation>
 <translation id="4695654165345019650">الوصول إلى كلمات المرور...</translation>
+<translation id="5178539339249989017">لم يتم العثور على أي نتائج بحث.</translation>
 <translation id="5313485577007399362">تفعيل الملء التلقائي...</translation>
 <translation id="6494101196118320406">‏ما مِن كلمات مرور في Chrome</translation>
 <translation id="6846906712230932330">لاستخدام كلمات المرور، يجب عليك أولاً إعداد رمز مرور على جهازك.</translation>
 <translation id="6965382102122355670">حسنًا</translation>
 <translation id="7870350829250847712">‏ما مِن كلمات مرور في Chrome</translation>
+<translation id="8208791657167738630">جميع كلمات المرور</translation>
 <translation id="8602573493531049509">تعرَّف على الطريقة</translation>
+<translation id="8982444110803529242">كلمات المرور المقترَحة</translation>
 <translation id="9087836967653912639">إلغاء</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
index 93d1eb59..0ae34fc 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome'da saxladığınız bütün parollara giriş əldə edin. İstənilən tətbiqdə. İstənilən vaxt.</translation>
 <translation id="3660601625129812825">Chrome Parollarını Avtomatik Doldurun</translation>
 <translation id="4695654165345019650">Parollara Giriş...</translation>
+<translation id="5178539339249989017">Heç bir axtarış nəticəsi tapılmadı</translation>
 <translation id="5313485577007399362">Avtomatik doldurmanı aktivləşdirin...</translation>
 <translation id="6494101196118320406">Chrome Parolu Yoxdur</translation>
 <translation id="6846906712230932330">Parollardan istifadə etmək üçün əvvəlcə cihazınızda parol təyin etməlisiniz.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome Parolu Yoxdur</translation>
+<translation id="8208791657167738630">Bütün parollar</translation>
 <translation id="8602573493531049509">İstifadə qaydasını öyrənin</translation>
+<translation id="8982444110803529242">Təklif edilən parollar</translation>
 <translation id="9087836967653912639">Ləğv edin</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
index 2fac3b9..8ad5baa 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Доступ да ўсіх пароляў, захаваных у браўзеры Chrome, – у любой праграме, у любы час.</translation>
 <translation id="3660601625129812825">Уключыце функцыю аўтазапаўнення для пароляў Chrome</translation>
 <translation id="4695654165345019650">Паролі доступу...</translation>
+<translation id="5178539339249989017">Няма вынікаў пошуку</translation>
 <translation id="5313485577007399362">Уключыць Аўтазапаўненне...</translation>
 <translation id="6494101196118320406">Няма пароляў Chrome</translation>
 <translation id="6846906712230932330">Каб выкарыстоўваць паролі, на прыладзе трэба спачатку наладзіць блакіроўку экрана.</translation>
 <translation id="6965382102122355670">ОК</translation>
 <translation id="7870350829250847712">Няма пароляў Chrome</translation>
+<translation id="8208791657167738630">Усе паролі</translation>
 <translation id="8602573493531049509">Даведацца больш</translation>
+<translation id="8982444110803529242">Прапанаваныя паролі</translation>
 <translation id="9087836967653912639">Скасаваць</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
index a885745..fc24332 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Získejte přístup ke všem heslům, která si uložíte do Chromu. V jakékoli aplikaci. Kdykoli.</translation>
 <translation id="3660601625129812825">Automatické vyplňování hesel Chromu</translation>
 <translation id="4695654165345019650">Přístup k heslům...</translation>
+<translation id="5178539339249989017">Nebyly nalezeny žádné výsledky</translation>
 <translation id="5313485577007399362">Aktivovat Automatické vyplňování…</translation>
 <translation id="6494101196118320406">V Chromu nemáte žádná hesla</translation>
 <translation id="6846906712230932330">Chcete-li použít hesla, musíte nejdříve na zařízení nastavit heslo.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">V Chromu nemáte žádná hesla</translation>
+<translation id="8208791657167738630">Všechna hesla</translation>
 <translation id="8602573493531049509">Postup</translation>
+<translation id="8982444110803529242">Návrhy hesel</translation>
 <translation id="9087836967653912639">Zrušit</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb
index b227b0f3..bd7eda7 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Sie erhalten Zugriff auf alle Passwörter, die Sie in Chrome speichern. In jeder App, jederzeit.</translation>
 <translation id="3660601625129812825">Chrome-Passwörter automatisch ausfüllen</translation>
 <translation id="4695654165345019650">Auf Passwörter zugreifen…</translation>
+<translation id="5178539339249989017">Keine Suchergebnisse gefunden</translation>
 <translation id="5313485577007399362">"Autom. ausfüllen" aktivieren…</translation>
 <translation id="6494101196118320406">Keine Chrome-Passwörter</translation>
 <translation id="6846906712230932330">Sie müssen zuerst einen Sicherheitscode auf Ihrem Gerät einrichten, um Passwörter zu verwenden.</translation>
 <translation id="6965382102122355670">Ok</translation>
 <translation id="7870350829250847712">Keine Chrome-Passwörter</translation>
+<translation id="8208791657167738630">Alle Passwörter</translation>
 <translation id="8602573493531049509">Weitere Informationen</translation>
+<translation id="8982444110803529242">Vorgeschlagene Passwörter</translation>
 <translation id="9087836967653912639">Abbrechen</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
index 5e350dcb..4d09b1e 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Accede a todas las contraseñas que guardas en Chrome, desde cualquier app y en cualquier momento.</translation>
 <translation id="3660601625129812825">Autocompletar las contraseñas de Chrome</translation>
 <translation id="4695654165345019650">Contraseñas de acceso…</translation>
+<translation id="5178539339249989017">No se encontraron resultados en la búsqueda</translation>
 <translation id="5313485577007399362">Habilitar Autocompletar…</translation>
 <translation id="6494101196118320406">No hay contraseñas en Chrome</translation>
 <translation id="6846906712230932330">Para usar contraseñas, primero debes establecer una en tu dispositivo.</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="7870350829250847712">No hay contraseñas en Chrome</translation>
+<translation id="8208791657167738630">Todas las contraseñas</translation>
 <translation id="8602573493531049509">Más información</translation>
+<translation id="8982444110803529242">Contraseñas sugeridas</translation>
 <translation id="9087836967653912639">Cancelar</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb
index 41e05ec69..b084aa4 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Accede a todas las contraseñas que hayas guardado en Chrome. Desde cualquier aplicación y en cualquier momento.</translation>
 <translation id="3660601625129812825">Permite el autorelleno de contraseñas de Chrome</translation>
 <translation id="4695654165345019650">Acceder a contraseñas...</translation>
+<translation id="5178539339249989017">No se han encontrado resultados de búsqueda</translation>
 <translation id="5313485577007399362">Habilitar Autorrelleno...</translation>
 <translation id="6494101196118320406">No hay contraseñas de Chrome</translation>
 <translation id="6846906712230932330">Para usar las contraseñas, primero debes establecer una contraseña en tu dispositivo.</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="7870350829250847712">No hay contraseñas de Chrome</translation>
+<translation id="8208791657167738630">Todas las contraseñas</translation>
 <translation id="8602573493531049509">Más información</translation>
+<translation id="8982444110803529242">Contraseñas sugeridas</translation>
 <translation id="9087836967653912639">Cancelar</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
index 1163de0..3564bfa 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Hankige juurdepääs kõigile paroolidele, mille Chrome'is salvestate. Igas rakenduses, igal ajal.</translation>
 <translation id="3660601625129812825">Chrome'i paroolide automaatne täitmine</translation>
 <translation id="4695654165345019650">Juurdepääs paroolidele …</translation>
+<translation id="5178539339249989017">Otsingutulemusi ei leitud</translation>
 <translation id="5313485577007399362">Automaatse täitmise lubamine …</translation>
 <translation id="6494101196118320406">Chrome'i paroole pole</translation>
 <translation id="6846906712230932330">Paroolide kasutamiseks peate oma seadmes esmalt pääsukoodi seadistama.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome'i paroole pole</translation>
+<translation id="8208791657167738630">Kõik paroolid</translation>
 <translation id="8602573493531049509">Juhised</translation>
+<translation id="8982444110803529242">Soovitatud paroolid</translation>
 <translation id="9087836967653912639">Tühista</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb
index 0f416e53..2b66bd6f 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Atzitu Chrome-n gordeta dauzkazun pasahitz guztiak. Edozein aplikaziotatik, edonoiz.</translation>
 <translation id="3660601625129812825">Bete automatikoki Chrome-ko pasahitzak</translation>
 <translation id="4695654165345019650">Atzitu pasahitzak…</translation>
+<translation id="5178539339249989017">Ez da aurkitu bilaketa-emaitzarik</translation>
 <translation id="5313485577007399362">Gaitu betetze automatikoa...</translation>
 <translation id="6494101196118320406">Ez dago pasahitzik Chrome-n</translation>
 <translation id="6846906712230932330">Pasahitzak erabiltzeko, lehenik, pasakode bat ezarri behar duzu gailuan.</translation>
 <translation id="6965382102122355670">Ados</translation>
 <translation id="7870350829250847712">Ez dago pasahitzik Chrome-n</translation>
+<translation id="8208791657167738630">Pasahitz guztiak</translation>
 <translation id="8602573493531049509">Lortu argibideak</translation>
+<translation id="8982444110803529242">Iradokitako pasahitzak</translation>
 <translation id="9087836967653912639">Utzi</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb
index 5c29da1..109a115 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">‏به همه گذرواژه‌هایی که در Chrome ذخیره می‌کنید دسترسی داشته باشید. در هر برنامه‌ای. هرزمانی.</translation>
 <translation id="3660601625129812825">‏تکمیل خودکار گذرواژه‌های Chrome</translation>
 <translation id="4695654165345019650">دسترسی به گذرواژه‌ها…</translation>
+<translation id="5178539339249989017">هیچ نتیجه‌ای برای جستجو یافت نشد</translation>
 <translation id="5313485577007399362">فعال کردن «تکمیل خودکار»…</translation>
 <translation id="6494101196118320406">‏گذرواژه‌ای در Chrome نیست</translation>
 <translation id="6846906712230932330">برای استفاده از گذرواژه‌ها، ابتدا باید گذرنویسه‌ای در دستگاه تنظیم کنید.</translation>
 <translation id="6965382102122355670">قبول</translation>
 <translation id="7870350829250847712">‏گذرواژه‌ای در Chrome نیست</translation>
+<translation id="8208791657167738630">همه گذرواژه‌ها</translation>
 <translation id="8602573493531049509">با نحوه انجام کار آشنا شوید</translation>
+<translation id="8982444110803529242">گذرواژه‌های پیشنهادشده</translation>
 <translation id="9087836967653912639">لغو</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
index a3f6d292..d7ba500 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Saat kaikki Chromessa tallentamasi salasanat käyttöön. Kaikissa sovelluksissa. Milloin tahansa.</translation>
 <translation id="3660601625129812825">Chromen automaattisen täytön salasanat</translation>
 <translation id="4695654165345019650">Käytä salasanoja…</translation>
+<translation id="5178539339249989017">Ei hakutuloksia</translation>
 <translation id="5313485577007399362">Ota automaattinen täyttö käyttöön…</translation>
 <translation id="6494101196118320406">Ei Chrome-salasanoja</translation>
 <translation id="6846906712230932330">Salasanojen käyttöä varten sinun on ensin asetettava laitteellesi tunnuskoodi.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Ei Chrome-salasanoja</translation>
+<translation id="8208791657167738630">Kaikki salasanat</translation>
 <translation id="8602573493531049509">Lisätietoja</translation>
+<translation id="8982444110803529242">Ehdotetut salasanat</translation>
 <translation id="9087836967653912639">Peruuta</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
index 47314f5..00a4b2d 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Magkaroon ng access sa lahat ng password na sine-save mo sa Chrome. Sa anumang app. Anumang oras.</translation>
 <translation id="3660601625129812825">I-autoFill ang Mga Password sa Chrome</translation>
 <translation id="4695654165345019650">I-access ang Mga Password...</translation>
+<translation id="5178539339249989017">Walang nakitang resulta ng paghahanap</translation>
 <translation id="5313485577007399362">I-enable ang AutoFill...</translation>
 <translation id="6494101196118320406">Walang Password sa Chrome</translation>
 <translation id="6846906712230932330">Para gumamit ng mga password, dapat ka munang magtakda ng passcode sa iyong device.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Walang Password sa Chrome</translation>
+<translation id="8208791657167738630">Lahat ng Password</translation>
 <translation id="8602573493531049509">Alamin Kung Paano</translation>
+<translation id="8982444110803529242">Mga Iminumungkahing Password</translation>
 <translation id="9087836967653912639">Kanselahin</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
index 742bfdc..945f5866 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Obtenez l'accès à tous les mots de passe que vous enregistrez dans Chrome. Dans toutes les applications. En tout temps.</translation>
 <translation id="3660601625129812825">Remplir automatiquement les mots de passe de Chrome</translation>
 <translation id="4695654165345019650">Accès aux mots de passe en cours…</translation>
+<translation id="5178539339249989017">Aucun résultat de recherche n'a été trouvé</translation>
 <translation id="5313485577007399362">Activer le remplissage automatique</translation>
 <translation id="6494101196118320406">Aucun mot de passe Chrome</translation>
 <translation id="6846906712230932330">Pour utiliser vos mots de passe, vous devez d'abord définir un mot de passe sur votre appareil.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Aucun mot de passe Chrome</translation>
+<translation id="8208791657167738630">Tous les mots de passe</translation>
 <translation id="8602573493531049509">Découvrir comment</translation>
+<translation id="8982444110803529242">Mots de passe suggérés</translation>
 <translation id="9087836967653912639">Annuler</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb
index ba57b31..6c423d05 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Accédez à tous les mots de passe que vous enregistrez dans Chrome, à tout moment et quelle que soit l'application.</translation>
 <translation id="3660601625129812825">Remplir automatiquement les mots de passe Chrome</translation>
 <translation id="4695654165345019650">Accéder aux mots de passe…</translation>
+<translation id="5178539339249989017">Aucun résultat de recherche n'a été trouvé</translation>
 <translation id="5313485577007399362">Activer la saisie automatique…</translation>
 <translation id="6494101196118320406">Aucun mot de passe Chrome</translation>
 <translation id="6846906712230932330">Pour utiliser les mots de passe, vous devez d'abord définir un code secret sur votre appareil.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Aucun mot de passe Chrome</translation>
+<translation id="8208791657167738630">Tous les mots de passe</translation>
 <translation id="8602573493531049509">En savoir plus</translation>
+<translation id="8982444110803529242">Mots de passe suggérés</translation>
 <translation id="9087836967653912639">Annuler</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb
index ef813b0..8784f1b3 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Accede desde calquera aplicación e en calquera momento a todos os contrasinais gardados en Chrome.</translation>
 <translation id="3660601625129812825">Autocompletar os contrasinais de Chrome</translation>
 <translation id="4695654165345019650">Acceso aos contrasinais…</translation>
+<translation id="5178539339249989017">Non se encontraron resultados de busca</translation>
 <translation id="5313485577007399362">Activar autocompletar…</translation>
 <translation id="6494101196118320406">Non hai ningún contrasinal de Chrome</translation>
 <translation id="6846906712230932330">Para usar os contrasinais, en primeiro lugar debes definir un contrasinal no teu dispositivo.</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="7870350829250847712">Non hai ningún contrasinal de Chrome</translation>
+<translation id="8208791657167738630">Todos os contrasinais</translation>
 <translation id="8602573493531049509">Máis información</translation>
+<translation id="8982444110803529242">Contrasinais suxeridos</translation>
 <translation id="9087836967653912639">Cancelar</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb
index 715c13f8..c03bcdd 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome में सेव किए गए अपने सभी पासवर्ड का ऐक्सेस पाएं. किसी भी ऐप्लिकेशन में. किसी भी समय.</translation>
 <translation id="3660601625129812825">Chrome पासवर्ड ऑटोमैटिक तरीके से भरें</translation>
 <translation id="4695654165345019650">पासवर्ड ऐक्सेस करें...</translation>
+<translation id="5178539339249989017">खोज का कोई भी नतीजा नहीं मिला</translation>
 <translation id="5313485577007399362">ऑटोमैटिक भरने की सुविधा चालू करें...</translation>
 <translation id="6494101196118320406">कोई भी Chrome पासवर्ड नहीं है</translation>
 <translation id="6846906712230932330">पासवर्ड इस्तेमाल करने के लिए, आपको सबसे पहले अपने डिवाइस पर एक पासवर्ड सेट करना होगा.</translation>
 <translation id="6965382102122355670">ठीक है</translation>
 <translation id="7870350829250847712">कोई भी Chrome पासवर्ड नहीं है</translation>
+<translation id="8208791657167738630">सभी पासवर्ड</translation>
 <translation id="8602573493531049509">तरीका जानें</translation>
+<translation id="8982444110803529242">सुझाए गए पासवर्ड</translation>
 <translation id="9087836967653912639">रद्द करें</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
index 4eade869..8f668a7 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Dapatkan akses ke semua sandi yang Anda simpan di Chrome. Di aplikasi apa saja. Kapan saja.</translation>
 <translation id="3660601625129812825">Isi Otomatis Sandi Chrome</translation>
 <translation id="4695654165345019650">Akses Sandi ...</translation>
+<translation id="5178539339249989017">Hasil penelusuran tidak ditemukan</translation>
 <translation id="5313485577007399362">Aktifkan Isi Otomatis...</translation>
 <translation id="6494101196118320406">Tidak Ada Sandi Chrome</translation>
 <translation id="6846906712230932330">Untuk menggunakan sandi, Anda harus menyetel kode sandi di perangkat terlebih dahulu.</translation>
 <translation id="6965382102122355670">Oke</translation>
 <translation id="7870350829250847712">Tidak Ada Sandi Chrome</translation>
+<translation id="8208791657167738630">Semua Sandi</translation>
 <translation id="8602573493531049509">Pelajari Caranya</translation>
+<translation id="8982444110803529242">Sandi yang Disarankan</translation>
 <translation id="9087836967653912639">Batal</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb
index d680e60e..f9456c093 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome で保存したすべてのパスワードにはいつでもどのアプリからでもアクセスできます。</translation>
 <translation id="3660601625129812825">Chrome のパスワード自動入力</translation>
 <translation id="4695654165345019650">パスワードにアクセスしています...</translation>
+<translation id="5178539339249989017">一致する結果は見つかりませんでした</translation>
 <translation id="5313485577007399362">自動入力を有効にする...</translation>
 <translation id="6494101196118320406">Chrome パスワードはありません</translation>
 <translation id="6846906712230932330">パスワードを使用するには、まずデバイスにパスコードを設定する必要があります。</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome パスワードはありません</translation>
+<translation id="8208791657167738630">すべてのパスワード</translation>
 <translation id="8602573493531049509">詳細</translation>
+<translation id="8982444110803529242">パスワードの候補</translation>
 <translation id="9087836967653912639">キャンセル</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb
index b0691fc..97c1cf4 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome браузерінде сақталған барлық құпия сөзді пайдаланыңыз. Оларды кез келген қолданбада және уақытта пайдалана аласыз.</translation>
 <translation id="3660601625129812825">Chrome құпия сөздерін автотолтыру</translation>
 <translation id="4695654165345019650">Құпия сөздерге кіріңіз...</translation>
+<translation id="5178539339249989017">Іздеу нәтижелері табылмады.</translation>
 <translation id="5313485577007399362">Автотолтыруды қосу...</translation>
 <translation id="6494101196118320406">Chrome құпия сөздері жоқ</translation>
 <translation id="6846906712230932330">Құпия сөздерді пайдалану үшін алдымен құрылғыға рұқсат кодын орнату керек.</translation>
 <translation id="6965382102122355670">Жарайды</translation>
 <translation id="7870350829250847712">Chrome құпия сөздері жоқ</translation>
+<translation id="8208791657167738630">Барлық құпия сөздер</translation>
 <translation id="8602573493531049509">Әдісін білу</translation>
+<translation id="8982444110803529242">Ұсынылатын құпия сөздер</translation>
 <translation id="9087836967653912639">Бас тарту</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
index cc310c4..bd285c8 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">មានសិទ្ធិ​ចូលប្រើ​ពាក្យសម្ងាត់​ទាំងអស់ ដែលអ្នក​រក្សាទុក​នៅក្នុង Chrome។ គ្រប់​កម្មវិធី និង​គ្រប់ពេលវេលា។</translation>
 <translation id="3660601625129812825">បំពេញ​ពាក្យសម្ងាត់ Chrome ដោយ​ស្វ័យប្រវត្តិ</translation>
 <translation id="4695654165345019650">ចូលប្រើ​ពាក្យសម្ងាត់...</translation>
+<translation id="5178539339249989017">រកមិនឃើញលទ្ធផលស្វែងរកទេ</translation>
 <translation id="5313485577007399362">បើក​ការបំពេញ​ស្វ័យប្រវត្តិ...</translation>
 <translation id="6494101196118320406">គ្មានពាក្យសម្ងាត់ Chrome ទេ</translation>
 <translation id="6846906712230932330">ដើម្បី​ប្រើ​ពាក្យសម្ងាត់ អ្នកត្រូវតែ​កំណត់​លេខ​កូដ​សម្ងាត់​នៅលើ​ឧបករណ៍​របស់អ្នក​ជាមុន​សិន។</translation>
 <translation id="6965382102122355670">យល់ព្រម</translation>
 <translation id="7870350829250847712">គ្មានពាក្យសម្ងាត់ Chrome ទេ</translation>
+<translation id="8208791657167738630">ពាក្យសម្ងាត់ទាំងអស់</translation>
 <translation id="8602573493531049509">ស្វែងយល់​អំពី​របៀប</translation>
+<translation id="8982444110803529242">ពាក្យសម្ងាត់ដែលបានណែនាំ</translation>
 <translation id="9087836967653912639">បោះបង់</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
index 096f680..de486fa 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome에 저장한 모든 비밀번호에 언제든지, 어떤 앱에서든 액세스할 수 있습니다.</translation>
 <translation id="3660601625129812825">Chrome 비밀번호 자동 완성</translation>
 <translation id="4695654165345019650">비밀번호에 액세스합니다...</translation>
+<translation id="5178539339249989017">검색결과 없음</translation>
 <translation id="5313485577007399362">자동 완성 사용...</translation>
 <translation id="6494101196118320406">Chrome 비밀번호 없음</translation>
 <translation id="6846906712230932330">비밀번호를 사용하려면 기기에 비밀번호를 설정해야 합니다.</translation>
 <translation id="6965382102122355670">확인</translation>
 <translation id="7870350829250847712">Chrome 비밀번호 없음</translation>
+<translation id="8208791657167738630">모든 비밀번호</translation>
 <translation id="8602573493531049509">방법 알아보기</translation>
+<translation id="8982444110803529242">추천 비밀번호</translation>
 <translation id="9087836967653912639">취소</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
index ff081e91..b77a88a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome'до сакталган бардык сырсөздөрдү колдонуу мүмкүнчүлүгүн алыңыз. Бардык колдонмолордо. Ар дайым.</translation>
 <translation id="3660601625129812825">Chrome сырсөздөрүн автоматтык түрдө толтуруңүз</translation>
 <translation id="4695654165345019650">Сырсөздөргө мүмкүнчүлүк алуу...</translation>
+<translation id="5178539339249989017">Эч нерсе табылган жок</translation>
 <translation id="5313485577007399362">Автоматтык түрдө толтурууну иштетүү...</translation>
 <translation id="6494101196118320406">Chrome сырсөздөрү жок</translation>
 <translation id="6846906712230932330">Сырсөздөрдү колдонуу үчүн, адегенде, түзмөгүңүздөгү өткөрүүчү кодду жөндөп алышыңыз керек.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome сырсөздөрү жок</translation>
+<translation id="8208791657167738630">Бардык сырсөздөр</translation>
 <translation id="8602573493531049509">Үйрөнүп алыңыз</translation>
+<translation id="8982444110803529242">Сунушталган сырсөздөр</translation>
 <translation id="9087836967653912639">Жокко чыгаруу</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
index 23851b8..a45a542f 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Varēsiet jebkurā laikā piekļūt visām savām pārlūkā Chrome saglabātajām parolēm jebkurā lietotnē.</translation>
 <translation id="3660601625129812825">Chrome paroļu automātiskā aizpilde</translation>
 <translation id="4695654165345019650">Notiek piekļūšana parolēm...</translation>
+<translation id="5178539339249989017">Netika atrasts neviens meklēšanas rezultāts.</translation>
 <translation id="5313485577007399362">Iespējot automātisko aizpildi...</translation>
 <translation id="6494101196118320406">Nav Chrome paroļu</translation>
 <translation id="6846906712230932330">Lai izmantotu paroles, vispirms ierīcei ir jāiestata piekļuves kods.</translation>
 <translation id="6965382102122355670">Labi</translation>
 <translation id="7870350829250847712">Nav Chrome paroļu</translation>
+<translation id="8208791657167738630">Visas paroles</translation>
 <translation id="8602573493531049509">Uzzināt, kā to izdarīt</translation>
+<translation id="8982444110803529242">Ieteiktās paroles</translation>
 <translation id="9087836967653912639">Atcelt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb
index b52fd347..9d4ed8d 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome-д хадгалсан бүх нууц үгэндээ хандаарай. Дурын апп дээр. Хүссэн үедээ.</translation>
 <translation id="3660601625129812825">Chrome-н нууц үгийг автоматаар бөглөх</translation>
 <translation id="4695654165345019650">Нууц үгнүүдэд хандах...</translation>
+<translation id="5178539339249989017">Ямар ч хайлтын илэрц олдсонгүй</translation>
 <translation id="5313485577007399362">Автоматаар бөглөх хэсгийг идэвхжүүлэх...</translation>
 <translation id="6494101196118320406">Chrome-н нууц үг байхгүй</translation>
 <translation id="6846906712230932330">Нууц үгсийг ашиглахын тулд та эхлээд төхөөрөмж дээрээ нууц код тохируулах ёстой.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome-н нууц үг байхгүй</translation>
+<translation id="8208791657167738630">Бүх нууц үг</translation>
 <translation id="8602573493531049509">Заавар харах</translation>
+<translation id="8982444110803529242">Санал болгож буй нууц үгс</translation>
 <translation id="9087836967653912639">Цуцлах</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
index acdf88ff..daa256a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Få tilgang til alle passordene du lagrer i Chrome. I alle apper. Når som helst.</translation>
 <translation id="3660601625129812825">Autofyll Chrome-passord</translation>
 <translation id="4695654165345019650">Få tilgang til passord</translation>
+<translation id="5178539339249989017">Søket ga ingen treff</translation>
 <translation id="5313485577007399362">Aktiver Autofyll</translation>
 <translation id="6494101196118320406">Ingen Chrome-passord</translation>
 <translation id="6846906712230932330">For å bruke passordene må du først angi en adgangskode på enheten din.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Ingen Chrome-passord</translation>
+<translation id="8208791657167738630">Alle passord</translation>
 <translation id="8602573493531049509">Finn ut hvordan</translation>
+<translation id="8982444110803529242">Foreslåtte passord</translation>
 <translation id="9087836967653912639">Avbryt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb
index cd274a94..44e4b54 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Вы сможете использовать сохраненные в Chrome пароли в любом приложении.</translation>
 <translation id="3660601625129812825">Автозаполнение паролей Chrome</translation>
 <translation id="4695654165345019650">Доступ к паролям…</translation>
+<translation id="5178539339249989017">Ничего не найдено.</translation>
 <translation id="5313485577007399362">Включить автозаполнение</translation>
 <translation id="6494101196118320406">Нет паролей Chrome</translation>
 <translation id="6846906712230932330">Чтобы использовать пароли, установите на устройстве код доступа.</translation>
 <translation id="6965382102122355670">ОК</translation>
 <translation id="7870350829250847712">Нет паролей Chrome</translation>
+<translation id="8208791657167738630">Все пароли</translation>
 <translation id="8602573493531049509">Подробнее</translation>
+<translation id="8982444110803529242">Рекомендуемые пароли</translation>
 <translation id="9087836967653912639">Отмена</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
index 829190a..f2d4d46 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Získajte prístup k všetkým heslám, ktoré ste si uložili v Chrome. V ľubovoľnej aplikácii a hocikedy.</translation>
 <translation id="3660601625129812825">Automatické dopĺňanie hesiel Chromu</translation>
 <translation id="4695654165345019650">Prístup k heslám…</translation>
+<translation id="5178539339249989017">Neboli nájdené žiadne výsledky vyhľadávania</translation>
 <translation id="5313485577007399362">Povoliť automatické dopĺňanie…</translation>
 <translation id="6494101196118320406">Žiadne heslá Chromu</translation>
 <translation id="6846906712230932330">Ak chcete používať heslá, najprv musíte v zariadení nastaviť vstupný kód.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Žiadne heslá Chromu</translation>
+<translation id="8208791657167738630">Všetky heslá</translation>
 <translation id="8602573493531049509">Postup</translation>
+<translation id="8982444110803529242">Navrhnuté heslá</translation>
 <translation id="9087836967653912639">Zrušiť</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
index ed9abb1..bcda233 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Merr qasjen te të gjitha fjalëkalimet që ruan në Chrome. Në çdo aplikacion. Në çdo kohë.</translation>
 <translation id="3660601625129812825">Plotëso automatikisht fjalëkalimet e Chrome</translation>
 <translation id="4695654165345019650">Qasu te fjalëkalimet...</translation>
+<translation id="5178539339249989017">Nuk u gjetën rezultate kërkimi</translation>
 <translation id="5313485577007399362">Aktivizo plotësimin automatik...</translation>
 <translation id="6494101196118320406">Nuk ka asnjë fjalëkalim të Chrome</translation>
 <translation id="6846906712230932330">Për të përdorur fjalëkalimet, duhet të vendosësh në fillim një kod në pajisjen tënde.</translation>
 <translation id="6965382102122355670">Në rregull</translation>
 <translation id="7870350829250847712">Nuk ka asnjë fjalëkalim të Chrome</translation>
+<translation id="8208791657167738630">Të gjitha fjalëkalimet</translation>
 <translation id="8602573493531049509">Mëso se si</translation>
+<translation id="8982444110803529242">Fjalëkalimet e sugjeruara</translation>
 <translation id="9087836967653912639">Anulo</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb
index 8e0af76..01ae40d 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Få tillgång till alla lösenord du har sparat i Chrome – när som helst, i vilken app som helst.</translation>
 <translation id="3660601625129812825">Autofyll lösenord i Chrome</translation>
 <translation id="4695654165345019650">Åtkomst till lösenord …</translation>
+<translation id="5178539339249989017">Inga sökresultat hittades</translation>
 <translation id="5313485577007399362">Aktivera Autofyll …</translation>
 <translation id="6494101196118320406">Inga lösenord i Chrome</translation>
 <translation id="6846906712230932330">Du måste ställa in ett lösenord på enheten innan du kan använda lösenord här.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Inga lösenord i Chrome</translation>
+<translation id="8208791657167738630">Alla lösenord</translation>
 <translation id="8602573493531049509">Läs mer</translation>
+<translation id="8982444110803529242">Föreslagna lösenord</translation>
 <translation id="9087836967653912639">Avbryt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb
index 2c503c8..678eb22 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Chrome'da kaydettiğiniz tüm şifrelere erişim elde edin. Tüm uygulamalarda. Her zaman.</translation>
 <translation id="3660601625129812825">Otomatik Doldurma Chrome Şifreleri</translation>
 <translation id="4695654165345019650">Erişim Şifreleri...</translation>
+<translation id="5178539339249989017">Arama sonucu bulunamadı</translation>
 <translation id="5313485577007399362">Otomatik Doldurmayı Etkinleştir...</translation>
 <translation id="6494101196118320406">Chrome Şifresi Yok</translation>
 <translation id="6846906712230932330">Şifreleri kullanmak için öncelikle cihazınızda bir şifre kodu ayarlamanız gerekir.</translation>
 <translation id="6965382102122355670">Tamam</translation>
 <translation id="7870350829250847712">Chrome Şifresi Yok</translation>
+<translation id="8208791657167738630">Tüm Şifreler</translation>
 <translation id="8602573493531049509">Nasıl Yapacağınızı Öğrenin</translation>
+<translation id="8982444110803529242">Önerilen Şifreler</translation>
 <translation id="9087836967653912639">İptal</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb
index 77c3e42..8c03a629 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">‏Chrome میں محفوظ سبھی پاس ورڈز تک رسائی حاصل کریں۔ کسی بھی ایپ میں۔ کسی بھی وقت۔</translation>
 <translation id="3660601625129812825">‏آٹو فل Chrome پاس ورڈز</translation>
 <translation id="4695654165345019650">پاسورڈز تک رسائی حاصل کریں...</translation>
+<translation id="5178539339249989017">تلاش کے کوئی نتائج نہیں ملے</translation>
 <translation id="5313485577007399362">آٹو فل فعال کریں...</translation>
 <translation id="6494101196118320406">‏کوئی Chrome پاس ورڈز نہیں</translation>
 <translation id="6846906712230932330">پاس ورڈز استعمال کرنے کے ليے، آپ کو اپنے آلے پر پہلے پاس کوڈ سیٹ کرنا ہوگا۔</translation>
 <translation id="6965382102122355670">ٹھیک ہے</translation>
 <translation id="7870350829250847712">‏کوئی Chrome پاس ورڈز نہیں</translation>
+<translation id="8208791657167738630">تمام پاس ورڈز</translation>
 <translation id="8602573493531049509">طریقہ جانیں</translation>
+<translation id="8982444110803529242">تجویز کردہ پاس ورڈز</translation>
 <translation id="9087836967653912639">منسوخ کریں</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb
index 8be5cd6..73b8e3c 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">Có quyền sử dụng tất cả các mật khẩu mà bạn lưu trên Chrome trong mọi ứng dụng, bất cứ lúc nào.</translation>
 <translation id="3660601625129812825">Tự động điền mật khẩu Chrome</translation>
 <translation id="4695654165345019650">Truy cập vào các mật khẩu...</translation>
+<translation id="5178539339249989017">Không tìm thấy kết quả nào</translation>
 <translation id="5313485577007399362">Bật tính năng Tự động điền...</translation>
 <translation id="6494101196118320406">Không có mật khẩu Chrome</translation>
 <translation id="6846906712230932330">Để sử dụng mật khẩu, trước tiên, bạn phải đặt mật mã trên thiết bị của mình.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Không có mật khẩu Chrome</translation>
+<translation id="8208791657167738630">Tất cả mật khẩu</translation>
 <translation id="8602573493531049509">Tìm hiểu cách thức</translation>
+<translation id="8982444110803529242">Mật khẩu nên dùng</translation>
 <translation id="9087836967653912639">Hủy</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
index 3b59b7c..f53f26e6 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">获取您在 Chrome 中保存的所有密码。不限应用。不限时间。</translation>
 <translation id="3660601625129812825">自动填充 Chrome 中存储的密码</translation>
 <translation id="4695654165345019650">获取密码…</translation>
+<translation id="5178539339249989017">未找到任何搜索结果</translation>
 <translation id="5313485577007399362">启用自动填充…</translation>
 <translation id="6494101196118320406">您未在 Chrome 中存储任何密码</translation>
 <translation id="6846906712230932330">您必须先在设备上设置密码,才能使用密码。</translation>
 <translation id="6965382102122355670">确定</translation>
 <translation id="7870350829250847712">您未在 Chrome 中存储任何密码</translation>
+<translation id="8208791657167738630">所有密码</translation>
 <translation id="8602573493531049509">了解如何操作</translation>
+<translation id="8982444110803529242">建议的密码</translation>
 <translation id="9087836967653912639">取消</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
index 15712a95..ba6942dea 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">隨時存取在 Chrome 中儲存的所有密碼,且在任何應用程式中都能存取。</translation>
 <translation id="3660601625129812825">自動填入 Chrome 密碼</translation>
 <translation id="4695654165345019650">存取密碼…</translation>
+<translation id="5178539339249989017">找不到任何搜尋結果</translation>
 <translation id="5313485577007399362">啟用自動填入功能…</translation>
 <translation id="6494101196118320406">沒有 Chrome 密碼</translation>
 <translation id="6846906712230932330">如要使用密碼,您必須先在裝置上設定密碼。</translation>
 <translation id="6965382102122355670">確定</translation>
 <translation id="7870350829250847712">沒有 Chrome 密碼</translation>
+<translation id="8208791657167738630">所有密碼</translation>
 <translation id="8602573493531049509">瞭解詳情</translation>
+<translation id="8982444110803529242">建議的密碼</translation>
 <translation id="9087836967653912639">取消</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
index 98e23457..a85b1f7 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
@@ -7,11 +7,14 @@
 <translation id="3378542047369517508">隨時都能使用自己儲存在 Chrome 中的所有密碼 (適用於任何應用程式)。</translation>
 <translation id="3660601625129812825">自動填入 Chrome 密碼</translation>
 <translation id="4695654165345019650">存取密碼…</translation>
+<translation id="5178539339249989017">找不到相符的搜尋結果</translation>
 <translation id="5313485577007399362">啟用自動填入功能…</translation>
 <translation id="6494101196118320406">沒有任何 Chrome 密碼</translation>
 <translation id="6846906712230932330">你必須先在裝置上設定通行碼才能使用密碼。</translation>
 <translation id="6965382102122355670">確定</translation>
 <translation id="7870350829250847712">沒有任何 Chrome 密碼</translation>
+<translation id="8208791657167738630">所有密碼</translation>
 <translation id="8602573493531049509">瞭解詳情</translation>
+<translation id="8982444110803529242">建議的密碼</translation>
 <translation id="9087836967653912639">取消</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index 8b7662f4..073e605 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -282,7 +282,6 @@
     "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:unit_tests",
     "//ios/chrome/browser/ui/popup_menu:unit_tests",
     "//ios/chrome/browser/ui/presenters:unit_tests",
-    "//ios/chrome/browser/ui/qr_generator:unit_tests",
     "//ios/chrome/browser/ui/reading_list:unit_tests",
     "//ios/chrome/browser/ui/recent_tabs:unit_tests",
     "//ios/chrome/browser/ui/sad_tab:unit_tests",
diff --git a/net/http/alternative_service.cc b/net/http/alternative_service.cc
index 1cf6b54..251b9f75 100644
--- a/net/http/alternative_service.cc
+++ b/net/http/alternative_service.cc
@@ -133,8 +133,6 @@
     : alternative_service_(alternative_service), expiration_(expiration) {
   if (alternative_service_.protocol == kProtoQUIC) {
     advertised_versions_ = advertised_versions;
-    std::sort(advertised_versions_.begin(), advertised_versions_.end(),
-              TransportVersionLessThan);
   }
 }
 
diff --git a/net/http/alternative_service.h b/net/http/alternative_service.h
index 908781b..aaf32b7 100644
--- a/net/http/alternative_service.h
+++ b/net/http/alternative_service.h
@@ -201,8 +201,7 @@
 
   // Lists all the QUIC versions that are advertised by the server and supported
   // by Chrome. If empty, defaults to versions used by the current instance of
-  // the netstack.
-  // This list MUST be sorted in ascending order.
+  // the netstack. This list is sorted according to the server's preference.
   quic::ParsedQuicVersionVector advertised_versions_;
 };
 
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 51419ece..ab1cd3a 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -1536,7 +1536,7 @@
       "\"server_info\":\"quic_server_info1\"}],"
       "\"servers\":["
       "{\"alternative_service\":[{"
-      "\"advertised_versions\":[43,46],\"expiration\":\"13756212000000000\","
+      "\"advertised_versions\":[46,43],\"expiration\":\"13756212000000000\","
       "\"port\":443,\"protocol_str\":\"quic\"},{\"advertised_versions\":[],"
       "\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\","
       "\"port\":1234,\"protocol_str\":\"h2\"}],"
@@ -1703,7 +1703,7 @@
       "\"server_id\":\"https://mail.google.com:80\","
       "\"server_info\":\"quic_server_info1\"}],"
       "\"servers\":["
-      "{\"alternative_service\":[{\"advertised_versions\":[43,46],"
+      "{\"alternative_service\":[{\"advertised_versions\":[46,43],"
       "\"expiration\":\"13756212000000000\",\"port\":443,"
       "\"protocol_str\":\"quic\"}],"
       "\"isolation\":[],"
@@ -1728,9 +1728,29 @@
   http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
                                              alternative_service_info_vector_3);
 
-  // No Prefs update.
-  EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
+  // Change in version ordering causes prefs update.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+  EXPECT_NE(0u, GetPendingMainThreadTaskCount());
+  FastForwardUntilNoTasksRemain();
+  EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+
+  // Verify preferences updated with new advertised versions.
+  const char expected_json_updated2[] =
+      "{\"quic_servers\":"
+      "[{\"isolation\":[],"
+      "\"server_id\":\"https://mail.google.com:80\","
+      "\"server_info\":\"quic_server_info1\"}],"
+      "\"servers\":["
+      "{\"alternative_service\":[{\"advertised_versions\":[43,46],"
+      "\"expiration\":\"13756212000000000\",\"port\":443,"
+      "\"protocol_str\":\"quic\"}],"
+      "\"isolation\":[],"
+      "\"server\":\"https://www.google.com:80\"}],"
+      "\"supports_quic\":"
+      "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}";
+  EXPECT_TRUE(
+      base::JSONWriter::Write(*http_server_properties, &preferences_json));
+  EXPECT_EQ(expected_json_updated2, preferences_json);
 }
 
 TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc
index 43cc640..5e867d8 100644
--- a/net/http/http_stream_factory_job_controller.cc
+++ b/net/http/http_stream_factory_job_controller.cc
@@ -1105,8 +1105,8 @@
   if (advertised_versions.empty())
     return supported_versions[0];
 
-  for (const quic::ParsedQuicVersion& supported : supported_versions) {
-    for (const quic::ParsedQuicVersion& advertised : advertised_versions) {
+  for (const quic::ParsedQuicVersion& advertised : advertised_versions) {
+    for (const quic::ParsedQuicVersion& supported : supported_versions) {
       if (supported == advertised) {
         DCHECK_NE(quic::UnsupportedQuicVersion(), supported);
         return supported;
diff --git a/net/http/http_stream_factory_job_controller.h b/net/http/http_stream_factory_job_controller.h
index 37484c9d..bad49ec 100644
--- a/net/http/http_stream_factory_job_controller.h
+++ b/net/http/http_stream_factory_job_controller.h
@@ -250,11 +250,10 @@
       HttpStreamRequest::Delegate* delegate,
       HttpStreamRequest::StreamType stream_type);
 
-  // Returns a quic::ParsedQuicVersion that has been advertised in
-  // |advertised_versions| and is supported.  If more than one
-  // ParsedQuicVersions are supported, the first matched in the supported
-  // versions will be returned.  If no mutually supported version is found,
-  // QUIC_VERSION_UNSUPPORTED_VERSION will be returned.
+  // Returns the first quic::ParsedQuicVersion that has been advertised in
+  // |advertised_versions| and is supported, following the order of
+  // |advertised_versions|.  If no mutually supported version is found,
+  // quic::UnsupportedQuicVersion() will be returned.
   quic::ParsedQuicVersion SelectQuicVersion(
       const quic::ParsedQuicVersionVector& advertised_versions);
 
diff --git a/net/http/http_stream_factory_job_controller_unittest.cc b/net/http/http_stream_factory_job_controller_unittest.cc
index ed9d68ed..c5ad93a 100644
--- a/net/http/http_stream_factory_job_controller_unittest.cc
+++ b/net/http/http_stream_factory_job_controller_unittest.cc
@@ -178,6 +178,12 @@
                                                         stream_type);
   }
 
+  static quic::ParsedQuicVersion SelectQuicVersion(
+      HttpStreamFactory::JobController* job_controller,
+      const quic::ParsedQuicVersionVector& advertised_versions) {
+    return job_controller->SelectQuicVersion(advertised_versions);
+  }
+
   static void SetAltJobFailedOnDefaultNetwork(
       HttpStreamFactory::JobController* job_controller) {
     DCHECK(job_controller->alternative_job() != nullptr);
@@ -320,6 +326,10 @@
       bool alt_job_retried_on_non_default_network);
   void TestMainJobFailsAfterAltJobSucceeded(
       bool alt_job_retried_on_non_default_network);
+  void TestAltSvcVersionSelection(
+      const std::string& alt_svc_header,
+      const quic::ParsedQuicVersion& expected_version,
+      const quic::ParsedQuicVersionVector& supported_versions);
 
   RecordingBoundTestNetLog net_log_;
   TestJobFactory job_factory_;
@@ -3306,11 +3316,6 @@
       HttpStreamRequest::HTTP_STREAM);
   EXPECT_EQ(2u, alt_svc_info.advertised_versions().size());
   // Verify that JobController returns the list of versions specified in set.
-  std::sort(
-      mixed_quic_versions.begin(), mixed_quic_versions.end(),
-      [](const quic::ParsedQuicVersion& a, const quic::ParsedQuicVersion& b) {
-        return a.transport_version < b.transport_version;
-      });
   EXPECT_EQ(mixed_quic_versions, alt_svc_info.advertised_versions());
 
   // Set alternative service for the same server with two unsupported QUIC
@@ -3327,6 +3332,100 @@
   EXPECT_EQ(0u, alt_svc_info.advertised_versions().size());
 }
 
+void HttpStreamFactoryJobControllerTest::TestAltSvcVersionSelection(
+    const std::string& alt_svc_header,
+    const quic::ParsedQuicVersion& expected_version,
+    const quic::ParsedQuicVersionVector& supported_versions) {
+  quic_context_.params()->supported_versions = supported_versions;
+  HttpRequestInfo request_info;
+  request_info.method = "GET";
+  request_info.url = GURL("https://example.com");
+  Initialize(request_info);
+  url::SchemeHostPort origin(request_info.url);
+  NetworkIsolationKey network_isolation_key(
+      url::Origin::Create(GURL("https://example.com")),
+      url::Origin::Create(GURL("https://example.com")));
+  scoped_refptr<HttpResponseHeaders> headers(
+      base::MakeRefCounted<HttpResponseHeaders>(""));
+  headers->AddHeader(alt_svc_header);
+  session_->http_stream_factory()->ProcessAlternativeServices(
+      session_.get(), network_isolation_key, headers.get(), origin);
+  AlternativeServiceInfo alt_svc_info =
+      JobControllerPeer::GetAlternativeServiceInfoFor(
+          job_controller_, request_info, &request_delegate_,
+          HttpStreamRequest::HTTP_STREAM);
+  quic::ParsedQuicVersionVector advertised_versions =
+      alt_svc_info.advertised_versions();
+  quic::ParsedQuicVersion selected_version =
+      JobControllerPeer::SelectQuicVersion(job_controller_,
+                                           advertised_versions);
+  EXPECT_EQ(expected_version, selected_version)
+      << alt_svc_info.ToString() << " "
+      << quic::ParsedQuicVersionVectorToString(advertised_versions);
+}
+
+TEST_F(HttpStreamFactoryJobControllerTest,
+       AltSvcVersionSelectionWithOldFormatFirst) {
+  TestAltSvcVersionSelection(
+      "alt-svc: "
+      "quic=\":443\"; ma=2592000; v=\"46,43\","
+      "h3-Q050=\":443\"; ma=2592000,"
+      "h3-Q049=\":443\"; ma=2592000,"
+      "h3-Q048=\":443\"; ma=2592000,"
+      "h3-Q046=\":443\"; ma=2592000,"
+      "h3-Q043=\":443\"; ma=2592000,"
+      "h3-T050=\":443\"; ma=2592000",
+      quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                              quic::QUIC_VERSION_46),
+      quic::AllSupportedVersions());
+}
+
+TEST_F(HttpStreamFactoryJobControllerTest,
+       AltSvcVersionSelectionWithNewFormatFirst) {
+  TestAltSvcVersionSelection(
+      "alt-svc: "
+      "h3-Q050=\":443\"; ma=2592000,"
+      "h3-Q049=\":443\"; ma=2592000,"
+      "h3-Q048=\":443\"; ma=2592000,"
+      "h3-Q046=\":443\"; ma=2592000,"
+      "h3-Q043=\":443\"; ma=2592000,"
+      "h3-T050=\":443\"; ma=2592000,"
+      "quic=\":443\"; ma=2592000; v=\"46,43\"",
+      quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                              quic::QUIC_VERSION_50),
+      quic::AllSupportedVersions());
+}
+
+TEST_F(HttpStreamFactoryJobControllerTest,
+       AltSvcVersionSelectionWithInverseOrderingOldFormat) {
+  // Server prefers Q043 but client prefers Q046.
+  TestAltSvcVersionSelection(
+      "alt-svc: quic=\":443\"; ma=2592000; v=\"43,46\"",
+      quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                              quic::QUIC_VERSION_43),
+      quic::ParsedQuicVersionVector{
+          quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                                  quic::QUIC_VERSION_46),
+          quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                                  quic::QUIC_VERSION_43)});
+}
+
+TEST_F(HttpStreamFactoryJobControllerTest,
+       AltSvcVersionSelectionWithInverseOrderingNewFormat) {
+  // Server prefers Q043 but client prefers Q046.
+  TestAltSvcVersionSelection(
+      "alt-svc: "
+      "h3-Q043=\":443\"; ma=2592000,"
+      "h3-Q046=\":443\"; ma=2592000",
+      quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                              quic::QUIC_VERSION_43),
+      quic::ParsedQuicVersionVector{
+          quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                                  quic::QUIC_VERSION_46),
+          quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
+                                  quic::QUIC_VERSION_43)});
+}
+
 // Tests that if HttpNetworkSession has a non-empty QUIC host allowlist,
 // then GetAlternativeServiceFor() will not return any QUIC alternative service
 // that's not on the allowlist.
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index a95b95a..75204a8c 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -159,23 +159,30 @@
       "Dependency");
 }
 
-std::string GenerateQuicAltSvcHeader() {
+std::string GenerateQuicAltSvcHeader(
+    const quic::ParsedQuicVersionVector& versions) {
   std::string altsvc_header = "Alt-Svc: ";
   std::string version_string;
-  for (const auto& version : quic::AllSupportedVersions()) {
-    if (version.handshake_protocol == quic::PROTOCOL_TLS1_3) {
-      altsvc_header.append(quic::AlpnForVersion(version));
-      altsvc_header.append("=\":443\", ");
+  bool first_version = true;
+  for (const auto& version : versions) {
+    if (first_version) {
+      first_version = false;
     } else {
+      altsvc_header.append(", ");
+    }
+    altsvc_header.append(quic::AlpnForVersion(version));
+    altsvc_header.append("=\":443\"");
+    if (version.SupportsGoogleAltSvcFormat()) {
       if (!version_string.empty()) {
         version_string.append(",");
       }
       version_string.append(base::NumberToString(version.transport_version));
     }
   }
-  altsvc_header.append("quic=\":443\"; v=\"");
-  altsvc_header.append(version_string);
-  altsvc_header.append("\"\r\n");
+  if (!version_string.empty()) {
+    altsvc_header.append(", quic=\":443\"; v=\"" + version_string + "\"");
+  }
+  altsvc_header.append("\r\n");
 
   return altsvc_header;
 }
@@ -1745,7 +1752,7 @@
   // in the stored AlternativeService is not supported by the client. However,
   // the response from the server will advertise new Alt-Svc with supported
   // versions.
-  std::string altsvc_header = GenerateQuicAltSvcHeader();
+  std::string altsvc_header = GenerateQuicAltSvcHeader(supported_versions_);
   MockRead http_reads[] = {
       MockRead("HTTP/1.1 200 OK\r\n"),
       MockRead(altsvc_header.c_str()),
@@ -1807,7 +1814,11 @@
   for (const auto& alt_svc_info : alt_svc_info_vector) {
     EXPECT_EQ(kProtoQUIC, alt_svc_info.alternative_service().protocol);
     for (const auto& version : alt_svc_info.advertised_versions()) {
-      alt_svc_negotiated_versions.push_back(version);
+      if (std::find(alt_svc_negotiated_versions.begin(),
+                    alt_svc_negotiated_versions.end(),
+                    version) == alt_svc_negotiated_versions.end()) {
+        alt_svc_negotiated_versions.push_back(version);
+      }
     }
   }
 
@@ -2225,9 +2236,7 @@
   // Client and server both support more than one QUIC_VERSION.
   // Client prefers |version_|, and then common_version_2.
   // Server prefers common_version_2, and then |version_|.
-  // In non-TLS version, |version_| will be picked.
-  // In TLS version, server's preference will be honored.
-  // TODO(crbug.com/1063060): fix the behavior to be consistent.
+  // We should honor the server's preference.
   // The picked version is verified via checking the version used by the
   // TestPacketMakers and the response.
 
@@ -2259,18 +2268,11 @@
   // |common_version_2|, |version_|.
   std::string QuicAltSvcWithVersionHeader;
   quic::ParsedQuicVersion picked_version = quic::UnsupportedQuicVersion();
-  if (version_.handshake_protocol == quic::PROTOCOL_QUIC_CRYPTO) {
-    QuicAltSvcWithVersionHeader = base::StringPrintf(
-        "Alt-Svc: quic=\":443\";v=\"%d,%d\"\r\n\r\n",
-        common_version_2.transport_version, version_.transport_version);
-    picked_version = version_;  // Use client's preference.
-  } else {
     QuicAltSvcWithVersionHeader =
         "Alt-Svc: " + quic::AlpnForVersion(common_version_2) +
         "=\":443\"; ma=3600, " + quic::AlpnForVersion(version_) +
         "=\":443\"; ma=3600\r\n\r\n";
     picked_version = common_version_2;  // Use server's preference.
-  }
 
   MockRead http_reads[] = {
       MockRead("HTTP/1.1 200 OK\r\n"),
@@ -2468,7 +2470,7 @@
     }
   }
 
-  std::string altsvc_header = GenerateQuicAltSvcHeader();
+  std::string altsvc_header = GenerateQuicAltSvcHeader(supported_versions_);
   MockRead http_reads[] = {
       MockRead("HTTP/1.1 200 OK\r\n"),
       MockRead(altsvc_header.c_str()),
@@ -2530,7 +2532,11 @@
   for (const auto& alt_svc_info : alt_svc_info_vector) {
     EXPECT_EQ(kProtoQUIC, alt_svc_info.alternative_service().protocol);
     for (const auto& version : alt_svc_info.advertised_versions()) {
-      alt_svc_negotiated_versions.push_back(version);
+      if (std::find(alt_svc_negotiated_versions.begin(),
+                    alt_svc_negotiated_versions.end(),
+                    version) == alt_svc_negotiated_versions.end()) {
+        alt_svc_negotiated_versions.push_back(version);
+      }
     }
   }
 
diff --git a/pdf/test/data/rotated_rectangles.in b/pdf/test/data/rotated_rectangles.in
new file mode 100644
index 0000000..adec53e4
--- /dev/null
+++ b/pdf/test/data/rotated_rectangles.in
@@ -0,0 +1,66 @@
+{{header}}
+{{object 1 0}} <<
+  /Type /Catalog
+  /Pages 2 0 R
+>>
+endobj
+{{object 2 0}} <<
+  /Type /Pages
+  /MediaBox [ 0 0 800 500 ]
+  /CropBox [ 200 100 800 500 ]
+  /Count 4
+  /Kids [ 3 0 R 4 0 R 5 0 R 6 0 R ]
+>>
+endobj
+{{object 3 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 0
+>>
+endobj
+{{object 4 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 90
+>>
+endobj
+{{object 5 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 180
+>>
+endobj
+{{object 6 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 270
+>>
+endobj
+{{object 7 0}} <<
+  {{streamlen}}
+>>
+stream
+q
+0 0 0 rg
+200 100 20 20 re B*
+220 250 130 100 re B*
+1 0 1 rg
+780 480 20 20 re B*
+650 250 130 100 re B*
+1 1 0 rg
+780 100 20 20 re B*
+450 120 100 130 re B*
+0 1 1 rg
+200 480 20 20 re B*
+450 350 100 130 re B*
+Q
+endstream
+endobj
+{{xref}}
+{{trailer}}
+{{startxref}}
+%%EOF
diff --git a/pdf/test/data/rotated_rectangles.pdf b/pdf/test/data/rotated_rectangles.pdf
new file mode 100644
index 0000000..9f038c3
--- /dev/null
+++ b/pdf/test/data/rotated_rectangles.pdf
@@ -0,0 +1,80 @@
+%PDF-1.7
+% ò¤ô
+1 0 obj <<
+  /Type /Catalog
+  /Pages 2 0 R
+>>
+endobj
+2 0 obj <<
+  /Type /Pages
+  /MediaBox [ 0 0 800 500 ]
+  /CropBox [ 200 100 800 500 ]
+  /Count 4
+  /Kids [ 3 0 R 4 0 R 5 0 R 6 0 R ]
+>>
+endobj
+3 0 obj <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 0
+>>
+endobj
+4 0 obj <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 90
+>>
+endobj
+5 0 obj <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 180
+>>
+endobj
+6 0 obj <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 7 0 R
+  /Rotate 270
+>>
+endobj
+7 0 obj <<
+  /Length 208
+>>
+stream
+q
+0 0 0 rg
+200 100 20 20 re B*
+220 250 130 100 re B*
+1 0 1 rg
+780 480 20 20 re B*
+650 250 130 100 re B*
+1 1 0 rg
+780 100 20 20 re B*
+450 120 100 130 re B*
+0 1 1 rg
+200 480 20 20 re B*
+450 350 100 130 re B*
+Q
+endstream
+endobj
+xref
+0 8
+0000000000 65535 f 
+0000000015 00000 n 
+0000000068 00000 n 
+0000000210 00000 n 
+0000000291 00000 n 
+0000000373 00000 n 
+0000000456 00000 n 
+0000000539 00000 n 
+trailer <<
+  /Root 1 0 R
+  /Size 8
+>>
+startxref
+799
+%%EOF
diff --git a/printing/pdf_metafile_cg_mac_unittest.cc b/printing/pdf_metafile_cg_mac_unittest.cc
index 197dba8..4fbcef80 100644
--- a/printing/pdf_metafile_cg_mac_unittest.cc
+++ b/printing/pdf_metafile_cg_mac_unittest.cc
@@ -219,6 +219,14 @@
                  "render_portrait_rectangles_expected.0.png", kDestinationSize);
 }
 
+TEST(PdfMetafileCgTest, RenderAutorotatedPortraitRectangles) {
+  constexpr gfx::Rect kPageBounds(200, 300);
+  constexpr gfx::Size kDestinationSize(300, 200);
+  TestRenderPage("rectangles.pdf", /*page_number=*/1, kPageBounds,
+                 "render_autorotated_portrait_rectangles_expected.0.png",
+                 kDestinationSize);
+}
+
 TEST(PdfMetafileCgTest, RenderLargePortraitRectangles) {
   constexpr gfx::Rect kPageBounds(200, 300);
   constexpr gfx::Size kDestinationSize(100, 120);
@@ -243,6 +251,38 @@
                  kDestinationSize);
 }
 
+TEST(PdfMetafileCgTest, RenderRotatedRectangles) {
+  constexpr gfx::Rect kPageBounds(800, 500);
+  constexpr gfx::Size kLandscapeDestinationSize(600, 400);
+  constexpr gfx::Size kPortraitDestinationSize(400, 600);
+
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/1, kPageBounds,
+                 "render_rotated_rectangles_expected.0.png",
+                 kLandscapeDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/2, kPageBounds,
+                 "render_rotated_rectangles_expected.1.png",
+                 kPortraitDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/3, kPageBounds,
+                 "render_rotated_rectangles_expected.2.png",
+                 kLandscapeDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/4, kPageBounds,
+                 "render_rotated_rectangles_expected.3.png",
+                 kPortraitDestinationSize);
+
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/1, kPageBounds,
+                 "render_autorotated_rotated_rectangles_expected.0.png",
+                 kPortraitDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/2, kPageBounds,
+                 "render_autorotated_rotated_rectangles_expected.1.png",
+                 kLandscapeDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/3, kPageBounds,
+                 "render_autorotated_rotated_rectangles_expected.2.png",
+                 kPortraitDestinationSize);
+  TestRenderPage("rotated_rectangles.pdf", /*page_number=*/4, kPageBounds,
+                 "render_autorotated_rotated_rectangles_expected.3.png",
+                 kLandscapeDestinationSize);
+}
+
 TEST(PdfMetafileCgTest, RenderLargeLandscapeRectangles) {
   constexpr gfx::Rect kPageBounds(800, 500);
   constexpr gfx::Size kDestinationSize(200, 300);
diff --git a/printing/test/data/pdf_cg/render_autorotated_portrait_rectangles_expected.0.png b/printing/test/data/pdf_cg/render_autorotated_portrait_rectangles_expected.0.png
new file mode 100644
index 0000000..3268c30
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_autorotated_portrait_rectangles_expected.0.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.0.png b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.0.png
new file mode 100644
index 0000000..1a12ef9
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.0.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.1.png b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.1.png
new file mode 100644
index 0000000..efacc281
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.1.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.2.png b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.2.png
new file mode 100644
index 0000000..c9e79a1
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.2.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.3.png b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.3.png
new file mode 100644
index 0000000..0ed7db9
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_autorotated_rotated_rectangles_expected.3.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_rotated_rectangles_expected.0.png b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.0.png
new file mode 100644
index 0000000..efacc281
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.0.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_rotated_rectangles_expected.1.png b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.1.png
new file mode 100644
index 0000000..c9e79a1
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.1.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_rotated_rectangles_expected.2.png b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.2.png
new file mode 100644
index 0000000..0ed7db9
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.2.png
Binary files differ
diff --git a/printing/test/data/pdf_cg/render_rotated_rectangles_expected.3.png b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.3.png
new file mode 100644
index 0000000..1a12ef9
--- /dev/null
+++ b/printing/test/data/pdf_cg/render_rotated_rectangles_expected.3.png
Binary files differ
diff --git a/services/device/public/cpp/device_feature_list.cc b/services/device/public/cpp/device_feature_list.cc
index a1ba6f62..04d1858 100644
--- a/services/device/public/cpp/device_feature_list.cc
+++ b/services/device/public/cpp/device_feature_list.cc
@@ -35,10 +35,6 @@
 
 }  // namespace
 
-static jboolean JNI_DeviceFeatureList_IsInitialized(JNIEnv* env) {
-  return !!base::FeatureList::GetInstance();
-}
-
 static jboolean JNI_DeviceFeatureList_IsEnabled(
     JNIEnv* env,
     const JavaParamRef<jstring>& jfeature_name) {
diff --git a/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java b/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java
index 11507501..18c616c 100644
--- a/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java
+++ b/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java
@@ -8,7 +8,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.base.library_loader.LibraryLoader;
 
 /**
  * Provides an API for querying the status of Device Service Features.
@@ -33,31 +32,12 @@
     public static boolean isEnabled(String featureName) {
         Boolean testValue = FeatureList.getTestValueForFeature(featureName);
         if (testValue != null) return testValue;
-        assert isNativeInitialized();
+        assert FeatureList.isNativeInitialized();
         return DeviceFeatureListJni.get().isEnabled(featureName);
     }
 
-    /**
-     * @return Whether the native FeatureList is initialized or not.
-     */
-    private static boolean isNativeInitialized() {
-        if (FeatureList.hasTestFeatures()) return true;
-
-        if (!LibraryLoader.getInstance().isInitialized()) return false;
-        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
-        // In that case, accessing it will not immediately fail, but instead cause a crash later
-        // when it is initialized. Return whether the native FeatureList has been initialized,
-        // so the return value can be tested, or asserted for a more actionable stack trace
-        // on failure.
-        //
-        // The FeatureList is however guaranteed to be initialized by the time
-        // AsyncInitializationActivity#finishNativeInitialization is called.
-        return DeviceFeatureListJni.get().isInitialized();
-    }
-
     @NativeMethods
     interface Natives {
-        boolean isInitialized();
         boolean isEnabled(String featureName);
     }
 }
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
index 04021c9f..16e1035 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
@@ -5,7 +5,8 @@
 package org.chromium.native_test;
 
 import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
+
+import androidx.fragment.app.FragmentActivity;
 
 import java.io.File;
 
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 2b5a9ae..ef49c899 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -997,7 +997,7 @@
           "ignore_task_failure": false,
           "io_timeout": 21600,
           "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 26
+          "shards": 23
         },
         "trigger_script": {
           "args": [
diff --git a/testing/buildbot/filters/e2e.sync_integration_tests.filter b/testing/buildbot/filters/e2e.sync_integration_tests.filter
index 6bb03d24..497518b 100644
--- a/testing/buildbot/filters/e2e.sync_integration_tests.filter
+++ b/testing/buildbot/filters/e2e.sync_integration_tests.filter
@@ -1 +1,4 @@
 # This is the filter file for sync e2e tests.

+

+# TODO(crbug.com/1068415): Disabled because it's flaky.

+-TwoClientDictionarySyncTest.Sanity_E2ETest

diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 33a0dd6..8c3e806 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -4883,6 +4883,21 @@
             ]
         }
     ],
+    "SafeBrowsingAvailableOnIOS": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SafeBrowsingAvailableOnIOS"
+                    ]
+                }
+            ]
+        }
+    ],
     "SafeBrowsingCommittedInterstitials": [
         {
             "platforms": [
@@ -6225,8 +6240,8 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled",
-                    "enable_features": [
+                    "name": "Default",
+                    "disable_features": [
                         "UsernameFirstFlow"
                     ]
                 }
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index f6493a3d..7fba3348 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -166,7 +166,7 @@
 // Prevents workers from sending IsolateInBackgroundNotification to V8
 // and thus instructs V8 to favor performance over memory on workers.
 const base::Feature kV8OptimizeWorkersForPerformance{
-    "V8OptimizeWorkersForPerformance", base::FEATURE_DISABLED_BY_DEFAULT};
+    "V8OptimizeWorkersForPerformance", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables negotiation of experimental multiplex codec in SDP.
 const base::Feature kWebRtcMultiplexCodec{"WebRTC-MultiplexCodec",
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 1893be9..f20b172 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -211,6 +211,7 @@
     "platform/web_http_load_info.h",
     "platform/web_icon_sizes_parser.h",
     "platform/web_image_generator.h",
+    "platform/web_impression.h",
     "platform/web_inband_text_track.h",
     "platform/web_inband_text_track_client.h",
     "platform/web_input_event_result.h",
diff --git a/third_party/blink/public/platform/task_type.h b/third_party/blink/public/platform/task_type.h
index 15cabcd..3093d1e 100644
--- a/third_party/blink/public/platform/task_type.h
+++ b/third_party/blink/public/platform/task_type.h
@@ -178,11 +178,13 @@
   kInternalMedia = 29,
 
   // Tasks to execute things for real-time media processing like recording. If a
-  // task touches MediaStreamTracks, associated sources and sinks, this task
-  // type should be used.
+  // task touches MediaStreamTracks, associated sources/sinks, and Web Audio,
+  // this task type should be used.
   // Tasks with this type are mainly posted by:
   // * //content/renderer/media
   // * //media
+  // * blink/renderer/modules/webaudio
+  // * blink/public/platform/audio
   kInternalMediaRealTime = 30,
 
   // Tasks related to user interaction like clicking or inputting texts.
diff --git a/third_party/blink/public/platform/web_impression.h b/third_party/blink/public/platform/web_impression.h
new file mode 100644
index 0000000..0bbd7d5
--- /dev/null
+++ b/third_party/blink/public/platform/web_impression.h
@@ -0,0 +1,39 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_IMPRESSION_H_
+#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_IMPRESSION_H_
+
+#include <stdint.h>
+
+#include "base/time/time.h"
+#include "third_party/blink/public/platform/web_security_origin.h"
+#include "third_party/blink/public/platform/web_string.h"
+
+namespace blink {
+
+// Struct which contains all attributes declared by an impression anchor tag.
+// This data is associated with a navigation created by clicking on an anchor
+// tag which declares attributes for conversion measurement.
+struct WebImpression {
+  // Origin declared by the impression which is the intended final top-level
+  // origin of the resulting navigation.
+  WebSecurityOrigin conversion_destination;
+
+  // Optional origin that will receive all conversion measurement reports
+  // associated with this impression. Declared by the impression tag.
+  base::Optional<WebSecurityOrigin> reporting_origin;
+
+  // Data that will be sent in conversion reports to identify this impression.
+  // Declared by the impression tag.
+  uint64_t impression_data;
+
+  // Optional expiry specifying the amount of time this impression can convert.
+  // Declared by the impression tag.
+  base::Optional<base::TimeDelta> expiry;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_IMPRESSION_H_
diff --git a/third_party/blink/public/web/web_navigation_params.h b/third_party/blink/public/web/web_navigation_params.h
index 85ca493..9c9d6d2b 100644
--- a/third_party/blink/public/web/web_navigation_params.h
+++ b/third_party/blink/public/web/web_navigation_params.h
@@ -24,6 +24,7 @@
 #include "third_party/blink/public/platform/web_content_security_policy_struct.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/public/platform/web_http_body.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/public/platform/web_navigation_body_loader.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_source_location.h"
@@ -151,6 +152,11 @@
   // inititated by clicking a link.
   WebString href_translate;
 
+  // Optional impression associated with this navigation. This is attached when
+  // a navigation results from a click on an anchor tag that has conversion
+  // measurement attributes.
+  base::Optional<WebImpression> impression;
+
   // The navigation initiator's address space.
   network::mojom::IPAddressSpace initiator_address_space =
       network::mojom::IPAddressSpace::kUnknown;
diff --git a/third_party/blink/public/web/web_remote_frame_client.h b/third_party/blink/public/web/web_remote_frame_client.h
index e026ca2..21eb1ff0 100644
--- a/third_party/blink/public/web/web_remote_frame_client.h
+++ b/third_party/blink/public/web/web_remote_frame_client.h
@@ -5,10 +5,12 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_REMOTE_FRAME_CLIENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_REMOTE_FRAME_CLIENT_H_
 
+#include "base/optional.h"
 #include "cc/paint/paint_canvas.h"
 #include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h"
 #include "third_party/blink/public/mojom/input/focus_type.mojom-shared.h"
 #include "third_party/blink/public/platform/viewport_intersection_state.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_touch_action.h"
 #include "third_party/blink/public/web/web_dom_message_event.h"
@@ -40,7 +42,8 @@
                         bool initiator_frame_has_download_sandbox_flag,
                         bool blocking_downloads_in_sandbox_enabled,
                         bool initiator_frame_is_ad,
-                        mojo::ScopedMessagePipeHandle blob_url_token) {}
+                        mojo::ScopedMessagePipeHandle blob_url_token,
+                        const base::Optional<WebImpression>& impression) {}
 
   virtual void FrameRectsChanged(const WebRect& local_frame_rect,
                                  const WebRect& screen_space_rect) {}
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni
index 3ad05df..81bc16c 100644
--- a/third_party/blink/renderer/bindings/idl_in_core.gni
+++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -615,6 +615,7 @@
           "//third_party/blink/renderer/core/testing/union_types_test.idl",
           "//third_party/blink/renderer/core/testing/worker_internals.idl",
           "//third_party/blink/renderer/core/timing/dom_high_res_time_stamp.idl",
+          "//third_party/blink/renderer/core/timing/event_counts.idl",
           "//third_party/blink/renderer/core/timing/internals_profiler.idl",
           "//third_party/blink/renderer/core/timing/largest_contentful_paint.idl",
           "//third_party/blink/renderer/core/timing/layout_shift.idl",
diff --git a/third_party/blink/renderer/build/scripts/templates/event_factory.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/event_factory.cc.tmpl
index 1d4397f..6337f87 100644
--- a/third_party/blink/renderer/build/scripts/templates/event_factory.cc.tmpl
+++ b/third_party/blink/renderer/build/scripts/templates/event_factory.cc.tmpl
@@ -17,7 +17,7 @@
 
 Event* Event{{suffix}}Factory::Create(ExecutionContext* executionContext, const String& type) {
   {% for event in events %}
-  if (DeprecatedEqualIgnoringCase(type, "{{event|name}}"){% if event.RuntimeEnabled %} && RuntimeEnabledFeatures::{{event.RuntimeEnabled}}(){% endif %}) {
+  if (EqualIgnoringASCIICase(type, "{{event|name}}"){% if event.RuntimeEnabled %} && RuntimeEnabledFeatures::{{event.RuntimeEnabled}}(){% endif %}) {
     {% if not event|name|create_event_ignore_case_list %}
     UseCounter::Count(executionContext, WebFeature::k{{event|name|measure_name}});
     {% endif %}
diff --git a/third_party/blink/renderer/core/animation/keyframe.cc b/third_party/blink/renderer/core/animation/keyframe.cc
index 22fba71..26a398e 100644
--- a/third_party/blink/renderer/core/animation/keyframe.cc
+++ b/third_party/blink/renderer/core/animation/keyframe.cc
@@ -30,8 +30,8 @@
       const_cast<PropertySpecificKeyframe*>(&end));
 }
 
-void Keyframe::AddKeyframePropertiesToV8Object(
-    V8ObjectBuilder& object_builder) const {
+void Keyframe::AddKeyframePropertiesToV8Object(V8ObjectBuilder& object_builder,
+                                               Element* element) const {
   if (offset_) {
     object_builder.Add("offset", offset_.value());
   } else {
diff --git a/third_party/blink/renderer/core/animation/keyframe.h b/third_party/blink/renderer/core/animation/keyframe.h
index 9a084a56..eb6de5f 100644
--- a/third_party/blink/renderer/core/animation/keyframe.h
+++ b/third_party/blink/renderer/core/animation/keyframe.h
@@ -108,7 +108,8 @@
   //
   // Subclasses should override this to add the (property, value) pairs they
   // store, and call into the base version to add the basic Keyframe properties.
-  virtual void AddKeyframePropertiesToV8Object(V8ObjectBuilder&) const;
+  virtual void AddKeyframePropertiesToV8Object(V8ObjectBuilder&,
+                                               Element*) const;
 
   virtual bool IsStringKeyframe() const { return false; }
   virtual bool IsTransitionKeyframe() const { return false; }
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc
index cb7772f..43bb48b 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -249,7 +249,7 @@
   ScriptState::Scope scope(script_state);
   for (wtf_size_t i = 0; i < keyframes.size(); i++) {
     V8ObjectBuilder object_builder(script_state);
-    keyframes[i]->AddKeyframePropertiesToV8Object(object_builder);
+    keyframes[i]->AddKeyframePropertiesToV8Object(object_builder, target());
     object_builder.Add("computedOffset", computed_offsets[i]);
     computed_keyframes.push_back(object_builder.GetScriptValue());
   }
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.cc b/third_party/blink/renderer/core/animation/string_keyframe.cc
index 7d3be39..17521a6 100644
--- a/third_party/blink/renderer/core/animation/string_keyframe.cc
+++ b/third_party/blink/renderer/core/animation/string_keyframe.cc
@@ -178,8 +178,9 @@
 }
 
 void StringKeyframe::AddKeyframePropertiesToV8Object(
-    V8ObjectBuilder& object_builder) const {
-  Keyframe::AddKeyframePropertiesToV8Object(object_builder);
+    V8ObjectBuilder& object_builder,
+    Element* element) const {
+  Keyframe::AddKeyframePropertiesToV8Object(object_builder, element);
   for (const auto& entry : input_properties_) {
     const PropertyHandle& property_handle = entry.key;
     const CSSValue* property_value = entry.value;
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.h b/third_party/blink/renderer/core/animation/string_keyframe.h
index 31cdb96..2fdfa35 100644
--- a/third_party/blink/renderer/core/animation/string_keyframe.h
+++ b/third_party/blink/renderer/core/animation/string_keyframe.h
@@ -81,7 +81,8 @@
 
   bool HasCssProperty() const;
 
-  void AddKeyframePropertiesToV8Object(V8ObjectBuilder&) const override;
+  void AddKeyframePropertiesToV8Object(V8ObjectBuilder&,
+                                       Element*) const override;
 
   void Trace(Visitor*) override;
 
diff --git a/third_party/blink/renderer/core/animation/transition_keyframe.cc b/third_party/blink/renderer/core/animation/transition_keyframe.cc
index a26bc65..18eb46c 100644
--- a/third_party/blink/renderer/core/animation/transition_keyframe.cc
+++ b/third_party/blink/renderer/core/animation/transition_keyframe.cc
@@ -5,10 +5,17 @@
 #include "third_party/blink/renderer/core/animation/transition_keyframe.h"
 
 #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h"
+#include "third_party/blink/renderer/core/animation/animation_input_helpers.h"
 #include "third_party/blink/renderer/core/animation/compositor_animations.h"
+#include "third_party/blink/renderer/core/animation/css_interpolation_environment.h"
+#include "third_party/blink/renderer/core/animation/css_interpolation_types_map.h"
 #include "third_party/blink/renderer/core/animation/interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/pairwise_interpolation_value.h"
 #include "third_party/blink/renderer/core/animation/transition_interpolation.h"
+#include "third_party/blink/renderer/core/css/properties/css_property_ref.h"
+#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/style/computed_style.h"
 
 namespace blink {
 
@@ -26,9 +33,33 @@
 }
 
 void TransitionKeyframe::AddKeyframePropertiesToV8Object(
-    V8ObjectBuilder& object_builder) const {
-  Keyframe::AddKeyframePropertiesToV8Object(object_builder);
-  // TODO(crbug.com/777971): Add in the property/value for TransitionKeyframe.
+    V8ObjectBuilder& object_builder,
+    Element* element) const {
+  Keyframe::AddKeyframePropertiesToV8Object(object_builder, element);
+
+  // TODO(crbug.com/933761): Fix resolution of the style in the case where the
+  // target element has been removed.
+  if (!element)
+    return;
+
+  Document& document = element->GetDocument();
+  StyleResolverState state(document, *element);
+  state.SetStyle(ComputedStyle::Create());
+  CSSInterpolationTypesMap map(document.GetPropertyRegistry(), document);
+  CSSInterpolationEnvironment environment(map, state, nullptr);
+  value_->GetType().Apply(value_->GetInterpolableValue(),
+                          value_->GetNonInterpolableValue(), environment);
+
+  const ComputedStyle* style = state.Style();
+  CSSPropertyRef ref(property_.GetCSSPropertyName(), document);
+  String property_value =
+      ref.GetProperty()
+          .CSSValueFromComputedStyle(*style, element->GetLayoutObject(), false)
+          ->CssText();
+
+  String property_name =
+      AnimationInputHelpers::PropertyHandleToKeyframeAttribute(property_);
+  object_builder.Add(property_name, property_value);
 }
 
 void TransitionKeyframe::Trace(Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/animation/transition_keyframe.h b/third_party/blink/renderer/core/animation/transition_keyframe.h
index 9a21096..978e1077 100644
--- a/third_party/blink/renderer/core/animation/transition_keyframe.h
+++ b/third_party/blink/renderer/core/animation/transition_keyframe.h
@@ -42,7 +42,8 @@
   void SetCompositorValue(CompositorKeyframeValue*);
   PropertyHandleSet Properties() const final;
 
-  void AddKeyframePropertiesToV8Object(V8ObjectBuilder&) const override;
+  void AddKeyframePropertiesToV8Object(V8ObjectBuilder&,
+                                       Element*) const override;
 
   void Trace(Visitor*) override;
 
diff --git a/third_party/blink/renderer/core/core_idl_files.gni b/third_party/blink/renderer/core/core_idl_files.gni
index 073d3af53..e06e440 100644
--- a/third_party/blink/renderer/core/core_idl_files.gni
+++ b/third_party/blink/renderer/core/core_idl_files.gni
@@ -443,6 +443,7 @@
                     "svg/svg_unit_types.idl",
                     "svg/svg_use_element.idl",
                     "svg/svg_view_element.idl",
+                    "timing/event_counts.idl",
                     "timing/largest_contentful_paint.idl",
                     "timing/layout_shift.idl",
                     "timing/memory_info.idl",
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 5f83f4d..ac94a252 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -645,8 +645,8 @@
       inherited: true,
       field_group: "inherited",
       field_template: "external",
-      include_paths: ["third_party/blink/renderer/core/layout/layout_theme.h"],
-      default_value: "LayoutTheme::GetTheme().SystemColor(CSSValueID::kCanvastext, WebColorScheme::kLight)",
+      include_paths: ["third_party/blink/renderer/platform/graphics/color.h"],
+      default_value: "Color::kBlack",
       type_name: "Color",
       computed_style_custom_functions: ["getter", "setter"],
       style_builder_custom_functions: ["initial", "inherit", "value"],
@@ -5432,8 +5432,8 @@
       inherited: true,
       field_group: "inherited",
       field_template: "external",
-      include_paths: ["third_party/blink/renderer/core/layout/layout_theme.h"],
-      default_value: "LayoutTheme::GetTheme().SystemColor(CSSValueID::kCanvastext, WebColorScheme::kLight)",
+      include_paths: ["third_party/blink/renderer/platform/graphics/color.h"],
+      default_value: "Color::kBlack",
       type_name: "Color",
       computed_style_custom_functions: ["getter", "setter"],
       style_builder_custom_functions: ["initial", "inherit", "value"],
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index e821c1ca..1416512 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1238,10 +1238,6 @@
                                                        : 1);
   initial_style->SetEffectiveZoom(initial_style->Zoom());
 
-  initial_style->SetInternalVisitedColor(
-      initial_style->InitialColorForColorScheme());
-  initial_style->SetColor(initial_style->InitialColorForColorScheme());
-
   FontDescription document_font_description =
       initial_style->GetFontDescription();
   document_font_description.SetLocale(
@@ -2331,6 +2327,8 @@
       state.Style()->SetColor(
           StyleBuilderConverter::ConvertColor(state, *color_value));
     }
+  } else if (state.GetElement() == GetDocument().documentElement()) {
+    state.Style()->SetColor(state.Style()->InitialColorForColorScheme());
   }
 
   if (const CSSValue* visited_color_value =
diff --git a/third_party/blink/renderer/core/css/svg.css b/third_party/blink/renderer/core/css/svg.css
index 15438d9..f031de7 100644
--- a/third_party/blink/renderer/core/css/svg.css
+++ b/third_party/blink/renderer/core/css/svg.css
@@ -95,6 +95,10 @@
    https://drafts.csswg.org/css-color-adjust-1/#forced-colors-properties
 */
 @media forced-colors {
+  svg:root {
+    color: CanvasText;
+  }
+
   svg {
       forced-color-adjust: none;
   }
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index cb7aa76a..64278a1 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -541,6 +541,7 @@
     mojo::PendingRemote<mojom::blink::BlobURLToken> blob_url_token,
     base::TimeTicks input_start_time,
     const String& href_translate,
+    const base::Optional<WebImpression>& impression,
     WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr> initiator_csp,
     network::mojom::blink::CSPSourcePtr initiator_self_source,
     network::mojom::IPAddressSpace initiator_address_space,
@@ -574,6 +575,8 @@
   navigation_info->navigation_initiator_remote =
       std::move(navigation_initiator);
 
+  navigation_info->impression = impression;
+
   // Can be null.
   LocalFrame* local_parent_frame = GetLocalParentFrame(web_frame_);
 
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index 74f08e0..bd150af 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -125,6 +125,7 @@
       mojo::PendingRemote<mojom::blink::BlobURLToken>,
       base::TimeTicks input_start_time,
       const String& href_translate,
+      const base::Optional<WebImpression>& impression,
       WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
           initiator_csp,
       network::mojom::blink::CSPSourcePtr initiator_self_source,
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc
index a27b383..11064ed 100644
--- a/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -9535,7 +9535,8 @@
                 bool initiator_frame_has_download_sandbox_flag,
                 bool blocking_downloads_in_sandbox_enabled,
                 bool initiator_frame_is_ad,
-                mojo::ScopedMessagePipeHandle) override {
+                mojo::ScopedMessagePipeHandle,
+                const base::Optional<WebImpression>& impression) override {
     last_request_.CopyFrom(request);
   }
 
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index 5faee38f..c93bc8bd 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -49,6 +49,7 @@
 #include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/public/platform/web_content_settings_client.h"
 #include "third_party/blink/public/platform/web_effective_connection_type.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/public/platform/web_worker_fetch_context.h"
 #include "third_party/blink/public/web/web_frame_load_type.h"
 #include "third_party/blink/public/web/web_history_commit_type.h"
@@ -156,6 +157,7 @@
       mojo::PendingRemote<mojom::blink::BlobURLToken>,
       base::TimeTicks input_start_time,
       const String& href_translate,
+      const base::Optional<WebImpression>& impression,
       WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
           initiator_csp,
       network::mojom::blink::CSPSourcePtr initiator_self_source,
diff --git a/third_party/blink/renderer/core/frame/remote_frame.cc b/third_party/blink/renderer/core/frame/remote_frame.cc
index 04c16e3..e49e577b 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.cc
+++ b/third_party/blink/renderer/core/frame/remote_frame.cc
@@ -163,7 +163,8 @@
                      frame_load_type == WebFrameLoadType::kReplaceCurrentItem,
                      is_opener_navigation,
                      initiator_frame_has_download_sandbox_flag,
-                     initiator_frame_is_ad, frame_request.GetBlobURLToken());
+                     initiator_frame_is_ad, frame_request.GetBlobURLToken(),
+                     frame_request.Impression());
 }
 
 void RemoteFrame::DetachImpl(FrameDetachType type) {
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client.h b/third_party/blink/renderer/core/frame/remote_frame_client.h
index e73cc62..21baad5 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client.h
+++ b/third_party/blink/renderer/core/frame/remote_frame_client.h
@@ -5,9 +5,11 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REMOTE_FRAME_CLIENT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REMOTE_FRAME_CLIENT_H_
 
+#include "base/optional.h"
 #include "cc/paint/paint_canvas.h"
 #include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink-forward.h"
 #include "third_party/blink/public/platform/viewport_intersection_state.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/public/web/web_frame_load_type.h"
 #include "third_party/blink/renderer/core/frame/frame_client.h"
 #include "third_party/blink/renderer/core/frame/frame_types.h"
@@ -33,7 +35,8 @@
                         bool is_opener_navigation,
                         bool initiator_frame_has_download_sandbox_flag,
                         bool initiator_frame_is_ad,
-                        mojo::PendingRemote<mojom::blink::BlobURLToken>) = 0;
+                        mojo::PendingRemote<mojom::blink::BlobURLToken>,
+                        const base::Optional<WebImpression>& impression) = 0;
   unsigned BackForwardLength() override = 0;
 
   // Forwards a postMessage for a remote frame.
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc b/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
index ec1271d..132ec7a 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
@@ -104,7 +104,8 @@
     bool is_opener_navigation,
     bool initiator_frame_has_download_sandbox_flag,
     bool initiator_frame_is_ad,
-    mojo::PendingRemote<mojom::blink::BlobURLToken> blob_url_token) {
+    mojo::PendingRemote<mojom::blink::BlobURLToken> blob_url_token,
+    const base::Optional<WebImpression>& impression) {
   bool blocking_downloads_in_sandbox_enabled =
       RuntimeEnabledFeatures::BlockingDownloadsInSandboxEnabled();
   if (web_frame_->Client()) {
@@ -112,7 +113,7 @@
         WrappedResourceRequest(request), should_replace_current_entry,
         is_opener_navigation, initiator_frame_has_download_sandbox_flag,
         blocking_downloads_in_sandbox_enabled, initiator_frame_is_ad,
-        blob_url_token.PassPipe());
+        blob_url_token.PassPipe(), impression);
   }
 }
 
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client_impl.h b/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
index 382e4f8..dc9a6cd 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
+++ b/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
@@ -38,7 +38,8 @@
                 bool is_opener_navigation,
                 bool prevent_sandboxed_download,
                 bool initiator_frame_is_ad,
-                mojo::PendingRemote<mojom::blink::BlobURLToken>) override;
+                mojo::PendingRemote<mojom::blink::BlobURLToken>,
+                const base::Optional<WebImpression>& impression) override;
   unsigned BackForwardLength() override;
   void ForwardPostMessage(MessageEvent*,
                           scoped_refptr<const SecurityOrigin> target,
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
index 932d534..920a4367 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -25,6 +25,7 @@
 #include "third_party/blink/renderer/core/html/html_anchor_element.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "base/time/time.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/input/focus_type.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -40,6 +41,7 @@
 #include "third_party/blink/renderer/core/html/anchor_element_metrics_sender.h"
 #include "third_party/blink/renderer/core/html/html_image_element.h"
 #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
+#include "third_party/blink/renderer/core/html_names.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/loader/frame_load_request.h"
 #include "third_party/blink/renderer/core/loader/navigation_policy.h"
@@ -50,6 +52,7 @@
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 
 namespace blink {
@@ -336,6 +339,74 @@
   return IsLink() && !HasEditableStyle(*this);
 }
 
+bool HTMLAnchorElement::HasImpression() const {
+  return hasAttribute(html_names::kImpressiondataAttr) &&
+         hasAttribute(html_names::kConversiondestinationAttr);
+}
+
+base::Optional<WebImpression> HTMLAnchorElement::GetImpressionForNavigation()
+    const {
+  DCHECK(HasImpression());
+
+  // Conversion measurement is only allowed when both the frame and the main
+  // frame (if different) have a secure origin.
+  LocalFrame* frame = GetDocument().GetFrame();
+  const Frame& main_frame = frame->Tree().Top();
+  if (!main_frame.GetSecurityContext()
+           ->GetSecurityOrigin()
+           ->IsPotentiallyTrustworthy()) {
+    return base::nullopt;
+  }
+  if (!frame->IsMainFrame() && !frame->GetSecurityContext()
+                                    ->GetSecurityOrigin()
+                                    ->IsPotentiallyTrustworthy()) {
+    return base::nullopt;
+  }
+
+  const AtomicString& conversion_destination_string =
+      FastGetAttribute(html_names::kConversiondestinationAttr);
+  scoped_refptr<const SecurityOrigin> conversion_destination =
+      SecurityOrigin::CreateFromString(conversion_destination_string);
+  if (!conversion_destination->IsPotentiallyTrustworthy())
+    return base::nullopt;
+
+  bool impression_data_is_valid = false;
+  uint64_t impression_data = FastGetAttribute(html_names::kImpressiondataAttr)
+                                 .GetString()
+                                 .HexToUInt64Strict(&impression_data_is_valid);
+
+  // Provide a default of 0 if the impression data was not valid.
+  impression_data = impression_data_is_valid ? impression_data : 0UL;
+
+  // Reporting origin is an optional attribute. Reporting origins must be
+  // secure.
+  base::Optional<WebSecurityOrigin> reporting_origin;
+  if (hasAttribute(html_names::kReportingoriginAttr)) {
+    const AtomicString& reporting_origin_string =
+        FastGetAttribute(html_names::kReportingoriginAttr);
+    reporting_origin =
+        SecurityOrigin::CreateFromString(reporting_origin_string);
+
+    if (!reporting_origin->IsPotentiallyTrustworthy())
+      return base::nullopt;
+  }
+
+  // Impression expiry is an optional attribute.
+  base::Optional<base::TimeDelta> expiry;
+  if (hasAttribute(html_names::kImpressionexpiryAttr)) {
+    bool expiry_is_valid = false;
+    uint64_t expiry_milliseconds =
+        FastGetAttribute(html_names::kImpressionexpiryAttr)
+            .GetString()
+            .ToUInt64Strict(&expiry_is_valid);
+    if (expiry_is_valid)
+      expiry = base::TimeDelta::FromMilliseconds(expiry_milliseconds);
+  }
+
+  return WebImpression{conversion_destination, reporting_origin,
+                       impression_data, expiry};
+}
+
 void HTMLAnchorElement::SendPings(const KURL& destination_url) const {
   const AtomicString& ping_value = FastGetAttribute(html_names::kPingAttr);
   if (ping_value.IsNull() || !GetDocument().GetSettings() ||
@@ -454,6 +525,14 @@
                       WebFeature::kHTMLAnchorElementHrefTranslateAttribute);
   }
 
+  // Only attach impressions for main frame navigations.
+  if (target_frame && target_frame->IsMainFrame() && request.HasUserGesture() &&
+      HasImpression()) {
+    base::Optional<WebImpression> impression = GetImpressionForNavigation();
+    if (impression)
+      frame_request.SetImpression(*impression);
+  }
+
   if (target_frame) {
     // If we also have a pending form submission, make sure this anchor
     // navigation takes precedence over it, except in the case of href being
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.h b/third_party/blink/renderer/core/html/html_anchor_element.h
index 64a4e63..a76f6ce8 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.h
+++ b/third_party/blink/renderer/core/html/html_anchor_element.h
@@ -24,6 +24,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_HTML_ANCHOR_ELEMENT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_HTML_ANCHOR_ELEMENT_H_
 
+#include "base/optional.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/html/html_element.h"
@@ -90,6 +92,15 @@
   LinkHash VisitedLinkHash() const;
   void InvalidateCachedVisitedLinkHash() { cached_visited_link_hash_ = 0; }
 
+  // Returns whether this element is a valid impression declaration tag. This is
+  // determined by looking at the presence of required attributes.
+  bool HasImpression() const;
+
+  // Returns the WebImpression struct with all data declared by impression
+  // related attributes on |this|. If the impression attributes do not contain
+  // allowed values, base::nullopt is returned.
+  base::Optional<WebImpression> GetImpressionForNavigation() const;
+
   void SendPings(const KURL& destination_url) const;
 
   void Trace(Visitor*) override;
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5
index 084b45e3..7a002f2 100644
--- a/third_party/blink/renderer/core/html/html_attribute_names.json5
+++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -57,6 +57,7 @@
     "contenteditable",
     "controls",
     "controlslist",
+    "conversiondestination",
     "coords",
     "crossorigin",
     "csp",
@@ -104,6 +105,8 @@
     "imagesizes",
     "imagesrcset",
     "importance",
+    "impressiondata",
+    "impressionexpiry",
     "incremental",
     "inert",
     "inputmode",
@@ -279,6 +282,7 @@
     "readonly",
     "referrerpolicy",
     "rel",
+    "reportingorigin",
     "required",
     "rev",
     "reversed",
diff --git a/third_party/blink/renderer/core/html/resources/forced_colors.css b/third_party/blink/renderer/core/html/resources/forced_colors.css
index 8f71b5c5..c35e7e7 100644
--- a/third_party/blink/renderer/core/html/resources/forced_colors.css
+++ b/third_party/blink/renderer/core/html/resources/forced_colors.css
@@ -11,6 +11,7 @@
 @media forced-colors {
   body {
     background-color: Canvas;
+    color: CanvasText;
     fill: currentColor;
   }
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
index 79887e2f..fb1e02b 100644
--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
@@ -880,6 +880,19 @@
                                    InspectorPageAgent::kDocumentResource);
 }
 
+// This method was pulled out of PrepareRequest(), because we want to be able
+// to create DevTools issues before the PrepareRequest() call. We need these
+// IDs to be set, to properly create a DevTools issue.
+void InspectorNetworkAgent::SetDevToolsIds(ResourceRequest& request) {
+  request.SetDevToolsToken(devtools_token_);
+
+  // The loader parameter is for generating a browser generated ID for a browser
+  // initiated request. We pass it null here because we are reporting a renderer
+  // generated ID for a renderer initiated request.
+  request.SetDevToolsId(IdentifiersFactory::RequestId(/* loader */ nullptr,
+                                                      request.InspectorId()));
+}
+
 void InspectorNetworkAgent::PrepareRequest(
     DocumentLoader* loader,
     ResourceRequest& request,
@@ -893,7 +906,7 @@
     for (const WTF::String& key : extra_request_headers_.Keys()) {
       const WTF::String& value = extra_request_headers_.Get(key);
       AtomicString header_name = AtomicString(key);
-      // When overriding referer, also override referrer policy
+      // When overriding referrer, also override referrer policy
       // for this request to assure the request will be allowed.
       // TODO: Should we store the referrer header somewhere other than
       // |extra_request_headers_|?
@@ -908,8 +921,6 @@
 
   request.SetReportRawHeaders(true);
 
-  request.SetDevToolsToken(devtools_token_);
-
   if (cache_disabled_.Get()) {
     if (LoadsFromCacheOnly(request) &&
         request.GetRequestContext() != mojom::RequestContextType::INTERNAL) {
@@ -921,12 +932,6 @@
   }
   if (bypass_service_worker_.Get())
     request.SetSkipServiceWorker(true);
-
-  // The loader parameter is for generating a browser generated ID for a browser
-  // initiated request. We pass it null here because we are reporting a renderer
-  // generated ID for a renderer initiated request.
-  request.SetDevToolsId(IdentifiersFactory::RequestId(/* loader */ nullptr,
-                                                      request.InspectorId()));
 }
 
 void InspectorNetworkAgent::WillSendRequest(
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.h b/third_party/blink/renderer/core/inspector/inspector_network_agent.h
index 9217ce02..e6c46fe 100644
--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.h
@@ -192,6 +192,7 @@
                                const char* payload,
                                size_t payload_length);
   void DidReceiveWebSocketMessageError(uint64_t identifier, const String&);
+  void SetDevToolsIds(ResourceRequest& request);
 
   // Called from frontend
   protocol::Response enable(Maybe<int> total_buffer_size,
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 68cba10..c51b6bdc 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -3540,9 +3540,12 @@
       // it's based on first_line_block's style. We need to get the uncached
       // first line style based on this object's style and cache the result in
       // it.
-      return StyleRef().AddCachedPseudoElementStyle(
-          first_line_block->GetUncachedPseudoElementStyle(
-              PseudoElementStyleRequest(kPseudoIdFirstLine), Style()));
+      if (scoped_refptr<ComputedStyle> first_line_style =
+              first_line_block->GetUncachedPseudoElementStyle(
+                  PseudoElementStyleRequest(kPseudoIdFirstLine), Style())) {
+        return StyleRef().AddCachedPseudoElementStyle(
+            std::move(first_line_style));
+      }
     }
   } else if (!IsAnonymous() && IsLayoutInline() &&
              !GetNode()->IsFirstLetterPseudoElement()) {
@@ -3554,9 +3557,12 @@
             Parent()->FirstLineStyleWithoutFallback()) {
       // A first-line style is in effect. Get uncached first line style based on
       // parent_first_line_style and cache the result in this object's style.
-      return StyleRef().AddCachedPseudoElementStyle(
-          GetUncachedPseudoElementStyle(kPseudoIdFirstLineInherited,
-                                        parent_first_line_style));
+      if (scoped_refptr<ComputedStyle> first_line_style =
+              GetUncachedPseudoElementStyle(kPseudoIdFirstLineInherited,
+                                            parent_first_line_style)) {
+        return StyleRef().AddCachedPseudoElementStyle(
+            std::move(first_line_style));
+      }
     }
   }
   return nullptr;
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 9d0e5660..41d5ce0 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
@@ -309,8 +309,10 @@
               ? std::max(float_right_inline_size, margin_line_right)
               : float_right_inline_size + margin_line_right;
 
+      // The order of operations is important here. If child_sizes.max_size is
+      // saturated, adding the insets sequentially can result in an DCHECK.
       max_inline_contribution =
-          child_sizes.max_size + line_left_inset + line_right_inset;
+          child_sizes.max_size + (line_left_inset + line_right_inset);
     } else {
       // This is just a standard inflow child.
       max_inline_contribution = child_sizes.max_size + margins.InlineSum();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.cc
index a99e66a7..0e00a0b 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.cc
@@ -43,9 +43,6 @@
 }
 
 scoped_refptr<const NGLayoutResult> NGFieldsetLayoutAlgorithm::Layout() {
-  // TODO(almaher): Make sure the border start is handled correctly during
-  // fragmentation.
-
   // Layout of a fieldset container consists of two parts: Create a child
   // fragment for the rendered legend (if any), and create a child fragment for
   // the fieldset contents anonymous box (if any). Fieldset scrollbars and
@@ -68,11 +65,11 @@
       container_builder_.SetIsInitialColumnBalancingPass();
   }
 
-  // TODO(almaher): Instead of setting this to 0 when resuming layout, this
-  // should equal the amount of the border block-start that is remaining from
-  // the previous fragment(s).
-  if (!IsResumingLayout(BreakToken()))
-    intrinsic_block_size_ = borders_.block_start;
+  // Calculate the amount of the border block-start that was consumed in
+  // previous fragments.
+  consumed_border_block_start_ =
+      std::min(consumed_block_size_, borders_.block_start);
+  intrinsic_block_size_ = borders_.block_start - consumed_border_block_start_;
 
   NGBreakStatus break_status = LayoutChildren();
   if (break_status == NGBreakStatus::kNeedsEarlierBreak) {
@@ -174,10 +171,11 @@
       ShrinkAvailableSize(border_box_size_, borders_with_legend);
 
   if (adjusted_padding_box_size.block_size != kIndefiniteSize) {
-    // If intrinsic_block_size_ does not include the border block-start, exclude
-    // it from adjusted_padding_box_size, as well.
-    if (intrinsic_block_size_ == LayoutUnit())
-      adjusted_padding_box_size.block_size -= borders_.block_start;
+    // If intrinsic_block_size_ does not include the border block-start that was
+    // consumed in previous fragments, exclude consumed_border_block_start_ from
+    // adjusted_padding_box_size, as well.
+    if (consumed_border_block_start_ > LayoutUnit())
+      adjusted_padding_box_size.block_size -= consumed_border_block_start_;
 
     // If the legend has been laid out in previous fragments,
     // adjusted_padding_box_size will need to be adjusted further to account for
@@ -281,17 +279,11 @@
         legend_margins.BlockSum();
     LayoutUnit space_left = borders_.block_start - legend_margin_box_block_size;
 
-    // If the border is smaller, intrinsic_block_size_ should now be based on
-    // the size of the legend instead of the border.
-    if (space_left <= LayoutUnit())
-      intrinsic_block_size_ = legend_margin_box_block_size;
-
-    // Don't adjust the block-start offset of the legend or fragment border if
-    // the legend broke.
-    if (legend_break_token || legend_broke_)
-      break;
-
     if (space_left > LayoutUnit()) {
+      // Don't adjust the block-start offset of the legend if the legend broke.
+      if (legend_break_token || legend_broke_)
+        break;
+
       // If the border is the larger one, though, it will stay put at the
       // border-box block-start edge of the fieldset. Then it's the legend
       // that needs to be pushed. We'll center the margin box in this case, to
@@ -305,6 +297,15 @@
         continue;
       }
     } else {
+      // If the border is smaller, intrinsic_block_size_ should now be based on
+      // the size of the legend instead of the border.
+      intrinsic_block_size_ = legend_margin_box_block_size;
+
+      // Don't adjust the block-start offset of the fragment border if it broke.
+      if (BreakToken() || (ConstraintSpace().HasKnownFragmentainerBlockSize() &&
+                           legend_margin_box_block_size >
+                               ConstraintSpace().FragmentainerBlockSize()))
+        break;
       // If the legend is larger than the width of the fieldset block-start
       // border, the actual padding edge of the fieldset will be moved
       // accordingly. This will be the block-start offset for the fieldset
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h
index b687d73..ae9ef4e 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm.h
@@ -70,6 +70,10 @@
   // the legend.
   LayoutUnit minimum_border_box_block_size_;
 
+  // The amount of the border block-start that was consumed in previous
+  // fragments.
+  LayoutUnit consumed_border_block_start_;
+
   // If true, this indicates that the legend broke during the current layout
   // pass.
   bool legend_broke_ = false;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm_test.cc
index 052e708..df4869b3 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fieldset_layout_algorithm_test.cc
@@ -1811,12 +1811,11 @@
       node, space, fragment->BreakToken());
   ASSERT_TRUE(fragment->BreakToken());
 
-  // TODO(almaher): The fieldset content should start at offset 60,20.
   dump = DumpFragmentTree(fragment.get());
   expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
   offset:unplaced size:220x40
     offset:60,0 size:10x10
-    offset:60,0 size:100x0
+    offset:60,20 size:100x0
 )DUMP";
   EXPECT_EQ(expectation, dump);
 
@@ -1879,11 +1878,10 @@
       node, space, fragment->BreakToken());
   ASSERT_TRUE(fragment->BreakToken());
 
-  // TODO(almaher): The fieldset content should start at offset 60,20.
   dump = DumpFragmentTree(fragment.get());
   expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
   offset:unplaced size:220x40
-    offset:60,0 size:100x0
+    offset:60,20 size:100x0
 )DUMP";
   EXPECT_EQ(expectation, dump);
 
@@ -1946,11 +1944,10 @@
       node, space, fragment->BreakToken());
   ASSERT_TRUE(fragment->BreakToken());
 
-  // TODO(almaher): The fieldset content should start at offset 60,20.
   dump = DumpFragmentTree(fragment.get());
   expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
   offset:unplaced size:220x40
-    offset:60,0 size:100x0
+    offset:60,20 size:100x0
 )DUMP";
   EXPECT_EQ(expectation, dump);
 
diff --git a/third_party/blink/renderer/core/loader/empty_clients.cc b/third_party/blink/renderer/core/loader/empty_clients.cc
index 31d1f0a9..3052057b 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.cc
+++ b/third_party/blink/renderer/core/loader/empty_clients.cc
@@ -104,6 +104,7 @@
     mojo::PendingRemote<mojom::blink::BlobURLToken>,
     base::TimeTicks,
     const String&,
+    const base::Optional<WebImpression>&,
     WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr> initiator_csp,
     network::mojom::blink::CSPSourcePtr initiator_csp_self,
     network::mojom::IPAddressSpace,
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
index bbfe287..90465ec 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.h
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -275,6 +275,7 @@
       mojo::PendingRemote<mojom::blink::BlobURLToken>,
       base::TimeTicks,
       const String&,
+      const base::Optional<WebImpression>&,
       WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
           initiator_csp,
       network::mojom::blink::CSPSourcePtr initiator_self_source,
@@ -415,7 +416,8 @@
                 bool is_opener_navigation,
                 bool initiator_frame_has_download_sandbox_flag,
                 bool initiator_frame_is_ad,
-                mojo::PendingRemote<mojom::blink::BlobURLToken>) override {}
+                mojo::PendingRemote<mojom::blink::BlobURLToken>,
+                const base::Optional<WebImpression>&) override {}
   unsigned BackForwardLength() override { return 0; }
   void ForwardPostMessage(
       MessageEvent*,
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
index 4750d2d8..51acc01 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -763,6 +763,9 @@
     // (i.e. "CSP: active, active") on asynchronous "stale-while-revalidate"
     // revalidation requests and if this is unexpected behavior.
     request.AddHttpHeaderField("CSP", "active");
+
+  if (!GetResourceFetcherProperties().IsDetached())
+    probe::SetDevToolsIds(Probe(), request);
 }
 
 void FrameFetchContext::SetFirstPartyCookie(ResourceRequest& request) {
diff --git a/third_party/blink/renderer/core/loader/frame_load_request.h b/third_party/blink/renderer/core/loader/frame_load_request.h
index 96190d87..9dcf81b 100644
--- a/third_party/blink/renderer/core/loader/frame_load_request.h
+++ b/third_party/blink/renderer/core/loader/frame_load_request.h
@@ -31,6 +31,7 @@
 #include "third_party/blink/public/common/navigation/triggering_event_info.h"
 #include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h"
+#include "third_party/blink/public/platform/web_impression.h"
 #include "third_party/blink/public/web/web_window_features.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/frame_types.h"
@@ -144,6 +145,14 @@
     resource_request_.ClearHTTPOrigin();
   }
 
+  // Impressions are set when a FrameLoadRequest is created for a click on an
+  // anchor tag that has conversion measurement attributes.
+  void SetImpression(const WebImpression& impression) {
+    impression_ = impression;
+  }
+
+  const base::Optional<WebImpression>& Impression() { return impression_; }
+
   // Whether either OriginDocument, RequestorOrigin or IsolatedWorldOrigin can
   // display the |url|,
   bool CanDisplay(const KURL&) const;
@@ -168,6 +177,7 @@
       mojom::RequestContextFrameType::kNone;
   WebWindowFeatures window_features_;
   bool is_window_open_ = false;
+  base::Optional<WebImpression> impression_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 2abe0457..d9144840 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -805,9 +805,9 @@
       request.GetTriggeringEventInfo(), request.Form(),
       request.ShouldCheckMainWorldContentSecurityPolicy(),
       request.GetBlobURLToken(), request.GetInputStartTime(),
-      request.HrefTranslate().GetString(), std::move(initiator_csp),
-      std::move(initiator_self_source), initiator_address_space,
-      std::move(navigation_initiator));
+      request.HrefTranslate().GetString(), request.Impression(),
+      std::move(initiator_csp), std::move(initiator_self_source),
+      initiator_address_space, std::move(navigation_initiator));
 }
 
 static void FillStaticResponseIfNeeded(WebNavigationParams* params,
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
index afa9b00d..3df845c 100644
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
@@ -242,6 +242,8 @@
     const ClientHintsPreferences& hints_preferences,
     const FetchParameters::ResourceWidth& resource_width,
     ResourceRequest& out_request) {
+  if (!GetResourceFetcherProperties().IsDetached())
+    probe::SetDevToolsIds(Probe(), out_request);
   MixedContentChecker::UpgradeInsecureRequest(
       out_request,
       &GetResourceFetcherProperties().GetFetchClientSettingsObject(),
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index 79dbfce..9ef7ca6 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -260,6 +260,12 @@
     full_context_.clip_changed |= cleared;
   }
 
+  CompositorElementId GetCompositorElementId(
+      CompositorElementIdNamespace namespace_id) const {
+    return CompositorElementIdFromUniqueObjectId(fragment_data_.UniqueId(),
+                                                 namespace_id);
+  }
+
   const LayoutObject& object_;
   NGPrePaintInfo* pre_paint_info_;
   // The tree builder context for the whole object.
@@ -534,6 +540,10 @@
       const auto& box_model = ToLayoutBoxModelObject(object_);
       TransformPaintPropertyNode::State state{
           FloatSize(box_model.StickyPositionOffset())};
+      // TODO(wangxianzhu): Not using GetCompositorElementId() here because
+      // sticky elements don't work properly under multicol for now, to keep
+      // consistency with CompositorElementIdFromUniqueObjectId() below.
+      // This will be fixed by LayoutNG block fragments.
       state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
           box_model.UniqueId(),
           CompositorElementIdNamespace::kStickyTranslation);
@@ -801,8 +811,8 @@
           object_.HasHiddenBackface()
               ? TransformPaintPropertyNode::BackfaceVisibility::kHidden
               : TransformPaintPropertyNode::BackfaceVisibility::kVisible;
-      state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
-          object_.UniqueId(), CompositorElementIdNamespace::kPrimaryTransform);
+      state.compositor_element_id = GetCompositorElementId(
+          CompositorElementIdNamespace::kPrimaryTransform);
 
       TransformPaintPropertyNode::AnimationState animation_state;
       animation_state.is_running_animation_on_compositor =
@@ -1045,8 +1055,8 @@
 
       CompositorElementId mask_compositor_element_id;
       if (mask_clip || has_spv1_composited_clip_path) {
-        mask_compositor_element_id = CompositorElementIdFromUniqueObjectId(
-            object_.UniqueId(), CompositorElementIdNamespace::kEffectMask);
+        mask_compositor_element_id =
+            GetCompositorElementId(CompositorElementIdNamespace::kEffectMask);
       }
 
       EffectPaintPropertyNode::State state;
@@ -1083,15 +1093,15 @@
           full_context_.direct_compositing_reasons &
           CompositingReasonsForEffectProperty();
       if (state.direct_compositing_reasons) {
-        state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
-            object_.UniqueId(), CompositorElementIdNamespace::kPrimaryEffect);
+        state.compositor_element_id = GetCompositorElementId(
+            CompositorElementIdNamespace::kPrimaryEffect);
       } else {
         // The effect node CompositorElementId is used to uniquely identify
         // renderpasses so even if we don't need one for animations we still
         // need to set an id. Using kPrimary avoids confusing cc::Animation
         // into thinking the element has been composited for animations.
-        state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
-            object_.UniqueId(), CompositorElementIdNamespace::kPrimary);
+        state.compositor_element_id =
+            GetCompositorElementId(CompositorElementIdNamespace::kPrimary);
       }
 
       // TODO(crbug.com/900241): Remove these setters when we can use
@@ -1148,10 +1158,8 @@
         clip_path_state.local_transform_space = context_.current.transform;
         clip_path_state.output_clip = output_clip;
         clip_path_state.blend_mode = SkBlendMode::kDstIn;
-        clip_path_state.compositor_element_id =
-            CompositorElementIdFromUniqueObjectId(
-                object_.UniqueId(),
-                CompositorElementIdNamespace::kEffectClipPath);
+        clip_path_state.compositor_element_id = GetCompositorElementId(
+            CompositorElementIdNamespace::kEffectClipPath);
         OnUpdate(
             properties_->UpdateClipPath(parent, std::move(clip_path_state)));
       } else {
@@ -1265,8 +1273,8 @@
       state.direct_compositing_reasons =
           full_context_.direct_compositing_reasons &
           CompositingReasonsForFilterProperty();
-      state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
-          object_.UniqueId(), CompositorElementIdNamespace::kEffectFilter);
+      state.compositor_element_id =
+          GetCompositorElementId(CompositorElementIdNamespace::kEffectFilter);
 
       // TODO(crbug.com/900241): Remove the setter when we can use
       // state.direct_compositing_reasons to check for active animations.
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
index ef0b463..289444c 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -4350,10 +4350,6 @@
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, CompositedUnderMultiColumn) {
-  // TODO(crbug.com/1064341): This test crashes in CompositeAfterPaint. Fix it.
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
-    return;
-
   SetBodyInnerHTML(R"HTML(
     <style>body { margin: 0; }</style>
     <div id='multicol' style='columns:3; column-fill:auto; column-gap: 0;
@@ -4502,10 +4498,6 @@
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, CompositedMulticolFrameUnderMulticol) {
-  // TODO(crbug.com/1064341): This test crashes in CompositeAfterPaint. Fix it.
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
-    return;
-
   SetBodyInnerHTML(R"HTML(
     <style>body { margin: 0 }</style>
     <div style='columns: 3; column-gap: 0; column-fill: auto;
@@ -5654,10 +5646,6 @@
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, CompositedLayerUnderClipUnderMulticol) {
-  // TODO(crbug.com/1064341): This test crashes in CompositeAfterPaint. Fix it.
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
-    return;
-
   SetBodyInnerHTML(R"HTML(
     <div id="multicol" style="columns: 2">
       <div id="clip" style="height: 100px; overflow: hidden">
diff --git a/third_party/blink/renderer/core/probe/core_probes.json5 b/third_party/blink/renderer/core/probe/core_probes.json5
index f75394c..ac06fa23 100644
--- a/third_party/blink/renderer/core/probe/core_probes.json5
+++ b/third_party/blink/renderer/core/probe/core_probes.json5
@@ -163,6 +163,7 @@
         "WillSendRequest",
         "WillSendNavigationRequest",
         "WillSendWebSocketHandshakeRequest",
+        "SetDevToolsIds",
       ]
     },
     InspectorPageAgent: {
diff --git a/third_party/blink/renderer/core/probe/core_probes.pidl b/third_party/blink/renderer/core/probe/core_probes.pidl
index c4d4e21..e0aff0f 100644
--- a/third_party/blink/renderer/core/probe/core_probes.pidl
+++ b/third_party/blink/renderer/core/probe/core_probes.pidl
@@ -177,4 +177,5 @@
   void PlayerEventsAdded(LocalFrame* frame, String player_id, const Vector<InspectorPlayerEvent>& events);
   void PlayerPropertiesChanged(LocalFrame* frame, String player_id, const Vector<InspectorPlayerProperty>& properties);
   void PlayersCreated(LocalFrame* frame, const Vector<WebString>& players);
+  void SetDevToolsIds(CoreProbeSink*, ResourceRequest& request);
 }
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index dfd982a..15ccd65 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -2579,8 +2579,7 @@
     // property should be canvastext, but since we do not yet ship color-scheme
     // aware system colors, we use this method instead. This should be replaced
     // by default_value:"canvastext" in css_properties.json5.
-    return LayoutTheme::GetTheme().SystemColor(
-        CSSValueID::kCanvastext, UsedColorSchemeForInitialColors());
+    return DarkColorScheme() ? Color::kWhite : Color::kBlack;
   }
 
   Color ForcedBackplateColor() const {
diff --git a/third_party/blink/renderer/core/timing/BUILD.gn b/third_party/blink/renderer/core/timing/BUILD.gn
index 05dde8f..355791f 100644
--- a/third_party/blink/renderer/core/timing/BUILD.gn
+++ b/third_party/blink/renderer/core/timing/BUILD.gn
@@ -8,6 +8,8 @@
   sources = [
     "dom_window_performance.cc",
     "dom_window_performance.h",
+    "event_counts.cc",
+    "event_counts.h",
     "event_timing.cc",
     "event_timing.h",
     "largest_contentful_paint.cc",
diff --git a/third_party/blink/renderer/core/timing/event_counts.cc b/third_party/blink/renderer/core/timing/event_counts.cc
new file mode 100644
index 0000000..e269f2f
--- /dev/null
+++ b/third_party/blink/renderer/core/timing/event_counts.cc
@@ -0,0 +1,64 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/timing/event_counts.h"
+
+namespace blink {
+
+class EventCountsIterationSource final
+    : public PairIterable<AtomicString, unsigned>::IterationSource {
+ public:
+  explicit EventCountsIterationSource(const EventCounts& map)
+      : map_(map), iterator_(map_->Map().begin()) {}
+
+  bool Next(ScriptState* script_state,
+            AtomicString& map_key,
+            unsigned& map_value,
+            ExceptionState&) override {
+    if (iterator_ == map_->Map().end())
+      return false;
+    map_key = iterator_->key;
+    map_value = iterator_->value;
+    ++iterator_;
+    return true;
+  }
+
+  void Trace(Visitor* visitor) override {
+    visitor->Trace(map_);
+    PairIterable<AtomicString, unsigned>::IterationSource::Trace(visitor);
+  }
+
+ private:
+  // Needs to be kept alive while we're iterating over it.
+  const Member<const EventCounts> map_;
+  HashMap<AtomicString, unsigned>::const_iterator iterator_;
+};
+
+void EventCounts::Add(const AtomicString& event_type) {
+  auto iterator = event_count_map_.find(event_type);
+  if (iterator == event_count_map_.end()) {
+    event_count_map_.insert(event_type, 1u);
+  } else {
+    iterator->value++;
+  }
+}
+
+PairIterable<AtomicString, unsigned>::IterationSource*
+EventCounts::StartIteration(ScriptState*, ExceptionState&) {
+  return MakeGarbageCollected<EventCountsIterationSource>(*this);
+}
+
+bool EventCounts::GetMapEntry(ScriptState*,
+                              const AtomicString& key,
+                              unsigned& value,
+                              ExceptionState&) {
+  auto it = event_count_map_.find(key);
+  if (it == event_count_map_.end())
+    return false;
+
+  value = it->value;
+  return true;
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/timing/event_counts.h b/third_party/blink/renderer/core/timing/event_counts.h
new file mode 100644
index 0000000..14908e5
--- /dev/null
+++ b/third_party/blink/renderer/core/timing/event_counts.h
@@ -0,0 +1,49 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TIMING_EVENT_COUNTS_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TIMING_EVENT_COUNTS_H_
+
+#include "third_party/blink/renderer/bindings/core/v8/maplike.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
+
+namespace blink {
+
+class EventCounts final : public ScriptWrappable,
+                          public Maplike<AtomicString, unsigned> {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  EventCounts() = default;
+
+  const HashMap<AtomicString, unsigned>& Map() const {
+    return event_count_map_;
+  }
+
+  // IDL attributes / methods
+  uint32_t size() const { return event_count_map_.size(); }
+
+  void Add(const AtomicString& event_type);
+
+  void Trace(Visitor* visitor) override { ScriptWrappable::Trace(visitor); }
+
+ private:
+  // Maplike implementation.
+  PairIterable<AtomicString, unsigned>::IterationSource* StartIteration(
+      ScriptState*,
+      ExceptionState&) override;
+  bool GetMapEntry(ScriptState*,
+                   const AtomicString& key,
+                   unsigned& value,
+                   ExceptionState&) override;
+
+  HashMap<AtomicString, unsigned> event_count_map_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_KEYBOARD_KEYBOARD_event_count_map_H_
diff --git a/third_party/blink/renderer/core/timing/event_counts.idl b/third_party/blink/renderer/core/timing/event_counts.idl
new file mode 100644
index 0000000..a78ac1fd
--- /dev/null
+++ b/third_party/blink/renderer/core/timing/event_counts.idl
@@ -0,0 +1,4 @@
+[Exposed=Window, RuntimeEnabled=EventTiming]
+interface EventCounts {
+    readonly maplike<DOMString, unsigned long long>;
+};
diff --git a/third_party/blink/renderer/core/timing/event_timing.cc b/third_party/blink/renderer/core/timing/event_timing.cc
index 693a61a..cfde178 100644
--- a/third_party/blink/renderer/core/timing/event_timing.cc
+++ b/third_party/blink/renderer/core/timing/event_timing.cc
@@ -16,6 +16,7 @@
 #include "third_party/blink/renderer/core/timing/performance_event_timing.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
+namespace blink {
 namespace {
 const base::TickClock* g_clock_for_testing = nullptr;
 
@@ -23,9 +24,6 @@
   return g_clock_for_testing ? g_clock_for_testing->NowTicks()
                              : base::TimeTicks::Now();
 }
-}  // namespace
-
-namespace blink {
 
 bool ShouldLogEvent(const Event& event) {
   return event.type() == event_type_names::kPointerdown ||
@@ -36,11 +34,21 @@
 }
 
 bool IsEventTypeForEventTiming(const Event& event) {
-  return (IsA<MouseEvent>(event) || IsA<PointerEvent>(event) ||
+  // Include only trusted events of certain kinds. Explicitly excluding input
+  // events that are considered continuous: event types for which the user agent
+  // may have timer-based dispatch under certain conditions. These are excluded
+  // since EventCounts cannot be used to properly computed percentiles on those.
+  // See spec: https://wicg.github.io/event-timing/#sec-events-exposed
+  return event.isTrusted() &&
+         (IsA<MouseEvent>(event) || IsA<PointerEvent>(event) ||
           IsA<TouchEvent>(event) || IsA<KeyboardEvent>(event) ||
           IsA<WheelEvent>(event) || event.IsInputEvent() ||
-          event.IsCompositionEvent()) &&
-         event.isTrusted();
+          event.IsCompositionEvent() || event.IsDragEvent()) &&
+         event.type() != event_type_names::kMousemove &&
+         event.type() != event_type_names::kPointermove &&
+         event.type() != event_type_names::kTouchmove &&
+         event.type() != event_type_names::kWheel &&
+         event.type() != event_type_names::kDrag;
 }
 
 bool ShouldReportForEventTiming(WindowPerformance* performance) {
@@ -55,6 +63,8 @@
           performance->HasObserverFor(PerformanceEntry::kEvent));
 }
 
+}  // namespace
+
 EventTiming::EventTiming(base::TimeTicks processing_start,
                          base::TimeTicks event_timestamp,
                          WindowPerformance* performance)
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc
index 0942dbd..a3cfc431 100644
--- a/third_party/blink/renderer/core/timing/performance.cc
+++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -148,6 +148,10 @@
   return nullptr;
 }
 
+EventCounts* Performance::eventCounts() {
+  return nullptr;
+}
+
 namespace {
 
 bool IsMeasureMemoryAvailable(ScriptState* script_state) {
diff --git a/third_party/blink/renderer/core/timing/performance.h b/third_party/blink/renderer/core/timing/performance.h
index 865d975..12964e8 100644
--- a/third_party/blink/renderer/core/timing/performance.h
+++ b/third_party/blink/renderer/core/timing/performance.h
@@ -58,6 +58,7 @@
 namespace blink {
 
 class PerformanceMarkOptions;
+class EventCounts;
 class ExceptionState;
 class LargestContentfulPaint;
 class LayoutShift;
@@ -97,6 +98,7 @@
   virtual MemoryInfo* memory() const;
   virtual ScriptPromise measureMemory(ScriptState*,
                                       ExceptionState& exception_state) const;
+  virtual EventCounts* eventCounts();
 
   // Reduce the resolution to prevent timing attacks. See:
   // http://www.w3.org/TR/hr-time-2/#privacy-security
diff --git a/third_party/blink/renderer/core/timing/performance.idl b/third_party/blink/renderer/core/timing/performance.idl
index d677c26..4939cad 100644
--- a/third_party/blink/renderer/core/timing/performance.idl
+++ b/third_party/blink/renderer/core/timing/performance.idl
@@ -73,5 +73,8 @@
     // https://github.com/WICG/js-self-profiling/
     [MeasureAs=JSSelfProfiling, CallWith=ScriptState, RuntimeEnabled=ExperimentalJSProfiler, RaisesException] Promise<Profiler> profile(ProfilerInitOptions options);
 
+    // Event Timing
+    [Exposed=Window, SameObject, SaveSameObject, RuntimeEnabled=EventTiming] readonly attribute EventCounts eventCounts;
+
     [CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON();
 };
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc
index 3725580..dbf3929 100644
--- a/third_party/blink/renderer/core/timing/window_performance.cc
+++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -227,6 +227,7 @@
 void WindowPerformance::Trace(Visitor* visitor) {
   visitor->Trace(event_timings_);
   visitor->Trace(first_pointer_down_event_timing_);
+  visitor->Trace(event_counts_);
   visitor->Trace(navigation_);
   visitor->Trace(timing_);
   Performance::Trace(visitor);
@@ -341,6 +342,9 @@
   if (!GetFrame())
     return;
 
+  if (!event_counts_)
+    event_counts_ = MakeGarbageCollected<EventCounts>();
+  event_counts_->Add(event_type);
   PerformanceEventTiming* entry = PerformanceEventTiming::Create(
       event_type, MonotonicTimeToDOMHighResTimeStamp(start_time),
       MonotonicTimeToDOMHighResTimeStamp(processing_start),
@@ -440,6 +444,13 @@
   AddLayoutShiftBuffer(*entry);
 }
 
+EventCounts* WindowPerformance::eventCounts() {
+  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
+  if (!event_counts_)
+    event_counts_ = MakeGarbageCollected<EventCounts>();
+  return event_counts_;
+}
+
 void WindowPerformance::OnLargestContentfulPaintUpdated(
     base::TimeTicks paint_time,
     uint64_t paint_size,
diff --git a/third_party/blink/renderer/core/timing/window_performance.h b/third_party/blink/renderer/core/timing/window_performance.h
index 891cab4..435910ca 100644
--- a/third_party/blink/renderer/core/timing/window_performance.h
+++ b/third_party/blink/renderer/core/timing/window_performance.h
@@ -36,6 +36,7 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/core/frame/performance_monitor.h"
+#include "third_party/blink/renderer/core/timing/event_counts.h"
 #include "third_party/blink/renderer/core/timing/memory_info.h"
 #include "third_party/blink/renderer/core/timing/performance.h"
 #include "third_party/blink/renderer/core/timing/performance_navigation.h"
@@ -61,6 +62,8 @@
 
   MemoryInfo* memory() const override;
 
+  EventCounts* eventCounts() override;
+
   bool FirstInputDetected() const { return !!first_input_timing_; }
 
   // This method creates a PerformanceEventTiming and if needed creates a swap
@@ -122,6 +125,7 @@
   // |duration| has not been resolved.
   HeapVector<Member<PerformanceEventTiming>> event_timings_;
   Member<PerformanceEventTiming> first_pointer_down_event_timing_;
+  Member<EventCounts> event_counts_;
   mutable Member<PerformanceNavigation> navigation_;
   mutable Member<PerformanceTiming> timing_;
 };
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index f24e9272..9cb65fc 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -1763,10 +1763,9 @@
       !layout_object_->IsBox())
     return nullptr;
 
-  auto* frame_view = DocumentFrameView();
-  if (!frame_view || !frame_view->UpdateAllLifecyclePhasesExceptPaint(
-                         DocumentUpdateReason::kAccessibility))
-    return nullptr;
+  // Must be called with lifecycle >= compositing clean.
+  DCHECK_GE(GetDocument()->Lifecycle().GetState(),
+            DocumentLifecycle::kCompositingClean);
 
   PaintLayer* layer = ToLayoutBox(layout_object_)->Layer();
 
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 8982c381..b728d93 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1346,12 +1346,15 @@
   if (IsDetached())
     return false;
 
-  bool inside_portal = GetDocument() && GetDocument()->GetPage() &&
-                       GetDocument()->GetPage()->InsidePortal();
   // Focusable: web area -- this is the only focusable non-element. Web areas
   // inside portals are not focusable though (portal contents cannot get focus).
-  if (IsWebArea())
+  // The portal check is only necessary for web areas, as all other objects
+  // within a portal are ignored.
+  if (IsWebArea()) {
+    bool inside_portal = GetDocument() && GetDocument()->GetPage() &&
+                         GetDocument()->GetPage()->InsidePortal();
     return !inside_portal;
+  }
 
   // NOT focusable: objects with no DOM node, e.g. extra layout blocks inserted
   // as filler, or objects where the node is not an element, such as a text
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index a03f96f..7c3cd29 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -1905,11 +1905,7 @@
 }
 
 void AXObjectCacheImpl::OnTouchAccessibilityHover(const IntPoint& location) {
-  // TODO(aleventhal) This triggers a DCHECK when running
-  // content_browsertests --gtest_filter=TouchAccessibility*.TouchExploration*
-  // DocumentLifecycle::DisallowTransitionScope
-  //   disallow(document_->Lifecycle());
-
+  DocumentLifecycle::DisallowTransitionScope disallow(document_->Lifecycle());
   AXObject* hit = Root()->AccessibilityHitTest(location);
   if (hit) {
     // Ignore events on a frame or plug-in, because the touch events
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc
index 964056e..25b26059 100644
--- a/third_party/blink/renderer/modules/exported/web_ax_object.cc
+++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -711,6 +711,15 @@
   IntPoint contents_point =
       private_->DocumentFrameView()->SoonToBeRemovedUnscaledViewportToContents(
           IntPoint(point));
+
+  Document* document = private_->GetDocument();
+  if (!document || !document->View())
+    return WebAXObject();
+  if (!document->View()->UpdateAllLifecyclePhasesExceptPaint(
+          DocumentUpdateReason::kAccessibility)) {
+    return WebAXObject();
+  }
+
   AXObject* hit = private_->AccessibilityHitTest(contents_point);
 
   if (hit)
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
index 28801614..47fbf7dd 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -54,9 +54,9 @@
   DCHECK(pc_);
   DCHECK(receiver_);
   DCHECK(track_);
-  if (force_encoded_audio_insertable_streams_)
+  if (force_encoded_audio_insertable_streams_ && track_->kind() == "audio")
     RegisterEncodedAudioStreamCallback();
-  if (force_encoded_video_insertable_streams_)
+  if (force_encoded_video_insertable_streams_ && track_->kind() == "video")
     RegisterEncodedVideoStreamCallback();
 }
 
@@ -362,6 +362,7 @@
   DCHECK(!platform_receiver()
               ->GetEncodedAudioStreamTransformer()
               ->HasTransformerCallback());
+  DCHECK_EQ(track_->kind(), "audio");
   platform_receiver()
       ->GetEncodedAudioStreamTransformer()
       ->SetTransformerCallback(
@@ -370,9 +371,7 @@
 }
 
 void RTCRtpReceiver::UnregisterEncodedAudioStreamCallback() {
-  DCHECK(!platform_receiver()
-              ->GetEncodedAudioStreamTransformer()
-              ->HasTransformerCallback());
+  DCHECK_EQ(track_->kind(), "audio");
   platform_receiver()
       ->GetEncodedAudioStreamTransformer()
       ->ResetTransformerCallback();
@@ -432,6 +431,7 @@
   DCHECK(!platform_receiver()
               ->GetEncodedVideoStreamTransformer()
               ->HasTransformerCallback());
+  DCHECK_EQ(track_->kind(), "video");
   platform_receiver()
       ->GetEncodedVideoStreamTransformer()
       ->SetTransformerCallback(
@@ -440,9 +440,7 @@
 }
 
 void RTCRtpReceiver::UnregisterEncodedVideoStreamCallback() {
-  DCHECK(!platform_receiver()
-              ->GetEncodedVideoStreamTransformer()
-              ->HasTransformerCallback());
+  DCHECK_EQ(track_->kind(), "video");
   platform_receiver()
       ->GetEncodedVideoStreamTransformer()
       ->ResetTransformerCallback();
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
index 7b928c0..a6afe97 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
@@ -147,18 +147,21 @@
         state_(std::move(state)) {
     DCHECK(native_peer_connection_);
     DCHECK(state_.is_initialized());
-    if (force_encoded_audio_insertable_streams) {
+    if (force_encoded_audio_insertable_streams &&
+        webrtc_receiver_->media_type() == cricket::MEDIA_TYPE_AUDIO) {
       encoded_audio_transformer_ =
           std::make_unique<RTCEncodedAudioStreamTransformer>(main_task_runner_);
       webrtc_receiver_->SetDepacketizerToDecoderFrameTransformer(
           encoded_audio_transformer_->Delegate());
     }
-    if (force_encoded_video_insertable_streams) {
+    if (force_encoded_video_insertable_streams &&
+        webrtc_receiver_->media_type() == cricket::MEDIA_TYPE_VIDEO) {
       encoded_video_transformer_ =
           std::make_unique<RTCEncodedVideoStreamTransformer>(main_task_runner_);
       webrtc_receiver_->SetDepacketizerToDecoderFrameTransformer(
           encoded_video_transformer_->Delegate());
     }
+    DCHECK(!encoded_audio_transformer_ || !encoded_video_transformer_);
   }
 
   const RtpReceiverState& state() const {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
index 622599d03..cf601a7 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
@@ -178,7 +178,8 @@
                              /*force_encoded_audio_insertable_streams=*/true,
                              /*force_encoded_video_insertable_streams=*/true);
   EXPECT_TRUE(receiver_->GetEncodedAudioStreamTransformer());
-  EXPECT_TRUE(receiver_->GetEncodedVideoStreamTransformer());
+  // There should be no video transformer in audio receivers.
+  EXPECT_FALSE(receiver_->GetEncodedVideoStreamTransformer());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
index 9879ac7..d1f190e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -392,12 +392,14 @@
       track_(track),
       streams_(std::move(streams)),
       force_encoded_audio_insertable_streams_(
-          force_encoded_audio_insertable_streams),
+          force_encoded_audio_insertable_streams && kind_ == "audio"),
       force_encoded_video_insertable_streams_(
-          force_encoded_video_insertable_streams) {
+          force_encoded_video_insertable_streams && kind_ == "video") {
   DCHECK(pc_);
   DCHECK(sender_);
   DCHECK(!track || kind_ == track->kind());
+  DCHECK(!force_encoded_audio_insertable_streams_ ||
+         !force_encoded_video_insertable_streams_);
   if (force_encoded_audio_insertable_streams_)
     RegisterEncodedAudioStreamCallback();
   if (force_encoded_video_insertable_streams_)
@@ -757,6 +759,7 @@
   DCHECK(!web_sender()
               ->GetEncodedAudioStreamTransformer()
               ->HasTransformerCallback());
+  DCHECK_EQ(kind_, "audio");
   web_sender()->GetEncodedAudioStreamTransformer()->SetTransformerCallback(
       WTF::BindRepeating(&RTCRtpSender::OnAudioFrameFromEncoder,
                          WrapWeakPersistent(this)));
@@ -818,6 +821,7 @@
   DCHECK(!web_sender()
               ->GetEncodedVideoStreamTransformer()
               ->HasTransformerCallback());
+  DCHECK_EQ(kind_, "video");
   web_sender()->GetEncodedVideoStreamTransformer()->SetTransformerCallback(
       WTF::BindRepeating(&RTCRtpSender::OnVideoFrameFromEncoder,
                          WrapWeakPersistent(this)));
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
index b83141d..1fb0fe94 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
@@ -196,18 +196,21 @@
         state_(std::move(state)) {
     DCHECK(track_map_);
     DCHECK(state_.is_initialized());
-    if (force_encoded_audio_insertable_streams) {
+    if (force_encoded_audio_insertable_streams &&
+        webrtc_sender_->media_type() == cricket::MEDIA_TYPE_AUDIO) {
       encoded_audio_transformer_ =
           std::make_unique<RTCEncodedAudioStreamTransformer>(main_task_runner_);
       webrtc_sender_->SetEncoderToPacketizerFrameTransformer(
           encoded_audio_transformer_->Delegate());
     }
-    if (force_encoded_video_insertable_streams) {
+    if (force_encoded_video_insertable_streams &&
+        webrtc_sender_->media_type() == cricket::MEDIA_TYPE_VIDEO) {
       encoded_video_transformer_ =
           std::make_unique<RTCEncodedVideoStreamTransformer>(main_task_runner_);
       webrtc_sender_->SetEncoderToPacketizerFrameTransformer(
           encoded_video_transformer_->Delegate());
     }
+    DCHECK(!encoded_audio_transformer_ || !encoded_video_transformer_);
   }
 
   const RtpSenderState& state() const {
diff --git a/third_party/blink/renderer/modules/webaudio/biquad_dsp_kernel.cc b/third_party/blink/renderer/modules/webaudio/biquad_dsp_kernel.cc
index 7ccfe59c..d628250 100644
--- a/third_party/blink/renderer/modules/webaudio/biquad_dsp_kernel.cc
+++ b/third_party/blink/renderer/modules/webaudio/biquad_dsp_kernel.cc
@@ -47,7 +47,8 @@
 }
 
 void BiquadDSPKernel::UpdateCoefficientsIfNecessary(int frames_to_process) {
-  if (GetBiquadProcessor()->FilterCoefficientsDirty()) {
+  if (GetBiquadProcessor()->FilterCoefficientsDirty() &&
+      GetBiquadProcessor()->IsAudioRate()) {
     float cutoff_frequency[audio_utilities::kRenderQuantumFrames];
     float q[audio_utilities::kRenderQuantumFrames];
     float gain[audio_utilities::kRenderQuantumFrames];
@@ -79,10 +80,10 @@
       UpdateCoefficients(isConstant ? 1 : frames_to_process, cutoff_frequency,
                          q, gain, detune);
     } else {
-      cutoff_frequency[0] = GetBiquadProcessor()->Parameter1().Value();
-      q[0] = GetBiquadProcessor()->Parameter2().Value();
-      gain[0] = GetBiquadProcessor()->Parameter3().Value();
-      detune[0] = GetBiquadProcessor()->Parameter4().Value();
+      cutoff_frequency[0] = GetBiquadProcessor()->Parameter1().FinalValue();
+      q[0] = GetBiquadProcessor()->Parameter2().FinalValue();
+      gain[0] = GetBiquadProcessor()->Parameter3().FinalValue();
+      detune[0] = GetBiquadProcessor()->Parameter4().FinalValue();
       UpdateCoefficients(1, cutoff_frequency, q, gain, detune);
     }
   }
diff --git a/third_party/blink/renderer/modules/webaudio/biquad_processor.cc b/third_party/blink/renderer/modules/webaudio/biquad_processor.cc
index d0ff387..2fa4094 100644
--- a/third_party/blink/renderer/modules/webaudio/biquad_processor.cc
+++ b/third_party/blink/renderer/modules/webaudio/biquad_processor.cc
@@ -63,12 +63,18 @@
   filter_coefficients_dirty_ = false;
   has_sample_accurate_values_ = false;
 
-  if (parameter1_->HasSampleAccurateValues() ||
-      parameter2_->HasSampleAccurateValues() ||
-      parameter3_->HasSampleAccurateValues() ||
-      parameter4_->HasSampleAccurateValues()) {
+  if (parameter1_->HasSampleAccurateValuesTimeline() ||
+      parameter2_->HasSampleAccurateValuesTimeline() ||
+      parameter3_->HasSampleAccurateValuesTimeline() ||
+      parameter4_->HasSampleAccurateValuesTimeline()) {
+    // Coefficients are dirty if any of them has automations or if there are
+    // connections to the AudioParam.
     filter_coefficients_dirty_ = true;
     has_sample_accurate_values_ = true;
+    // If any parameter is a-rate, then the filter must do a-rate processing for
+    // everything.
+    is_audio_rate_ = parameter1_->IsAudioRate() || parameter2_->IsAudioRate() ||
+                     parameter3_->IsAudioRate() || parameter4_->IsAudioRate();
   } else {
     if (has_just_reset_) {
       // Snap to exact values first time after reset, then smooth for subsequent
diff --git a/third_party/blink/renderer/modules/webaudio/biquad_processor.h b/third_party/blink/renderer/modules/webaudio/biquad_processor.h
index 6dcd0416..1552b718 100644
--- a/third_party/blink/renderer/modules/webaudio/biquad_processor.h
+++ b/third_party/blink/renderer/modules/webaudio/biquad_processor.h
@@ -82,6 +82,7 @@
 
   bool FilterCoefficientsDirty() const { return filter_coefficients_dirty_; }
   bool HasSampleAccurateValues() const { return has_sample_accurate_values_; }
+  bool IsAudioRate() const { return is_audio_rate_; }
 
   AudioParamHandler& Parameter1() { return *parameter1_; }
   AudioParamHandler& Parameter2() { return *parameter2_; }
@@ -104,6 +105,9 @@
 
   // Set to true if any of the filter parameters are sample-accurate.
   bool has_sample_accurate_values_;
+
+  // Set to true if any of the filter parameters are a-rate.
+  bool is_audio_rate_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_node.cc b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_node.cc
index 743cddb..dd7e121 100644
--- a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_node.cc
@@ -265,7 +265,7 @@
     platform_destination_->StartWithWorkletTaskRunner(
         audio_worklet->GetMessagingProxy()
             ->GetBackingWorkerThread()
-            ->GetTaskRunner(TaskType::kInternalMedia));
+            ->GetTaskRunner(TaskType::kInternalMediaRealTime));
   } else {
     platform_destination_->Start();
   }
diff --git a/third_party/blink/renderer/modules/webdatabase/database_authorizer.cc b/third_party/blink/renderer/modules/webdatabase/database_authorizer.cc
index ad57dc43..13a75e4b 100644
--- a/third_party/blink/renderer/modules/webdatabase/database_authorizer.cc
+++ b/third_party/blink/renderer/modules/webdatabase/database_authorizer.cc
@@ -242,7 +242,7 @@
     return kSQLAuthDeny;
 
   // Allow only the FTS3 extension
-  if (!DeprecatedEqualIgnoringCase(module_name, "fts3"))
+  if (!EqualIgnoringASCIICase(module_name, "fts3"))
     return kSQLAuthDeny;
 
   last_action_changed_database_ = true;
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
index 07ded51..1164ddb 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
@@ -1049,11 +1049,20 @@
   BuildEffectNodesRecursively(*next_effect.Parent());
   DCHECK_EQ(&next_effect.Parent()->Unalias(), current_.effect);
 
-#if DCHECK_IS_ON()
-  DCHECK(!GetEffectTree().Node(next_effect.CcNodeId(new_sequence_number_)))
-      << "Malformed paint artifact. Paint chunks under the same effect should "
-         "be contiguous.";
-#endif
+  bool has_multiple_groups = false;
+  if (GetEffectTree().Node(next_effect.CcNodeId(new_sequence_number_))) {
+    if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
+      // TODO(crbug.com/1064341): We have to allow one blink effect node to
+      // apply to multiple groups in block fragments (multicol, etc.) due to
+      // the current FragmentClip implementation. This can only be fixed by
+      // LayoutNG block fragments. For now we'll create multiple cc effect
+      // nodes in the case.
+      has_multiple_groups = true;
+    } else {
+      NOTREACHED() << "Malformed paint artifact. Paint chunks under the same"
+                      " effect should be contiguous.";
+    }
+  }
 
   auto backdrop_effect_state = kNoBackdropEffect;
   int output_clip_id = 0;
@@ -1080,14 +1089,16 @@
   int effect_node_id =
       GetEffectTree().Insert(cc::EffectNode(), current_.effect_id);
   auto& effect_node = *GetEffectTree().Node(effect_node_id);
-  next_effect.SetCcNodeId(new_sequence_number_, effect_node_id);
+
+  if (!has_multiple_groups)
+    next_effect.SetCcNodeId(new_sequence_number_, effect_node_id);
 
   PopulateCcEffectNode(effect_node, next_effect, output_clip_id,
                        backdrop_effect_state);
 
   CompositorElementId compositor_element_id =
       next_effect.GetCompositorElementId();
-  if (compositor_element_id) {
+  if (compositor_element_id && !has_multiple_groups) {
     DCHECK(!property_trees_.element_id_to_effect_node_index.contains(
         compositor_element_id));
     property_trees_.element_id_to_effect_node_index[compositor_element_id] =
diff --git a/third_party/blink/renderer/platform/graphics/image_data_buffer.cc b/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
index fe622fb..9abb2b2 100644
--- a/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
+++ b/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
@@ -54,6 +54,13 @@
   retained_image_ = image->PaintImageForCurrentFrame().GetSkImage();
   if (!retained_image_)
     return;
+#if defined(MEMORY_SANITIZER)
+  // Test if retained_image has an initialized pixmap.
+  SkPixmap pixmap;
+  if (retained_image_->peekPixels(&pixmap))
+    MSAN_CHECK_MEM_IS_INITIALIZED(pixmap.addr(), pixmap.computeByteSize());
+#endif
+
   if (retained_image_->isTextureBacked() ||
       retained_image_->isLazyGenerated() ||
       retained_image_->alphaType() != kUnpremul_SkAlphaType) {
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 5f886c4..5b6789f 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -655,7 +655,6 @@
     },
     {
       name: "EventTiming",
-      origin_trial_feature_name: "EventTiming",
       status: "experimental",
     },
     {
diff --git a/third_party/blink/renderer/platform/wtf/README.md b/third_party/blink/renderer/platform/wtf/README.md
index 0e88dde..7c9446b0 100644
--- a/third_party/blink/renderer/platform/wtf/README.md
+++ b/third_party/blink/renderer/platform/wtf/README.md
@@ -84,22 +84,21 @@
 Blink forked WebKit in 2013. In 2017, the directory finally [moved to the
 current location][4] platform/wtf.
 
-[the directory listing]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/
-[base]: https://cs.chromium.org/chromium/src/base/
-[Vector]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/vector.h
-[HashSet]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/hash_set.h
-[HashMap]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/hash_map.h
-[Deque]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/deque.h
-[String]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/text/wtf_string.h
-[AtomicString]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/text/atomic_string.h
-[StringBuilder]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/text/string_builder.h
-[RefCounted]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/ref_counted.h
-[allocator.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/allocator.h
-[functional.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/functional.h
-[threading.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/threading.h
-[threading_primitives.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/threading_primitives.h
-[build_config.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/build_config.h
-[std_lib_extras.h]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/std_lib_extras.h
+[the directory listing]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/
+[base]: https://source.chromium.org/chromium/chromium/src/+/master:base/
+[Vector]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/vector.h
+[HashSet]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/hash_set.h
+[HashMap]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/hash_map.h
+[Deque]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/deque.h
+[String]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/text/wtf_string.h
+[AtomicString]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/text/atomic_string.h
+[StringBuilder]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/text/string_builder.h
+[RefCounted]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/ref_counted.h
+[allocator.h]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/allocator/allocator.h
+[functional.h]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/functional.h
+[threading.h]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/threading.h
+[threading_primitives.h]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/threading_primitives.h
+[std_lib_extras.h]: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/std_lib_extras.h
 [1]: https://chromium.googlesource.com/chromium/src/+/e372c152fc6e57743ebc508fe17f6eb131b4ff8d
 [2]: https://chromium.googlesource.com/chromium/src/+/547a6ca360a56fbee3d5ea4a71ba18f91622455c
 [3]: https://chromium.googlesource.com/chromium/src/+/478890427ee03fd88e6f0f58ee8220512044bed9/third_party/WebKit/WebCore/kwq/KWQAssertions.h
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
index 02fae9ae..ca3f44b5 100644
--- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint
+++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -100,16 +100,8 @@
 # Missing WheelEventHandler
 http/tests/devtools/layers/layer-scroll-rects-get.js [ Failure ]
 
-# Crash on non-contiguous effect on multiple columns
-crbug.com/1064341 fast/multicol/composited-layer-will-change.html [ Crash ]
-crbug.com/1064341 paint/clipath/change-mask-clip-path-multicol-crash.html [ Crash ]
-crbug.com/1064341 fast/multicol/composited-layer-multiple-fragments-translated.html [ Crash ]
-crbug.com/1064341 fast/multicol/composited-layer-multiple-fragments.html [ Crash ]
-crbug.com/1064341 fast/multicol/composited-layer-nested.html [ Crash ]
-
-# Outline paints incorrectly with columns. For now this is hidden by crbug.com/1064341.
-# crbug.com/1047358 paint/pagination/composited-paginated-outlined-box.html [ Failure ]
-crbug.com/1064341 paint/pagination/composited-paginated-outlined-box.html [ Crash ]
+# Outline paints incorrectly with columns.
+crbug.com/1047358 paint/pagination/composited-paginated-outlined-box.html [ Failure ]
 
 # Crash on weird clip hierarchy in multiple columns
 compositing/geometry/composited-in-columns.html [ Crash ]
diff --git a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
index c5c62f89..d182e33 100644
--- a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
+++ b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
@@ -142,7 +142,6 @@
 crbug.com/451577 crbug.com/924308 http/tests/devtools/console/console-format-es6-2.js [ Crash Failure Pass Timeout ]
 crbug.com/451577 crbug.com/916975 http/tests/devtools/console/console-repeat-count.js [ Crash Failure Pass Timeout ]
 crbug.com/451577 http/tests/devtools/console/console-search.js [ Pass ]
-crbug.com/678482 http/tests/devtools/debugger/fetch-breakpoints.js [ Pass ]
 crbug.com/846997 http/tests/devtools/editor/text-editor-ctrl-d-1.js [ Pass ]
 crbug.com/850358 http/tests/devtools/editor/text-editor-enter-behaviour.js [ Pass ]
 crbug.com/846982 crbug.com/874695 http/tests/devtools/editor/text-editor-formatter.js [ Crash Pass Timeout ]
@@ -1035,7 +1034,6 @@
 crbug.com/982194 virtual/layout_ng_flex_box/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-min-width-auto-002c.html [ Failure ]
 crbug.com/982194 virtual/layout_ng_flex_box/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-002.xhtml [ Failure ]
 crbug.com/982194 virtual/layout_ng_fragment_traversal/* [ Skip ]
-crbug.com/982194 virtual/not-site-per-process/http/tests/devtools/debugger/fetch-breakpoints.js [ Pass Timeout ]
 crbug.com/982194 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-pending-script.https.html [ Pass ]
 crbug.com/982194 virtual/omt-worker-fetch/external/wpt/fetch/metadata/sec-fetch-dest/frame.tentative.https.sub.html [ Timeout ]
 crbug.com/982194 virtual/omt-worker-fetch/external/wpt/fetch/metadata/sec-fetch-dest/iframe.tentative.https.sub.html [ Timeout ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index 40884876..efaa3cd 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -87,6 +87,7 @@
 crbug.com/902685 virtual/split-http-cache-not-site-per-process/http/tests/devtools/isolated-code-cache/* [ Slow ]
 # Misc DevTools tests that are slow
 crbug.com/243492 inspector-protocol/injected-script-discard.js [ Slow ]
+crbug.com/678482 http/tests/devtools/debugger/fetch-breakpoints.js [ Slow ]
 
 crbug.com/510337 cssom/cssvalue-comparison.html [ Slow ]
 
@@ -610,3 +611,11 @@
 crbug.com/937546 [ Win7 ] http/tests/security/xss-DENIED-cross-origin-stack-overflow.html [ Slow ]
 
 crbug.com/1066517 http/tests/websocket/workers/worker-reload.html [ Slow ]
+
+# Sometimes exceeds timeout on Mac10.10
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-after-initial-layout/writing-mode-vertical-rl.html [ Slow ]
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/parsing/animation-shorthand.html [ Slow ]
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-to-visible-areas-both.html [ Slow ]
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/KeyframeEffect-getKeyframes.tentative.html [ Slow ]
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-after-initial-layout/writing-mode-horizontal-tb.html [ Slow ]
+crbug.com/24182 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/CSSAnimation-canceling.tentative.html [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index dd43d69e..a344d39 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -102,8 +102,6 @@
 crbug.com/623268 http/tests/inspector-protocol/request-mixed-content-status-blockable.js [ Timeout ]
 crbug.com/623268 http/tests/inspector-protocol/request-mixed-content-status-none.js [ Timeout ]
 crbug.com/623268 http/tests/inspector-protocol/request-mixed-content-status-optionally-blockable.js [ Timeout ]
-crbug.com/678482 http/tests/devtools/debugger/fetch-breakpoints.js [ Timeout Pass ]
-crbug.com/678491 http/tests/misc/webtiming-no-origin.html [ Crash Pass ]
 crbug.com/765779 http/tests/loading/bad-server-subframe.html [ Failure ]
 crbug.com/801992 http/tests/misc/iframe-script-modify-attr.html [ Pass Crash ]
 crbug.com/872952 http/tests/media/autoplay/document-user-activation-feature-policy-iframe-no-gesture.html [ Failure Pass Timeout ]
@@ -3154,6 +3152,7 @@
 crbug.com/1067277 external/wpt/css/css-content/element-replacement-on-replaced-element.tentative.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Mac10.14 ] external/wpt/preload/onload-event.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] external/wpt/storage/estimate-indexeddb.https.any.worker.html [ Failure Timeout ]
 crbug.com/626703 [ Mac10.10 ] external/wpt/fetch/origin/assorted.window.html [ Failure Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-overflow/text-overflow-ellipsis-002.html [ Failure ]
@@ -3163,9 +3162,7 @@
 crbug.com/626703 [ Mac ] external/wpt/css/css-overflow/webkit-line-clamp-035.html [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/css-overflow/webkit-line-clamp-035.html [ Failure ]
 crbug.com/626703 [ Mac10.14 ] external/wpt/preload/download-resources.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-after-initial-layout/writing-mode-vertical-rl.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/requestidlecallback/callback-invoked.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/parsing/animation-shorthand.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/forms/constraints/form-validation-validity-stepMismatch.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-interface.html [ Timeout ]
@@ -3177,7 +3174,6 @@
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-same.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-to-visible-areas-both.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed-with-uuid.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Timeout ]
@@ -3190,16 +3186,13 @@
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/dom/nodes/getElementsByClassName-26.htm [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.https.window.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/KeyframeEffect-getKeyframes.tentative.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/embedded-content/media-elements/event_order_canplay_canplaythrough.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/interactive-elements/the-summary-element/activation-behavior.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/dom/nodes/getElementsByClassName-08.htm [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.window.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-scroll-snap/snap-after-initial-layout/writing-mode-horizontal-tb.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox_016.htm [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] virtual/web-components-v0-disabled/external/wpt/html/dom/documents/dom-tree-accessors/nameditem-07.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/threaded/external/wpt/css/css-animations/CSSAnimation-canceling.tentative.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] external/wpt/css/css-fonts/matching/range-descriptor-reversed.html [ Failure ]
 crbug.com/626703 [ Mac10.12 ] external/wpt/css/css-fonts/matching/range-descriptor-reversed.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ]
@@ -6044,7 +6037,6 @@
 crbug.com/1025123 external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html [ Pass Failure ]
 crbug.com/1025321 [ Win ] http/tests/devtools/tracing/console-timeline.js [ Pass Failure ]
 crbug.com/1025321 [ Win ] virtual/threaded/http/tests/devtools/tracing/console-timeline.js [ Pass Failure ]
-crbug.com/1025437 virtual/not-site-per-process/http/tests/devtools/debugger/fetch-breakpoints.js [ Timeout Pass ]
 
 # Sheriff 2019-11-18
 crbug.com/1025944 [ Linux ] external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Pass Failure ]
@@ -6598,6 +6590,7 @@
 crbug.com/1065335 [ Win ] fast/hidpi/image-srcset-relative-svg-canvas-2x.html [ Pass Failure ]
 # Sheriff 2020-04-01
 crbug.com/1066122 virtual/threaded-no-composited-antialiasing/animations/events/animation-iteration-event.html [ Pass Failure ]
+crbug.com/1066732 fast/events/platform-wheelevent-paging-x-in-scrolling-div.html [ Pass Failure ]
 crbug.com/1066732 fast/events/platform-wheelevent-paging-y-in-scrolling-div.html [ Pass Failure ]
 # Sheriff 2020-04-02
 crbug.com/1067084 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-with-rtl.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index b919144b..373b011 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -450,7 +450,6 @@
               "external/wpt/html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html",
               "external/wpt/wasm/serialization/module/window-domain-success.sub.html",
               "external/wpt/wasm/serialization/module/window-similar-but-cross-origin-success.sub.html",
-              "http/tests/devtools/debugger/fetch-breakpoints.js",
               "http/tests/devtools/oopif/oopif-storage.js",
               "http/tests/dom/EventListener-incumbent-global-1.html",
               "http/tests/dom/EventListener-incumbent-global-2.html",
@@ -465,7 +464,6 @@
               "http/tests/media/autoplay/document-user-activation-feature-policy-iframe-no-gesture.html",
               "http/tests/media/autoplay/webaudio-autoplay-iframe-with-gesture.html",
               "http/tests/misc/iframe-script-modify-attr.html",
-              "http/tests/misc/webtiming-no-origin.html",
               "http/tests/printing/cross-site-frame-scrolled.html",
               "http/tests/printing/cross-site-frame.html",
               "http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html",
diff --git a/third_party/blink/web_tests/bluetooth/README b/third_party/blink/web_tests/bluetooth/README
deleted file mode 100644
index 51b3a21..0000000
--- a/third_party/blink/web_tests/bluetooth/README
+++ /dev/null
@@ -1,34 +0,0 @@
-Web Bluetooth API LayoutTests README
-
-This directory contains Web Bluetooth API layout tests.
-
-# generator.py
-
-For all .js files in script-tests/, generator.py will attempt to build test
-in bluetooth/.
-
-Note that for each subdirectory in script-test there is a matching directory
-under bluetooth/.  The generator will expand CALL functions into this
-corresponding directory.
-
-Example:
-
-bluetooth/script-tests/server/get-same-object.js expanded CALL will generate 3
-files:
-
-bluetooth/server/getPrimaryService/gen-get-same-object.html
-bluetooth/server/getPrimaryServices/gen-get-same-object.html
-bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html
-
-This is because of the following lines CALL:
-
-gattServer.CALLS([
-        getPrimaryService('heart_rate')|
-        getPrimaryServices()|
-        getPrimaryServices('heart_rate')[UUID]]),
-
-
-Run
-
-$ python //third_party/blink/web_tests/bluetooth/generate.py
-to generate these files from templates in script-tests/*.js
diff --git a/third_party/blink/web_tests/bluetooth/README.md b/third_party/blink/web_tests/bluetooth/README.md
new file mode 100644
index 0000000..7cef7911
--- /dev/null
+++ b/third_party/blink/web_tests/bluetooth/README.md
@@ -0,0 +1,111 @@
+# Web Bluetooth API Web Tests
+
+This directory contains Chromium only Web Bluetooth API web tests.
+
+The [Web Bluetooth specification] is implemented by the Web Bluetooth Service
+in `//content/browser/bluetooth`. See the [Web Bluetooth Service README] for
+more details.
+
+[Web Bluetooth specification]: https://WebBluetoothCG.github.io/web-bluetooth
+[Web Bluetooth Service README]: ../../../../content/browser/bluetooth/README.md
+
+# Test Refactoring Effort
+
+The tests in this directory are currently undergoing a refactoring in order to
+migrate them into `//third_party/blink/web_tests/external/wpt/bluetooth` so that
+other implementers are able to reuse the tests for their own implementation.
+See the [web-platform-tests Bluetooth README] for more details.
+
+These tests are currently using the legacy [BluetoothFakeAdapter] test
+infrastructure which defines several mock Bluetooth devices with specific
+characteristics and behaviors. This test infrastructure lacks granular
+control over the test devices, which ends up requiring workarounds and hacks
+resulting in flaky tests. The new [FakeBluetooth] test infrastructure
+produces dynamic test devices that can be controlled during a test. For more
+details on the refactoring effort, see the [Web Bluetooth Testing] design
+document.
+
+TODO(https://crbug.com/509038): Update this document when the remaining tests
+have been submitted to W3C Web Platform Tests.
+
+There are still a few APIs missing from [FakeBluetooth] that need to be
+implemented in order to refactor the remaining tests in this directory. A list
+of the APIs needed by these tests can be found in the [Web Bluetooth Test API
+Dependencies] spreadsheet.
+
+TODO(https://crbug.com/569709) : Update this document when the remaining
+[FakeBluetooth] APIs are implemented.
+
+[BluetoothFakeAdapter]:
+../../../../content/shell/browser/web_test/web_test_bluetooth_adapter_provider.h
+[FakeBluetooth]:
+../../../../device/bluetooth/test/fake_bluetooth.h
+[Web Bluetooth Testing]:
+https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY
+[Web Bluetooth Test API Dependencies]:
+https://docs.google.com/spreadsheets/d/1L4t6Um9lpoyv17rlm3EBXIP6bxEQG4klVCwF1SANHa4
+[web-platform-tests Bluetooth README]: ../external/wpt/bluetooth/README.md
+
+# Generated Tests
+
+Several Web Bluetooth tests share common test logic. For these tests, the
+`script-tests` directory contains templates that are used by the
+`generate.py` script to create several tests from these templates. The
+templates are JavaScript files that contain a `CALLS()` keyword with
+functions delimited by a `|` character. A test will be created for each
+function in the `CALLS()` by `generate.py`. Note that for each subdirectory
+in `script-tests` there is a matching directory under `bluetooth`. The
+generator will expand `CALLS` functions into the corresponding directory.
+
+## Example
+
+The `./script-tests/server/get-same-object.js` contains the following
+code:
+
+```js
+gattServer.CALLS([
+        getPrimaryService('heart_rate')|
+        getPrimaryServices()|
+        getPrimaryServices('heart_rate')[UUID]]),
+```
+
+The functions in `CALLS()` will be expanded to generate 3 test files prefixed
+with `gen-`:
+
+```
+bluetooth/server/getPrimaryService/gen-get-same-object.html
+bluetooth/server/getPrimaryServices/gen-get-same-object.html
+bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html
+```
+
+## Generate Tests
+
+To generate the tests in `script-tests`, run the following command from the
+source root:
+
+```sh
+$ python third_party/blink/web_tests/bluetooth/generate.py
+```
+
+To check that generated tests are correct and that there are no obsolete tests,
+or tests for which a template does not exist anymore, run:
+
+```sh
+$ python third_party/blink/web_tests/bluetooth/generate_test.py
+```
+
+More details can be found in `generate.py` and `generate_test.py`.
+
+# Resources and Documentation
+
+Mailing list: web-bluetooth@chromium.org
+
+Bug tracker: [Blink>Bluetooth]
+
+* [Web Bluetooth specification]
+* [Web Bluetooth Service README]
+* [Web Bluetooth Testing]
+* [Web Bluetooth Test API Dependencies]
+* [web-platform-tests Bluetooth README]
+
+[Blink>Bluetooth]: https://bugs.chromium.org/p/chromium/issues/list?q=component%3ABlink%3EBluetooth&can=2
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/reference/effect-reference-convolve-error-001-ref.html b/third_party/blink/web_tests/css3/filters/effect-reference-convolve-error-expected.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/css/filter-effects/reference/effect-reference-convolve-error-001-ref.html
rename to third_party/blink/web_tests/css3/filters/effect-reference-convolve-error-expected.html
diff --git a/third_party/blink/web_tests/css3/filters/effect-reference-convolve-error.html b/third_party/blink/web_tests/css3/filters/effect-reference-convolve-error.html
new file mode 100644
index 0000000..2b7cb34
--- /dev/null
+++ b/third_party/blink/web_tests/css3/filters/effect-reference-convolve-error.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background-color: red; filter: url(#f)"></div>
+<svg height="0">
+    <filter id="f" x="0" y="0" width="1" height="1">
+        <feConvolveMatrix/>
+        <feColorMatrix values="1 0 0 0 0,
+                               0 1 0 0 0.5,
+                               0 0 1 0 0,
+                               0 0 0 1 1"
+                       color-interpolation-filters="sRGB"/>
+    </filter>
+</svg>
diff --git a/third_party/blink/web_tests/css3/flexbox/relayout-image-load.html b/third_party/blink/web_tests/css3/flexbox/relayout-image-load.html
deleted file mode 100644
index 1e31ed1..0000000
--- a/third_party/blink/web_tests/css3/flexbox/relayout-image-load.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<link href="resources/flexbox.css" rel="stylesheet">
-<style>
-</style>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/check-layout-th.js"></script>
-</head>
-<body>
-<div id=log></div>
-<p>Test to make sure that we properly relayout when an image loads. You
-should see a green 100x100 image.</p>
-<div id="test" class="flexbox">
-    &nbsp;
-    <div class="flexbox">
-        <img data-expected-width=100 data-expected-height=100 id="image" onload="imageLoaded()">
-    </div>
-</div>
-<script>
-
-function changeImage()
-{
-    document.getElementById("image").src = "../../images/resources/green-100.png";
-}
-setTimeout(changeImage, 0);
-
-function imageLoaded()
-{
-    checkLayout('#test')
-}
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
index ad686e1f..f36ba0c 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -50341,6 +50341,18 @@
      {}
     ]
    ],
+   "css/css-fonts/font-feature-settings-tibetan.html": [
+    [
+     "css/css-fonts/font-feature-settings-tibetan.html",
+     [
+      [
+       "/css/css-fonts/font-feature-settings-tibetan-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-fonts/font-features-across-space-1.html": [
     [
      "css/css-fonts/font-features-across-space-1.html",
@@ -108431,18 +108443,6 @@
      {}
     ]
    ],
-   "css/filter-effects/effect-reference-convolve-error-001.html": [
-    [
-     "css/filter-effects/effect-reference-convolve-error-001.html",
-     [
-      [
-       "/css/filter-effects/reference/effect-reference-convolve-error-001-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
    "css/filter-effects/empty-element-with-filter.html": [
     [
      "css/filter-effects/empty-element-with-filter.html",
@@ -143327,6 +143327,9 @@
    "css/css-fonts/font-feature-settings-descriptor-01-ref.html": [
     []
    ],
+   "css/css-fonts/font-feature-settings-tibetan-ref.html": [
+    []
+   ],
    "css/css-fonts/font-features-across-space-1-ref.html": [
     []
    ],
@@ -159758,9 +159761,6 @@
    "css/filter-effects/reference/effect-reference-after-001-ref.html": [
     []
    ],
-   "css/filter-effects/reference/effect-reference-convolve-error-001-ref.html": [
-    []
-   ],
    "css/filter-effects/reference/empty-element-with-filter-ref.html": [
     []
    ],
@@ -162371,6 +162371,9 @@
    "dom/nodes/Document-createProcessingInstruction.js": [
     []
    ],
+   "dom/nodes/DocumentFragment-getElementById-expected.txt": [
+    []
+   ],
    "dom/nodes/Element-closest-expected.txt": [
     []
    ],
@@ -162419,6 +162422,9 @@
    "dom/nodes/ParentNode-querySelector-All.js": [
     []
    ],
+   "dom/nodes/ParentNode-querySelector-escapes-expected.txt": [
+    []
+   ],
    "dom/nodes/adoption.window-expected.txt": [
     []
    ],
@@ -237786,6 +237792,12 @@
      {}
     ]
    ],
+   "dom/attributes-are-nodes.html": [
+    [
+     "dom/attributes-are-nodes.html",
+     {}
+    ]
+   ],
    "dom/collections/HTMLCollection-as-prototype.html": [
     [
      "dom/collections/HTMLCollection-as-prototype.html",
@@ -237804,6 +237816,12 @@
      {}
     ]
    ],
+   "dom/collections/HTMLCollection-iterator.html": [
+    [
+     "dom/collections/HTMLCollection-iterator.html",
+     {}
+    ]
+   ],
    "dom/collections/HTMLCollection-live-mutations.window.js": [
     [
      "dom/collections/HTMLCollection-live-mutations.window.html",
@@ -238053,6 +238071,12 @@
      {}
     ]
    ],
+   "dom/events/Event-stopImmediatePropagation.html": [
+    [
+     "dom/events/Event-stopImmediatePropagation.html",
+     {}
+    ]
+   ],
    "dom/events/Event-subclasses-constructors.html": [
     [
      "dom/events/Event-subclasses-constructors.html",
@@ -238119,6 +238143,18 @@
      {}
     ]
    ],
+   "dom/events/EventTarget-add-listener-platform-object.html": [
+    [
+     "dom/events/EventTarget-add-listener-platform-object.html",
+     {}
+    ]
+   ],
+   "dom/events/EventTarget-add-remove-listener.html": [
+    [
+     "dom/events/EventTarget-add-remove-listener.html",
+     {}
+    ]
+   ],
    "dom/events/EventTarget-addEventListener.html": [
     [
      "dom/events/EventTarget-addEventListener.html",
@@ -238153,6 +238189,12 @@
      {}
     ]
    ],
+   "dom/events/EventTarget-this-of-listener.html": [
+    [
+     "dom/events/EventTarget-this-of-listener.html",
+     {}
+    ]
+   ],
    "dom/events/document-level-touchmove-event-listener-passive-by-default.html": [
     [
      "dom/events/document-level-touchmove-event-listener-passive-by-default.html",
@@ -238733,6 +238775,18 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createCDATASection.html": [
+    [
+     "dom/nodes/Document-createCDATASection.html",
+     {}
+    ]
+   ],
+   "dom/nodes/Document-createCDATASection.xhtml": [
+    [
+     "dom/nodes/Document-createCDATASection.xhtml",
+     {}
+    ]
+   ],
    "dom/nodes/Document-createComment.html": [
     [
      "dom/nodes/Document-createComment.html",
@@ -238835,6 +238889,24 @@
      {}
     ]
    ],
+   "dom/nodes/DocumentFragment-constructor.html": [
+    [
+     "dom/nodes/DocumentFragment-constructor.html",
+     {}
+    ]
+   ],
+   "dom/nodes/DocumentFragment-getElementById.html": [
+    [
+     "dom/nodes/DocumentFragment-getElementById.html",
+     {}
+    ]
+   ],
+   "dom/nodes/DocumentFragment-querySelectorAll-after-modification.html": [
+    [
+     "dom/nodes/DocumentFragment-querySelectorAll-after-modification.html",
+     {}
+    ]
+   ],
    "dom/nodes/DocumentType-literal-xhtml.xhtml": [
     [
      "dom/nodes/DocumentType-literal-xhtml.xhtml",
@@ -239033,6 +239105,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-hasAttribute.html": [
+    [
+     "dom/nodes/Element-hasAttribute.html",
+     {}
+    ]
+   ],
    "dom/nodes/Element-hasAttributes.html": [
     [
      "dom/nodes/Element-hasAttributes.html",
@@ -239069,6 +239147,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-matches-namespaced-elements.html": [
+    [
+     "dom/nodes/Element-matches-namespaced-elements.html",
+     {}
+    ]
+   ],
    "dom/nodes/Element-matches.html": [
     [
      "dom/nodes/Element-matches.html",
@@ -239117,12 +239201,24 @@
      {}
     ]
    ],
+   "dom/nodes/Element-removeAttribute.html": [
+    [
+     "dom/nodes/Element-removeAttribute.html",
+     {}
+    ]
+   ],
    "dom/nodes/Element-removeAttributeNS.html": [
     [
      "dom/nodes/Element-removeAttributeNS.html",
      {}
     ]
    ],
+   "dom/nodes/Element-setAttribute.html": [
+    [
+     "dom/nodes/Element-setAttribute.html",
+     {}
+    ]
+   ],
    "dom/nodes/Element-siblingElement-null-svg.svg": [
     [
      "dom/nodes/Element-siblingElement-null-svg.svg",
@@ -239225,6 +239321,30 @@
      {}
     ]
    ],
+   "dom/nodes/Node-cloneNode-XMLDocument.html": [
+    [
+     "dom/nodes/Node-cloneNode-XMLDocument.html",
+     {}
+    ]
+   ],
+   "dom/nodes/Node-cloneNode-document-with-doctype.html": [
+    [
+     "dom/nodes/Node-cloneNode-document-with-doctype.html",
+     {}
+    ]
+   ],
+   "dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html": [
+    [
+     "dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html",
+     {}
+    ]
+   ],
+   "dom/nodes/Node-cloneNode-svg.html": [
+    [
+     "dom/nodes/Node-cloneNode-svg.html",
+     {}
+    ]
+   ],
    "dom/nodes/Node-cloneNode.html": [
     [
      "dom/nodes/Node-cloneNode.html",
@@ -239261,6 +239381,12 @@
      {}
     ]
    ],
+   "dom/nodes/Node-isConnected-shadow-dom.html": [
+    [
+     "dom/nodes/Node-isConnected-shadow-dom.html",
+     {}
+    ]
+   ],
    "dom/nodes/Node-isConnected.html": [
     [
      "dom/nodes/Node-isConnected.html",
@@ -239297,6 +239423,12 @@
      {}
     ]
    ],
+   "dom/nodes/Node-mutation-adoptNode.html": [
+    [
+     "dom/nodes/Node-mutation-adoptNode.html",
+     {}
+    ]
+   ],
    "dom/nodes/Node-nodeName-xhtml.xhtml": [
     [
      "dom/nodes/Node-nodeName-xhtml.xhtml",
@@ -239403,6 +239535,48 @@
      }
     ]
    ],
+   "dom/nodes/ParentNode-querySelector-case-insensitive.html": [
+    [
+     "dom/nodes/ParentNode-querySelector-case-insensitive.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelector-escapes.html": [
+    [
+     "dom/nodes/ParentNode-querySelector-escapes.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelector-scope.html": [
+    [
+     "dom/nodes/ParentNode-querySelector-scope.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelectorAll-removed-elements.html": [
+    [
+     "dom/nodes/ParentNode-querySelectorAll-removed-elements.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelectors-exclusive.html": [
+    [
+     "dom/nodes/ParentNode-querySelectors-exclusive.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelectors-namespaces.html": [
+    [
+     "dom/nodes/ParentNode-querySelectors-namespaces.html",
+     {}
+    ]
+   ],
+   "dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html": [
+    [
+     "dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html",
+     {}
+    ]
+   ],
    "dom/nodes/ProcessingInstruction-escapes-1.xhtml": [
     [
      "dom/nodes/ProcessingInstruction-escapes-1.xhtml",
@@ -239433,6 +239607,12 @@
      {}
     ]
    ],
+   "dom/nodes/Text-wholeText.html": [
+    [
+     "dom/nodes/Text-wholeText.html",
+     {}
+    ]
+   ],
    "dom/nodes/adoption.window.js": [
     [
      "dom/nodes/adoption.window.html",
@@ -239457,6 +239637,12 @@
      {}
     ]
    ],
+   "dom/nodes/attributes-namednodemap.html": [
+    [
+     "dom/nodes/attributes-namednodemap.html",
+     {}
+    ]
+   ],
    "dom/nodes/attributes.html": [
     [
      "dom/nodes/attributes.html",
@@ -239655,6 +239841,24 @@
      {}
     ]
    ],
+   "dom/nodes/getElementsByClassName-32.html": [
+    [
+     "dom/nodes/getElementsByClassName-32.html",
+     {}
+    ]
+   ],
+   "dom/nodes/getElementsByClassName-empty-set.html": [
+    [
+     "dom/nodes/getElementsByClassName-empty-set.html",
+     {}
+    ]
+   ],
+   "dom/nodes/getElementsByClassName-whitespace-class-names.html": [
+    [
+     "dom/nodes/getElementsByClassName-whitespace-class-names.html",
+     {}
+    ]
+   ],
    "dom/nodes/insert-adjacent.html": [
     [
      "dom/nodes/insert-adjacent.html",
@@ -239691,6 +239895,12 @@
      {}
     ]
    ],
+   "dom/nodes/svg-template-querySelector.html": [
+    [
+     "dom/nodes/svg-template-querySelector.html",
+     {}
+    ]
+   ],
    "dom/ranges/Range-attributes.html": [
     [
      "dom/ranges/Range-attributes.html",
@@ -240029,6 +240239,12 @@
      }
     ]
    ],
+   "dom/window-extends-event-target.html": [
+    [
+     "dom/window-extends-event-target.html",
+     {}
+    ]
+   ],
    "domparsing/DOMParser-parseFromString-encoding.html": [
     [
      "domparsing/DOMParser-parseFromString-encoding.html",
@@ -387289,6 +387505,14 @@
    "031dd7d33008ebd5475edba35fe20a89d4445c66",
    "testharness"
   ],
+  "css/css-fonts/font-feature-settings-tibetan-ref.html": [
+   "83bfe744596dbd9f435ed18ba65018215fff42ed",
+   "support"
+  ],
+  "css/css-fonts/font-feature-settings-tibetan.html": [
+   "45cde9acb5d2b4aba2ea53f7c0080551369f4abb",
+   "reftest"
+  ],
   "css/css-fonts/font-features-across-space-1-ref.html": [
    "ef6988ce775591606e51d71d8bff70bf700d5c64",
    "support"
@@ -425614,11 +425838,11 @@
    "testharness"
   ],
   "css/css-transitions/KeyframeEffect-getKeyframes.tentative-expected.txt": [
-   "18311024fce1d7bae45d642bdd1c4c4c2ed6eb10",
+   "8568a41d772969f10a10212dd9953b2d5b5982d2",
    "support"
   ],
   "css/css-transitions/KeyframeEffect-getKeyframes.tentative.html": [
-   "47b769b13a92971ccb02acd6ea61c1bda53f847f",
+   "56925fb0bd6c0fdd4eee41fd0cf3febe2e74fc3d",
    "testharness"
   ],
   "css/css-transitions/KeyframeEffect-setKeyframes.tentative-expected.txt": [
@@ -440749,10 +440973,6 @@
    "a6de2465027e99ff6239dd45524862465dde847f",
    "reftest"
   ],
-  "css/filter-effects/effect-reference-convolve-error-001.html": [
-   "11922ef83a4b53e5706d183c9253f83a93d7d128",
-   "reftest"
-  ],
   "css/filter-effects/empty-element-with-filter.html": [
    "3e8fc7e164cde54a8ff81a241909c2f729f32afb",
    "reftest"
@@ -441113,10 +441333,6 @@
    "45192b13451fdfe2f00c17dbc84d30a770426e86",
    "support"
   ],
-  "css/filter-effects/reference/effect-reference-convolve-error-001-ref.html": [
-   "f718ea6abfbab54333ba674ff0dcd320d8672bcd",
-   "support"
-  ],
   "css/filter-effects/reference/empty-element-with-filter-ref.html": [
    "cf2c997f6c0d60cac9896c0b0014189cea7790bc",
    "support"
@@ -450033,6 +450249,10 @@
    "a67e6f400fcf1dfa347390e1a76e25b573afbb9a",
    "testharness"
   ],
+  "dom/attributes-are-nodes.html": [
+   "54ff4ccaec9ff3273013eb357ad10a80da2a7b48",
+   "testharness"
+  ],
   "dom/collections/HTMLCollection-as-prototype-expected.txt": [
    "f36f3bf1426c59572dc577805db9d9a3503ffd29",
    "support"
@@ -450053,6 +450273,10 @@
    "4fc34db7f5f245933013a76335f71e9f4cffe115",
    "testharness"
   ],
+  "dom/collections/HTMLCollection-iterator.html": [
+   "4a3f6307e95d56da2c279d458f8d6620f62f3ffa",
+   "testharness"
+  ],
   "dom/collections/HTMLCollection-live-mutations.window.js": [
    "7dbfc6ccf67d37d7272b3490665e218d0549e79e",
    "testharness"
@@ -450245,6 +450469,10 @@
    "08df2d41416ffccf65c9fe606469181a9f95f6a8",
    "testharness"
   ],
+  "dom/events/Event-stopImmediatePropagation.html": [
+   "b75732257a89dd1174d9904239e7899ce7b85fab",
+   "testharness"
+  ],
   "dom/events/Event-subclasses-constructors.html": [
    "08a5ded011635c66151d22a09330f9341eb48c91",
    "testharness"
@@ -450305,6 +450533,14 @@
    "f72cf3ca5463f1306c12fb137b84f693345466dc",
    "testharness"
   ],
+  "dom/events/EventTarget-add-listener-platform-object.html": [
+   "d5565c22b3d5afc06310dec58a6de183ebe17eb8",
+   "testharness"
+  ],
+  "dom/events/EventTarget-add-remove-listener.html": [
+   "8fb9f4365a17900f8ef97c6e8b3671592a324887",
+   "testharness"
+  ],
   "dom/events/EventTarget-addEventListener.html": [
    "e2a46e5813e01758cf0a8d2f02c6c181e841c745",
    "testharness"
@@ -450329,6 +450565,10 @@
    "da2d7db3c4ddb53512cbf2d876d0212116b4a3e5",
    "testharness"
   ],
+  "dom/events/EventTarget-this-of-listener.html": [
+   "506564c4133ce6606f328d3d739e0818d6a10e79",
+   "testharness"
+  ],
   "dom/events/document-level-touchmove-event-listener-passive-by-default.html": [
    "f3f0d58209fd8edda4fa1cc092dbe8d19bc4f143",
    "testharness"
@@ -450725,6 +450965,14 @@
    "b3dc8b60b9b0a6e1b0d459a993c21ff9df20ef57",
    "testharness"
   ],
+  "dom/nodes/Document-createCDATASection.html": [
+   "72b3684c751c72b37b304d81ab38b932287714c4",
+   "testharness"
+  ],
+  "dom/nodes/Document-createCDATASection.xhtml": [
+   "b0a5a7f2843bbc78499598597abb91b01bc38db1",
+   "testharness"
+  ],
   "dom/nodes/Document-createComment-createTextNode.js": [
    "62a38d380da6021d57e363ec14fdd410685c07cd",
    "support"
@@ -450981,6 +451229,22 @@
    "d27cce6c56e3949187a9738be3d9c1e9a82fff52",
    "testharness"
   ],
+  "dom/nodes/DocumentFragment-constructor.html": [
+   "e97a7c483605cc111a429564fa193cc36eb8d07a",
+   "testharness"
+  ],
+  "dom/nodes/DocumentFragment-getElementById-expected.txt": [
+   "1046305df497f8b2b5c93f68a70920b0d1cc6325",
+   "support"
+  ],
+  "dom/nodes/DocumentFragment-getElementById.html": [
+   "ce0d302c12b5c4bd07ec8f4aee675b2060f4dc72",
+   "testharness"
+  ],
+  "dom/nodes/DocumentFragment-querySelectorAll-after-modification.html": [
+   "8049363885788a1b13125c739788bebcde4d5a0e",
+   "testharness"
+  ],
   "dom/nodes/DocumentType-literal-xhtml.xhtml": [
    "2b6965c14beb461d334ca633a3248c9b34af2202",
    "testharness"
@@ -451121,6 +451385,10 @@
    "f826afc3915132bee02f577885081247cccc69b5",
    "testharness"
   ],
+  "dom/nodes/Element-hasAttribute.html": [
+   "26528d756944c936a740b068769f72f281421331",
+   "testharness"
+  ],
   "dom/nodes/Element-hasAttributes.html": [
    "fbb9c233b7005121fd5cdb4629663de378a1d525",
    "testharness"
@@ -451161,6 +451429,10 @@
    "254af6156554207c87cb31693dcf65fdd2f33e45",
    "support"
   ],
+  "dom/nodes/Element-matches-namespaced-elements.html": [
+   "e61b11ca613374d76eb88c93be00046525e45328",
+   "testharness"
+  ],
   "dom/nodes/Element-matches.html": [
    "de234b663907a67d27c8613825ae1cb540fdaf37",
    "testharness"
@@ -451197,10 +451469,18 @@
    "ab642d660b9136f531902156b705954645e2f850",
    "testharness"
   ],
+  "dom/nodes/Element-removeAttribute.html": [
+   "df79e62cf435bd38222e889a952f3e15b1656f26",
+   "testharness"
+  ],
   "dom/nodes/Element-removeAttributeNS.html": [
    "a2773e6f1e06b872601be6ae5ede48fcdeb79498",
    "testharness"
   ],
+  "dom/nodes/Element-setAttribute.html": [
+   "7609406815e5cab63a3fbb9f3a62ed386c80738a",
+   "testharness"
+  ],
   "dom/nodes/Element-siblingElement-null-svg.svg": [
    "48c981b8c8e2cfa28b777b7049f7000e312185f1",
    "testharness"
@@ -451214,7 +451494,7 @@
    "testharness"
   ],
   "dom/nodes/Element-tagName.html": [
-   "035a23cc5e8944885ad0307c9a03938aebb35dd5",
+   "43e7a2d2bf53b3106f25fcb4fe0c03fe67cc3555",
    "testharness"
   ],
   "dom/nodes/Element-webkitMatchesSelector-expected.txt": [
@@ -451273,6 +451553,22 @@
    "0d38df37b2d044f4da2237fa7c1dc090fc817b27",
    "testharness"
   ],
+  "dom/nodes/Node-cloneNode-XMLDocument.html": [
+   "2c63c7753018f3c6612cd7d9259e19422e7d2684",
+   "testharness"
+  ],
+  "dom/nodes/Node-cloneNode-document-with-doctype.html": [
+   "21963084d24eaebc28c78be17323932289c3a6d2",
+   "testharness"
+  ],
+  "dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html": [
+   "bce6074aad3d446234c6dd79e2b1bc4b5104740c",
+   "testharness"
+  ],
+  "dom/nodes/Node-cloneNode-svg.html": [
+   "9d4704b0742104b68f2c977dbe55c6bbe04365bc",
+   "testharness"
+  ],
   "dom/nodes/Node-cloneNode.html": [
    "e97259dace71905b6a38ba4bf6097a23ddba3af1",
    "testharness"
@@ -451297,6 +451593,10 @@
    "6977501501ddf03ed966416f5d52d0811cad2138",
    "testharness"
   ],
+  "dom/nodes/Node-isConnected-shadow-dom.html": [
+   "7d04dc32f2a6f4a001c0380e1b6b074e19ec32b2",
+   "testharness"
+  ],
   "dom/nodes/Node-isConnected.html": [
    "da0b460de44681ca009eaaa2b615732fe733577d",
    "testharness"
@@ -451329,6 +451629,10 @@
    "50a487c58c6d1f280602d7fd22611202b5c742ff",
    "testharness"
   ],
+  "dom/nodes/Node-mutation-adoptNode.html": [
+   "9c9594c07b22a4ac94b3703f8ab1711b41a759e4",
+   "testharness"
+  ],
   "dom/nodes/Node-nodeName-xhtml.xhtml": [
    "bc478af8b6841ceee46b702c2528bee08698c814",
    "testharness"
@@ -451421,6 +451725,38 @@
    "3c6c50317988712fa64d26da8d31d4f91c498f2c",
    "support"
   ],
+  "dom/nodes/ParentNode-querySelector-case-insensitive.html": [
+   "e461ee501617d2e663c07773e07c45630d7d5d16",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelector-escapes-expected.txt": [
+   "6070b0313e10a18cf91cbeadf3433c9c9b745937",
+   "support"
+  ],
+  "dom/nodes/ParentNode-querySelector-escapes.html": [
+   "65a75e5c030677fe3bf63e4443ac2bfeca348c47",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelector-scope.html": [
+   "b08a1674ac452d0257978d0c2072976e678458c3",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelectorAll-removed-elements.html": [
+   "3cefc80906c9b9fe9b5b4bccea8d5dee8fa696c1",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelectors-exclusive.html": [
+   "5cff9367cf090ad65200cf8e4ff35a3e4eb2059f",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelectors-namespaces.html": [
+   "714999b3f0cf92e801bc7ec31ba80d76cf984244",
+   "testharness"
+  ],
+  "dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html": [
+   "e08c6e6db13d472b852b1dc19e05dc067e7a2fc4",
+   "testharness"
+  ],
   "dom/nodes/ProcessingInstruction-escapes-1.xhtml": [
    "d629a8464b7e171862b0d6989fb72215e0e45833",
    "testharness"
@@ -451441,6 +451777,10 @@
    "2dd23018cb4c7445cda7e84695e883fa65b557fb",
    "testharness"
   ],
+  "dom/nodes/Text-wholeText.html": [
+   "2467930da8604c6770376bedc633a04e58237358",
+   "testharness"
+  ],
   "dom/nodes/adoption.window-expected.txt": [
    "ace65c7331a8e456200006a0566d82cb31de7ac6",
    "support"
@@ -451461,6 +451801,10 @@
    "9073e52075a502943cf9dfb7586174e0533b63fa",
    "testharness"
   ],
+  "dom/nodes/attributes-namednodemap.html": [
+   "96f9d30703b01dfe446a9acb37ff07a5a1da0cb0",
+   "testharness"
+  ],
   "dom/nodes/attributes.html": [
    "c6db7eb8aa4e6c3c4a4f365965af6acb9665f562",
    "testharness"
@@ -451609,6 +451953,18 @@
    "0e1ac014aee72d5affd763bdc509d32976e799e3",
    "testharness"
   ],
+  "dom/nodes/getElementsByClassName-32.html": [
+   "29eb41353ce88ddb27716279ae7574d8dfcb1ad8",
+   "testharness"
+  ],
+  "dom/nodes/getElementsByClassName-empty-set.html": [
+   "75b8d5a9f8c16da0ad12da7bff2139d87060c054",
+   "testharness"
+  ],
+  "dom/nodes/getElementsByClassName-whitespace-class-names.html": [
+   "59bfd2e6b1c0999a4bb1029ea0978315c10acaa9",
+   "testharness"
+  ],
   "dom/nodes/getElementsByClassNameFrame.htm": [
    "544df60a991fa01ac7a9e58b3a7b87e90ab0a76d",
    "support"
@@ -451665,6 +452021,10 @@
    "c1680cedd708d3228603598d157883e6e8a77222",
    "support"
   ],
+  "dom/nodes/svg-template-querySelector.html": [
+   "5d2f6341431729b484180123eb3173a6a0601f57",
+   "testharness"
+  ],
   "dom/ranges/Range-attributes.html": [
    "ced47edc5071e80372fc164b55633d8a7aa25ab4",
    "testharness"
@@ -451913,6 +452273,10 @@
    "cecdf98b08abf9ebc85b0183a13779a3b06776da",
    "support"
   ],
+  "dom/window-extends-event-target.html": [
+   "3b690324e582bab517ad0e4487807313d9c2e148",
+   "testharness"
+  ],
   "domparsing/DOMParser-parseFromString-encoding.html": [
    "ab1e969530d6f056c2f7b2ea374c438f8d0a5635",
    "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/.well-known/origin-policy b/third_party/blink/web_tests/external/wpt/.well-known/origin-policy
index 15355ce..d0de31e6 100644
--- a/third_party/blink/web_tests/external/wpt/.well-known/origin-policy
+++ b/third_party/blink/web_tests/external/wpt/.well-known/origin-policy
@@ -15,10 +15,18 @@
     # Default mime type for returned data.
     content_type = "application/originpolicy+json"
 
-    # Reserve 'op100' for testing incorrect mime type for manifest file.
+    # op100 tests an invalid MIME type.
     if host_piece == "op100":
         content_type = "text/plain"
 
+    # op98 tests that charset is ignored and the result is always processed as UTF-8.
+    if host_piece == "op98":
+        content_type = "application/originpolicy+json;charset=utf-16"
+
+    # op97 tests that adding charset=utf-8 (and a BOM) does not break anything.
+    if host_piece == "op97":
+        content_type = "application/originpolicy+json;charset=utf-8"
+
     filepath_pattern = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(
         __file__)), "../origin-policy/policies/", "{} *.json".format(host_piece)))
 
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/README.md b/third_party/blink/web_tests/external/wpt/bluetooth/README.md
index dcf3d283..e7997c9 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/README.md
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/README.md
@@ -1,11 +1,79 @@
-# Web Bluetooth Testing
+# Web Bluetooth API Tests
 
-Web Bluetooth testing relies on the [Web Bluetooth Testing API] which must be
-provided by browsers under test.
+The Web Bluetooth API enables sites to connect to and interact with Bluetooth
+Low Energy devices. Please check the [Web Bluetooth specification] for more
+details.
+
+Web Bluetooth testing relies on the [FakeBluetooth][Web Bluetooth
+Testing] test API which must be provided by browsers under test.
+
+TODO([#485]): Update the links to [FakeBluetooth][Web Bluetooth Testing] to
+point to the [Testing Web Bluetooth specification].
 
 In this test suite `resources/bluetooth-helpers.js` detects and triggers
-the API to be loaded as needed.
+the API to be loaded as needed. This file also contains several helper methods
+that are used in the tests to set up fake Bluetooth devices and to assert that
+specific Bluetooth events happened.
 
+[Web Bluetooth specification]: https://WebBluetoothCG.github.io/web-bluetooth
+[Web Bluetooth Testing]:
+https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/
+[#485]: https://github.com/WebBluetoothCG/web-bluetooth/issues/485
+[Testing Web Bluetooth specification]:
+https://WebBluetoothCG.github.io/web-bluetooth/tests.html
+
+## Generated Tests
+
+Several Web Bluetooth tests share common test logic. For these tests, the
+`script-tests` directory contains templates that are used by the
+`generate.py` script to create several tests from these templates. The templates
+are JavaScript files that contain a `CALLS()` keyword with functions delimited by
+a `|` character. A test will be created for each function in the `CALLS()` by
+`generate.py`. Note that for each subdirectory in `script-tests` there is a
+matching directory under `bluetooth`. The generator will expand `CALLS`
+functions into the
+corresponding directory.
+
+### Example
+
+The `./script-tests/server/get-same-object.js` contains the following
+code:
+
+```js
+gattServer.CALLS([
+        getPrimaryService('heart_rate')|
+        getPrimaryServices()|
+        getPrimaryServices('heart_rate')[UUID]]),
+```
+
+The functions in `CALLS()` will be expanded to generate 3 test files prefixed
+with `gen-`:
+
+```
+bluetooth/server/getPrimaryService/gen-get-same-object.html
+bluetooth/server/getPrimaryServices/gen-get-same-object.html
+bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html
+```
+
+### Generate Tests
+
+To generate the tests in `script-tests`, run the following command from the
+source root:
+
+```sh
+$ python bluetooth/generate.py
+```
+
+To check that generated tests are correct and that there are no obsolete tests,
+or tests for which a template does not exist anymore, run:
+
+```sh
+$ python bluetooth/generate_test.py
+```
+
+More details can be found in `generate.py` and `generate_test.py`.
+
+## Chromium Implementation
 The Chromium implementation is provided by
 `../resources/chromium/web-bluetooth-test.js`.
 
@@ -18,44 +86,33 @@
 into stable Chrome without substantially increasing the binary size, similar to
 WebUSB.
 
-These bluetooth tests are upstreamed here because other browsers can reuse them
-by implementing the [Web Bluetooth Testing API], even if only on their internal
+These Bluetooth tests are upstreamed here because other browsers can reuse them
+by implementing the [Web Bluetooth Testing] API, even if only on their internal
 infrastructure.
 
-[Web Bluetooth Testing API]: https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/
+For more implementation details, see the [Web Bluetooth Service README].
 
-# Generated gen-* files from generate.py
+[Web Bluetooth Service README]:
+https://chromium.googlesource.com/chromium/src.git/+/master/content/browser/bluetooth/README.md
 
-`generate.py` builds `gen-*.html` tests using templates in
-`script-tests/*/*.js`.
+# Resources and Documentation
 
-The subdirectory structure in `bluetooth/script-test/*` is recreated into
-`bluetooth/*`.  The generator expands each CALL function from templates
-into new leaf directories and files.
+For any issues pertaining to the specification, please file a [GitHub]
+issue. For issues pertaining to an implementation of Web Bluetooth, please
+file an issue with the implementor's bug tracker.
 
-Example:
+* [Web Bluetooth specification]
+* [Web Bluetooth Testing]
+* [Testing Web Bluetooth specification]
 
-`script-tests/server/get-same-object.js` contains:
+[GitHub]: https://github.com/WebBluetoothCG/web-bluetooth
 
-```
-gattServer.CALLS([
-        getPrimaryService('heart_rate')|
-        getPrimaryServices()|
-        getPrimaryServices('heart_rate')[UUID]]),
-```
+## Chromium
 
-Generating:
+Mailing list: web-bluetooth@chromium.org
 
-```
-server/getPrimaryService/gen-get-same-object.html
-server/getPrimaryServices/gen-get-same-object.html
-server/getPrimaryServices/gen-get-same-object-with-uuid.html
-```
+Bug tracker: [Blink>Bluetooth]
 
-Usage:
+* [Web Bluetooth Service README]
 
-```
-$ python generate.py
-```
-
-More details documented in `generate.py`.
+[Blink>Bluetooth]: https://bugs.chromium.org/p/chromium/issues/list?q=component%3ABlink%3EBluetooth&can=2
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-one-sets-flex-basis-to-zero-px.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-one-sets-flex-basis-to-zero-px.html
index 46b715f..8fca136 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-one-sets-flex-basis-to-zero-px.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-one-sets-flex-basis-to-zero-px.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <title>CSS Flexbox: flex-basis with zero pixel</title>
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-property">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-basis-property">
 <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
 <link href="support/flexbox.css" rel="stylesheet">
 <meta name="assert" content="This test ensures that setting 'flex-basis' property to
@@ -9,8 +9,7 @@
 and 'writing-mode' value works properly.">
 <style>
 .flexbox > div {
-    font-family: Ahem;
-    font-size: 14px;
+    font: 14px/1 Ahem;
 }
 
 .flex-one-one-zero-percent {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/relayout-image-load.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/relayout-image-load.html
new file mode 100644
index 0000000..30091c5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/relayout-image-load.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Flexbox: Relayout after loading an image</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#resolve-flexible-lengths">
+<link rel="help" href="https://drafts.csswg.org/css-images-4/#image-values">
+<meta name="assert" content="This test ensures flexbox does a relayout after an image loads.">
+<link href="support/flexbox.css" rel="stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+</head>
+<body>
+<div id=log></div>
+<p>Test passes if a green 100x100 image is rendered.</p>
+<div id="test" class="flexbox">
+    &nbsp;
+    <div class="flexbox">
+        <img data-expected-width=100 data-expected-height=100 id="image" onload="imageLoaded()">
+    </div>
+</div>
+<script>
+
+function changeImage()
+{
+    document.getElementById("image").src = "support/100x100-green.png";
+}
+step_timeout(changeImage, 0);
+
+function imageLoaded()
+{
+    checkLayout('#test')
+}
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan-ref.html
new file mode 100644
index 0000000..83bfe744
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings Liga and Tibetan shaping</title>
+<body>
+<p>Test passes if the three lines below are identical.</p>
+<section class="test" lang="bo">
+  <p>རྒྱུ</p>
+  <p>རྒྱུ</p>
+  <p>རྒྱུ</p>
+</section>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan.html
new file mode 100644
index 0000000..45cde9a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-feature-settings-tibetan.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings Liga and Tibetan shaping</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-feature-settings-tibetan-ref.html">
+<meta name="assert" content="Test that Tibetan shaping works with ligatures disabled.">
+<style>
+  .letter-spacing {
+    letter-spacing: .2px;
+  }
+
+  .liga-off {
+    font-feature-settings: "liga" off;
+  }
+</style>
+<body>
+<p>Test passes if the three lines below are identical.</p>
+<section class="test" lang="bo">
+  <p>རྒྱུ</p>
+  <p class="letter-spacing">རྒྱུ</p>
+  <p class="liga-off">རྒྱུ</p>
+</section>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html
new file mode 100644
index 0000000..7a4dff8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html
@@ -0,0 +1,11 @@
+<!quirks-mode>
+<link rel="help" href="https://crbug.com/1004060">
+<style>
+html, body {
+  width: min-content;
+  overflow: scroll;
+}
+</style>
+<body style="margin-right: -1px;">
+  <div style="margin: 0 10000000000;"></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative-expected.txt
index 18311024..8568a41 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative-expected.txt
@@ -1,6 +1,7 @@
 This is a testharness.js-based test.
-FAIL KeyframeEffect.getKeyframes() returns expected frames for a simple transition assert_equals: properties on ComputedKeyframe #0 expected "composite,computedOffset,easing,left,offset" but got "composite,computedOffset,easing,offset"
-FAIL KeyframeEffect.getKeyframes() returns frames unaffected by a non-default easing function assert_equals: properties on ComputedKeyframe #0 expected "composite,computedOffset,easing,left,offset" but got "composite,computedOffset,easing,offset"
-FAIL KeyframeEffect.getKeyframes() returns expected frames for a transition with a CSS variable endpoint assert_equals: properties on ComputedKeyframe #0 expected "composite,computedOffset,easing,left,offset" but got "composite,computedOffset,easing,offset"
+PASS KeyframeEffect.getKeyframes() returns expected frames for a simple transition
+PASS KeyframeEffect.getKeyframes() returns frames unaffected by a non-default easing function
+PASS KeyframeEffect.getKeyframes() returns expected frames for a transition with a CSS variable endpoint
+FAIL KeyframeEffect.getKeyframes() returns expected frames for a transition after resetting the effect target assert_equals: properties on ComputedKeyframe #0 expected "composite,computedOffset,easing,left,offset" but got "composite,computedOffset,easing,offset"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html
index 47b769b1..56925fb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html
@@ -131,4 +131,39 @@
 }, 'KeyframeEffect.getKeyframes() returns expected frames for a'
    + ' transition with a CSS variable endpoint');
 
+test(t => {
+  const div = addDiv(t);
+  div.style.left = '0px';
+  getComputedStyle(div).transitionProperty;
+  div.style.transition = 'left 100s';
+  div.style.left = '100px';
+
+  // Resetting the effect target before retrieving the keyframes should not
+  // affect the computed property values.
+  const anim = div.getAnimations()[0];
+  anim.effect.target = null;
+  const frames = anim.effect.getKeyframes();
+
+  const expected = [
+    {
+      offset: 0,
+      computedOffset: 0,
+      easing: 'linear',
+      composite: 'auto',
+      left: '0px',
+    },
+    {
+      offset: 1,
+      computedOffset: 1,
+      easing: 'linear',
+      composite: 'auto',
+      left: '100px',
+    },
+  ];
+  for (let i = 0; i < frames.length; i++) {
+    assert_frames_equal(frames[i], expected[i], `ComputedKeyframe #${i}`);
+  }
+}, 'KeyframeEffect.getKeyframes() returns expected frames for a'
+   + ' transition after resetting the effect target');
+
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/effect-reference-convolve-error-001.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/effect-reference-convolve-error-001.html
deleted file mode 100644
index 11922ef..0000000
--- a/third_party/blink/web_tests/external/wpt/css/filter-effects/effect-reference-convolve-error-001.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<title>SVG Filters: feConvolveMatrix filter</title>
-<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feConvolveMatrixElement">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects/#ColorInterpolationFiltersProperty">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
-<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=533457">
-<link rel="match" href="reference/effect-reference-convolve-error-001-ref.html">
-<meta name="assert" content="feConvolveMatrix without a kernelMatrix acts as a pass through filter"/>
-<div style="width: 100px; height: 100px; background-color: red; filter: url(#f)"></div>
-<svg height="0">
-    <filter id="f" x="0" y="0" width="1" height="1">
-        <feConvolveMatrix/>
-        <feColorMatrix values="1 0 0 0 0,
-                               0 1 0 0 0.5,
-                               0 0 1 0 0,
-                               0 0 0 1 1"
-                       color-interpolation-filters="sRGB"/>
-    </filter>
-</svg>
diff --git a/third_party/blink/web_tests/external/wpt/dom/attributes-are-nodes.html b/third_party/blink/web_tests/external/wpt/dom/attributes-are-nodes.html
new file mode 100644
index 0000000..54ff4cca
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/attributes-are-nodes.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Attributes are Nodes but should not be accepted outside of the `attributes` NamedNodeMap</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-core-changes">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const attribute = document.createAttribute("newattribute");
+
+  assert_true(attribute instanceof Node, "attribute instances are instances of Node");
+  assert_true(Attr.prototype instanceof Node, "attribute instances are instances of Node");
+
+}, "Attrs are subclasses of Nodes");
+
+test(() => {
+
+  const parent = document.createElement("p");
+
+  const attribute = document.createAttribute("newattribute");
+  assert_throws_dom("HierarchyRequestError", () => {
+    parent.appendChild(attribute);
+  });
+
+}, "appendChild with an attribute as the child should fail");
+
+test(() => {
+
+  const parent = document.createElement("p");
+  parent.appendChild(document.createElement("span"));
+
+  const attribute = document.createAttribute("newattribute");
+  assert_throws_dom("HierarchyRequestError", () => {
+    parent.replaceChild(attribute, parent.firstChild);
+  });
+
+}, "replaceChild with an attribute as the child should fail");
+
+test(() => {
+
+  const parent = document.createElement("p");
+  parent.appendChild(document.createElement("span"));
+
+  const attribute = document.createAttribute("newattribute");
+  assert_throws_dom("HierarchyRequestError", () => {
+    parent.insertBefore(attribute, parent.firstChild);
+  });
+
+}, "insertBefore with an attribute as the child should fail");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-iterator.html b/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-iterator.html
new file mode 100644
index 0000000..4a3f630
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-iterator.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="help" href="https://dom.spec.whatwg.org/#interface-htmlcollection">
+<link rel="help" href="https://heycam.github.io/webidl/#es-iterator">
+<title>HTMLCollection @@iterator Test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<p id="1"></p>
+<p id="2"></p>
+<p id="3"></p>
+<p id="4"></p>
+<p id="5"></p>
+<script>
+"use strict";
+
+const paragraphs = document.getElementsByTagName("p");
+
+test(() => {
+  assert_true("length" in paragraphs);
+}, "HTMLCollection has length method.");
+
+test(() => {
+  assert_false("values" in paragraphs);
+}, "HTMLCollection does not have iterable's values method.");
+
+test(() => {
+  assert_false("entries" in paragraphs);
+}, "HTMLCollection does not have iterable's entries method.");
+
+test(() => {
+  assert_false("forEach" in paragraphs);
+}, "HTMLCollection does not have iterable's forEach method.");
+
+test(() => {
+  assert_true(Symbol.iterator in paragraphs);
+}, "HTMLCollection has Symbol.iterator.");
+
+test(() => {
+  const ids = "12345";
+  let idx = 0;
+  for (const element of paragraphs) {
+    assert_equals(element.getAttribute("id"), ids[idx++]);
+  }
+}, "HTMLCollection is iterable via for-of loop.");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/Event-stopImmediatePropagation.html b/third_party/blink/web_tests/external/wpt/dom/events/Event-stopImmediatePropagation.html
new file mode 100644
index 0000000..b7573225
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/Event-stopImmediatePropagation.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event's stopImmediatePropagation</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation">
+<link rel="author" href="mailto:d@domenic.me" title="Domenic Denicola">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="target"></div>
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const target = document.querySelector("#target");
+
+let timesCalled = 0;
+target.addEventListener("test", e => {
+  ++timesCalled;
+  e.stopImmediatePropagation();
+  assert_equals(e.cancelBubble, true, "The stop propagation flag must have been set");
+});
+target.addEventListener("test", () => {
+  ++timesCalled;
+});
+
+const e = new Event("test");
+target.dispatchEvent(e);
+assert_equals(timesCalled, 1, "The second listener must not have been called");
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-listener-platform-object.html b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-listener-platform-object.html
new file mode 100644
index 0000000..d5565c2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-listener-platform-object.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>addEventListener with a platform object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+</script>
+<my-custom-click id=click>Click me!</my-custom-click>
+<script>
+"use strict";
+setup({ single_test: true });
+
+class MyCustomClick extends HTMLElement {
+  connectedCallback() {
+    this.addEventListener("click", this);
+  }
+
+  handleEvent(event) {
+    if (event.target === this) {
+      this.dataset.yay = "It worked!";
+    }
+  }
+}
+window.customElements.define("my-custom-click", MyCustomClick);
+
+const customElement = document.getElementById("click");
+customElement.click();
+
+assert_equals(customElement.dataset.yay, "It worked!");
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-remove-listener.html b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-remove-listener.html
new file mode 100644
index 0000000..8fb9f43
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-add-remove-listener.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>EventTarget's addEventListener + removeEventListener</title>
+<link rel="author" title="Sebastian Mayr" href="mailto:wpt@smayr.name">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+function listener(evt) {
+  evt.preventDefault();
+  return false;
+}
+
+test(() => {
+  document.addEventListener("x", listener, false);
+  let event = new Event("x", { cancelable: true });
+  let ret = document.dispatchEvent(event);
+  assert_false(ret);
+
+  document.removeEventListener("x", listener);
+  event = new Event("x", { cancelable: true });
+  ret = document.dispatchEvent(event);
+  assert_true(ret);
+}, "Removing an event listener without explicit capture arg should succeed");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-this-of-listener.html b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-this-of-listener.html
new file mode 100644
index 0000000..506564c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/events/EventTarget-this-of-listener.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>EventTarget listeners this value</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-listener-invoke">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    node.addEventListener("someevent", function () {
+      ++callCount;
+      assert_equals(this, node);
+    });
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "the this value inside the event listener callback should be the node");
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    const handler = {
+      handleEvent() {
+        ++callCount;
+        assert_equals(this, handler);
+      }
+    };
+
+    node.addEventListener("someevent", handler);
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "the this value inside the event listener object handleEvent should be the object");
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    const handler = {
+      handleEvent() {
+        assert_unreached("should not call the old handleEvent method");
+      }
+    };
+
+    node.addEventListener("someevent", handler);
+    handler.handleEvent = function () {
+      ++callCount;
+      assert_equals(this, handler);
+    };
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "dispatchEvent should invoke the current handleEvent method of the object");
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    const handler = {};
+
+    node.addEventListener("someevent", handler);
+    handler.handleEvent = function () {
+      ++callCount;
+      assert_equals(this, handler);
+    };
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "addEventListener should not require handleEvent to be defined on object listeners");
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    function handler() {
+      ++callCount;
+      assert_equals(this, node);
+    }
+
+    handler.handleEvent = () => {
+      assert_unreached("should not call the handleEvent method on a function");
+    };
+
+    node.addEventListener("someevent", handler);
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "handleEvent properties added to a function before addEventListener are not reached");
+
+test(() => {
+
+  const nodes = [
+    document.createElement("p"),
+    document.createTextNode("some text"),
+    document.createDocumentFragment(),
+    document.createComment("a comment"),
+    document.createProcessingInstruction("target", "data")
+  ];
+
+  let callCount = 0;
+  for (const node of nodes) {
+    function handler() {
+      ++callCount;
+      assert_equals(this, node);
+    }
+
+    node.addEventListener("someevent", handler);
+
+    handler.handleEvent = () => {
+      assert_unreached("should not call the handleEvent method on a function");
+    };
+
+    node.dispatchEvent(new CustomEvent("someevent"));
+  }
+
+  assert_equals(callCount, nodes.length);
+
+}, "handleEvent properties added to a function after addEventListener are not reached");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.html
new file mode 100644
index 0000000..72b3684
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>document.createCDATASection must throw in HTML documents</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-document-createcdatasection">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+assert_throws_dom("NotSupportedError", () => document.createCDATASection("foo"));
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.xhtml b/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.xhtml
new file mode 100644
index 0000000..b0a5a7f2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Document-createCDATASection.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta charset="utf-8"/>
+  <title>document.createCDATASection</title>
+  <link rel="help" href="https://dom.spec.whatwg.org/#dom-document-createcdatasection"/>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+  <script src="Document-createComment-createTextNode.js"></script>
+</head>
+
+<body>
+  <script>
+  "use strict";
+  test_create("createCDATASection", CDATASection, 4, "#cdata-section");
+
+  test(() => {
+    assert_throws_dom("InvalidCharacterError", () => document.createCDATASection(" ]" + "]>  "));
+  }, "Creating a CDATA section containing the string \"]" + "]>\" must throw");
+  </script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-constructor.html b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-constructor.html
new file mode 100644
index 0000000..e97a7c4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-constructor.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>DocumentFragment constructor</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documentfragment-documentfragment">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+  const fragment = new DocumentFragment();
+  assert_equals(fragment.ownerDocument, document);
+}, "Sets the owner document to the current global object associated document");
+
+test(() => {
+  const fragment = new DocumentFragment();
+  const text = document.createTextNode("");
+  fragment.appendChild(text);
+  assert_equals(fragment.firstChild, text);
+}, "Create a valid document DocumentFragment");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt
new file mode 100644
index 0000000..1046305
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS The method must exist
+PASS It must return null when there are no matches
+PASS It must return the first element when there are matches
+FAIL Empty string ID values assert_equals: Even if there is an element with an empty-string ID attribute, it must not be returned expected null but got Element node <div id=""></div>
+PASS It must return the first element when there are matches, using a template
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById.html b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById.html
new file mode 100644
index 0000000..ce0d302
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>DocumentFragment.prototype.getElementById</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<template>
+  <div id="bar">
+    <span id="foo" data-yes></span>
+  </div>
+  <div id="foo">
+    <span id="foo"></span>
+    <ul id="bar">
+      <li id="foo"></li>
+    </ul>
+  </div>
+</template>
+
+<script>
+"use strict";
+
+test(() => {
+  assert_equals(typeof DocumentFragment.prototype.getElementById, "function", "It must exist on the prototype");
+  assert_equals(typeof document.createDocumentFragment().getElementById, "function", "It must exist on an instance");
+}, "The method must exist");
+
+test(() => {
+  assert_equals(document.createDocumentFragment().getElementById("foo"), null);
+  assert_equals(document.createDocumentFragment().getElementById(""), null);
+}, "It must return null when there are no matches");
+
+test(() => {
+  const frag = document.createDocumentFragment();
+  frag.appendChild(document.createElement("div"));
+  frag.appendChild(document.createElement("span"));
+  frag.childNodes[0].id = "foo";
+  frag.childNodes[1].id = "foo";
+
+  assert_equals(frag.getElementById("foo"), frag.childNodes[0]);
+}, "It must return the first element when there are matches");
+
+test(() => {
+  const frag = document.createDocumentFragment();
+  frag.appendChild(document.createElement("div"));
+  frag.childNodes[0].setAttribute("id", "");
+
+  assert_equals(
+    frag.getElementById(""),
+    null,
+    "Even if there is an element with an empty-string ID attribute, it must not be returned"
+  );
+}, "Empty string ID values");
+
+test(() => {
+  const frag = document.querySelector("template").content;
+
+  assert_true(frag.getElementById("foo").hasAttribute("data-yes"));
+}, "It must return the first element when there are matches, using a template");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-querySelectorAll-after-modification.html b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-querySelectorAll-after-modification.html
new file mode 100644
index 0000000..8049363
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-querySelectorAll-after-modification.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelectorAll should still work on DocumentFragments after they are modified</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2290 -->
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const frag = document.createDocumentFragment();
+frag.appendChild(document.createElement("div"));
+
+assert_array_equals(frag.querySelectorAll("img"), [], "before modification");
+
+frag.appendChild(document.createElement("div"));
+
+// If the bug is present, this will throw.
+assert_array_equals(frag.querySelectorAll("img"), [], "after modification");
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-hasAttribute.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-hasAttribute.html
new file mode 100644
index 0000000..26528d756
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-hasAttribute.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Element.prototype.hasAttribute</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-hasattribute">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<span data-e2="2" data-F2="3" id="t"></span>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const el = document.createElement("p");
+  el.setAttributeNS("foo", "x", "first");
+
+  assert_true(el.hasAttribute("x"));
+
+}, "hasAttribute should check for attribute presence, irrespective of namespace");
+
+test(() => {
+
+  const el = document.getElementById("t");
+
+  assert_true(el.hasAttribute("data-e2"));
+  assert_true(el.hasAttribute("data-E2"));
+  assert_true(el.hasAttribute("data-f2"));
+  assert_true(el.hasAttribute("data-F2"));
+
+}, "hasAttribute should work with all attribute casings");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-matches-namespaced-elements.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-matches-namespaced-elements.html
new file mode 100644
index 0000000..e61b11ca6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-matches-namespaced-elements.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>matches/webkitMatchesSelector must work when an element has a namespace</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression tests for https://github.com/jsdom/jsdom/issues/1846, https://github.com/jsdom/jsdom/issues/2247 -->
+
+<script>
+"use strict";
+
+for (const method of ["matches", "webkitMatchesSelector"]) {
+  test(() => {
+    assert_true(document.createElementNS("", "element")[method]("element"));
+  }, `empty string namespace, ${method}`);
+
+  test(() => {
+    assert_true(document.createElementNS("urn:ns", "h")[method]("h"));
+  }, `has a namespace, ${method}`);
+
+  test(() => {
+    assert_true(document.createElementNS("urn:ns", "h")[method]("*|h"));
+  }, `has a namespace, *|, ${method}`);
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-removeAttribute.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-removeAttribute.html
new file mode 100644
index 0000000..df79e62c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-removeAttribute.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Element.prototype.removeAttribute</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-removeattribute">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const el = document.createElement("p");
+  el.setAttribute("x", "first");
+  el.setAttributeNS("foo", "x", "second");
+
+  assert_equals(el.attributes.length, 2);
+  assert_equals(el.getAttribute("x"), "first");
+  assert_equals(el.getAttributeNS(null, "x"), "first");
+  assert_equals(el.getAttributeNS("foo", "x"), "second");
+
+  // removeAttribute removes the first attribute with name "x" that
+  // we set on the element, irrespective of namespace.
+  el.removeAttribute("x");
+
+  // The only attribute remaining should be the second one.
+  assert_equals(el.getAttribute("x"), "second");
+  assert_equals(el.getAttributeNS(null, "x"), null);
+  assert_equals(el.getAttributeNS("foo", "x"), "second");
+  assert_equals(el.attributes.length, 1, "one attribute");
+
+}, "removeAttribute should remove the first attribute, irrespective of namespace, when the first attribute is " +
+   "not in a namespace");
+
+test(() => {
+
+  const el = document.createElement("p");
+  el.setAttributeNS("foo", "x", "first");
+  el.setAttributeNS("foo2", "x", "second");
+
+  assert_equals(el.attributes.length, 2);
+  assert_equals(el.getAttribute("x"), "first");
+  assert_equals(el.getAttributeNS("foo", "x"), "first");
+  assert_equals(el.getAttributeNS("foo2", "x"), "second");
+
+  // removeAttribute removes the first attribute with name "x" that
+  // we set on the element, irrespective of namespace.
+  el.removeAttribute("x");
+
+  // The only attribute remaining should be the second one.
+  assert_equals(el.getAttribute("x"), "second");
+  assert_equals(el.getAttributeNS("foo", "x"), null);
+  assert_equals(el.getAttributeNS("foo2", "x"), "second");
+  assert_equals(el.attributes.length, 1, "one attribute");
+
+}, "removeAttribute should remove the first attribute, irrespective of namespace, when the first attribute is " +
+   "in a namespace");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-setAttribute.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-setAttribute.html
new file mode 100644
index 0000000..76094068
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-setAttribute.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Element.prototype.setAttribute</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattribute">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const el = document.createElement("p");
+  el.setAttributeNS("foo", "x", "first");
+  el.setAttributeNS("foo2", "x", "second");
+
+  el.setAttribute("x", "changed");
+
+  assert_equals(el.attributes.length, 2);
+  assert_equals(el.getAttribute("x"), "changed");
+  assert_equals(el.getAttributeNS("foo", "x"), "changed");
+  assert_equals(el.getAttributeNS("foo2", "x"), "second");
+
+}, "setAttribute should change the first attribute, irrespective of namespace");
+
+test(() => {
+  // https://github.com/whatwg/dom/issues/31
+
+  const el = document.createElement("p");
+  el.setAttribute("FOO", "bar");
+
+  assert_equals(el.getAttribute("foo"), "bar");
+  assert_equals(el.getAttribute("FOO"), "bar");
+  assert_equals(el.getAttributeNS("", "foo"), "bar");
+  assert_equals(el.getAttributeNS("", "FOO"), null);
+
+}, "setAttribute should lowercase before setting");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-tagName.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-tagName.html
index 035a23cc..43e7a2d2 100644
--- a/third_party/blink/web_tests/external/wpt/dom/nodes/Element-tagName.html
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Element-tagName.html
@@ -17,8 +17,15 @@
   assert_equals(document.createElementNS(SVGNS, "SVG").tagName, "SVG")
   assert_equals(document.createElementNS(SVGNS, "s:svg").tagName, "s:svg")
   assert_equals(document.createElementNS(SVGNS, "s:SVG").tagName, "s:SVG")
+
+  assert_equals(document.createElementNS(SVGNS, "textPath").tagName, "textPath");
 }, "tagName should not upper-case for SVG elements in HTML documents.")
 
+test(() => {
+  const el2 = document.createElementNS("http://example.com/", "mixedCase");
+  assert_equals(el2.tagName, "mixedCase");
+}, "tagName should not upper-case for other non-HTML namespaces");
+
 test(function() {
   if ("DOMParser" in window) {
     var xmlel = new DOMParser()
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-XMLDocument.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-XMLDocument.html
new file mode 100644
index 0000000..2c63c77
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-XMLDocument.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Cloning of an XMLDocument</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-node-clonenode">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-node-clone">
+
+<!-- This is testing in particular "that implements the same interfaces as node" -->
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+  const doc = document.implementation.createDocument("namespace", "");
+
+  assert_equals(
+    doc.constructor, XMLDocument,
+    "Precondition check: document.implementation.createDocument() creates an XMLDocument"
+  );
+
+  const clone = doc.cloneNode(true);
+
+  assert_equals(clone.constructor, XMLDocument);
+}, "Created with createDocument");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html
new file mode 100644
index 0000000..21963084
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Cloning of a document with a doctype</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-node-clonenode">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-node-clone">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+  const doctype = document.implementation.createDocumentType("name", "publicId", "systemId");
+  const doc = document.implementation.createDocument("namespace", "", doctype);
+
+  const clone = doc.cloneNode(true);
+
+  assert_equals(clone.childNodes.length, 1, "Only one child node");
+  assert_equals(clone.childNodes[0].nodeType, Node.DOCUMENT_TYPE_NODE, "Is a document fragment");
+  assert_equals(clone.childNodes[0].name, "name");
+  assert_equals(clone.childNodes[0].publicId, "publicId");
+  assert_equals(clone.childNodes[0].systemId, "systemId");
+}, "Created with the createDocument/createDocumentType");
+
+test(() => {
+  const doc = document.implementation.createHTMLDocument();
+
+  const clone = doc.cloneNode(true);
+
+  assert_equals(clone.childNodes.length, 2, "Two child nodes");
+  assert_equals(clone.childNodes[0].nodeType, Node.DOCUMENT_TYPE_NODE, "Is a document fragment");
+  assert_equals(clone.childNodes[0].name, "html");
+  assert_equals(clone.childNodes[0].publicId, "");
+  assert_equals(clone.childNodes[0].systemId, "");
+}, "Created with the createHTMLDocument");
+
+test(() => {
+  const parser = new window.DOMParser();
+  const doc = parser.parseFromString("<!DOCTYPE html><html></html>", "text/html");
+
+  const clone = doc.cloneNode(true);
+
+  assert_equals(clone.childNodes.length, 2, "Two child nodes");
+  assert_equals(clone.childNodes[0].nodeType, Node.DOCUMENT_TYPE_NODE, "Is a document fragment");
+  assert_equals(clone.childNodes[0].name, "html");
+  assert_equals(clone.childNodes[0].publicId, "");
+  assert_equals(clone.childNodes[0].systemId, "");
+}, "Created with DOMParser");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html
new file mode 100644
index 0000000..bce6074
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>cloneNode on a stylesheet link in a browsing-context-less document</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2497 -->
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const doc = document.implementation.createHTMLDocument();
+
+// Bug was only triggered by absolute URLs, for some reason...
+const absoluteURL = new URL("/common/canvas-frame.css", location.href);
+doc.head.innerHTML = `<link rel="stylesheet" href="${absoluteURL}">`;
+
+// Test passes if this does not throw/crash
+doc.cloneNode(true);
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-svg.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-svg.html
new file mode 100644
index 0000000..9d4704b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-cloneNode-svg.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Cloning of SVG elements and attributes</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-node-clonenode">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-node-clone">
+<!-- regression test for https://github.com/jsdom/jsdom/issues/1601 -->
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<svg xmlns:xlink='http://www.w3.org/1999/xlink'><use xlink:href='#test'></use></svg>
+
+<script>
+"use strict";
+
+const svg = document.querySelector("svg");
+const clone = svg.cloneNode(true);
+
+test(() => {
+
+  assert_equals(clone.namespaceURI, "http://www.w3.org/2000/svg");
+  assert_equals(clone.prefix, null);
+  assert_equals(clone.localName, "svg");
+  assert_equals(clone.tagName, "svg");
+
+}, "cloned <svg> should have the right properties");
+
+test(() => {
+
+  const attr = clone.attributes[0];
+
+  assert_equals(attr.namespaceURI, "http://www.w3.org/2000/xmlns/");
+  assert_equals(attr.prefix, "xmlns");
+  assert_equals(attr.localName, "xlink");
+  assert_equals(attr.name, "xmlns:xlink");
+  assert_equals(attr.value, "http://www.w3.org/1999/xlink");
+
+}, "cloned <svg>'s xmlns:xlink attribute should have the right properties");
+
+test(() => {
+
+  const use = clone.firstElementChild;
+  assert_equals(use.namespaceURI, "http://www.w3.org/2000/svg");
+  assert_equals(use.prefix, null);
+  assert_equals(use.localName, "use");
+  assert_equals(use.tagName, "use");
+
+}, "cloned <use> should have the right properties");
+
+test(() => {
+
+  const use = clone.firstElementChild;
+  const attr = use.attributes[0];
+
+  assert_equals(attr.namespaceURI, "http://www.w3.org/1999/xlink");
+  assert_equals(attr.prefix, "xlink");
+  assert_equals(attr.localName, "href");
+  assert_equals(attr.name, "xlink:href");
+  assert_equals(attr.value, "#test");
+
+}, "cloned <use>'s xlink:href attribute should have the right properties");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-isConnected-shadow-dom.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-isConnected-shadow-dom.html
new file mode 100644
index 0000000..7d04dc3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-isConnected-shadow-dom.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test of Node.isConnected in a shadow tree</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#connected">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+"use strict";
+
+function testIsConnected(mode) {
+  test(() => {
+    const host = document.createElement("div");
+    document.body.appendChild(host);
+
+    const root = host.attachShadow({ mode });
+
+    const node = document.createElement("div");
+    root.appendChild(node);
+
+    assert_true(node.isConnected);
+  }, `Node.isConnected in a ${mode} shadow tree`);
+}
+
+for (const mode of ["closed", "open"]) {
+  testIsConnected(mode);
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Node-mutation-adoptNode.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-mutation-adoptNode.html
new file mode 100644
index 0000000..9c9594c0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Node-mutation-adoptNode.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node-manipulation-adopted</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument">
+<link rel=help href="https://dom.spec.whatwg.org/#mutation-algorithms">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(() => {
+  const old = document.implementation.createHTMLDocument("");
+  const div = old.createElement("div");
+  div.appendChild(old.createTextNode("text"));
+  assert_equals(div.ownerDocument, old);
+  assert_equals(div.firstChild.ownerDocument, old);
+  document.body.appendChild(div);
+  assert_equals(div.ownerDocument, document);
+  assert_equals(div.firstChild.ownerDocument, document);
+}, "simple append of foreign div with text");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-case-insensitive.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-case-insensitive.html
new file mode 100644
index 0000000..e461ee5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-case-insensitive.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelector(All) must work with the i and *= selectors</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2551 -->
+
+<input name="User" id="testInput"></input>
+
+<script>
+"use strict";
+const input = document.getElementById("testInput");
+
+test(() => {
+  assert_equals(document.querySelector("input[name*=user i]"), input);
+}, "querySelector");
+
+test(() => {
+  assert_array_equals(document.querySelectorAll("input[name*=user i]"), [input]);
+}, "querySelectorAll");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes-expected.txt b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes-expected.txt
new file mode 100644
index 0000000..6070b03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes-expected.txt
@@ -0,0 +1,72 @@
+This is a testharness.js-based test.
+Found 68 tests; 67 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS "nonescaped" should match with "#nonescaped"
+PASS "0nextIsWhiteSpace" should match with "#\\30 nextIsWhiteSpace"
+PASS "0nextIsNotHexLetters" should match with "#\\30nextIsNotHexLetters"
+PASS "0connectHexMoreThan6Hex" should match with "#\\000030connectHexMoreThan6Hex"
+PASS "0spaceMoreThan6Hex" should match with "#\\000030 spaceMoreThan6Hex"
+PASS "zero�" should match with "#zero\\0"
+PASS "zero\u0000" should never match with "#zero\\0"
+PASS "zero�" should match with "#zero\\000000"
+PASS "zero\u0000" should never match with "#zero\\000000"
+PASS "�surrogateFirst" should match with "#\\d83d surrogateFirst"
+PASS "\ud83dsurrogateFirst" should never match with "#\\d83d surrogateFirst"
+PASS "surrogateSecond�" should match with "#surrogateSecond\\dd11"
+PASS "surrogateSecond\udd11" should never match with "#surrogateSecond\\dd11"
+PASS "surrogatePair��" should match with "#surrogatePair\\d83d\\dd11"
+PASS "surrogatePair🔑" should never match with "#surrogatePair\\d83d\\dd11"
+PASS "outOfRange�" should match with "#outOfRange\\110000"
+PASS "outOfRange�" should match with "#outOfRange\\110030"
+PASS "outOfRange0" should never match with "#outOfRange\\110030"
+PASS "outOfRange�" should match with "#outOfRange\\555555"
+PASS "outOfRange�" should match with "#outOfRange\\ffffff"
+PASS "eof\\" should never match with "#eof\\"
+PASS ".comma" should match with "#\\.comma"
+PASS "-minus" should match with "#\\-minus"
+PASS "g" should match with "#\\g"
+PASS "aBMPRegular" should match with "#\\61 BMPRegular"
+PASS "🔑nonBMP" should match with "#\\1f511 nonBMP"
+PASS "00continueEscapes" should match with "#\\30\\30 continueEscapes"
+PASS "00continueEscapes" should match with "#\\30 \\30 continueEscapes"
+PASS "continueEscapes00" should match with "#continueEscapes\\30 \\30 "
+PASS "continueEscapes00" should match with "#continueEscapes\\30 \\30"
+PASS "continueEscapes00" should match with "#continueEscapes\\30\\30 "
+PASS "continueEscapes00" should match with "#continueEscapes\\30\\30"
+PASS "hello" should match with "#hel\\6Co"
+PASS "&B" should match with "#\\26 B"
+PASS "hello" should match with "#hel\\6C o"
+PASS "spaces" should match with "#spac\\65\r\ns"
+PASS "spaces" should match with "#sp\\61\tc\\65\fs"
+PASS "test힙" should match with "#test\\D799"
+PASS "" should match with "#\\E000"
+PASS "test" should match with "#te\\s\\t"
+PASS "spaces in\tident" should match with "#spaces\\ in\\\tident"
+PASS ".,:!" should match with "#\\.\\,\\:\\!"
+PASS "null�" should match with "#null\\0"
+PASS "null�" should match with "#null\\0000"
+PASS "large�" should match with "#large\\110000"
+PASS "large�" should match with "#large\\23456a"
+PASS "surrogate�" should match with "#surrogate\\D800"
+PASS "surrogate�" should match with "#surrogate\\0DBAC"
+PASS "�surrogate" should match with "#\\00DFFFsurrogate"
+PASS "􏿿" should match with "#\\10fFfF"
+PASS "􏿿0" should match with "#\\10fFfF0"
+PASS "􀀀00" should match with "#\\10000000"
+PASS "eof�" should match with "#eof\\"
+PASS "simple-ident" should match with "#simple-ident"
+PASS "testing123" should match with "#testing123"
+PASS "_underscore" should match with "#_underscore"
+PASS "-text" should match with "#-text"
+PASS "-m" should match with "#-\\6d"
+PASS "--abc" should match with "#--abc"
+PASS "--" should match with "#--"
+PASS "--11" should match with "#--11"
+PASS "---" should match with "#---"
+PASS " " should match with "# "
+PASS " " should match with "# "
+PASS "ሴ" should match with "#ሴ"
+PASS "𒍅" should match with "#𒍅"
+FAIL "�" should match with "#\u0000" Failed to execute 'querySelector' on 'Element': '#\0' is not a valid selector.
+PASS "ab�c" should match with "#ab\u0000c"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes.html
new file mode 100644
index 0000000..65a75e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-escapes.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>querySelector() with CSS escapes</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-parentnode-queryselector">
+<link rel="help" href="https://drafts.csswg.org/css-syntax/#consume-escaped-code-point">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<link rel="author" title="bellbind" href="mailto:bellbind@gmail.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+function testMatched(id, selector) {
+  test(() => {
+    const container = document.createElement("div");
+    const child = document.createElement("span");
+    child.id = id;
+
+    container.appendChild(child);
+
+    assert_equals(container.querySelector(selector), child);
+  }, `${JSON.stringify(id)} should match with ${JSON.stringify(selector)}`);
+}
+
+function testNeverMatched(id, selector) {
+  test(() => {
+    const container = document.createElement("div");
+    const child = document.createElement("span");
+    child.id = id;
+
+    container.appendChild(child);
+
+    assert_equals(container.querySelector(selector), null);
+  }, `${JSON.stringify(id)} should never match with ${JSON.stringify(selector)}`);
+}
+
+// 4.3.7 from https://drafts.csswg.org/css-syntax/#consume-escaped-code-point
+testMatched("nonescaped", "#nonescaped");
+
+// - escape hex digit
+testMatched("0nextIsWhiteSpace", "#\\30 nextIsWhiteSpace");
+testMatched("0nextIsNotHexLetters", "#\\30nextIsNotHexLetters");
+testMatched("0connectHexMoreThan6Hex", "#\\000030connectHexMoreThan6Hex");
+testMatched("0spaceMoreThan6Hex", "#\\000030 spaceMoreThan6Hex");
+
+// - hex digit special replacement
+// 1. zero points
+testMatched("zero\u{fffd}", "#zero\\0");
+testNeverMatched("zero\u{0}", "#zero\\0");
+testMatched("zero\u{fffd}", "#zero\\000000");
+testNeverMatched("zero\u{0}", "#zero\\000000");
+// 2. surrogate points
+testMatched("\u{fffd}surrogateFirst", "#\\d83d surrogateFirst");
+testNeverMatched("\ud83dsurrogateFirst", "#\\d83d surrogateFirst");
+testMatched("surrogateSecond\u{fffd}", "#surrogateSecond\\dd11");
+testNeverMatched("surrogateSecond\udd11", "#surrogateSecond\\dd11");
+testMatched("surrogatePair\u{fffd}\u{fffd}", "#surrogatePair\\d83d\\dd11");
+testNeverMatched("surrogatePair\u{1f511}", "#surrogatePair\\d83d\\dd11");
+// 3. out of range points
+testMatched("outOfRange\u{fffd}", "#outOfRange\\110000");
+testMatched("outOfRange\u{fffd}", "#outOfRange\\110030");
+testNeverMatched("outOfRange\u{30}", "#outOfRange\\110030");
+testMatched("outOfRange\u{fffd}", "#outOfRange\\555555");
+testMatched("outOfRange\u{fffd}", "#outOfRange\\ffffff");
+
+// - escape EOF
+testNeverMatched("eof\\", "#eof\\");
+
+// - escape anythong else
+testMatched(".comma", "#\\.comma");
+testMatched("-minus", "#\\-minus");
+testMatched("g", "#\\g");
+
+// non edge cases
+testMatched("aBMPRegular", "#\\61 BMPRegular");
+testMatched("\u{1f511}nonBMP", "#\\1f511 nonBMP");
+testMatched("00continueEscapes", "#\\30\\30 continueEscapes");
+testMatched("00continueEscapes", "#\\30 \\30 continueEscapes");
+testMatched("continueEscapes00", "#continueEscapes\\30 \\30 ");
+testMatched("continueEscapes00", "#continueEscapes\\30 \\30");
+testMatched("continueEscapes00", "#continueEscapes\\30\\30 ");
+testMatched("continueEscapes00", "#continueEscapes\\30\\30");
+
+// ident tests case from CSS tests of chromium source: https://goo.gl/3Cxdov
+testMatched("hello", "#hel\\6Co");
+testMatched("&B", "#\\26 B");
+testMatched("hello", "#hel\\6C o");
+testMatched("spaces", "#spac\\65\r\ns");
+testMatched("spaces", "#sp\\61\tc\\65\fs");
+testMatched("test\u{D799}", "#test\\D799");
+testMatched("\u{E000}", "#\\E000");
+testMatched("test", "#te\\s\\t");
+testMatched("spaces in\tident", "#spaces\\ in\\\tident");
+testMatched(".,:!", "#\\.\\,\\:\\!");
+testMatched("null\u{fffd}", "#null\\0");
+testMatched("null\u{fffd}", "#null\\0000");
+testMatched("large\u{fffd}", "#large\\110000");
+testMatched("large\u{fffd}", "#large\\23456a");
+testMatched("surrogate\u{fffd}", "#surrogate\\D800");
+testMatched("surrogate\u{fffd}", "#surrogate\\0DBAC");
+testMatched("\u{fffd}surrogate", "#\\00DFFFsurrogate");
+testMatched("\u{10ffff}", "#\\10fFfF");
+testMatched("\u{10ffff}0", "#\\10fFfF0");
+testMatched("\u{100000}00", "#\\10000000");
+testMatched("eof\u{fffd}", "#eof\\");
+
+testMatched("simple-ident", "#simple-ident");
+testMatched("testing123", "#testing123");
+testMatched("_underscore", "#_underscore");
+testMatched("-text", "#-text");
+testMatched("-m", "#-\\6d");
+testMatched("--abc", "#--abc");
+testMatched("--", "#--");
+testMatched("--11", "#--11");
+testMatched("---", "#---");
+testMatched("\u{2003}", "#\u{2003}");
+testMatched("\u{A0}", "#\u{A0}");
+testMatched("\u{1234}", "#\u{1234}");
+testMatched("\u{12345}", "#\u{12345}");
+testMatched("\u{fffd}", "#\u{0}");
+testMatched("ab\u{fffd}c", "#ab\u{0}c");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-scope.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-scope.html
new file mode 100644
index 0000000..b08a167
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelector-scope.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelector(All) must work with :scope</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2359 -->
+
+<div><p><span>hello</span></p></div>
+
+<script>
+"use strict";
+const div = document.querySelector("div");
+const p = document.querySelector("p");
+
+test(() => {
+  assert_equals(div.querySelector(":scope > p"), p);
+  assert_equals(div.querySelector(":scope > span"), null);
+}, "querySelector");
+
+test(() => {
+  assert_array_equals(div.querySelectorAll(":scope > p"), [p]);
+  assert_array_equals(div.querySelectorAll(":scope > span"), []);
+}, "querySelectorAll");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectorAll-removed-elements.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectorAll-removed-elements.html
new file mode 100644
index 0000000..3cefc80
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectorAll-removed-elements.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelectorAll must not return removed elements</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2519 -->
+
+<div id="container"></div>
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const container = document.querySelector("#container");
+function getIDs() {
+  return [...container.querySelectorAll("a.test")].map(el => el.id);
+}
+
+container.innerHTML = `<a id="link-a" class="test">a link</a>`;
+assert_array_equals(getIDs(), ["link-a"], "Sanity check: initial setup");
+
+container.innerHTML = `<a id="link-b" class="test"><img src="foo.jpg"></a>`;
+assert_array_equals(getIDs(), ["link-b"], "After replacement");
+
+container.innerHTML = `<a id="link-a" class="test">a link</a>`;
+assert_array_equals(getIDs(), ["link-a"], "After changing back to the original HTML");
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-exclusive.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-exclusive.html
new file mode 100644
index 0000000..5cff9367
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-exclusive.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelector/querySelectorAll should not include their thisArg</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2296 -->
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const button = document.createElement("button");
+
+assert_equals(button.querySelector("*"), null, "querySelector, '*', before modification");
+assert_equals(button.querySelector("button"), null, "querySelector, 'button', before modification");
+assert_equals(button.querySelector("button, span"), null, "querySelector, 'button, span', before modification");
+assert_array_equals(button.querySelectorAll("*"), [], "querySelectorAll, '*', before modification");
+assert_array_equals(button.querySelectorAll("button"), [], "querySelectorAll, 'button', before modification");
+assert_array_equals(
+  button.querySelectorAll("button, span"), [],
+  "querySelectorAll, 'button, span', before modification"
+);
+
+
+button.innerHTML = "text";
+
+assert_equals(button.querySelector("*"), null, "querySelector, '*', after modification");
+assert_equals(button.querySelector("button"), null, "querySelector, 'button', after modification");
+assert_equals(button.querySelector("button, span"), null, "querySelector, 'button, span', after modification");
+assert_array_equals(button.querySelectorAll("*"), [], "querySelectorAll, '*', after modification");
+assert_array_equals(button.querySelectorAll("button"), [], "querySelectorAll, 'button', after modification");
+assert_array_equals(
+  button.querySelectorAll("button, span"), [],
+  "querySelectorAll, 'button, span', after modification"
+);
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-namespaces.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-namespaces.html
new file mode 100644
index 0000000..714999b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-namespaces.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelectorAll must work with namespace attribute selectors on SVG</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2028 -->
+
+<svg id="thesvg" xlink:href="foo"></svg>
+
+<script>
+"use strict";
+
+setup({ single_test: true });
+
+const el = document.getElementById("thesvg");
+
+assert_equals(document.querySelector("[*|href]"), el);
+assert_array_equals(document.querySelectorAll("[*|href]"), [el]);
+
+done();
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html
new file mode 100644
index 0000000..e08c6e6d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/ParentNode-querySelectors-space-and-dash-attribute-value.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelector(All) must work for attribute values that contain spaces and dashes</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!-- Regression test for https://github.com/jsdom/jsdom/issues/2542 -->
+
+<a title="test with - dash and space" id="testme">Test One</a>
+
+<script>
+"use strict";
+const el = document.getElementById("testme");
+
+test(() => {
+  assert_equals(document.querySelector("a[title='test with - dash and space']"), el);
+}, "querySelector");
+
+test(() => {
+  assert_equals(document.querySelector("a[title='test with - dash and space']"), el);
+}, "querySelectorAll");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/Text-wholeText.html b/third_party/blink/web_tests/external/wpt/dom/nodes/Text-wholeText.html
new file mode 100644
index 0000000..2467930
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/Text-wholeText.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Text - wholeText</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-text-wholetext">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+"use strict";
+
+test(() => {
+  const parent = document.createElement("div");
+
+  const t1 = document.createTextNode("a");
+  const t2 = document.createTextNode("b");
+  const t3 = document.createTextNode("c");
+
+  assert_equals(t1.wholeText, t1.textContent);
+
+  parent.appendChild(t1);
+
+  assert_equals(t1.wholeText, t1.textContent);
+
+  parent.appendChild(t2);
+
+  assert_equals(t1.wholeText, t1.textContent + t2.textContent);
+  assert_equals(t2.wholeText, t1.textContent + t2.textContent);
+
+  parent.appendChild(t3);
+
+  assert_equals(t1.wholeText, t1.textContent + t2.textContent + t3.textContent);
+  assert_equals(t2.wholeText, t1.textContent + t2.textContent + t3.textContent);
+  assert_equals(t3.wholeText, t1.textContent + t2.textContent + t3.textContent);
+
+  const a = document.createElement("a");
+  a.textContent = "I'm an Anchor";
+  parent.insertBefore(a, t3);
+
+  const span = document.createElement("span");
+  span.textContent = "I'm a Span";
+  parent.appendChild(document.createElement("span"));
+
+  assert_equals(t1.wholeText, t1.textContent + t2.textContent);
+  assert_equals(t2.wholeText, t1.textContent + t2.textContent);
+  assert_equals(t3.wholeText, t3.textContent);
+}, "wholeText returns text of all Text nodes logically adjacent to the node, in document order.");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/attributes-namednodemap.html b/third_party/blink/web_tests/external/wpt/dom/nodes/attributes-namednodemap.html
new file mode 100644
index 0000000..96f9d30
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/attributes-namednodemap.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML>
+<title>Tests of some tricky semantics around NamedNodeMap and the element.attributes collection</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<link rel="help" href="https://dom.spec.whatwg.org/#interface-namednodemap">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-element-attributes">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttribute("x", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+  assert_equals(element.attributes.x.value, "first");
+
+}, "an attribute set by setAttribute should be accessible as a field on the `attributes` field of an Element");
+
+test(() => {
+
+  const element = document.createElement("div");
+  const map = element.attributes;
+
+  assert_equals(map.length, 0);
+
+  const attr1 = document.createAttribute("attr1");
+  map.setNamedItem(attr1);
+  assert_equals(map.attr1, attr1);
+  assert_equals(map.length, 1);
+
+  const attr2 = document.createAttribute("attr2");
+  map.setNamedItem(attr2);
+  assert_equals(map.attr2, attr2);
+  assert_equals(map.length, 2);
+
+  const rm1 = map.removeNamedItem("attr1");
+  assert_equals(rm1, attr1);
+  assert_equals(map.length, 1);
+
+  const rm2 = map.removeNamedItem("attr2");
+  assert_equals(rm2, attr2);
+  assert_equals(map.length, 0);
+
+}, "setNamedItem and removeNamedItem on `attributes` should add and remove fields from `attributes`");
+
+test(() => {
+
+  const element = document.createElement("div");
+  const map = element.attributes;
+
+  const fooAttribute = document.createAttribute("foo");
+  map.setNamedItem(fooAttribute);
+
+  const itemAttribute = document.createAttribute("item");
+  map.setNamedItem(itemAttribute);
+
+  assert_equals(map.foo, fooAttribute);
+  assert_equals(map.item, NamedNodeMap.prototype.item);
+  assert_equals(typeof map.item, "function");
+
+  map.removeNamedItem("item");
+  assert_equals(map.item, NamedNodeMap.prototype.item);
+  assert_equals(typeof map.item, "function");
+
+}, "setNamedItem and removeNamedItem on `attributes` should not interfere with existing method names");
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttributeNS(null, "x", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+  assert_equals(element.attributes.x.value, "first");
+
+}, "an attribute with a null namespace should be accessible as a field on the `attributes` field of an Element");
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttributeNS("foo", "x", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+  assert_equals(element.attributes.x.value, "first");
+
+}, "an attribute with a set namespace should be accessible as a field on the `attributes` field of an Element");
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttributeNS("foo", "setNamedItem", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+  assert_equals(typeof element.attributes.setNamedItem, "function");
+
+}, "setting an attribute should not overwrite the methods of an `NamedNodeMap` object");
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttributeNS("foo", "toString", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+  assert_equals(typeof element.attributes.toString, "function");
+
+}, "setting an attribute should not overwrite the methods defined by prototype ancestors of an `NamedNodeMap` object");
+
+test(() => {
+
+  const element = document.createElement("div");
+  element.setAttributeNS("foo", "length", "first");
+
+  assert_equals(element.attributes.length, 1, "one attribute");
+
+}, "setting an attribute should not overwrite the the length property of an `NamedNodeMap` object");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-32.html b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-32.html
new file mode 100644
index 0000000..29eb4135
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-32.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>Node.prototype.getElementsByClassName tests imported from jsdom</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div class="df-article" id="1">
+</div>
+<div class="df-article" id="2">
+</div>
+<div class="df-article" id="3">
+</div>
+
+<script>
+"use strict";
+
+test(() => {
+
+  const p = document.createElement("p");
+  p.className = "unknown";
+  document.body.appendChild(p);
+
+  const elements = document.getElementsByClassName("first-p");
+  assert_array_equals(elements, []);
+
+}, "cannot find the class name");
+
+test(() => {
+
+  const p = document.createElement("p");
+  p.className = "first-p";
+  document.body.appendChild(p);
+
+  const elements = document.getElementsByClassName("first-p");
+  assert_array_equals(elements, [p]);
+
+}, "finds the class name");
+
+
+test(() => {
+
+  const p = document.createElement("p");
+  p.className = "the-p second third";
+  document.body.appendChild(p);
+
+  const elements1 = document.getElementsByClassName("the-p");
+  assert_array_equals(elements1, [p]);
+
+  const elements2 = document.getElementsByClassName("second");
+  assert_array_equals(elements2, [p]);
+
+  const elements3 = document.getElementsByClassName("third");
+  assert_array_equals(elements3, [p]);
+
+}, "finds the same element with multiple class names");
+
+test(() => {
+
+  const elements = document.getElementsByClassName("df-article");
+
+  assert_equals(elements.length, 3);
+  assert_array_equals(Array.prototype.map.call(elements, el => el.id), ["1", "2", "3"]);
+
+}, "does not get confused by numeric IDs");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-empty-set.html b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-empty-set.html
new file mode 100644
index 0000000..75b8d5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-empty-set.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>Node.prototype.getElementsByClassName with no real class names</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<span class=" ">test</span>
+
+<script>
+"use strict";
+
+test(() => {
+  const elements = document.getElementsByClassName("");
+  assert_array_equals(elements, []);
+}, "Passing an empty string to getElementsByClassName should return an empty HTMLCollection");
+
+test(() => {
+  const elements = document.getElementsByClassName(" ");
+  assert_array_equals(elements, []);
+}, "Passing a space to getElementsByClassName should return an empty HTMLCollection");
+
+test(() => {
+  const elements = document.getElementsByClassName("   ");
+  assert_array_equals(elements, []);
+}, "Passing three spaces to getElementsByClassName should return an empty HTMLCollection");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-whitespace-class-names.html b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-whitespace-class-names.html
new file mode 100644
index 0000000..59bfd2e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/getElementsByClassName-whitespace-class-names.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>Node.prototype.getElementsByClassName with no real class names</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<span class="&#x000B;">LINE TABULATION</span>
+<span class="&#x0085;">NEXT LINE</span>
+<span class="&#x00A0;">NO-BREAK SPACE</span>
+<span class="&#x1680;">OGHAM SPACE MARK</span>
+<span class="&#x2000;">EN QUAD</span>
+<span class="&#x2001;">EM QUAD</span>
+<span class="&#x2002;">EN SPACE</span>
+<span class="&#x2003;">EM SPACE</span>
+<span class="&#x2004;">THREE-PER-EM SPACE</span>
+<span class="&#x2005;">FOUR-PER-EM SPACE</span>
+<span class="&#x2006;">SIX-PER-EM SPACE</span>
+<span class="&#x2007;">FIGURE SPACE</span>
+<span class="&#x2008;">PUNCTUATION SPACE</span>
+<span class="&#x2009;">THIN SPACE</span>
+<span class="&#x200A;">HAIR SPACE</span>
+<span class="&#x2028;">LINE SEPARATOR</span>
+<span class="&#x2029;">PARAGRAPH SEPARATOR</span>
+<span class="&#x202F;">NARROW NO-BREAK SPACE</span>
+<span class="&#x205F;">MEDIUM MATHEMATICAL SPACE</span>
+<span class="&#x3000;">IDEOGRAPHIC SPACE</span>
+
+<span class="&#x180E;">MONGOLIAN VOWEL SEPARATOR</span>
+<span class="&#x200B;">ZERO WIDTH SPACE</span>
+<span class="&#x200C;">ZERO WIDTH NON-JOINER</span>
+<span class="&#x200D;">ZERO WIDTH JOINER</span>
+<span class="&#x2060;">WORD JOINER</span>
+<span class="&#xFEFF;">ZERO WIDTH NON-BREAKING SPACE</span>
+
+<script>
+"use strict";
+
+const spans = document.querySelectorAll("span");
+
+for (const span of spans) {
+  test(() => {
+    const className = span.getAttribute("class");
+    assert_equals(className.length, 1, "Sanity check: the class name was retrieved and is a single character");
+    const shouldBeSpan = document.getElementsByClassName(className);
+    assert_array_equals(shouldBeSpan, [span]);
+  }, `Passing a ${span.textContent} to getElementsByClassName still finds the span`);
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/svg-template-querySelector.html b/third_party/blink/web_tests/external/wpt/dom/nodes/svg-template-querySelector.html
new file mode 100644
index 0000000..5d2f63414
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/svg-template-querySelector.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>querySelector on template fragments with SVG elements</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<template id="template1"><div></div></template>
+<template id="template2"><svg></svg></template>
+<template id="template3"><div><svg></svg></div></template>
+
+<script>
+"use strict";
+
+test(() => {
+  const fragment = document.querySelector("#template1").content;
+  assert_not_equals(fragment.querySelector("div"), null);
+}, "querySelector works on template contents fragments with HTML elements (sanity check)");
+
+test(() => {
+  const fragment = document.querySelector("#template2").content;
+  assert_not_equals(fragment.querySelector("svg"), null);
+}, "querySelector works on template contents fragments with SVG elements");
+
+test(() => {
+  const fragment = document.querySelector("#template3").content;
+  assert_not_equals(fragment.firstChild.querySelector("svg"), null);
+}, "querySelector works on template contents fragments with nested SVG elements");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/dom/window-extends-event-target.html b/third_party/blink/web_tests/external/wpt/dom/window-extends-event-target.html
new file mode 100644
index 0000000..3b690324
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/window-extends-event-target.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Window extends EventTarget</title>
+<link rel="help" href="https://github.com/jsdom/jsdom/issues/2830">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+"use strict";
+
+test(() => {
+
+  assert_equals(window.addEventListener, EventTarget.prototype.addEventListener);
+  assert_equals(window.removeEventListener, EventTarget.prototype.removeEventListener);
+  assert_equals(window.dispatchEvent, EventTarget.prototype.dispatchEvent);
+
+}, "EventTarget methods on Window instances are inherited from the EventTarget prototype");
+
+test(() => {
+
+  const kCustom = "custom-event";
+  const customEvent = new CustomEvent(kCustom, {
+    bubbles: true
+  });
+
+  let target;
+  window.addEventListener.call(document.body, kCustom, function () {
+    target = this;
+  });
+
+  document.body.dispatchEvent(customEvent);
+
+  assert_equals(target, document.body);
+
+}, "window.addEventListener respects custom `this`");
+
+test(() => {
+
+  const kCustom = "custom-event";
+  const customEvent = new CustomEvent(kCustom, {
+    bubbles: true
+  });
+
+  let target;
+  window.addEventListener.call(null, kCustom, function () {
+    target = this;
+  });
+
+  document.body.dispatchEvent(customEvent);
+
+  assert_equals(target, window);
+
+}, "window.addEventListener treats nullish `this` as `window`");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/event-click-counts.html b/third_party/blink/web_tests/external/wpt/event-timing/event-click-counts.html
new file mode 100644
index 0000000..5c67ac8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/event-timing/event-click-counts.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing: eventCounts.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<div id='div'>Click me</div>
+<button id='button'>Click me</button>
+<script>
+  promise_test( t => {
+    assert_precondition(window.EventCounts, "Event Counts isn't supported");
+    function testClicks(expectedCount, resolve) {
+      const clickCount = performance.eventCounts.get('click');
+      if (!clickCount || clickCount < expectedCount) {
+        t.step_timeout(function() {
+          testClicks(expectedCount, resolve);
+        }, 5);
+        return;
+      }
+      assert_equals(clickCount, expectedCount,'Incorrect click count.');
+      assert_equals(performance.eventCounts.get('mousedown'), expectedCount, 'Incorrect mousedown count');
+      assert_equals(performance.eventCounts.get('mouseup'), expectedCount, 'Incorrect mouseup count.');
+      assert_equals(performance.eventCounts.get('mouseover'), expectedCount, 'Incorrect mouseover count.');
+      if (expectedCount == 1) {
+        assert_equals(performance.eventCounts.size, 4, 'There should only be 4 types observed.');
+      } else {
+        assert_equals(performance.eventCounts.get('mouseout'), expectedCount - 1, 'Incorrect mouseout count.');
+        assert_equals(performance.eventCounts.size, 5, 'There should only be 5 types observed.');
+      }
+      resolve();
+    }
+    function promiseClicks(expectedCount) {
+      return new Promise(resolve => {
+        testClicks(expectedCount, resolve)
+      });
+    }
+
+    assert_equals(performance.eventCounts.size, 0);
+    return test_driver.click(document.getElementById('div')).then(() => {
+      return promiseClicks(1);
+    }).then(() => {
+      return test_driver.click(document.getElementById('button'));
+    }).then(() => {
+      return promiseClicks(2);
+    }).then(() => {
+      return test_driver.click(document.getElementById('div'));
+    }).then(() => {
+      return promiseClicks(3);
+    });
+  })
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt
deleted file mode 100644
index 235a397..0000000
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-This is a testharness.js-based test.
-PASS idl_test setup
-PASS idl_test validation
-PASS Partial interface Performance: original interface defined
-PASS Partial interface Performance: valid exposure set
-PASS Partial interface Performance: member names are unique
-PASS Partial interface Performance[2]: member names are unique
-PASS PerformanceEventTiming interface: existence and properties of interface object
-PASS PerformanceEventTiming interface object length
-PASS PerformanceEventTiming interface object name
-PASS PerformanceEventTiming interface: existence and properties of interface prototype object
-PASS PerformanceEventTiming interface: existence and properties of interface prototype object's "constructor" property
-PASS PerformanceEventTiming interface: existence and properties of interface prototype object's @@unscopables property
-PASS PerformanceEventTiming interface: attribute processingStart
-PASS PerformanceEventTiming interface: attribute processingEnd
-PASS PerformanceEventTiming interface: attribute cancelable
-PASS PerformanceEventTiming interface: operation toJSON()
-FAIL EventCounts interface: existence and properties of interface object assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL EventCounts interface object length assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL EventCounts interface object name assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL EventCounts interface: existence and properties of interface prototype object assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL EventCounts interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL EventCounts interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "EventCounts" expected property "EventCounts" missing
-FAIL Performance interface: attribute eventCounts assert_true: The prototype object must have a property "eventCounts" expected true got false
-FAIL Performance interface: performance must inherit property "eventCounts" with the proper type assert_inherits: property "eventCounts" not found in prototype chain
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf16le.https.html b/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf16le.https.html
new file mode 100644
index 0000000..93d46d7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf16le.https.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>Origin policy manifests authored as UTF-16LE must not work</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/origin-policy-test-runner.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+runTestsInSubframe({
+  hostname: "op98",
+  testJS: "../content-security/resources/allow-unsafe-eval.mjs",
+  expectedIds: []
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf8-with-bom.https.html b/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf8-with-bom.https.html
new file mode 100644
index 0000000..5657b5d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/origin-policy/bad-server/manifest-utf8-with-bom.https.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>Origin policy manifests delivered with a UTF-8 BOM must work (the BOM is ignored)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/origin-policy-test-runner.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+runTestsInSubframe({
+  hostname: "op97",
+  testJS: "../content-security/resources/disallow-unsafe-eval-disallow-images.mjs",
+  expectedIds: ["this-file-has-a-utf8-bom"]
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/policies/README.md b/third_party/blink/web_tests/external/wpt/origin-policy/policies/README.md
index b07be74..d45f800 100644
--- a/third_party/blink/web_tests/external/wpt/origin-policy/policies/README.md
+++ b/third_party/blink/web_tests/external/wpt/origin-policy/policies/README.md
@@ -3,3 +3,5 @@
 The human-facing string has no impact on the tests, and just makes it easier to scroll through the list.
 
 The list of potential hostnames is created by `tools/serve/serve.py`'s `_make_origin_policy_subdomains` function, and can be expanded as necessary.
+
+At the moment, the origin policies starting at 100 downward have special handling in the `/.well-known/origin-policy` handler, and might require consulting that file to get the full context. The ones starting at 1 upward are handled generically. If they ever start meeting in the middle we can reevaluate this scheme.
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/policies/op97 utf-8-with-bom.json b/third_party/blink/web_tests/external/wpt/origin-policy/policies/op97 utf-8-with-bom.json
new file mode 100644
index 0000000..869a75e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/origin-policy/policies/op97 utf-8-with-bom.json
@@ -0,0 +1,9 @@
+{
+  "ids" : ["this-file-has-a-utf8-bom"],
+  "content_security" : {
+    "policies": [
+      "script-src 'self' 'unsafe-inline'",
+      "img-src 'none'"
+    ]
+  }
+}
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/policies/op98 utf-16le.json b/third_party/blink/web_tests/external/wpt/origin-policy/policies/op98 utf-16le.json
new file mode 100644
index 0000000..ef0be5b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/origin-policy/policies/op98 utf-16le.json
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-connection.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-connection.html
new file mode 100644
index 0000000..89e9915
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-connection.html
@@ -0,0 +1,421 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Test k-rate AudioParam Inputs for BiquadFilterNode</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="/webaudio/resources/audit-util.js"></script>
+    <script src="/webaudio/resources/audit.js"></script>
+  </head>
+
+  <body>
+    <script>
+      // sampleRate and duration are fairly arbitrary.  We use low values to
+      // limit the complexity of the test.
+      let sampleRate = 8000;
+      let testDuration = 0.5;
+
+      let audit = Audit.createTaskRunner();
+
+      audit.define(
+          {label: 'Frequency AudioParam', description: 'k-rate input works'},
+          (task, should) => {
+            // Test frequency AudioParam using a lowpass filter whose bandwidth
+            // is initially larger than the oscillator frequency.  Then automate
+            // the frequency to 0 so that the output of the filter is 0 (because
+            // the cutoff is 0).
+            let oscFrequency = 440;
+
+            let options = {
+              sampleRate: sampleRate,
+              paramName: 'frequency',
+              oscFrequency: oscFrequency,
+              testDuration: testDuration,
+              filterOptions: {type: 'lowpass', frequency: 0},
+              autoStart:
+                  {method: 'setValueAtTime', args: [2 * oscFrequency, 0]},
+              autoEnd: {
+                method: 'linearRampToValueAtTime',
+                args: [0, testDuration / 4]
+              }
+            };
+
+            doTest(should, options)
+                .then(buffer => {
+                  let expected = buffer.getChannelData(0);
+                  let actual = buffer.getChannelData(1);
+                  let halfLength = expected.length / 2;
+
+                  // Sanity check.  The expected output should not be zero for
+                  // the first half, but should be zero for the second half
+                  // (because the filter bandwidth is exactly 0).
+                  const prefix = 'Expected k-rate frequency with automation';
+
+                  should(
+                      expected.slice(0, halfLength),
+                      `${prefix} output[0:${halfLength - 1}]`)
+                      .notBeConstantValueOf(0);
+                  should(
+                      expected.slice(expected.length),
+                      `${prefix} output[${halfLength}:]`)
+                      .beConstantValueOf(0);
+
+                  // Outputs should be the same.  Break the message into two
+                  // parts so we can see the expected outputs.
+                  checkForSameOutput(
+                      should, options.paramName, actual, expected);
+                })
+                .then(() => task.done());
+          });
+
+      audit.define(
+          {label: 'Q AudioParam', description: 'k-rate input works'},
+          (task, should) => {
+            // Test Q AudioParam.  Use a bandpass filter whose center frequency
+            // is fairly far from the oscillator frequency.  Then start with a Q
+            // value of 0 (so everything goes through) and then increase Q to
+            // some large value such that the out-of-band signals are basically
+            // cutoff.
+            let frequency = 440;
+            let oscFrequency = 4 * frequency;
+
+            let options = {
+              sampleRate: sampleRate,
+              oscFrequency: oscFrequency,
+              testDuration: testDuration,
+              paramName: 'Q',
+              filterOptions: {type: 'bandpass', frequency: frequency, Q: 0},
+              autoStart: {method: 'setValueAtTime', args: [0, 0]},
+              autoEnd: {
+                method: 'linearRampToValueAtTime',
+                args: [100, testDuration / 4]
+              }
+            };
+
+            doTest(should, options)
+                .then(buffer => {
+                  let expected = buffer.getChannelData(0);
+                  let actual = buffer.getChannelData(1);
+
+                  // Outputs should be the same
+                  checkForSameOutput(
+                      should, options.paramName, actual, expected);
+                })
+                .then(() => task.done());
+          });
+
+      audit.define(
+          {label: 'Gain AudioParam', description: 'k-rate input works'},
+          (task, should) => {
+            // Test gain AudioParam.  Use a peaking filter with a large Q so the
+            // peak is narrow with a center frequency the same as the oscillator
+            // frequency.  Start with a gain of 0 so everything goes through and
+            // then ramp the gain down to -100 so that the oscillator is
+            // filtered out.
+            let oscFrequency = 4 * 440;
+
+            let options = {
+              sampleRate: sampleRate,
+              oscFrequency: oscFrequency,
+              testDuration: testDuration,
+              paramName: 'gain',
+              filterOptions:
+                  {type: 'peaking', frequency: oscFrequency, Q: 100, gain: 0},
+              autoStart: {method: 'setValueAtTime', args: [0, 0]},
+              autoEnd: {
+                method: 'linearRampToValueAtTime',
+                args: [-100, testDuration / 4]
+              }
+            };
+
+            doTest(should, options)
+                .then(buffer => {
+                  let expected = buffer.getChannelData(0);
+                  let actual = buffer.getChannelData(1);
+
+                  // Outputs should be the same
+                  checkForSameOutput(
+                      should, options.paramName, actual, expected);
+                })
+                .then(() => task.done());
+          });
+
+      audit.define(
+          {label: 'Detune AudioParam', description: 'k-rate input works'},
+          (task, should) => {
+            // Test detune AudioParam.  The basic idea is the same as the
+            // frequency test above, but insteda of automating the frequency, we
+            // automate the detune value so that initially the filter cutuff is
+            // unchanged and then changing the detune until the cutoff goes to 1
+            // Hz, which would cause the oscillator to be filtered out.
+            let oscFrequency = 440;
+            let filterFrequency = 5 * oscFrequency;
+
+            // For a detune value d, the computed frequency, fc, of the filter
+            // is fc = f*2^(d/1200), where f is the frequency of the filter.  Or
+            // d = 1200*log2(fc/f).  Compute the detune value to produce a final
+            // cutoff frequency of 1 Hz.
+            let detuneEnd = 1200 * Math.log2(1 / filterFrequency);
+
+            let options = {
+              sampleRate: sampleRate,
+              oscFrequency: oscFrequency,
+              testDuration: testDuration,
+              paramName: 'detune',
+              filterOptions: {
+                type: 'lowpass',
+                frequency: filterFrequency,
+                detune: 0,
+                gain: 0
+              },
+              autoStart: {method: 'setValueAtTime', args: [0, 0]},
+              autoEnd: {
+                method: 'linearRampToValueAtTime',
+                args: [detuneEnd, testDuration / 4]
+              }
+            };
+
+            doTest(should, options)
+                .then(buffer => {
+                  let expected = buffer.getChannelData(0);
+                  let actual = buffer.getChannelData(1);
+
+                  // Outputs should be the same
+                  checkForSameOutput(
+                      should, options.paramName, actual, expected);
+                })
+                .then(() => task.done());
+          });
+
+      audit.define('All k-rate inputs', (task, should) => {
+        // Test the case where all AudioParams are set to k-rate with an input
+        // to each AudioParam.  Similar to the above tests except all the params
+        // are k-rate.
+        let testFrames = testDuration * sampleRate;
+        let context = new OfflineAudioContext(
+            {numberOfChannels: 2, sampleRate: sampleRate, length: testFrames});
+
+        let merger = new ChannelMergerNode(
+            context, {numberOfInputs: context.destination.channelCount});
+        merger.connect(context.destination);
+
+        let src = new OscillatorNode(context);
+
+        // The peaking filter uses all four AudioParams, so this is the node to
+        // test.
+        let filterOptions =
+            {type: 'peaking', frequency: 0, detune: 0, gain: 0, Q: 0};
+        let refNode =
+            new BiquadFilterNode(context, {type: 'peaking', filterOptions});
+        let tstNode =
+            new BiquadFilterNode(context, {type: 'peaking', filterOptions});
+
+        // Make all the AudioParams k-rate.
+        ['frequency', 'Q', 'gain', 'detune'].forEach(param => {
+          refNode[param].automationRate = 'k-rate';
+          tstNode[param].automationRate = 'k-rate';
+        });
+
+        // One input for each AudioParam.
+        let mod = {};
+        ['frequency', 'Q', 'gain', 'detune'].forEach(param => {
+          mod[param] = new ConstantSourceNode(context, {offset: 0});
+          mod[param].offset.automationRate = 'a-rate';
+        });
+
+        // Set up automations for refNode.  We want to start the filter with
+        // parameters that let the oscillator signal through more or less
+        // untouched.  Then change the filter parameters to filter out the
+        // oscillator.  What happens in between doesn't reall matter for this
+        // test.  Hence, set the initial parameters with a center frequency well
+        // above the oscillator and a Q and gain of 0 to pass everthing.
+        [['frequency', [4 * src.frequency.value, 0]], ['Q', [0, 0]],
+         ['gain', [0, 0]], ['detune', [4 * 1200, 0]]]
+            .forEach(param => {
+              refNode[param[0]].setValueAtTime(...param[1]);
+              for (let modParam in mod) {
+                mod[modParam].offset.setValueAtTime(...param[1]);
+              }
+            });
+
+        // Now move the filter frequency to the oscillator frequency with a high
+        // Q and very low gain to remove the oscillator signal.
+        [['frequency', [src.frequency.value, testDuration / 4]],
+         ['Q', [40, testDuration / 4]], ['gain', [-100, testDuration / 4]],
+         ['detune', [0, testDuration / 4]]]
+            .forEach(param => {
+              refNode[param[0]].linearRampToValueAtTime(...param[1]);
+              for (let modParam in mod) {
+                mod[modParam].offset.linearRampToValueAtTime(...param[1]);
+              }
+            });
+
+        // Connect everything
+        src.connect(refNode).connect(merger, 0, 0);
+        src.connect(tstNode).connect(merger, 0, 1);
+
+        src.start();
+        for (let param in mod) {
+          mod[param].connect(tstNode[param]);
+          mod[param].start();
+        }
+
+        context.startRendering()
+            .then(buffer => {
+              let expected = buffer.getChannelData(0);
+              let actual = buffer.getChannelData(1);
+
+              // Sanity check that the output isn't all zeroes.
+              should(actual, 'All k-rate AudioParams').notBeConstantValueOf(0);
+              should(actual, 'All k-rate AudioParams')
+                  .beCloseToArray(expected, {absoluteThreshold: 0});
+            })
+            .then(() => task.done());
+      });
+
+      function doTest(should, options) {
+        // Test that a k-rate AudioParam with an input reads the input value and
+        // is actually k-rate.
+        //
+        // A refNode is created with an automation timeline.  This is the
+        // expected output.
+        //
+        // The testNode is the same, but it has a node connected to the k-rate
+        // AudioParam.  The input to the node is an a-rate ConstantSourceNode
+        // whose output is automated in exactly the same was as the refNode.  If
+        // the test passes, the outputs of the two nodes MUST match exactly.
+
+        // The options argument MUST contain the following members:
+        //   sampleRate - the sample rate for the offline context
+        //   testDuration - duration of the offline context, in sec.
+        //   paramName  - the name of the AudioParam to be tested
+        //   oscFrequency - frequency of oscillator source
+        //   filterOptions - options used to construct the BiquadFilterNode
+        //   autoStart     - information about how to start the automation
+        //   autoEnd       - information about how to end the automation
+        //
+        //   The autoStart and autoEnd options are themselves dictionaries with
+        //   the following required members:
+        //     method - name of the automation method to be applied
+        //     args   - array of arguments to be supplied to the method.
+        let {
+          sampleRate,
+          paramName,
+          oscFrequency,
+          autoStart,
+          autoEnd,
+          testDuration,
+          filterOptions
+        } = options;
+
+        let testFrames = testDuration * sampleRate;
+        let context = new OfflineAudioContext(
+            {numberOfChannels: 2, sampleRate: sampleRate, length: testFrames});
+
+        let merger = new ChannelMergerNode(
+            context, {numberOfInputs: context.destination.channelCount});
+        merger.connect(context.destination);
+
+        // Any calls to |should| are meant to be informational so we can see
+        // what nodes are created and the automations used.
+        let src;
+
+        // Create the source.
+        should(
+            () => {
+              src = new OscillatorNode(context, {frequency: oscFrequency});
+            },
+            `${paramName}: new OscillatorNode(context, {frequency: ${
+                oscFrequency}})`)
+            .notThrow();
+
+        // The refNode automates the AudioParam with k-rate automations, no
+        // inputs.
+        let refNode;
+        should(
+            () => {
+              refNode = new BiquadFilterNode(context, filterOptions);
+            },
+            `Reference BiquadFilterNode(c, ${JSON.stringify(filterOptions)})`)
+            .notThrow();
+
+        refNode[paramName].automationRate = 'k-rate';
+
+        // Set up automations for the reference node.
+        should(
+            () => {
+              refNode[paramName][autoStart.method](...autoStart.args);
+            },
+            `refNode.${paramName}.${autoStart.method}(${autoStart.args})`)
+            .notThrow();
+        should(
+            () => {
+              refNode[paramName][autoEnd.method](...autoEnd.args);
+            },
+            `refNode.${paramName}.${autoEnd.method}.(${autoEnd.args})`)
+            .notThrow();
+
+        // The tstNode does the same automation, but it comes from the input
+        // connected to the AudioParam.
+        let tstNode;
+        should(
+            () => {
+              tstNode = new BiquadFilterNode(context, filterOptions);
+            },
+            `Test BiquadFilterNode(context, ${JSON.stringify(filterOptions)})`)
+            .notThrow();
+        tstNode[paramName].automationRate = 'k-rate';
+
+        // Create the input to the AudioParam of the test node.  The output of
+        // this node MUST have the same set of automations as the reference
+        // node, and MUST be a-rate to make sure we're handling k-rate inputs
+        // correctly.
+        let mod = new ConstantSourceNode(context);
+        mod.offset.automationRate = 'a-rate';
+        should(
+            () => {
+              mod.offset[autoStart.method](...autoStart.args);
+            },
+            `${paramName}: mod.offset.${autoStart.method}(${autoStart.args})`)
+            .notThrow();
+        should(
+            () => {
+              mod.offset[autoEnd.method](...autoEnd.args);
+            },
+            `${paramName}: mod.offset.${autoEnd.method}(${autoEnd.args})`)
+            .notThrow();
+
+        // Create graph
+        mod.connect(tstNode[paramName]);
+        src.connect(refNode).connect(merger, 0, 0);
+        src.connect(tstNode).connect(merger, 0, 1);
+
+        // Run!
+        src.start();
+        mod.start();
+        return context.startRendering();
+      }
+
+      function checkForSameOutput(should, paramName, actual, expected) {
+        let halfLength = expected.length / 2;
+
+        // Outputs should be the same.  We break the check into halves so we can
+        // see the expected outputs.  Mostly for a simple visual check that the
+        // output from the second half is small because the tests generally try
+        // to filter out the signal so that the last half of the output is
+        // small.
+        should(
+            actual.slice(0, halfLength),
+            `k-rate ${paramName} with input: output[0,${halfLength}]`)
+            .beCloseToArray(
+                expected.slice(0, halfLength), {absoluteThreshold: 0});
+        should(
+            actual.slice(halfLength),
+            `k-rate ${paramName} with input: output[${halfLength}:]`)
+            .beCloseToArray(expected.slice(halfLength), {absoluteThreshold: 0});
+      }
+
+      audit.run();
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt
index 20dde3a..3249f61 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt
@@ -6,6 +6,13 @@
 window.performance.clearMeasures [function]
 window.performance.clearResourceTimings [function]
 window.performance.dispatchEvent [function]
+window.performance.eventCounts [object EventCounts]
+window.performance.eventCounts.entries [function]
+window.performance.eventCounts.forEach [function]
+window.performance.eventCounts.get [function]
+window.performance.eventCounts.has [function]
+window.performance.eventCounts.keys [function]
+window.performance.eventCounts.values [function]
 window.performance.getEntries [function]
 window.performance.getEntriesByName [function]
 window.performance.getEntriesByType [function]
diff --git a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/README.md b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/README.md
index dd5209b..cfeb673 100644
--- a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/README.md
+++ b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/README.md
@@ -2,14 +2,19 @@
 
 This virtual test suite runs content_shell with
 `--enable-features=WebBluetoothNewPermissionsBackend`. This flag enables the
-Web Bluetooth tests to use the
-[`FakeBluetoothDelegate`](https://source.chromium.org/chromium/chromium/src/+/master:content/shell/browser/web_test/fake_bluetooth_delegate.h)
-interface for granting and checking permissions. This class emulates the
-behavior of the new Web Bluetooth permissions backend based on
-[`ChooserContextBase`](https://source.chromium.org/chromium/chromium/src/+/master:chrome/browser/permissions/chooser_context_base.h).
+Web Bluetooth tests to use the [`FakeBluetoothDelegate`] interface for
+granting and checking permissions. This class emulates the behavior of the
+new Web Bluetooth permissions backend based on [`ChooserContextBase`].
 
 The new permissions backend is implemented as part of the [Web Bluetooth
-Persistent Permissions project](https://docs.google.com/document/d/1h3uAVXJARHrNWaNACUPiQhLt7XI-fFFQoARSs1WgMDM).
+Persistent Permissions] project.
 
 TODO(https://crbug.com/589228): Remove this virtual test suite when the
-`WebBluetoothNewPermissionsBackend` flag is enabled by default.
\ No newline at end of file
+`WebBluetoothNewPermissionsBackend` flag is enabled by default.
+
+[`FakeBluetoothDelegate`]:
+../../../../../content/shell/browser/web_test/fake_bluetooth_delegate.h
+[`ChooserContextBase`]:
+../../../../../components/permissions/chooser_context_base.h
+[Web Bluetooth Persistent Permissions]:
+https://docs.google.com/document/d/1h3uAVXJARHrNWaNACUPiQhLt7XI-fFFQoARSs1WgMDM
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.md b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.md
new file mode 100644
index 0000000..cb7a705
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.md
@@ -0,0 +1,12 @@
+# Web Bluetooth API Web Tests
+
+This directory includes Web Bluetooth tests that use the [legacy Web
+Bluetooth Test API] as well as some tests using the [redesigned test API].
+
+For more details, see the [Web Bluetooth web_tests README].
+
+[legacy Web Bluetooth test API]:
+https://webbluetoothcg.github.io/web-bluetooth/tests.html
+[redesigned test API]:
+https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY
+[Web Bluetooth web tests README]: ../../../bluetooth/README.md
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.txt b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.txt
deleted file mode 100644
index a43806c..0000000
--- a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/bluetooth/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory includes Web Bluetooth tests that use the [out of date Web
-Bluetooth test API](https://webbluetoothcg.github.io/web-bluetooth/tests.html)
-as well as some tests using the [redesigned test
-API](https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY).
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.md b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.md
new file mode 100644
index 0000000..dc01c11d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.md
@@ -0,0 +1,12 @@
+# Web Bluetooth API Tests
+
+This directory includes Web Bluetooth tests that use the [redesigned Web
+Bluetooth Test API] and are available for public consumption in [Web Platform
+Tests].
+
+For more details, see the [Web Bluetooth Web Platform Tests README].
+
+[redesigned test API]:
+https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY
+[Web Platform Tests]: https://github.com/web-platform-tests/wpt
+[Web Bluetooth web platform tests README]: ../../../../../external/wpt/bluetooth/README.md
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.txt b/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.txt
deleted file mode 100644
index c49c2d09..0000000
--- a/third_party/blink/web_tests/virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/README.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory includes Web Bluetooth tests that use the [redesigned Web
-Bluetooth test
-API](https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY)
-and are available in
-[web-platform-tests/wpt](https://github.com/web-platform-tests/wpt).
\ No newline at end of file
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 1e7fccc..f517567 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2343,6 +2343,17 @@
     method stopPropagation
     setter cancelBubble
     setter returnValue
+interface EventCounts
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
 interface EventSource : EventTarget
     attribute @@toStringTag
     attribute CLOSED
@@ -5878,6 +5889,7 @@
     setter onpayerdetailchange
 interface Performance : EventTarget
     attribute @@toStringTag
+    getter eventCounts
     getter memory
     getter navigation
     getter onresourcetimingbufferfull
diff --git a/third_party/harfbuzz-ng/README.chromium b/third_party/harfbuzz-ng/README.chromium
index 20a50b4..c49e145 100644
--- a/third_party/harfbuzz-ng/README.chromium
+++ b/third_party/harfbuzz-ng/README.chromium
@@ -1,10 +1,10 @@
 Name: harfbuzz-ng
 Short Name: harfbuzz-ng
 URL: http://harfbuzz.org
-Version: 2.6.4-722
+Version: 2.6.4-739
 CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:2.6.4
-Date: 20200401
-Revision: 014e038b2c2fd55e0bffbe5c5adc893c07df187a
+Date: 20200407
+Revision: 0d5695983e8bf3184ecd4cb92f737b9dfe5d6d25
 Security Critical: yes
 License: MIT
 License File: src/COPYING
diff --git a/tools/binary_size/generate_milestone_reports.py b/tools/binary_size/generate_milestone_reports.py
index 7ccf37d..fd98e1f 100755
--- a/tools/binary_size/generate_milestone_reports.py
+++ b/tools/binary_size/generate_milestone_reports.py
@@ -71,7 +71,8 @@
     '78.0.3904.62',
     '79.0.3945.136',
     '80.0.3987.99',
-    '81.0.4044.17',  # Beta
+    '81.0.4044.96',  # Beta
+    '83.0.4103.5',  # Canary
 ]
 
 
diff --git a/tools/binary_size/milestone_apk_sizes.py b/tools/binary_size/milestone_apk_sizes.py
index 58869b2..0c92698 100755
--- a/tools/binary_size/milestone_apk_sizes.py
+++ b/tools/binary_size/milestone_apk_sizes.py
@@ -143,14 +143,19 @@
   trichrome_chrome.AddSize(metrics)
   trichrome_webview.AddSize(metrics)
   trichrome_library.AddSize(metrics)
+
+  # Separate where spreadsheet has computed columns for easier copy/paste.
+  _DumpCsv(metrics)
+  metrics = collections.OrderedDict()
   trichrome64_chrome.AddSize(metrics)
   trichrome64_webview.AddSize(metrics)
   trichrome64_library.AddSize(metrics)
 
   _DumpCsv(metrics)
-
   metrics = collections.OrderedDict()
 
+  webview.PrintLibraryCompression()
+
   # AndroidGo size exists only for webview & library.
   go_install_size = (
       trichrome_chrome.GetApkSize() + trichrome_webview.GetAndroidGoSize() +
@@ -163,11 +168,14 @@
 
   chrome.AddMethodCount(metrics)
   monochrome.AddMethodCount(metrics)
+
+  # Separate where spreadsheet has computed columns for easier copy/paste.
+  _DumpCsv(metrics)
+  metrics = collections.OrderedDict()
+
   trichrome_chrome.AddDfmSizes(metrics)
   _DumpCsv(metrics)
 
-  webview.PrintLibraryCompression()
-
 
 def main():
   parser = argparse.ArgumentParser()
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 84319f3..398f2e8e 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -8465,6 +8465,83 @@
   </description>
 </action>
 
+<action name="IOSDownloadClose">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User closed Download Manager UI by tapping x button when download was not
+    in-progress (either not started or failed).
+  </description>
+</action>
+
+<action name="IOSDownloadConfirmClose">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User confirmed download closure by tapping &quot;Stop&quot; on &quot;Stop
+    Download?&quot; dialog.
+  </description>
+</action>
+
+<action name="IOSDownloadConfirmReplace">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User confirmed download replacement by tapping &quot;OK&quot; on &quot;Start
+    New Download&quot; dialog.
+  </description>
+</action>
+
+<action name="IOSDownloadDoNotClose">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User rejected download closure by tapping &quot;Continue&quot; on &quot;Stop
+    Download?&quot; dialog.
+  </description>
+</action>
+
+<action name="IOSDownloadDoNotReplace">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User rejected download replacement by tapping &quot;Cancel&quot; on
+    &quot;Start New Download?&quot; dialog.
+  </description>
+</action>
+
+<action name="IOSDownloadInstallGoogleDrive">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>User tapped on Install Google Drive promo.</description>
+</action>
+
+<action name="IOSDownloadOpenIn">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User tapped on Open In... button after in Download Manager after download
+    succeeded.
+  </description>
+</action>
+
+<action name="IOSDownloadStartDownload">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>User started the download in Download Manager.</description>
+</action>
+
+<action name="IOSDownloadTryCloseWhenInProgress">
+  <owner>eugenebut@chromium.org</owner>
+  <owner>sdefresne@chromium.org</owner>
+  <description>
+    User tapped x button when download was in-progress. The Download Manager did
+    not close, but presented the confirmation dialog. See
+    IOSDownloadConfirmClose and IOSDownloadDoNotClose actions for recording use
+    choice.
+  </description>
+</action>
+
 <action name="IOSGoogleServicesSettingsCloseWithSwipe">
   <owner>msarda@chromium.org</owner>
   <owner>jlebel@chromium.org</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 30568d3..64041cd 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -37813,11 +37813,13 @@
       label="ImprovedCookieControlsForThirdPartyCookieBlocking:enabled"/>
   <int value="-1758468685" label="DownloadHomeV2:disabled"/>
   <int value="-1755301960" label="ClearOldBrowsingData:enabled"/>
+  <int value="-1754262889" label="RemoteCopyPersistentNotification:enabled"/>
   <int value="-1753458842" label="OfflinePagesLivePageSharing:disabled"/>
   <int value="-1751928267" label="disable-icon-ntp"/>
   <int value="-1750008152" label="UsernameFirstFlow:enabled"/>
   <int value="-1749176684" label="PauseBackgroundTabs:disabled"/>
   <int value="-1746767834" label="ssl-interstitial-v2-gray"/>
+  <int value="-1746708491" label="RemoteCopyPersistentNotification:disabled"/>
   <int value="-1746255521" label="NewOverviewUi:enabled"/>
   <int value="-1743079191" label="SyncPseudoUSSPriorityPreferences:enabled"/>
   <int value="-1742376665" label="SyncPseudoUSSPasswords:disabled"/>
@@ -39689,6 +39691,7 @@
   <int value="439525862" label="GlobalMediaControlsForCast:disabled"/>
   <int value="444754854" label="LegacyTLSWarnings:disabled"/>
   <int value="446316019" label="enable-threaded-compositing"/>
+  <int value="448463569" label="NewShortcutMapping:disabled"/>
   <int value="451196246" label="disable-impl-side-painting"/>
   <int value="452139294" label="VrShellExperimentalRendering:enabled"/>
   <int value="452955571" label="EnableFilesystemInIncognito:disabled"/>
@@ -41032,6 +41035,7 @@
       label="RemoveUsageOfDeprecatedGaiaSigninEndpoint:enabled"/>
   <int value="2034198538" label="TabHoverCards:enabled"/>
   <int value="2037756154" label="enable-impl-side-painting"/>
+  <int value="2038036881" label="NewShortcutMapping:enabled"/>
   <int value="2039276757" label="EnableOverviewRoundedCorners:enabled"/>
   <int value="2040316611" label="IPH_ReopenTab:enabled"/>
   <int value="2041570184" label="UsePreferredIntervalForVideo:enabled"/>
@@ -66196,6 +66200,17 @@
   <int value="8" label="IMY"/>
 </enum>
 
+<enum name="UpdateCheckStatus">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Ok"/>
+  <int value="2" label="No update"/>
+  <int value="3" label="Error internal"/>
+  <int value="4" label="Error Hash"/>
+  <int value="5" label="Error OS not supported"/>
+  <int value="6" label="Error HW not supported"/>
+  <int value="7" label="Error unsupported protocol"/>
+</enum>
+
 <enum name="UpdateClientErrors">
   <int value="0" label="(No Error)"/>
   <int value="1" label="Update in progress"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 110e1f5..162c65ab 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -147,7 +147,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosAutoclick.TrayMenu.ChangeAction"
-    enum="AutoclickActionType" expires_after="2020-08-02">
+    enum="AutoclickActionType" expires_after="2020-10-04">
   <owner>katie@chromium.org</owner>
   <owner>dtseng@chromium.org</owner>
   <owner>dmazzoni@chromium.org</owner>
@@ -676,7 +676,7 @@
 </histogram>
 
 <histogram name="Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>dmazzoni@chromium.org</owner>
   <owner>aboxhall@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
@@ -993,7 +993,7 @@
 </histogram>
 
 <histogram name="AccountManager.Migrations.Result" enum="BooleanSuccess"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>sinhak@chromium.org</owner>
   <summary>
     Tracks the final result of migrating accounts to Chrome OS Account Manager.
@@ -1002,7 +1002,7 @@
 </histogram>
 
 <histogram base="true" name="AccountManager.Migrations.StepResult"
-    enum="BooleanSuccess" expires_after="2020-08-02">
+    enum="BooleanSuccess" expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes
      name="AccountManagerMigrationSteps" -->
 
@@ -1026,7 +1026,7 @@
 </histogram>
 
 <histogram name="AccountManager.NumAccounts" units="count"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>sinhak@chromium.org</owner>
   <summary>
     Tracks the number of accounts stored in Chrome OS Account Manager by a given
@@ -2587,7 +2587,7 @@
 </histogram>
 
 <histogram name="Android.Download.Rename.Dialog.Action"
-    enum="Android.Download.Rename.Dialog.Action" expires_after="2020-08-02">
+    enum="Android.Download.Rename.Dialog.Action" expires_after="2020-10-04">
   <owner>hesen@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -2597,7 +2597,7 @@
 </histogram>
 
 <histogram name="Android.Download.Rename.Result"
-    enum="Android.Download.Rename.Result" expires_after="2020-08-02">
+    enum="Android.Download.Rename.Result" expires_after="2020-10-04">
   <owner>hesen@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -2649,7 +2649,7 @@
 </histogram>
 
 <histogram name="Android.DownloadManager.InitialCount" units="units"
-    expires_after="2020-07-26">
+    expires_after="2020-10-04">
   <owner>dtrainor@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -2659,7 +2659,7 @@
 </histogram>
 
 <histogram name="Android.DownloadManager.InitialCount.Viewed" units="units"
-    expires_after="2020-06-28">
+    expires_after="2020-10-04">
   <owner>dtrainor@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -4761,6 +4761,10 @@
 
 <histogram name="Android.WebView.Mimetype.AppProvided"
     enum="WebViewAppProvidedMimeType" expires_after="2020-05-14">
+  <obsolete>
+    Removed in April 2020. Network Service has launched, and we don't intend to
+    follow up on this metric.
+  </obsolete>
   <owner>ntfschr@chromium.org</owner>
   <owner>timvolodine@chromium.org</owner>
   <summary>
@@ -5826,7 +5830,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.DriveQuickAccessProvider.CacheEmpty"
-    enum="BooleanEmpty" expires_after="2020-08-01">
+    enum="BooleanEmpty" expires_after="2020-10-04">
   <owner>tby@chromium.org</owner>
   <owner>wrong@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -5838,7 +5842,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.DriveQuickAccessProvider.DriveFSMounted"
-    enum="Boolean" expires_after="2020-08-01">
+    enum="Boolean" expires_after="2020-10-04">
   <owner>tby@chromium.org</owner>
   <owner>wrong@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -5849,7 +5853,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.DriveQuickAccessProvider.FileError"
-    enum="DriveFileError" expires_after="2020-08-01">
+    enum="DriveFileError" expires_after="2020-10-04">
   <owner>tby@chromium.org</owner>
   <owner>wrong@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -5987,7 +5991,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.ZeroStateFileProvider.Latency" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>wrong@chromium.org</owner>
   <owner>tby@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -6008,7 +6012,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.ZeroStateResults.LaunchedItemType"
-    enum="ZeroStateResultType" expires_after="2020-08-01">
+    enum="ZeroStateResultType" expires_after="2020-10-04">
   <owner>wrong@chromium.org</owner>
   <owner>tby@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -6077,7 +6081,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.ZeroStateResultsList.FileImpressions"
-    enum="AppListSearchResult" expires_after="2020-08-01">
+    enum="AppListSearchResult" expires_after="2020-10-04">
   <owner>wrong@chromium.org</owner>
   <owner>tby@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -6103,7 +6107,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.ZeroStateResultsList.LaunchedItemPositionV2"
-    units="position" expires_after="2020-08-01">
+    units="position" expires_after="2020-10-04">
   <owner>wrong@chromium.org</owner>
   <owner>tby@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
@@ -6209,7 +6213,7 @@
 </histogram>
 
 <histogram name="Apps.AppListAppLaunchedV2" enum="AppListLaunchedFrom"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes name="AppListState" -->
 
   <owner>mmourgos@chromium.org</owner>
@@ -6702,7 +6706,7 @@
 </histogram>
 
 <histogram name="Apps.AppListSuggestedChipOpenType" enum="AppListSearchResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" -->
 
   <owner>newcomer@chromium.org</owner>
@@ -6837,7 +6841,7 @@
 </histogram>
 
 <histogram name="Apps.HomeLauncherTransition.AnimationSmoothness" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram suffixes
      name="AppListTabletModeTransition" -->
 
@@ -7178,7 +7182,7 @@
 
 <histogram base="true"
     name="Apps.PaginationTransition.DragScroll.PresentationTime" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes
      name="TabletOrClamshellMode" -->
 
@@ -7268,7 +7272,7 @@
 </histogram>
 
 <histogram base="true" name="Apps.StateTransition.Drag.PresentationTime"
-    units="ms" expires_after="2020-08-02">
+    units="ms" expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes
      name="TabletOrClamshellMode" -->
 
@@ -7308,13 +7312,13 @@
   </summary>
 </histogram>
 
-<histogram name="Arc.AndroidBootTime" units="ms" expires_after="2020-08-02">
+<histogram name="Arc.AndroidBootTime" units="ms" expires_after="2020-10-04">
   <owner>elijahtaylor@google.com</owner>
   <owner>shihuis@google.com</owner>
   <summary>The time elapsed for booting up the ARC instance.</summary>
 </histogram>
 
-<histogram name="Arc.AppCount" units="units" expires_after="2020-08-02">
+<histogram name="Arc.AppCount" units="units" expires_after="2020-10-04">
   <owner>elijahtaylor@google.com</owner>
   <owner>shihuis@google.com</owner>
   <summary>
@@ -7336,7 +7340,7 @@
 </histogram>
 
 <histogram name="Arc.AppListRecommendedImp.AllImpression" units="count"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>robsc@chromium.org</owner>
   <owner>napper@chromium.org</owner>
   <summary>
@@ -7346,7 +7350,7 @@
 </histogram>
 
 <histogram name="Arc.AppListRecommendedImp.CountedImpression" units="count"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>robsc@chromium.org</owner>
   <owner>napper@chromium.org</owner>
   <summary>
@@ -7502,7 +7506,7 @@
 </histogram>
 
 <histogram name="Arc.CupsPrinting.PageCount" units="units"
-    expires_after="2020-06-21">
+    expires_after="2020-10-04">
   <owner>skau@chromium.org</owner>
   <owner>vkuzkokov@google.com</owner>
   <summary>
@@ -7560,7 +7564,7 @@
 </histogram>
 
 <histogram name="Arc.CustomTabs.SessionLifetime2.All" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hashimoto@google.com</owner>
   <summary>Lifetime of each session. Recorded when a session ends.</summary>
 </histogram>
@@ -7583,7 +7587,7 @@
 </histogram>
 
 <histogram name="Arc.EngagementTime.ArcTotal" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>maajid@google.com</owner>
   <owner>shaochuan@google.com</owner>
   <owner>shihuis@google.com</owner>
@@ -7620,7 +7624,7 @@
 </histogram>
 
 <histogram name="Arc.EngagementTime.Total" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>maajid@google.com</owner>
   <owner>shaochuan@google.com</owner>
   <owner>shihuis@google.com</owner>
@@ -7737,7 +7741,7 @@
   </summary>
 </histogram>
 
-<histogram name="Arc.ImeCount" units="units" expires_after="2020-07-30">
+<histogram name="Arc.ImeCount" units="units" expires_after="2020-10-04">
   <owner>yhanada@chromium.org</owner>
   <owner>tetsui@chromium.org</owner>
   <summary>
@@ -7833,7 +7837,7 @@
 </histogram>
 
 <histogram name="Arc.OOMKills.Score" units="badness score"
-    expires_after="2020-06-21">
+    expires_after="2020-10-04">
   <owner>elijahtaylor@google.com</owner>
   <owner>shihuis@google.com</owner>
   <summary>
@@ -7862,7 +7866,7 @@
 </histogram>
 
 <histogram name="Arc.OptInResult" enum="ArcOptInResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>elijahtaylor@google.com</owner>
   <owner>khmel@google.com</owner>
   <summary>Arc OptIn flow result.</summary>
@@ -7955,7 +7959,7 @@
 </histogram>
 
 <histogram name="Arc.PlayStoreSearch.ReturnedAppsTotal" units="apps"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hejq@chromium.org</owner>
   <summary>
     The total number of returned apps of a Play Store app discovery query.
@@ -8075,7 +8079,7 @@
 </histogram>
 
 <histogram name="Arc.Reauthorization.Result" enum="ArcProvisioningResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes name="ArcUserTypes" -->
 
   <owner>khmel@google.com</owner>
@@ -8286,7 +8290,7 @@
 </histogram>
 
 <histogram name="Arc.UserInteraction" enum="ArcUserInteraction"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>jhorwich@chromium.org</owner>
   <owner>elijahtaylor@chromium.org</owner>
   <owner>shihuis@google.com</owner>
@@ -9095,7 +9099,7 @@
 </histogram>
 
 <histogram name="Ash.NightLight.ScheduleType" enum="AshNightLightScheduleType"
-    expires_after="2020-05-24">
+    expires_after="2020-10-04">
   <owner>afakhry@chromium.org</owner>
   <summary>
     The selected Night Light schedule type. Emitted when the user changes the
@@ -9104,7 +9108,7 @@
 </histogram>
 
 <histogram name="Ash.NightLight.Temperature"
-    enum="AshNightLightTemperatureRanges" expires_after="2020-06-21">
+    enum="AshNightLightTemperatureRanges" expires_after="2020-10-04">
   <owner>afakhry@chromium.org</owner>
   <summary>
     The ranges in which the selected values of the Night Light color temperature
@@ -9337,7 +9341,7 @@
 </histogram>
 
 <histogram name="Ash.Shelf.NumberOfPinnedItems" units="Icons"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>anasalazar@google.com</owner>
   <owner>mmourgos@google.com</owner>
   <summary>
@@ -9704,7 +9708,7 @@
 </histogram>
 
 <histogram name="Ash.TabletMode.AnimationSmoothness.Enter" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>oshima@chromium.org</owner>
   <owner>sammiequon@chromium.org</owner>
   <summary>
@@ -9715,7 +9719,7 @@
 </histogram>
 
 <histogram name="Ash.TabletMode.AnimationSmoothness.Exit" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>oshima@chromium.org</owner>
   <owner>sammiequon@chromium.org</owner>
   <summary>
@@ -9843,7 +9847,7 @@
 </histogram>
 
 <histogram name="Ash.TouchView.TouchViewActive" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>girard@chromium.org</owner>
   <summary>
     The length of time that TouchView is active, for each activation.
@@ -10232,7 +10236,7 @@
 </histogram>
 
 <histogram name="Ash.WindowSelector.Items" units="units"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>flackr@chromium.org</owner>
   <owner>kuscher@google.com</owner>
   <summary>
@@ -10390,7 +10394,7 @@
 </histogram>
 
 <histogram name="Assistant.EntryPoint" enum="AssistantEntryPoint"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>xiaohuic@chromium.org</owner>
   <owner>meilinw@chromium.org</owner>
   <summary>
@@ -10830,7 +10834,7 @@
 </histogram>
 
 <histogram name="Assistant.QueryResponseType" enum="AssistantQueryResponseType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>xiaohuic@chromium.org</owner>
   <owner>meilinw@chromium.org</owner>
   <summary>The Assistant query response type.</summary>
@@ -15594,7 +15598,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.FinalState"
-    enum="BooleanSuccess" expires_after="2020-08-01">
+    enum="BooleanSuccess" expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -15605,7 +15609,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.NetError" enum="NetErrorCodes"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -15616,7 +15620,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.NumAttemptsBeforeSuccess"
-    units="count" expires_after="2020-08-01">
+    units="count" expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -15627,7 +15631,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.ResponseCode"
-    enum="HttpResponseCode" expires_after="2020-08-01">
+    enum="HttpResponseCode" expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -15650,7 +15654,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.TimeUntilFailure2" units="ms"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -15673,7 +15677,7 @@
 </histogram>
 
 <histogram base="true" name="Availability.Prober.TimeUntilSuccess2" units="ms"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -16414,7 +16418,7 @@
 </histogram>
 
 <histogram name="BackgroundSync.Registration.Periodic"
-    enum="BackgroundSyncStatus" expires_after="2020-07-31">
+    enum="BackgroundSyncStatus" expires_after="2020-10-04">
   <owner>nator@chromium.org</owner>
   <owner>rayankans@chromium.org</owner>
   <summary>
@@ -17733,7 +17737,7 @@
 </histogram>
 
 <histogram name="Blink.DecodedImageType" enum="DecodedImageType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>urvang@chromium.org</owner>
   <summary>Image codec inferred during decode.</summary>
 </histogram>
@@ -18175,7 +18179,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.ImageDecoders.InitiallyFullyDecodedByteSize"
-    units="bytes" expires_after="2020-08-03">
+    units="bytes" expires_after="2020-10-04">
   <owner>mbarowsky@chromium.org</owner>
   <owner>andrescj@chromium.org</owner>
   <summary>
@@ -21129,7 +21133,7 @@
 </histogram>
 
 <histogram name="BlueZ.ResultOfPairing" enum="BlueZResultOfPairing"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>mcchou@chromium.org</owner>
   <summary>
     This is specific to Chrome OS. Records the outcomes of pairing with remote
@@ -21459,7 +21463,7 @@
 </histogram>
 
 <histogram name="Bookmarks.OpenBookmarkType" enum="BookmarkType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>wychen@chromium.org</owner>
   <summary>
     Logs whether the bookmark entry is a user bookmark or a partner bookmark
@@ -21493,7 +21497,7 @@
 </histogram>
 
 <histogram name="BrotliFilter.CompressionPercent" units="%"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>eustas@chromium.org</owner>
   <summary>Compressed/Decompressed size ratio.</summary>
 </histogram>
@@ -21692,7 +21696,7 @@
 </histogram>
 
 <histogram name="Browser.Tabs.SelectionToVisibilityRequestTime"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>sadrul@chromium.org</owner>
   <owner>sky@chromium.org</owner>
   <summary>
@@ -21785,7 +21789,7 @@
 </histogram>
 
 <histogram name="BrowserDialogs.ExternalProtocol.HandleState"
-    enum="HandleStateType" expires_after="2020-08-02">
+    enum="HandleStateType" expires_after="2020-10-04">
   <owner>dominickn@chromium.org</owner>
   <owner>meacer@chromium.org</owner>
   <summary>
@@ -21885,7 +21889,7 @@
 </histogram>
 
 <histogram name="BrowserRenderProcessHost.FramePrioritiesSeen"
-    enum="FramePrioritiesSeen" expires_after="2020-08-02">
+    enum="FramePrioritiesSeen" expires_after="2020-10-04">
   <owner>ericrobinson@chromium.org</owner>
   <owner>csharrison@chromium.org</owner>
   <summary>
@@ -23239,7 +23243,7 @@
 </histogram>
 
 <histogram name="ChildProcess.Crashed.UtilityProcessHash"
-    enum="UtilityProcessNameHash" expires_after="2020-08-02">
+    enum="UtilityProcessNameHash" expires_after="2020-10-04">
   <owner>wfh@chromium.org</owner>
   <owner>chrome-stability-core@google.com</owner>
   <summary>
@@ -23997,7 +24001,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Apps.IntentPickerAction"
-    enum="ArcIntentHandlerAction" expires_after="2020-08-02">
+    enum="ArcIntentHandlerAction" expires_after="2020-10-04">
   <owner>elijahtaylor@google.com</owner>
   <owner>dominickn@chromium.org</owner>
   <owner>shihuis@google.com</owner>
@@ -24145,7 +24149,7 @@
 </histogram>
 
 <histogram name="ChromeOS.CWP.CollectPerf"
-    enum="ChromeOSProfileCollectionStatus" expires_after="2020-08-02">
+    enum="ChromeOSProfileCollectionStatus" expires_after="2020-10-04">
   <owner>aalexand@google.com</owner>
   <owner>gmx@chromium.org</owner>
   <summary>
@@ -24310,7 +24314,7 @@
 </histogram>
 
 <histogram name="ChromeOS.MemoryPressureLevel" enum="MemoryPressureLevel"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>xdai@chromium.org</owner>
   <summary>
     The memory pressure level in Chrome OS, which is recorded periodically (once
@@ -24333,7 +24337,7 @@
 </histogram>
 
 <histogram name="ChromeOS.PlatformVerification.Available"
-    enum="BooleanAvailable" expires_after="2020-08-02">
+    enum="BooleanAvailable" expires_after="2020-10-04">
   <owner>apronin@chromium.org</owner>
   <owner>cros-hwsec+uma@chromium.org</owner>
   <summary>
@@ -24462,7 +24466,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.LoadCompletedTime" units="ms"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>jamescook@chromium.org</owner>
   <owner>cros-system-services@google.com</owner>
   <summary>
@@ -24562,7 +24566,7 @@
 </histogram>
 
 <histogram name="ChromeOS.SystemTray.FeaturePodCountOnOpen" units="count"
-    expires_after="2020-07-13">
+    expires_after="2020-10-04">
   <owner>tengs@chromium.org</owner>
   <owner>amehfooz@chromium.org</owner>
   <summary>
@@ -25632,7 +25636,7 @@
 </histogram>
 
 <histogram name="Compositing.CompositorFrameSinkSupport.ShouldSendBeginFrame"
-    enum="SendBeginFrameResult" expires_after="2020-08-02">
+    enum="SendBeginFrameResult" expires_after="2020-10-04">
   <owner>kylechar@chromium.org</owner>
   <owner>sadrul@chromium.org</owner>
   <summary>
@@ -25678,7 +25682,7 @@
 </histogram>
 
 <histogram name="Compositing.DirectRenderer.GL.DrawFrameUs"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>weiliangc@chromium.org</owner>
   <summary>
     Time spent drawing of composited layers by GLRenderer, in microseconds. This
@@ -25693,7 +25697,7 @@
 </histogram>
 
 <histogram name="Compositing.DirectRenderer.PartialSwap.ExtraDamage" units="%"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -25708,7 +25712,7 @@
 </histogram>
 
 <histogram name="Compositing.DirectRenderer.PartialSwap.FrameBufferDamage"
-    units="%" expires_after="2020-08-01">
+    units="%" expires_after="2020-10-04">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -25722,7 +25726,7 @@
 </histogram>
 
 <histogram name="Compositing.DirectRenderer.PartialSwap.RootDamage" units="%"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -25734,7 +25738,7 @@
 </histogram>
 
 <histogram name="Compositing.DirectRenderer.PartialSwap.TotalDamage" units="%"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -26807,7 +26811,7 @@
 </histogram>
 
 <histogram name="ConfigureDisplays.Internal.Modeset.FinalStatus"
-    enum="BooleanSuccess" expires_after="2020-07-30">
+    enum="BooleanSuccess" expires_after="2020-10-04">
   <owner>dcastagna@chromium.org</owner>
   <owner>marcheu@chromium.org</owner>
   <owner>chromeos-gfx@chromium.org</owner>
@@ -27153,7 +27157,7 @@
 </histogram>
 
 <histogram name="ContentSettings.DefaultCookiesSetting" enum="ContentSetting"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>toyoshim@chromium.org</owner>
   <summary>The default cookies setting at profile open.</summary>
 </histogram>
@@ -27666,7 +27670,7 @@
 </histogram>
 
 <histogram name="ContentSettings.Popups.StrongBlockerActions"
-    enum="StrongPopupBlockerAction" expires_after="2020-08-03">
+    enum="StrongPopupBlockerAction" expires_after="2020-10-04">
   <owner>csharrison@chromium.org</owner>
   <summary>
     Counts of various events related to the strong popup blocker (aka abusive
@@ -28628,7 +28632,7 @@
 </histogram>
 
 <histogram name="ContextMenu.Shown" enum="BooleanPresent"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>mpearson@chromium.org</owner>
   <summary>
     Recorded when a context menu is shown, sliced by whether a web contents was
@@ -28948,7 +28952,7 @@
 </histogram>
 
 <histogram name="Cookie.CommitProblem" enum="CookieCommitProblem"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>morlovich@chromium.org</owner>
   <summary>
     Recorded when a problem occurs trying to commit changes to the cookie store
@@ -29197,7 +29201,7 @@
 </histogram>
 
 <histogram name="Cookie.LoadProblem" enum="CookieLoadProblem"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>morlovich@chromium.org</owner>
   <summary>
     Recorded when a problem is recorded when loading the persistent cookie
@@ -29609,7 +29613,7 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.Type" enum="CookieType" expires_after="2020-08-03">
+<histogram name="Cookie.Type" enum="CookieType" expires_after="2020-10-04">
   <owner>mkwst@chromium.org</owner>
   <summary>For each cookie added to the store, record it's type(s).</summary>
 </histogram>
@@ -32430,7 +32434,7 @@
 </histogram>
 
 <histogram name="Cryptohome.HomedirEncryptionType" enum="HomedirEncryptionType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>dspaid@chromium.org</owner>
   <summary>
     The encryption type used for a user's cryptohome directory. This is logged
@@ -32672,7 +32676,7 @@
 </histogram>
 
 <histogram name="Cryptohome.TpmResults" enum="CryptohomeTpmResults"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>afakhry@chromium.org</owner>
   <summary>
     The errors resulting from interacting with the Trusted Platform Module (TPM)
@@ -41599,7 +41603,7 @@
 </histogram>
 
 <histogram base="true" name="Download.DownloadSize" units="KB"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
 <!-- Name completed by histogram_suffixes name="Download.Parallelizable" -->
 
   <owner>dtrainor@chromium.org</owner>
@@ -42110,7 +42114,7 @@
 </histogram>
 
 <histogram name="Download.MapErrorNetworkFailed.NetworkService"
-    enum="NetErrorCodes" expires_after="2020-08-02">
+    enum="NetErrorCodes" expires_after="2020-10-04">
   <owner>dtrainor@chromium.org</owner>
   <owner>qinmin@chromium.org</owner>
   <summary>
@@ -42280,7 +42284,7 @@
 </histogram>
 
 <histogram name="Download.ParallelDownload.CreationEvent"
-    enum="ParallelDownloadCreationEvent" expires_after="2020-08-02">
+    enum="ParallelDownloadCreationEvent" expires_after="2020-10-04">
   <owner>xingliu@chromium.org</owner>
   <summary>
     When parallel downloading feature is enabled, a download may be created as
@@ -44864,7 +44868,7 @@
 </histogram>
 
 <histogram name="Enterprise.Enrollment" enum="EnterpriseEnrollmentType"
-    expires_after="2020-06-28">
+    expires_after="2020-10-04">
   <owner>mnissler@chromium.org</owner>
   <owner>cros-oac@google.com</owner>
   <summary>
@@ -45625,7 +45629,7 @@
 </histogram>
 
 <histogram name="Enterprise.SystemLogUploadResult"
-    enum="EnterpriseSystemLogUploadResult" expires_after="2020-08-02">
+    enum="EnterpriseSystemLogUploadResult" expires_after="2020-10-04">
   <owner>poromov@chromium.org</owner>
   <summary>Result of a single attempt to upload system logs.</summary>
 </histogram>
@@ -48010,7 +48014,7 @@
 </histogram>
 
 <histogram name="Event.Latency.ScrollBegin.TopControlsMoved" enum="Boolean"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>sadrul@chromium.org</owner>
   <owner>chrome-gpu-metrics@google.com</owner>
   <summary>
@@ -48035,7 +48039,7 @@
 
 <histogram
     name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>tdresser@chromium.org</owner>
   <summary>
     Time between the browser receives the notification of the first ScrollUpdate
@@ -48785,7 +48789,7 @@
 </histogram>
 
 <histogram name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>tdresser@chromium.org</owner>
   <summary>
     Time between the ScrollUpdate gesture event with touch source, is handled on
@@ -48849,7 +48853,7 @@
 </histogram>
 
 <histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>tdresser@chromium.org</owner>
   <summary>
     Time between initial creation of a touch event and the generated
@@ -48955,7 +48959,7 @@
 
 <histogram
     name="Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds" expires_after="2020-08-02">
+    units="microseconds" expires_after="2020-10-04">
   <owner>tdresser@chromium.org</owner>
   <summary>
     Time between the browser receives the notification of a ScrollUpdate gesture
@@ -50254,7 +50258,7 @@
 </histogram>
 
 <histogram name="ExploreSites.MonthlyHostCount" units="hosts"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>dimich@chromium.org</owner>
   <summary>
     Number of unique hosts visited by the user during the last 30 days. Reported
@@ -53171,6 +53175,18 @@
   </summary>
 </histogram>
 
+<histogram name="Extensions.ForceInstalledFailureUpdateCheckStatus"
+    enum="UpdateCheckStatus" expires_after="2020-09-01">
+  <owner>swapnilgupta@google.com</owner>
+  <owner>burunduk@chromium.org</owner>
+  <owner>managed-devices@google.com</owner>
+  <summary>
+    The update check status details for enterprise policy forced extensions when
+    update manifest is fetched from server. Recorded for each forced extension
+    that failed to install after 5 minutes.
+  </summary>
+</histogram>
+
 <histogram name="Extensions.ForceInstalledFetchTries" units="retries"
     expires_after="2020-11-01">
   <owner>burunduk@chromium.org</owner>
@@ -58153,7 +58169,7 @@
 </histogram>
 
 <histogram name="ForceDiceMigration.RevokeTokenAction" enum="RevokeTokenAction"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>msalama@chromium.org</owner>
   <owner>msarda@chromium.org</owner>
   <summary>
@@ -58755,7 +58771,7 @@
 </histogram>
 
 <histogram name="GCM.RegistrationRequest.NetErrorCode" enum="NetErrorCodes"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>peter@chromium.org</owner>
   <owner>platform-capabilities@chromium.org</owner>
   <summary>
@@ -61256,7 +61272,7 @@
 </histogram>
 
 <histogram name="GPU.OopRaster.GlyphCacheMiss"
-    enum="OopRasterGlyphCacheMissType" expires_after="2020-08-03">
+    enum="OopRasterGlyphCacheMissType" expires_after="2020-10-04">
   <owner>khushalsagar@chromium.org</owner>
   <summary>
     During OutOfProcess(Oop) raster, the renderer generates and sends the
@@ -61345,7 +61361,7 @@
 </histogram>
 
 <histogram name="GPU.ProcessLifetimeEvents.SwiftShader"
-    enum="GPUProcessLifetimeEvent" expires_after="2020-08-02">
+    enum="GPUProcessLifetimeEvent" expires_after="2020-10-04">
   <owner>vmiura@chromium.org</owner>
   <summary>
     Recorded once for every GPU process launch and crash when GPU process is
@@ -62044,7 +62060,7 @@
 </histogram>
 
 <histogram name="Graphics.Smoothness.FrameSequenceLength" units="count"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>sadrul@chromium.org</owner>
   <owner>graphics-dev@chromium.org</owner>
   <summary>
@@ -64108,7 +64124,7 @@
 </histogram>
 
 <histogram name="HttpCache.Pattern" enum="HttpCachePattern"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>morlovich@chromium.org</owner>
   <owner>jkarlin@chromium.org</owner>
   <summary>For each http cache transaction, the recorded pattern.</summary>
@@ -67582,7 +67598,7 @@
 </histogram>
 
 <histogram name="IOS.PageLoadCount.Counts"
-    enum="IOSPageLoadCountNavigationType" expires_after="2020-08-02">
+    enum="IOSPageLoadCountNavigationType" expires_after="2020-10-04">
   <owner>danyao@chromium.org</owner>
   <summary>The number of navigation started events by navigation type.</summary>
 </histogram>
@@ -68408,7 +68424,7 @@
 </histogram>
 
 <histogram name="Keyboard.ShortcutViewer.StartupTime" units="ms"
-    expires_after="2020-05-31">
+    expires_after="2020-10-04">
   <owner>jamescook@chromium.org</owner>
   <owner>msw@chromium.org</owner>
   <owner>wutao@chromium.org</owner>
@@ -68420,7 +68436,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryActionImpression"
-    enum="AccessoryAction" expires_after="2020-08-02">
+    enum="AccessoryAction" expires_after="2020-10-04">
   <owner>fhorschig@chromium.org</owner>
   <summary>
     Android only. Records whenever users faces an action in the accessory bar or
@@ -68429,7 +68445,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryActionSelected"
-    enum="AccessoryAction" expires_after="2020-08-02">
+    enum="AccessoryAction" expires_after="2020-10-04">
   <owner>fhorschig@chromium.org</owner>
   <summary>
     Android only. Records whenever users select an action in the accessory bar
@@ -68647,7 +68663,7 @@
 </histogram>
 
 <histogram name="Launch.HomeScreen" enum="LaunchFromHomeScreen"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>dominickn@chromium.org</owner>
   <owner>hartmanng@chromium.org</owner>
   <owner>peconn@chromium.org</owner>
@@ -68683,7 +68699,7 @@
 </histogram>
 
 <histogram name="Launch.IntentFlags" enum="LaunchIntentFlags"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>dfalcantara@chromium.org</owner>
   <summary>
     Records flags (and combinations of flags) that were attached to the Intent
@@ -69266,7 +69282,7 @@
 
 <histogram name="LoadingPredictor.OptimizationHintsReceiveStatus"
     enum="LoadingPredictorOptimizationHintsReceiveStatus"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>sophiechang@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -69277,7 +69293,7 @@
 </histogram>
 
 <histogram name="LoadingPredictor.PreconnectCount" units="origins"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>alexilin@chromium.org</owner>
   <summary>
     The number of origins that were preconnected for a page load. It includes
@@ -69287,7 +69303,7 @@
 </histogram>
 
 <histogram name="LoadingPredictor.PreconnectHitsPercentage" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>alexilin@chromium.org</owner>
   <summary>
     The percentage of origins that were preconnected and requested by a page
@@ -69298,7 +69314,7 @@
 </histogram>
 
 <histogram base="true" name="LoadingPredictor.PreconnectLearningCount"
-    units="origins" expires_after="2020-08-02">
+    units="origins" expires_after="2020-10-04">
   <owner>alexilin@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -69308,7 +69324,7 @@
 </histogram>
 
 <histogram base="true" name="LoadingPredictor.PreconnectLearningPrecision"
-    units="%" expires_after="2020-08-02">
+    units="%" expires_after="2020-10-04">
   <owner>alexilin@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -69343,7 +69359,7 @@
 </histogram>
 
 <histogram name="LoadingPredictor.PreresolveCount" units="hosts"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>alexilin@chromium.org</owner>
   <summary>
     The number of hosts that were preresolved for a page load. It includes only
@@ -69758,7 +69774,7 @@
 </histogram>
 
 <histogram name="Login.FailureReason" enum="LoginFailureReason"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>achuith@chromium.org</owner>
   <summary>Chrome OS login failure reason.</summary>
 </histogram>
@@ -69860,7 +69876,7 @@
 </histogram>
 
 <histogram name="Login.SuccessReason" enum="LoginSuccessReason"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>achuith@chromium.org</owner>
   <summary>Chrome OS login success reason.</summary>
 </histogram>
@@ -69928,7 +69944,7 @@
 </histogram>
 
 <histogram name="Login.UserType" enum="LoginUserType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>cmasone@chromium.org</owner>
   <summary>
     Chrome OS histogram that keeps track of the way a user logs in and whether
@@ -71578,9 +71594,12 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.StreamBrokerDisconnectReason2"
-    enum="AudioOutputStreamDisconnectReason2" expires_after="2020-04-05">
+    enum="AudioOutputStreamDisconnectReason2" expires_after="2020-03-31">
+  <obsolete>
+    Removed on April 2020.
+  </obsolete>
+  <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
-  <owner>maxmorin@chromium.org</owner>
   <summary>
     Describes why and in which state an audio output stream ended.
   </summary>
@@ -71588,10 +71607,13 @@
 
 <histogram
     name="Media.Audio.Render.StreamBrokerDocumentDestroyedAwaitingCreatedTime"
-    units="ms" expires_after="2020-04-05">
+    units="ms" expires_after="2020-03-31">
+  <obsolete>
+    Removed as of March 2020.
+  </obsolete>
+  <owner>armax@chromium.org</owner>
+  <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
-  <owner>marinaciocea@chromium.org</owner>
-  <owner>maxmorin@chromium.org</owner>
   <summary>
     If the document was destroyed after the broker requested the output stream
     from the audio service, but before it received the reply: how long ago the
@@ -71600,10 +71622,13 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.StreamBrokerStreamCreationTime" units="ms"
-    expires_after="2020-04-05">
+    expires_after="2020-03-31">
+  <obsolete>
+    Removed as of March 2020.
+  </obsolete>
+  <owner>armax@chromium.org</owner>
+  <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
-  <owner>marinaciocea@chromium.org</owner>
-  <owner>maxmorin@chromium.org</owner>
   <summary>
     Time interval between the moment the broker requested the output stream from
     the audio service, and the moment it received the reply.
@@ -82602,7 +82627,7 @@
 </histogram>
 
 <histogram name="MPArch.ChildProcessLaunchSubsequent" units="units"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>ppi@chromium.org</owner>
   <summary>
     The time it takes to spawn child sub processes not counting the first one.
@@ -94533,7 +94558,7 @@
 </histogram>
 
 <histogram name="Net.RestrictedCookieManager.SiteForCookiesOK" enum="Boolean"
-    expires_after="M83">
+    expires_after="M85">
   <owner>morlovich@chromium.org</owner>
   <owner>chlily@chromium.org</owner>
   <summary>
@@ -94543,7 +94568,7 @@
 </histogram>
 
 <histogram name="Net.RestrictedCookieManager.TopFrameOriginOK" enum="Boolean"
-    expires_after="M83">
+    expires_after="M85">
   <owner>morlovich@chromium.org</owner>
   <owner>chlily@chromium.org</owner>
   <summary>
@@ -104357,7 +104382,7 @@
 </histogram>
 
 <histogram name="NQE.EffectiveConnectionType.OnECTComputation"
-    enum="NQEEffectiveConnectionType" expires_after="2020-08-02">
+    enum="NQEEffectiveConnectionType" expires_after="2020-10-04">
   <owner>tbansal@chromium.org</owner>
   <owner>src/net/nqe/OWNERS</owner>
   <summary>
@@ -104735,7 +104760,7 @@
 </histogram>
 
 <histogram name="NQE.RTT.ObservationSource" enum="NQEObservationSource"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>tbansal@chromium.org</owner>
   <owner>bengr@chromium.org</owner>
   <summary>
@@ -104850,7 +104875,7 @@
 </histogram>
 
 <histogram name="NQE.TransportRTT.OnECTComputation" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>bengr@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -118710,7 +118735,7 @@
   </summary>
 </histogram>
 
-<histogram name="PDF.HasAttachment" enum="Boolean" expires_after="2020-05-31">
+<histogram name="PDF.HasAttachment" enum="Boolean" expires_after="2020-10-04">
   <owner>hnakashima@chromium.org</owner>
   <summary>
     Measures if PDFs opened in the PDF viewer have attachments. This is logged
@@ -124243,7 +124268,7 @@
 </histogram>
 
 <histogram name="Power.BatteryRemainingAtStartOfSessionOnAC" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>tbroch@chromium.org</owner>
   <summary>
     Chrome OS remaining battery charge as percent of the maximum battery charge,
@@ -124585,7 +124610,7 @@
   </summary>
 </histogram>
 
-<histogram name="Power.IdleTimeOnBattery" units="ms" expires_after="2020-08-02">
+<histogram name="Power.IdleTimeOnBattery" units="ms" expires_after="2020-10-04">
   <owner>tbroch@chromium.org</owner>
   <owner>jiameng@chromium.org</owner>
   <summary>
@@ -124595,7 +124620,7 @@
 </histogram>
 
 <histogram name="Power.KernelResumeTimeOnAC" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>tbroch@chromium.org</owner>
   <summary>
     The time that the kernel took to resume the Chrome OS device from
@@ -124640,7 +124665,7 @@
 </histogram>
 
 <histogram name="Power.LengthOfSession" units="seconds"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>tbroch@chromium.org</owner>
   <summary>
     The length of time, in seconds, that a user spent in a single session.
@@ -124821,7 +124846,7 @@
 </histogram>
 
 <histogram name="Power.PowerButtonPressInLaptopMode"
-    enum="PowerButtonPressType" expires_after="2020-08-02">
+    enum="PowerButtonPressType" expires_after="2020-10-04">
   <owner>minch@chromium.org</owner>
   <summary>
     Press power button in laptop mode will result in different scenarios
@@ -124862,7 +124887,7 @@
 </histogram>
 
 <histogram name="Power.PowerSupplyType" enum="PowerSupplyType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>bleung@chromium.org</owner>
   <owner>tbroch@chromium.org</owner>
   <summary>
@@ -125118,7 +125143,7 @@
 </histogram>
 
 <histogram name="PowerML.SmartDimModel.Result"
-    enum="PowerMLSmartDimModelResult" expires_after="2020-08-02">
+    enum="PowerMLSmartDimModelResult" expires_after="2020-10-04">
   <owner>jiameng@chromium.org</owner>
   <summary>
     This is the status code returned by the model when calculating a user
@@ -127371,7 +127396,7 @@
 </histogram>
 
 <histogram name="Previews.ServerLitePage.BlacklistReasons"
-    enum="PreviewsServerLitePageBlacklistReason" expires_after="2020-08-02">
+    enum="PreviewsServerLitePageBlacklistReason" expires_after="2020-10-04">
   <owner>robertogden@chromium.org</owner>
   <summary>
     The reason that a navigation is blacklisted from loading a server lite page
@@ -128255,7 +128280,7 @@
 </histogram>
 
 <histogram name="PrintPreview.PrintDocumentType"
-    enum="PrintPreviewPrintDocumentTypeBuckets" expires_after="2020-08-02">
+    enum="PrintPreviewPrintDocumentTypeBuckets" expires_after="2020-10-04">
   <owner>rbpotter@chromium.org</owner>
   <summary>
     Track type of documents printed (HTML vs PDF). Recorded immediately after a
@@ -129462,7 +129487,7 @@
 </histogram>
 
 <histogram name="Profile.UserAction.PerProfile" enum="Profile"
-    expires_after="2020-07-30">
+    expires_after="2020-10-04">
   <owner>msarda@chromium.org</owner>
   <owner>tangltom@chromium.org</owner>
   <summary>
@@ -129630,7 +129655,7 @@
 </histogram>
 
 <histogram name="ProtoDB.InitStatus" enum="LevelDBStatus"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>nyquist@chromium.org</owner>
   <owner>ssid@chromium.org</owner>
   <summary>The LevelDB Status from a ProtoDatabase Init call.</summary>
@@ -129690,7 +129715,7 @@
 </histogram>
 
 <histogram name="ProximityAuth.BleWeaveConnectionResult"
-    enum="ProximityAuth_BleWeaveConnectionResult" expires_after="2020-08-02">
+    enum="ProximityAuth_BleWeaveConnectionResult" expires_after="2020-10-04">
   <owner>hansberry@chromium.org</owner>
   <summary>
     Provides a breakdown of how often each BLE weave connection result occurs.
@@ -129699,7 +129724,7 @@
 
 <histogram name="ProximityAuth.BluetoothGattConnectionResult"
     enum="ProximityAuth_BluetoothGattConnectionResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hansberry@chromium.org</owner>
   <summary>
     Provides a breakdown of how many times each possible Bluetooth GATT
@@ -129713,7 +129738,7 @@
 
 <histogram name="ProximityAuth.BluetoothGattNotifySessionResult"
     enum="ProximityAuth_BluetoothGattServiceOperationResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hansberry@chromium.org</owner>
   <summary>
     Provides a breakdown of how many times each possible Bluetooth GATT
@@ -129727,7 +129752,7 @@
 
 <histogram name="ProximityAuth.BluetoothGattWriteCharacteristicResult"
     enum="ProximityAuth_BluetoothGattServiceOperationResult"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hansberry@chromium.org</owner>
   <summary>
     Provides a breakdown of how many times each possible Bluetooth GATT
@@ -139556,7 +139581,7 @@
 </histogram>
 
 <histogram name="SBClientDownload.CheckDownloadStats"
-    enum="SBClientDownloadCheckDownloadStats" expires_after="2020-08-02">
+    enum="SBClientDownloadCheckDownloadStats" expires_after="2020-10-04">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <owner>mattm@chromium.org</owner>
@@ -139689,7 +139714,7 @@
 </histogram>
 
 <histogram name="SBClientDownload.DownloadExtensions"
-    enum="SBClientDownloadExtensions" expires_after="2020-08-02">
+    enum="SBClientDownloadExtensions" expires_after="2020-10-04">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <owner>mattm@chromium.org</owner>
@@ -159371,7 +159396,7 @@
 </histogram>
 
 <histogram name="SubresourceFilter.DocumentLoad.ActivationState"
-    enum="SubresourceFilterActivationState" expires_after="2020-06-14">
+    enum="SubresourceFilterActivationState" expires_after="2020-10-04">
   <owner>engedy@chromium.org</owner>
   <summary>
     Whenever a document load is committed in a main frame or subframe, records
@@ -161096,7 +161121,7 @@
 </histogram>
 
 <histogram name="Sync.DataTypeRunFailures2" enum="SyncModelTypes"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>jkrcal@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -161122,7 +161147,7 @@
 </histogram>
 
 <histogram name="Sync.DataTypeStartFailures2" enum="SyncModelTypes"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>jkrcal@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -162048,7 +162073,7 @@
 </histogram>
 
 <histogram base="true" name="Sync.ModelTypeCount4" units="entries"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>jkrcal@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -162091,7 +162116,7 @@
 </histogram>
 
 <histogram base="true" name="Sync.ModelTypeEntityChange3"
-    enum="SyncEntityChange" expires_after="2020-08-02">
+    enum="SyncEntityChange" expires_after="2020-10-04">
   <owner>jkrcal@chromium.org</owner>
   <summary>
     Recorded once for every sync entity change (whenever it is commited to the
@@ -162256,7 +162281,7 @@
 </histogram>
 
 <histogram name="Sync.NonReflectionUpdateFreshnessPossiblySkewed2" units="ms"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>mastiz@chromium.org</owner>
   <owner>melandory@chromium.org</owner>
   <summary>
@@ -162833,7 +162858,7 @@
 </histogram>
 
 <histogram name="Sync.ResolveSimpleConflict"
-    enum="SyncSimpleConflictResolutions" expires_after="2020-08-02">
+    enum="SyncSimpleConflictResolutions" expires_after="2020-10-04">
   <owner>zea@chromium.org</owner>
   <summary>Enumeration of types of simple conflict resolutions.</summary>
 </histogram>
@@ -167908,7 +167933,7 @@
 </histogram>
 
 <histogram name="Tracing.Background.ScenarioState"
-    enum="BackgroundTracingState" expires_after="2020-08-02">
+    enum="BackgroundTracingState" expires_after="2020-10-04">
   <owner>oysteine@chromium.org</owner>
   <summary>
     Records state of the Background Tracing system, from when scenarios are
@@ -168010,7 +168035,7 @@
 </histogram>
 
 <histogram name="Translate.AlwaysTranslateLang" units="units"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>kenjibaheux@google.com</owner>
   <summary>
     The number of times the always translate option was selected in the
@@ -168019,7 +168044,7 @@
 </histogram>
 
 <histogram name="Translate.BubbleUiEvent" enum="TranslateBubbleUiEvent"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>groby@google.com</owner>
   <summary>Tracks UI events related to the translate bubble.</summary>
 </histogram>
@@ -168098,7 +168123,7 @@
 </histogram>
 
 <histogram name="Translate.CompactInfobar.Language.NeverTranslate"
-    enum="CLD3LanguageCode" expires_after="2020-08-02">
+    enum="CLD3LanguageCode" expires_after="2020-10-04">
   <owner>anthonyvd@chromium.org</owner>
   <summary>
     Records the hashcode of the source language when never translate this
@@ -168153,7 +168178,7 @@
 </histogram>
 
 <histogram name="Translate.DeclineTranslate" units="units"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>kenjibaheux@google.com</owner>
   <summary>
     The number of times the &quot;Nope&quot; (don't translate) or the infobar's
@@ -168268,7 +168293,7 @@
 </histogram>
 
 <histogram name="Translate.InitiationStatus.v2"
-    enum="TranslateInitiationStatus" expires_after="2020-08-03">
+    enum="TranslateInitiationStatus" expires_after="2020-10-04">
   <owner>kenjibaheux@google.com</owner>
   <summary>
     The reason why Chrome decided to perform the next action (e.g., to show
@@ -168348,7 +168373,7 @@
 </histogram>
 
 <histogram name="Translate.MobileMenuTranslate.Shown" enum="Boolean"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>yyushkina@google.com</owner>
   <owner>frechette@chromium.org</owner>
   <summary>
@@ -168616,7 +168641,7 @@
 </histogram>
 
 <histogram name="Translate.Translate" enum="BooleanTranslate"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>kenjibaheux@google.com</owner>
   <summary>
     The number of times the translate button was clicked in the translate
@@ -168871,7 +168896,7 @@
 </histogram>
 
 <histogram name="UKM.Entries.Dropped" enum="UkmDataDroppedReason"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -168891,7 +168916,7 @@
 </histogram>
 
 <histogram name="UKM.Entries.SerializedCount2" units="entries"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>Number of serialized UKM entries when storing a UKM log.</summary>
@@ -168921,7 +168946,7 @@
   </summary>
 </histogram>
 
-<histogram name="UKM.LogSize.OnSuccess" units="KB" expires_after="2020-08-03">
+<histogram name="UKM.LogSize.OnSuccess" units="KB" expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -168992,7 +169017,7 @@
 </histogram>
 
 <histogram name="UKM.Sources.Dropped" enum="UkmDataDroppedReason"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -169002,7 +169027,7 @@
 </histogram>
 
 <histogram name="UKM.Sources.KeptSourcesCount" units="sources"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -169039,7 +169064,7 @@
 </histogram>
 
 <histogram name="UKM.Sources.UnsentSourcesCount" units="sources"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -169087,7 +169112,7 @@
 </histogram>
 
 <histogram name="UKM.UnsentLogs.NumDropped" units="units"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>ukm-team@google.com</owner>
   <summary>
@@ -169386,7 +169411,7 @@
 </histogram>
 
 <histogram name="UMA.EnrollmentStatus" enum="EnrollmentStatus"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asvitkine@chromium.org</owner>
   <owner>kaznacheev@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
@@ -170152,7 +170177,7 @@
 </histogram>
 
 <histogram name="UMA.PrimaryUserType" enum="UserType"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>michaelpg@chromium.org</owner>
   <owner>yilkal@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
@@ -170367,7 +170392,7 @@
 </histogram>
 
 <histogram name="UMA.TruncatedEvents.UserAction" units="events"
-    expires_after="2020-09-27">
+    expires_after="2020-10-04">
   <owner>rkaplow@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
   <summary>
@@ -171882,7 +171907,7 @@
 </histogram>
 
 <histogram name="V8.CompileLazyMicroSeconds" units="microseconds"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hablich@chromium.org</owner>
   <summary>
     Aggregated time spent compiling functions lazily during a single script
@@ -172601,7 +172626,7 @@
 </histogram>
 
 <histogram name="V8.LiftoffBailoutReasons" enum="LiftoffBailoutReason"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -175351,7 +175376,7 @@
 </histogram>
 
 <histogram name="WebApk.Install.InstallEvent" enum="WebApkInstallEvent"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hanxi@chromium.org</owner>
   <owner>pkotwicz@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
@@ -175458,7 +175483,7 @@
 </histogram>
 
 <histogram name="WebApk.Navigation.ChildTab.InScope" enum="BooleanInScope"
-    expires_after="2020-08-01">
+    expires_after="2020-10-04">
   <owner>hartmanng@chromium.org</owner>
   <owner>peconn@chromium.org</owner>
   <owner>pkotwicz@chromium.org</owner>
@@ -178230,7 +178255,7 @@
 </histogram>
 
 <histogram name="WebFont.BlankTextShownTime" units="ms"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>kenjibaheux@chromium.org</owner>
   <owner>ksakamoto@chromium.org</owner>
   <summary>
@@ -178958,7 +178983,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.ApmCaptureInputLevelAverageRms"
-    units="dBFS (negated)" expires_after="2020-08-02">
+    units="dBFS (negated)" expires_after="2020-10-04">
   <owner>hlundin@chromium.org</owner>
   <summary>
     This histogram reports the average RMS of the signal coming in to WebRTC's
@@ -178970,7 +178995,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.ApmCaptureInputLevelPeakRms"
-    units="dBFS (negated)" expires_after="2020-08-02">
+    units="dBFS (negated)" expires_after="2020-10-04">
   <owner>hlundin@chromium.org</owner>
   <summary>
     This histogram reports the peak RMS of the signal coming in to WebRTC's
@@ -178982,7 +179007,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.ApmCaptureOutputLevelAverageRms"
-    units="dBFS (negated)" expires_after="2020-08-02">
+    units="dBFS (negated)" expires_after="2020-10-04">
   <owner>peah@chromium.org</owner>
   <summary>
     This histogram reports the average RMS of the signal in the output of
@@ -179097,7 +179122,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.AverageExcessBufferDelayMs" units="ms"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hlundin@chromium.org</owner>
   <summary>
     Measures the average waiting time in the buffer for each packet. The waiting
@@ -179551,7 +179576,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.ResidualEchoDetector.EchoLikelihood" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>hlundin@chromium.org</owner>
   <owner>ivoc@chromium.org</owner>
   <summary>
@@ -179712,14 +179737,14 @@
 </histogram>
 
 <histogram name="WebRTC.BWE.InitiallyLostPackets" units="packets"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>holmer@chromium.org</owner>
   <summary>
     The number of video packets lost durig the first 2 seconds in a WebRTC call.
   </summary>
 </histogram>
 
-<histogram name="WebRTC.BWE.InitialRtt" units="ms" expires_after="2020-08-02">
+<histogram name="WebRTC.BWE.InitialRtt" units="ms" expires_after="2020-10-04">
   <owner>holmer@chromium.org</owner>
   <summary>
     The round-trip time as measured 2 seconds into a WebRTC call.
@@ -179872,7 +179897,7 @@
 </histogram>
 
 <histogram name="WebRTC.Call.EstimatedSendBitrateInKbps" units="kbps"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>holmer@chromium.org</owner>
   <summary>
     Average estimated send bitrate during a call, counted from first packet sent
@@ -180676,7 +180701,7 @@
 </histogram>
 
 <histogram name="WebRTC.UserMediaRequest.Result2"
-    enum="MediaStreamRequestResult2" expires_after="2020-08-03">
+    enum="MediaStreamRequestResult2" expires_after="2020-10-04">
   <owner>grunell@chromium.org</owner>
   <summary>
     Counters for UserMediaRequests results such as failure reasons. The standard
@@ -180773,7 +180798,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.BitrateSentInKbps" units="kbps"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asapersson@chromium.org</owner>
   <summary>
     The number of sent bits per second for a sent video stream. Recorded when a
@@ -180793,7 +180818,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.CpuLimitedResolutionInPercent" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asapersson@chromium.org</owner>
   <summary>
     Percentage of frames that are limited in resolution due to CPU for a sent
@@ -181204,7 +181229,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.NumberFreezesPerMinute" units="freezes/minute"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>ssilkin@chromium.org</owner>
   <summary>
     The number of video freezes per minute for a received video stream. Recorded
@@ -181213,7 +181238,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.NumberOfPauseEvents" units="pause events"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asapersson@chromium.org</owner>
   <summary>
     The number of times a video stream has been paused/resumed during a call.
@@ -181363,7 +181388,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.RenderFramesPerSecond" units="fps"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asapersson@chromium.org</owner>
   <summary>
     The number of sent frames to the renderer per second for a received video
@@ -182005,7 +182030,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.SentPacketsLostInPercent" units="%"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>asapersson@chromium.org</owner>
   <summary>
     Percentage of sent packets lost for a sent video stream. Recorded when a
@@ -182500,7 +182525,7 @@
 </histogram>
 
 <histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes"
-    expires_after="2020-08-03">
+    expires_after="2020-10-04">
   <owner>dbeam@chromium.org</owner>
   <summary>URLs for which Chrome creates WebUIControllers.</summary>
 </histogram>
@@ -183502,7 +183527,7 @@
 </histogram>
 
 <histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction"
-    expires_after="2020-08-02">
+    expires_after="2020-10-04">
   <owner>ainslie@chromium.org</owner>
   <owner>edwardjung@chromium.org</owner>
   <summary>Number of times that each menu item is clicked.</summary>
diff --git a/tools/perf/cli_tools/pinboard/job_configs.json b/tools/perf/cli_tools/pinboard/job_configs.json
index c971af93..53fb74f 100644
--- a/tools/perf/cli_tools/pinboard/job_configs.json
+++ b/tools/perf/cli_tools/pinboard/job_configs.json
@@ -1,6 +1,6 @@
 [
   {
-    "name": "Try job for v8: enable TurboProp",
+    "name": "Try job for v8: enable TurboProp - Android Go",
     "target": "performance_test_suite",
     "configuration": "android-go-perf",
     "benchmark": "v8.browsing_mobile",
@@ -9,7 +9,25 @@
     "repository": "chromium"
   },
   {
-    "name": "Try job for v8: enable TurboProp",
+    "name": "Try job for v8: enable TurboProp - Pixel 2",
+    "target": "performance_test_suite",
+    "configuration": "android-pixel2-perf",
+    "benchmark": "v8.browsing_mobile",
+    "story_tags": "2019",
+    "patch": "https://chromium-review.googlesource.com/c/v8/v8/+/1784285",
+    "repository": "chromium"
+  },
+  {
+    "name": "Try job for v8: enable TurboProp - Linux",
+    "target": "performance_test_suite",
+    "configuration": "linux-perf",
+    "benchmark": "v8.browsing_desktop",
+    "story_tags": "2019,2018",
+    "patch": "https://chromium-review.googlesource.com/c/v8/v8/+/1784285",
+    "repository": "chromium"
+  },
+  {
+    "name": "Try job for v8: enable TurboProp - Speedometer",
     "target": "performance_test_suite",
     "configuration": "android-go-perf",
     "benchmark": "speedometer2",
diff --git a/tools/perf/cli_tools/pinboard/pinboard.py b/tools/perf/cli_tools/pinboard/pinboard.py
index 4ec71bf..7459fdb 100644
--- a/tools/perf/cli_tools/pinboard/pinboard.py
+++ b/tools/perf/cli_tools/pinboard/pinboard.py
@@ -58,25 +58,51 @@
 # Compute averages over a fixed set of active stories. These may need to be
 # periodically updated.
 ACTIVE_STORIES = set([
+    # v8.browsing_mobile.
     'browse:chrome:newtab:2019',
     'browse:chrome:omnibox:2019',
     'browse:media:facebook_photos:2019',
+    'browse:media:flickr_infinite_scroll:2019',
     'browse:media:googleplaystore:2019',
     'browse:media:imgur:2019',
     'browse:media:youtube:2019',
     'browse:news:cricbuzz:2019',
     'browse:news:globo:2019',
+    'browse:news:nytimes:2019',
+    'browse:news:qq:2019',
+    'browse:news:reddit:2019',
     'browse:news:toi:2019',
     'browse:shopping:amazon:2019',
+    'browse:news:washingtonpost:2019',
+    'browse:search:amp:sxg:2019',
+    'browse:shopping:amazon:2019',
+    'browse:shopping:avito:2019',
+    'browse:shopping:flipkart:2019',
     'browse:shopping:lazada:2019',
     'browse:social:facebook:2019',
     'browse:social:instagram:2019',
+    'browse:social:twitter:2019',
     'browse:tools:maps:2019',
-    'load:media:facebook_photos:2019',
-    'load:media:youtube:2018',
-    'load:news:irctc:2019',
-    'load:news:wikipedia:2018',
-    'intent:coldish:bbc',
+
+    # v8.browsing_desktop.
+    'browse:news:nytimes:2018',
+    'browse:news:flipboard:2018',
+    'browse:social:facebook_infinite_scroll:2018',
+    'browse:tools:sheets:2019',
+    'browse:media:tumblr:2018',
+    'browse:tools:maps:2019',
+    'browse:social:twitter_infinite_scroll:2018',
+    'browse:tech:discourse_infinite_scroll:2018',
+    'browse:social:twitter:2018',
+    'browse:social:tumblr_infinite_scroll:2018',
+    'browse:media:googleplaystore:2018',
+    'browse:search:google:2018',
+    'browse:news:cnn:2018',
+    'browse:news:reddit:2018',
+    'browse:search:google_india:2018',
+    'browse:media:youtubetv:2019',
+
+    # Speedometer2.
     'Speedometer2',
 ])
 
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py
index 3b927d91..653d12c 100644
--- a/tools/perf/core/bot_platforms.py
+++ b/tools/perf/core/bot_platforms.py
@@ -414,7 +414,10 @@
     'mac-10_13_laptop_high_end-perf',
     'MacBook Pro, Core i7 2.8 GHz, 16GB RAM, 256GB SSD, Radeon 55',
     _MAC_HIGH_END_BENCHMARK_CONFIGS,
-    26,
+    # crbug.com/1068120
+    # The shard size is reduced from 26 to 23 due to the COVID-19
+    # situation that labs may not be able to recover devices in time.
+    23,
     'mac',
     executables=_MAC_HIGH_END_EXECUTABLE_CONFIGS)
 MAC_LOW_END = PerfPlatform(
diff --git a/tools/perf/core/perfetto_binary_roller/BUILD.gn b/tools/perf/core/perfetto_binary_roller/BUILD.gn
index f472569d..efd3859 100644
--- a/tools/perf/core/perfetto_binary_roller/BUILD.gn
+++ b/tools/perf/core/perfetto_binary_roller/BUILD.gn
@@ -7,10 +7,13 @@
 generate_wrapper("upload_trace_processor") {
   testonly = true
   data_deps = [
+    "//third_party/catapult:telemetry_chrome_test_support",
     "//third_party/perfetto/src/trace_processor:trace_processor_shell",
-    "//tools/perf/chrome_telemetry_build:telemetry_chrome_test_without_chrome",
   ]
-  data = [ "//third_party/perfetto" ]
+  data = [
+    "//tools/perf/core/",
+    "//DEPS",
+  ]
   executable = "upload_trace_processor.py"
   wrapper_script = "$root_build_dir/upload_trace_processor"
   executable_args = [
diff --git a/tools/perf/core/perfetto_binary_roller/upload_trace_processor.py b/tools/perf/core/perfetto_binary_roller/upload_trace_processor.py
index 4a72178..fdf3591 100755
--- a/tools/perf/core/perfetto_binary_roller/upload_trace_processor.py
+++ b/tools/perf/core/perfetto_binary_roller/upload_trace_processor.py
@@ -5,7 +5,7 @@
 
 import argparse
 import os
-import subprocess
+import re
 import sys
 
 # Add tools/perf to sys.path.
@@ -20,11 +20,15 @@
 
 
 def _PerfettoRevision():
-  perfetto_dir = os.path.join(path_util.GetChromiumSrcDir(), 'third_party',
-                              'perfetto')
-  revision = subprocess.check_output(
-      ['git', '-C', perfetto_dir, 'rev-parse', 'HEAD'])
-  return revision.strip()
+  deps_line_re = re.compile(
+      r".*'/platform/external/perfetto.git' \+ '@' \+ '([a-f0-9]+)'")
+  deps_file = os.path.join(path_util.GetChromiumSrcDir(), 'DEPS')
+  with open(deps_file) as deps:
+    for line in deps:
+      match = deps_line_re.match(line)
+      if match:
+        return match.group(1)
+  raise RuntimeError("Couldn't parse perfetto revision from DEPS")
 
 
 def main(args):
diff --git a/tools/perf/core/shard_maps/mac-10_13_laptop_high_end-perf_map.json b/tools/perf/core/shard_maps/mac-10_13_laptop_high_end-perf_map.json
index e664630..57d2fba 100644
--- a/tools/perf/core/shard_maps/mac-10_13_laptop_high_end-perf_map.json
+++ b/tools/perf/core/shard_maps/mac-10_13_laptop_high_end-perf_map.json
@@ -14,7 +14,10 @@
                 "abridged": false
             },
             "blink_perf.dom": {
-                "end": 1,
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "end": 5,
                 "abridged": false
             }
         },
@@ -30,32 +33,29 @@
     },
     "1": {
         "benchmarks": {
-            "blink_perf.dom": {
-                "begin": 1,
-                "abridged": false
-            },
             "blink_perf.events": {
+                "begin": 5,
                 "abridged": false
             },
             "blink_perf.image_decoder": {
                 "abridged": false
             },
             "blink_perf.layout": {
-                "end": 82,
-                "abridged": false
-            }
-        }
-    },
-    "2": {
-        "benchmarks": {
-            "blink_perf.layout": {
-                "begin": 82,
                 "abridged": false
             },
             "blink_perf.owp_storage": {
                 "abridged": false
             },
             "blink_perf.paint": {
+                "end": 14,
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.paint": {
+                "begin": 14,
                 "abridged": false
             },
             "blink_perf.parser": {
@@ -68,7 +68,15 @@
                 "abridged": false
             },
             "dromaeo": {
-                "end": 1,
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
                 "abridged": false
             }
         },
@@ -84,19 +92,6 @@
     },
     "3": {
         "benchmarks": {
-            "dromaeo": {
-                "begin": 1,
-                "abridged": false
-            },
-            "dummy_benchmark.noisy_benchmark_1": {
-                "abridged": false
-            },
-            "dummy_benchmark.stable_benchmark_1": {
-                "abridged": false
-            },
-            "jetstream": {
-                "abridged": false
-            },
             "jetstream2": {
                 "abridged": false
             },
@@ -104,7 +99,7 @@
                 "abridged": false
             },
             "loading.desktop": {
-                "end": 13,
+                "end": 32,
                 "abridged": false
             }
         }
@@ -112,8 +107,8 @@
     "4": {
         "benchmarks": {
             "loading.desktop": {
-                "begin": 13,
-                "end": 45,
+                "begin": 32,
+                "end": 67,
                 "abridged": false
             }
         }
@@ -121,8 +116,8 @@
     "5": {
         "benchmarks": {
             "loading.desktop": {
-                "begin": 45,
-                "end": 74,
+                "begin": 67,
+                "end": 101,
                 "abridged": false
             }
         }
@@ -130,23 +125,14 @@
     "6": {
         "benchmarks": {
             "loading.desktop": {
-                "begin": 74,
+                "begin": 101,
                 "abridged": false
             },
             "media.desktop": {
-                "end": 4,
-                "abridged": false
-            }
-        }
-    },
-    "7": {
-        "benchmarks": {
-            "media.desktop": {
-                "begin": 4,
                 "abridged": false
             },
             "memory.desktop": {
-                "end": 7,
+                "end": 8,
                 "abridged": false
             }
         },
@@ -161,17 +147,20 @@
             }
         }
     },
-    "8": {
+    "7": {
         "benchmarks": {
             "memory.desktop": {
-                "begin": 7,
+                "begin": 8,
                 "abridged": false
             },
             "octane": {
                 "abridged": false
             },
             "power.desktop": {
-                "end": 12,
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "end": 3,
                 "abridged": false
             }
         },
@@ -193,17 +182,23 @@
             }
         }
     },
-    "9": {
+    "8": {
         "benchmarks": {
-            "power.desktop": {
-                "begin": 12,
-                "abridged": false
-            },
             "rasterize_and_record_micro.top_25": {
+                "begin": 3,
                 "abridged": false
             },
             "rendering.desktop": {
-                "end": 20,
+                "end": 37,
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 37,
+                "end": 91,
                 "abridged": false
             }
         }
@@ -211,8 +206,8 @@
     "10": {
         "benchmarks": {
             "rendering.desktop": {
-                "begin": 20,
-                "end": 66,
+                "begin": 91,
+                "end": 149,
                 "abridged": false
             }
         }
@@ -220,8 +215,8 @@
     "11": {
         "benchmarks": {
             "rendering.desktop": {
-                "begin": 66,
-                "end": 115,
+                "begin": 149,
+                "end": 220,
                 "abridged": false
             }
         }
@@ -229,25 +224,7 @@
     "12": {
         "benchmarks": {
             "rendering.desktop": {
-                "begin": 115,
-                "end": 167,
-                "abridged": false
-            }
-        }
-    },
-    "13": {
-        "benchmarks": {
-            "rendering.desktop": {
-                "begin": 167,
-                "end": 231,
-                "abridged": false
-            }
-        }
-    },
-    "14": {
-        "benchmarks": {
-            "rendering.desktop": {
-                "begin": 231,
+                "begin": 220,
                 "abridged": false
             },
             "speedometer": {
@@ -263,7 +240,25 @@
                 "abridged": false
             },
             "system_health.common_desktop": {
-                "end": 7,
+                "end": 2,
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 2,
+                "end": 36,
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 36,
+                "end": 69,
                 "abridged": false
             }
         }
@@ -271,29 +266,29 @@
     "15": {
         "benchmarks": {
             "system_health.common_desktop": {
-                "begin": 7,
-                "end": 41,
+                "begin": 69,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 10,
                 "abridged": false
             }
         }
     },
     "16": {
         "benchmarks": {
-            "system_health.common_desktop": {
-                "begin": 41,
-                "end": 67,
+            "system_health.memory_desktop": {
+                "begin": 10,
+                "end": 22,
                 "abridged": false
             }
         }
     },
     "17": {
         "benchmarks": {
-            "system_health.common_desktop": {
-                "begin": 67,
-                "abridged": false
-            },
             "system_health.memory_desktop": {
-                "end": 8,
+                "begin": 22,
+                "end": 41,
                 "abridged": false
             }
         }
@@ -301,8 +296,8 @@
     "18": {
         "benchmarks": {
             "system_health.memory_desktop": {
-                "begin": 8,
-                "end": 17,
+                "begin": 41,
+                "end": 62,
                 "abridged": false
             }
         }
@@ -310,8 +305,8 @@
     "19": {
         "benchmarks": {
             "system_health.memory_desktop": {
-                "begin": 17,
-                "end": 32,
+                "begin": 62,
+                "end": 68,
                 "abridged": false
             }
         }
@@ -319,34 +314,7 @@
     "20": {
         "benchmarks": {
             "system_health.memory_desktop": {
-                "begin": 32,
-                "end": 49,
-                "abridged": false
-            }
-        }
-    },
-    "21": {
-        "benchmarks": {
-            "system_health.memory_desktop": {
-                "begin": 49,
-                "end": 63,
-                "abridged": false
-            }
-        }
-    },
-    "22": {
-        "benchmarks": {
-            "system_health.memory_desktop": {
-                "begin": 63,
-                "end": 69,
-                "abridged": false
-            }
-        }
-    },
-    "23": {
-        "benchmarks": {
-            "system_health.memory_desktop": {
-                "begin": 69,
+                "begin": 68,
                 "abridged": false
             },
             "tab_switching.typical_25": {
@@ -356,27 +324,27 @@
                 "abridged": false
             },
             "v8.browsing_desktop": {
-                "end": 13,
+                "end": 10,
                 "abridged": false
             }
         }
     },
-    "24": {
+    "21": {
         "benchmarks": {
             "v8.browsing_desktop": {
-                "begin": 13,
+                "begin": 10,
                 "abridged": false
             },
             "v8.browsing_desktop-future": {
-                "end": 8,
+                "end": 6,
                 "abridged": false
             }
         }
     },
-    "25": {
+    "22": {
         "benchmarks": {
             "v8.browsing_desktop-future": {
-                "begin": 8,
+                "begin": 6,
                 "abridged": false
             },
             "webrtc": {
@@ -393,36 +361,33 @@
         }
     },
     "extra_infos": {
-        "num_stories": 1023,
-        "predicted_min_shard_time": 2976.0,
-        "predicted_min_shard_index": 22,
-        "predicted_max_shard_time": 3540.0,
-        "predicted_max_shard_index": 19,
-        "shard #0": 3344.0,
-        "shard #1": 3292.0,
-        "shard #2": 3356.0,
-        "shard #3": 3272.0,
-        "shard #4": 3344.0,
-        "shard #5": 3280.0,
-        "shard #6": 3368.0,
-        "shard #7": 3188.0,
-        "shard #8": 3330.0,
-        "shard #9": 3380.0,
-        "shard #10": 3312.0,
-        "shard #11": 3296.0,
-        "shard #12": 3352.0,
-        "shard #13": 3312.0,
-        "shard #14": 3232.0,
-        "shard #15": 3412.0,
-        "shard #16": 3192.0,
-        "shard #17": 3244.0,
-        "shard #18": 3216.0,
-        "shard #19": 3540.0,
-        "shard #20": 3444.0,
-        "shard #21": 3468.0,
-        "shard #22": 2976.0,
-        "shard #23": 3308.0,
-        "shard #24": 3424.0,
-        "shard #25": 3338.0
+        "num_stories": 1035,
+        "predicted_min_shard_time": 3540.0,
+        "predicted_min_shard_index": 15,
+        "predicted_max_shard_time": 4128.0,
+        "predicted_max_shard_index": 16,
+        "shard #0": 3848.0,
+        "shard #1": 3808.0,
+        "shard #2": 3660.0,
+        "shard #3": 3960.0,
+        "shard #4": 3840.0,
+        "shard #5": 3800.0,
+        "shard #6": 3872.0,
+        "shard #7": 3766.0,
+        "shard #8": 3776.0,
+        "shard #9": 3840.0,
+        "shard #10": 3832.0,
+        "shard #11": 3800.0,
+        "shard #12": 3812.0,
+        "shard #13": 3848.0,
+        "shard #14": 3868.0,
+        "shard #15": 3540.0,
+        "shard #16": 4128.0,
+        "shard #17": 3804.0,
+        "shard #18": 3720.0,
+        "shard #19": 3828.0,
+        "shard #20": 3788.0,
+        "shard #21": 3976.0,
+        "shard #22": 3706.0
     }
 }
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json b/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
index 265b1e9..4863339 100644
--- a/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
@@ -76,7 +76,7 @@
         "name": "blink_perf.bindings/named-property-enumerator.html"
     },
     {
-        "duration": "34.0",
+        "duration": "28.0",
         "name": "blink_perf.bindings/node-list-access.html"
     },
     {
@@ -92,7 +92,7 @@
         "name": "blink_perf.bindings/sequence-conversion-array.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
     },
     {
@@ -152,7 +152,7 @@
         "name": "blink_perf.bindings/typed-array-set-from-typed.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.bindings/undefined-first-child.html"
     },
     {
@@ -160,7 +160,7 @@
         "name": "blink_perf.bindings/undefined-get-element-by-id.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.bindings/undefined-id-getter.html"
     },
     {
@@ -168,7 +168,7 @@
         "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
     },
     {
@@ -176,7 +176,7 @@
         "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
     },
     {
@@ -373,6 +373,14 @@
     },
     {
         "duration": "0.0",
+        "name": "blink_perf.canvas/toblob-small-canvas-in-worker.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.canvas/toblob-small-canvas-in-worker_RAF.html?RAF"
+    },
+    {
+        "duration": "0.0",
         "name": "blink_perf.canvas/transferFromImageBitmap.html"
     },
     {
@@ -412,7 +420,7 @@
         "name": "blink_perf.canvas/upload-webgl-to-texture_RAF.html?RAF"
     },
     {
-        "duration": "32.0",
+        "duration": "30.0",
         "name": "blink_perf.css/AttributeDescendantSelector.html"
     },
     {
@@ -424,7 +432,7 @@
         "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "blink_perf.css/CSSPropertyUpdateValue.html"
     },
     {
@@ -436,7 +444,7 @@
         "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
     },
     {
-        "duration": "18.0",
+        "duration": "16.0",
         "name": "blink_perf.css/ChangeStyleElementSelector.html"
     },
     {
@@ -468,7 +476,7 @@
         "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
     },
     {
-        "duration": "18.0",
+        "duration": "16.0",
         "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
     },
     {
@@ -480,15 +488,15 @@
         "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
     },
     {
-        "duration": "18.0",
+        "duration": "16.0",
         "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
     },
     {
-        "duration": "18.0",
+        "duration": "16.0",
         "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
     },
     {
@@ -500,11 +508,11 @@
         "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "blink_perf.css/ClassDescendantSelector.html"
     },
     {
-        "duration": "26.0",
+        "duration": "18.0",
         "name": "blink_perf.css/ClassInvalidation.html"
     },
     {
@@ -512,15 +520,15 @@
         "name": "blink_perf.css/CustomPropertiesCascade.html"
     },
     {
-        "duration": "6.0",
+        "duration": "8.0",
         "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
     },
     {
-        "duration": "6.0",
+        "duration": "8.0",
         "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
     },
     {
-        "duration": "6.0",
+        "duration": "8.0",
         "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
     },
     {
@@ -528,7 +536,7 @@
         "name": "blink_perf.css/CustomPropertiesVarAlias.html"
     },
     {
-        "duration": "18.0",
+        "duration": "22.0",
         "name": "blink_perf.css/FocusUpdate.html"
     },
     {
@@ -536,31 +544,31 @@
         "name": "blink_perf.css/LoadBootstrapBlog.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.css/LoadMaterializeStarterPage.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.css/LoadSemanticPageExample.html"
     },
     {
-        "duration": "16.0",
+        "duration": "18.0",
         "name": "blink_perf.css/PseudoClassSelectors.html"
     },
     {
-        "duration": "18.0",
+        "duration": "20.0",
         "name": "blink_perf.css/SelectorCountScaling.html"
     },
     {
-        "duration": "60.0",
+        "duration": "62.0",
         "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
     },
     {
-        "duration": "48.0",
+        "duration": "56.0",
         "name": "blink_perf.dom/custom-element-default-style.html"
     },
     {
-        "duration": "22.0",
+        "duration": "18.0",
         "name": "blink_perf.dom/long-sibling-list.html"
     },
     {
@@ -604,11 +612,11 @@
         "name": "blink_perf.events/EventsDispatchingInV0ShadowTrees.html"
     },
     {
-        "duration": "28.0",
+        "duration": "34.0",
         "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.events/hit-test-lots-of-layers.html"
     },
     {
@@ -620,15 +628,15 @@
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "blink_perf.image_decoder/decode-gif.html"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
     },
     {
@@ -640,7 +648,7 @@
         "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "blink_perf.image_decoder/decode-lossless-webp.html"
     },
     {
@@ -648,7 +656,7 @@
         "name": "blink_perf.image_decoder/decode-lossy-webp.html"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
     },
     {
@@ -704,15 +712,15 @@
         "name": "blink_perf.layout/chapter-reflow-once-random.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/chapter-reflow-once.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/chapter-reflow-thrice.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/chapter-reflow-twice.html"
     },
     {
@@ -720,7 +728,7 @@
         "name": "blink_perf.layout/chapter-reflow.html"
     },
     {
-        "duration": "6.0",
+        "duration": "8.0",
         "name": "blink_perf.layout/character_fallback.html"
     },
     {
@@ -776,7 +784,7 @@
         "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/flexbox-lots-of-data.html"
     },
     {
@@ -796,15 +804,15 @@
         "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "blink_perf.layout/flexbox_with_list_item.html"
     },
     {
-        "duration": "10.0",
+        "duration": "12.0",
         "name": "blink_perf.layout/floats_100_100.html"
     },
     {
-        "duration": "10.0",
+        "duration": "12.0",
         "name": "blink_perf.layout/floats_100_100_nested.html"
     },
     {
@@ -820,7 +828,7 @@
         "name": "blink_perf.layout/floats_20_100_nested.html"
     },
     {
-        "duration": "4.0",
+        "duration": "6.0",
         "name": "blink_perf.layout/floats_2_100.html"
     },
     {
@@ -840,11 +848,11 @@
         "name": "blink_perf.layout/hindi-line-layout.html"
     },
     {
-        "duration": "6.0",
+        "duration": "8.0",
         "name": "blink_perf.layout/japanese-kokoro-insert.html"
     },
     {
-        "duration": "18.0",
+        "duration": "20.0",
         "name": "blink_perf.layout/large-grid.html"
     },
     {
@@ -852,23 +860,23 @@
         "name": "blink_perf.layout/large-spanning-grid-item.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
     },
     {
-        "duration": "12.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/latin-ebook-resize.html"
     },
     {
-        "duration": "8.0",
+        "duration": "10.0",
         "name": "blink_perf.layout/latin-ebook.html"
     },
     {
@@ -876,7 +884,7 @@
         "name": "blink_perf.layout/layers_overlap_2d.html"
     },
     {
-        "duration": "4.0",
+        "duration": "6.0",
         "name": "blink_perf.layout/layers_overlap_3d.html"
     },
     {
@@ -884,11 +892,11 @@
         "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
     },
     {
-        "duration": "12.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/line-layout-fit-content.html"
     },
     {
-        "duration": "16.0",
+        "duration": "18.0",
         "name": "blink_perf.layout/line-layout-line-height.html"
     },
     {
@@ -912,7 +920,7 @@
         "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
     },
     {
-        "duration": "12.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/long-line-nowrap.html"
     },
     {
@@ -924,11 +932,11 @@
         "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
     },
     {
@@ -956,7 +964,7 @@
         "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
     },
     {
-        "duration": "26.0",
+        "duration": "30.0",
         "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
     },
     {
@@ -964,7 +972,7 @@
         "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
     },
     {
-        "duration": "24.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
     },
     {
@@ -976,11 +984,11 @@
         "name": "blink_perf.layout/nested-grid.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/nested-percent-height-tables.html"
     },
     {
-        "duration": "66.0",
+        "duration": "76.0",
         "name": "blink_perf.layout/subtree-detaching.html"
     },
     {
@@ -988,23 +996,23 @@
         "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
     },
     {
-        "duration": "4.0",
+        "duration": "14.0",
         "name": "blink_perf.layout/word-break-break-all.html"
     },
     {
-        "duration": "4.0",
+        "duration": "6.0",
         "name": "blink_perf.layout/word-break-break-word.html"
     },
     {
-        "duration": "4.0",
+        "duration": "6.0",
         "name": "blink_perf.layout/word-wrap-break-word.html"
     },
     {
-        "duration": "26.0",
+        "duration": "24.0",
         "name": "blink_perf.owp_storage/blob-perf-files.html"
     },
     {
-        "duration": "24.0",
+        "duration": "20.0",
         "name": "blink_perf.owp_storage/blob-perf-ipc.html"
     },
     {
@@ -1032,7 +1040,7 @@
         "name": "blink_perf.paint/complex-content-slow-scroll.html"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "blink_perf.paint/complex-iframe-filtered.html"
     },
     {
@@ -1052,7 +1060,7 @@
         "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html"
     },
     {
@@ -1072,11 +1080,11 @@
         "name": "blink_perf.paint/large-table-collapsed-border-change.html"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "blink_perf.paint/large-table-repaint.html"
     },
     {
-        "duration": "18.0",
+        "duration": "20.0",
         "name": "blink_perf.paint/move-text-with-mask.html"
     },
     {
@@ -1116,7 +1124,7 @@
         "name": "blink_perf.parser/innerHTML-setter-siblings.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.parser/innerHTML-setter.html"
     },
     {
@@ -1128,7 +1136,7 @@
         "name": "blink_perf.parser/query-selector-all-attribute.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.parser/query-selector-all-class-deep.html"
     },
     {
@@ -1140,7 +1148,7 @@
         "name": "blink_perf.parser/query-selector-all-class-last.html"
     },
     {
-        "duration": "14.0",
+        "duration": "16.0",
         "name": "blink_perf.parser/query-selector-all-class.html"
     },
     {
@@ -1196,7 +1204,7 @@
         "name": "blink_perf.parser/textarea-parsing.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "blink_perf.parser/tiny-innerHTML.html"
     },
     {
@@ -1212,7 +1220,7 @@
         "name": "blink_perf.shadow_dom/declarative-api.html"
     },
     {
-        "duration": "4.0",
+        "duration": "0.0",
         "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
     },
     {
@@ -1220,11 +1228,11 @@
         "name": "blink_perf.shadow_dom/imperative-api-assign.html"
     },
     {
-        "duration": "4.0",
+        "duration": "0.0",
         "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
     },
     {
-        "duration": "4.0",
+        "duration": "0.0",
         "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
     },
     {
@@ -1244,7 +1252,7 @@
         "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
     },
     {
-        "duration": "4.0",
+        "duration": "0.0",
         "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
     },
     {
@@ -1484,11 +1492,11 @@
         "name": "blink_perf.svg/Worldcup.html"
     },
     {
-        "duration": "72.0",
+        "duration": "76.0",
         "name": "dromaeo/http://dromaeo.com?dom-attr"
     },
     {
-        "duration": "68.0",
+        "duration": "74.0",
         "name": "dromaeo/http://dromaeo.com?dom-modify"
     },
     {
@@ -1512,7 +1520,7 @@
         "name": "jetstream/JetStream"
     },
     {
-        "duration": "332.0",
+        "duration": "328.0",
         "name": "jetstream2/JetStream2"
     },
     {
@@ -1540,7 +1548,7 @@
         "name": "loading.desktop/Aljayyash_cold"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Aljayyash_warm"
     },
     {
@@ -1548,7 +1556,7 @@
         "name": "loading.desktop/AllRecipes_cold"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "loading.desktop/AllRecipes_warm"
     },
     {
@@ -1600,7 +1608,7 @@
         "name": "loading.desktop/Danawa_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/Daum_cold"
     },
     {
@@ -1620,11 +1628,11 @@
         "name": "loading.desktop/Economist_cold"
     },
     {
-        "duration": "60.0",
+        "duration": "42.0",
         "name": "loading.desktop/Economist_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Elmundo_cold"
     },
     {
@@ -1672,15 +1680,15 @@
         "name": "loading.desktop/FlipKart_warm"
     },
     {
-        "duration": "44.0",
+        "duration": "22.0",
         "name": "loading.desktop/Free.fr_cold"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Free.fr_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/HTML5Rocks_cold"
     },
     {
@@ -1688,11 +1696,11 @@
         "name": "loading.desktop/HTML5Rocks_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "loading.desktop/Haraj_cold"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Haraj_warm"
     },
     {
@@ -1712,7 +1720,7 @@
         "name": "loading.desktop/IGN_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/IMDB_cold"
     },
     {
@@ -1720,7 +1728,7 @@
         "name": "loading.desktop/IMDB_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/IndiaTimes_cold"
     },
     {
@@ -1732,7 +1740,7 @@
         "name": "loading.desktop/Kakaku_cold"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "loading.desktop/Kakaku_warm"
     },
     {
@@ -1744,7 +1752,7 @@
         "name": "loading.desktop/Kenh14_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/Mercadolivre_cold"
     },
     {
@@ -1764,11 +1772,11 @@
         "name": "loading.desktop/Orange_cold"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Orange_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/Pantip_cold"
     },
     {
@@ -1776,7 +1784,7 @@
         "name": "loading.desktop/Pantip_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/PremierLeague_cold"
     },
     {
@@ -1788,7 +1796,7 @@
         "name": "loading.desktop/QQ_cold"
     },
     {
-        "duration": "30.0",
+        "duration": "32.0",
         "name": "loading.desktop/QQ_warm"
     },
     {
@@ -1796,11 +1804,11 @@
         "name": "loading.desktop/REI_cold"
     },
     {
-        "duration": "28.0",
+        "duration": "26.0",
         "name": "loading.desktop/REI_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/Ruten_cold"
     },
     {
@@ -1812,11 +1820,11 @@
         "name": "loading.desktop/Sina_cold"
     },
     {
-        "duration": "38.0",
+        "duration": "58.0",
         "name": "loading.desktop/Sina_warm"
     },
     {
-        "duration": "46.0",
+        "duration": "26.0",
         "name": "loading.desktop/Taobao_cold"
     },
     {
@@ -1824,15 +1832,15 @@
         "name": "loading.desktop/Taobao_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "44.0",
         "name": "loading.desktop/TheOnion_cold"
     },
     {
-        "duration": "30.0",
+        "duration": "28.0",
         "name": "loading.desktop/TheOnion_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "22.0",
         "name": "loading.desktop/TheVerge_cold"
     },
     {
@@ -1856,7 +1864,7 @@
         "name": "loading.desktop/Vietnamnet_warm"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "loading.desktop/Vnexpress_cold"
     },
     {
@@ -1864,15 +1872,15 @@
         "name": "loading.desktop/Vnexpress_warm"
     },
     {
-        "duration": "10.0",
+        "duration": "8.0",
         "name": "loading.desktop/Walgreens_cold"
     },
     {
-        "duration": "10.0",
+        "duration": "8.0",
         "name": "loading.desktop/Walgreens_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/Yandex_cold"
     },
     {
@@ -1916,11 +1924,11 @@
         "name": "loading.desktop/uol.com.br_cold"
     },
     {
-        "duration": "34.0",
+        "duration": "56.0",
         "name": "loading.desktop/uol.com.br_warm"
     },
     {
-        "duration": "22.0",
+        "duration": "24.0",
         "name": "loading.desktop/yahoo.co.jp_cold"
     },
     {
@@ -1948,19 +1956,19 @@
         "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "media.desktop/video.html?src=crowd1080.mp4"
     },
     {
-        "duration": "38.0",
+        "duration": "36.0",
         "name": "media.desktop/video.html?src=crowd1080.webm"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
     },
     {
@@ -1984,11 +1992,11 @@
         "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
     },
     {
-        "duration": "46.0",
+        "duration": "50.0",
         "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
     },
     {
@@ -2000,7 +2008,7 @@
         "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
     },
     {
-        "duration": "50.0",
+        "duration": "46.0",
         "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
     },
     {
@@ -2056,43 +2064,43 @@
         "name": "memory.desktop/WebWorker"
     },
     {
-        "duration": "84.0",
+        "duration": "82.0",
         "name": "octane/Octane"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialAnimationPageSharedPageState"
     },
     {
-        "duration": "72.0",
+        "duration": "76.0",
         "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialCanvasPageSharedPageState"
     },
     {
-        "duration": "74.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialGifPageSharedPageState"
     },
     {
-        "duration": "76.0",
+        "duration": "82.0",
         "name": "power.desktop/TrivialScrollingPageSharedPageState"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/TrivialWebGLPageSharedPageState"
     },
     {
-        "duration": "84.0",
+        "duration": "96.0",
         "name": "power.desktop/abcnews"
     },
     {
@@ -2100,7 +2108,7 @@
         "name": "power.desktop/indiatimes"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/instagram"
     },
     {
@@ -2108,11 +2116,11 @@
         "name": "power.desktop/microsoft"
     },
     {
-        "duration": "74.0",
+        "duration": "80.0",
         "name": "power.desktop/sina"
     },
     {
-        "duration": "72.0",
+        "duration": "78.0",
         "name": "power.desktop/slideshare"
     },
     {
@@ -2124,11 +2132,11 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
     },
     {
-        "duration": "14.0",
+        "duration": "12.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
     },
     {
-        "duration": "14.0",
+        "duration": "12.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
     },
     {
@@ -2140,7 +2148,7 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
     },
     {
@@ -2148,39 +2156,39 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
     },
     {
-        "duration": "30.0",
+        "duration": "24.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
     },
     {
-        "duration": "16.0",
+        "duration": "14.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
     },
     {
-        "duration": "12.0",
+        "duration": "10.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
     },
     {
-        "duration": "18.0",
+        "duration": "14.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
     },
     {
-        "duration": "18.0",
+        "duration": "16.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
     },
     {
@@ -2188,7 +2196,7 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
     },
     {
-        "duration": "14.0",
+        "duration": "12.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
     },
     {
@@ -2196,7 +2204,7 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
     },
     {
-        "duration": "14.0",
+        "duration": "12.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
     },
     {
@@ -2204,19 +2212,19 @@
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
     },
     {
-        "duration": "34.0",
+        "duration": "26.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
     },
     {
-        "duration": "174.0",
+        "duration": "122.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
     },
     {
-        "duration": "138.0",
+        "duration": "98.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
     },
     {
-        "duration": "26.0",
+        "duration": "20.0",
         "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
     },
     {
@@ -2224,7 +2232,7 @@
         "name": "rendering.desktop/accu_weather_2018"
     },
     {
-        "duration": "40.0",
+        "duration": "42.0",
         "name": "rendering.desktop/accu_weather_pinch_2018"
     },
     {
@@ -2232,7 +2240,7 @@
         "name": "rendering.desktop/amazon_2018"
     },
     {
-        "duration": "28.0",
+        "duration": "30.0",
         "name": "rendering.desktop/amazon_pinch_2018"
     },
     {
@@ -2240,7 +2248,7 @@
         "name": "rendering.desktop/analog_clock_svg"
     },
     {
-        "duration": "38.0",
+        "duration": "40.0",
         "name": "rendering.desktop/animometer_webgl"
     },
     {
@@ -2260,7 +2268,7 @@
         "name": "rendering.desktop/aquarium_20k"
     },
     {
-        "duration": "38.0",
+        "duration": "40.0",
         "name": "rendering.desktop/background_color_animation"
     },
     {
@@ -2312,7 +2320,7 @@
         "name": "rendering.desktop/blogspot_pinch_2018"
     },
     {
-        "duration": "30.0",
+        "duration": "28.0",
         "name": "rendering.desktop/blur_rotating_background"
     },
     {
@@ -2324,11 +2332,11 @@
         "name": "rendering.desktop/booking_pinch_2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/bouncing_balls_15"
     },
     {
-        "duration": "36.0",
+        "duration": "38.0",
         "name": "rendering.desktop/bouncing_balls_shadow"
     },
     {
@@ -2344,7 +2352,7 @@
         "name": "rendering.desktop/bouncing_png_images"
     },
     {
-        "duration": "36.0",
+        "duration": "38.0",
         "name": "rendering.desktop/bouncing_svg_images"
     },
     {
@@ -2352,11 +2360,11 @@
         "name": "rendering.desktop/camera_to_webgl"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "rendering.desktop/canvas_05000_pixels_per_second"
     },
     {
-        "duration": "30.0",
+        "duration": "26.0",
         "name": "rendering.desktop/canvas_10000_pixels_per_second"
     },
     {
@@ -2364,7 +2372,7 @@
         "name": "rendering.desktop/canvas_20000_pixels_per_second"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/canvas_40000_pixels_per_second"
     },
     {
@@ -2392,7 +2400,7 @@
         "name": "rendering.desktop/canvas_font_cycler"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/canvas_lines"
     },
     {
@@ -2400,11 +2408,11 @@
         "name": "rendering.desktop/canvas_to_blob"
     },
     {
-        "duration": "24.0",
+        "duration": "28.0",
         "name": "rendering.desktop/cats_unscaled"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/cats_viewport_width"
     },
     {
@@ -2416,7 +2424,7 @@
         "name": "rendering.desktop/cc_scroll_text_only"
     },
     {
-        "duration": "40.0",
+        "duration": "42.0",
         "name": "rendering.desktop/chip_tune"
     },
     {
@@ -2440,23 +2448,23 @@
         "name": "rendering.desktop/css_animations_many_keyframes"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_animations_simultaneous_inline_style"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_animations_simultaneous_new_element"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_animations_simultaneous_style_element"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_animations_simultaneous_updating_class"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
     },
     {
@@ -2496,15 +2504,15 @@
         "name": "rendering.desktop/css_opacity_plus_n_layers_99"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_transitions_inline_style"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_transitions_new_element"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_transitions_staggered_inline_style"
     },
     {
@@ -2512,23 +2520,23 @@
         "name": "rendering.desktop/css_transitions_staggered_new_element"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_transitions_staggered_style_element"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "rendering.desktop/css_transitions_staggered_updating_class"
     },
     {
-        "duration": "34.0",
+        "duration": "38.0",
         "name": "rendering.desktop/css_transitions_style_element"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "rendering.desktop/css_transitions_triggered_inline_style"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "rendering.desktop/css_transitions_triggered_new_element"
     },
     {
@@ -2536,7 +2544,7 @@
         "name": "rendering.desktop/css_transitions_triggered_style_element"
     },
     {
-        "duration": "38.0",
+        "duration": "34.0",
         "name": "rendering.desktop/css_transitions_triggered_updating_class"
     },
     {
@@ -2588,7 +2596,7 @@
         "name": "rendering.desktop/earth"
     },
     {
-        "duration": "28.0",
+        "duration": "26.0",
         "name": "rendering.desktop/ebay_2018"
     },
     {
@@ -2624,7 +2632,7 @@
         "name": "rendering.desktop/fill_shapes"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "rendering.desktop/filter_terrain_svg"
     },
     {
@@ -2648,7 +2656,7 @@
         "name": "rendering.desktop/google_calendar_2018"
     },
     {
-        "duration": "28.0",
+        "duration": "26.0",
         "name": "rendering.desktop/google_calendar_pinch_2018"
     },
     {
@@ -2664,7 +2672,7 @@
         "name": "rendering.desktop/google_image_search_2018"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "rendering.desktop/google_plus_2018"
     },
     {
@@ -2672,7 +2680,7 @@
         "name": "rendering.desktop/google_search_pinch_2018"
     },
     {
-        "duration": "26.0",
+        "duration": "24.0",
         "name": "rendering.desktop/google_web_search_2018"
     },
     {
@@ -2688,7 +2696,7 @@
         "name": "rendering.desktop/ie_chalkboard"
     },
     {
-        "duration": "40.0",
+        "duration": "38.0",
         "name": "rendering.desktop/ie_pirate_mark"
     },
     {
@@ -2704,19 +2712,19 @@
         "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
     },
     {
-        "duration": "34.0",
+        "duration": "38.0",
         "name": "rendering.desktop/jarro_doverson"
     },
     {
-        "duration": "26.0",
+        "duration": "28.0",
         "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
     },
     {
-        "duration": "26.0",
+        "duration": "24.0",
         "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
     },
     {
-        "duration": "40.0",
+        "duration": "42.0",
         "name": "rendering.desktop/js_full_screen_invalidation"
     },
     {
@@ -2736,7 +2744,7 @@
         "name": "rendering.desktop/js_scroll_text_only"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "rendering.desktop/kevs_3d"
     },
     {
@@ -2744,7 +2752,7 @@
         "name": "rendering.desktop/keyframed_animations"
     },
     {
-        "duration": "38.0",
+        "duration": "32.0",
         "name": "rendering.desktop/large_texture_uploads"
     },
     {
@@ -2804,11 +2812,19 @@
         "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
     },
     {
+        "duration": "62.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
         "duration": "32.0",
         "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
     },
     {
-        "duration": "38.0",
+        "duration": "32.0",
         "name": "rendering.desktop/man_in_blue"
     },
     {
@@ -2816,7 +2832,7 @@
         "name": "rendering.desktop/many_images"
     },
     {
-        "duration": "40.0",
+        "duration": "36.0",
         "name": "rendering.desktop/many_planets_deep"
     },
     {
@@ -2868,7 +2884,7 @@
         "name": "rendering.desktop/microsoft_video_city"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "rendering.desktop/microsoft_worker_fountains"
     },
     {
@@ -2892,7 +2908,7 @@
         "name": "rendering.desktop/mix_blend_mode_animation_screen"
     },
     {
-        "duration": "34.0",
+        "duration": "38.0",
         "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
     },
     {
@@ -2916,11 +2932,11 @@
         "name": "rendering.desktop/off_screen_main_60fps_jank"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "rendering.desktop/overlay_background_color_css_transitions_page"
     },
     {
-        "duration": "36.0",
+        "duration": "38.0",
         "name": "rendering.desktop/particles"
     },
     {
@@ -2928,11 +2944,11 @@
         "name": "rendering.desktop/pinterest_2018"
     },
     {
-        "duration": "32.0",
+        "duration": "38.0",
         "name": "rendering.desktop/put_get_image_data"
     },
     {
-        "duration": "28.0",
+        "duration": "26.0",
         "name": "rendering.desktop/raf"
     },
     {
@@ -2956,11 +2972,11 @@
         "name": "rendering.desktop/repaint_cnn_2018"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "rendering.desktop/repaint_facebook_2018"
     },
     {
-        "duration": "28.0",
+        "duration": "24.0",
         "name": "rendering.desktop/repaint_google_search_2018"
     },
     {
@@ -2976,11 +2992,11 @@
         "name": "rendering.desktop/repaint_theverge_2018"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "rendering.desktop/repaint_twitter_2018"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "rendering.desktop/repaint_wikipedia_2018"
     },
     {
@@ -3032,11 +3048,11 @@
         "name": "rendering.desktop/stroke_shapes"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/sync_scroll_offset"
     },
     {
-        "duration": "42.0",
+        "duration": "30.0",
         "name": "rendering.desktop/techcrunch_2018"
     },
     {
@@ -3052,19 +3068,19 @@
         "name": "rendering.desktop/text_20000_pixels_per_second"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "rendering.desktop/text_40000_pixels_per_second"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "rendering.desktop/text_60000_pixels_per_second"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/text_75000_pixels_per_second"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/text_90000_pixels_per_second"
     },
     {
@@ -3112,7 +3128,7 @@
         "name": "rendering.desktop/text_hover_40000_pixels_per_second"
     },
     {
-        "duration": "20.0",
+        "duration": "22.0",
         "name": "rendering.desktop/text_hover_60000_pixels_per_second"
     },
     {
@@ -3124,19 +3140,35 @@
         "name": "rendering.desktop/text_hover_90000_pixels_per_second"
     },
     {
+        "duration": "38.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
         "duration": "26.0",
         "name": "rendering.desktop/touch_handler_scrolling"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/transform_transitions"
     },
     {
-        "duration": "32.0",
+        "duration": "36.0",
         "name": "rendering.desktop/transform_transitions_js_block"
     },
     {
-        "duration": "24.0",
+        "duration": "36.0",
         "name": "rendering.desktop/twitch_2018"
     },
     {
@@ -3152,35 +3184,35 @@
         "name": "rendering.desktop/twitter_pinch_2018"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_color"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_length_3d"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_length_complex"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_length_simple"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_path"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_shadow"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_transform_complex"
     },
     {
-        "duration": "38.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animation_value_type_transform_simple"
     },
     {
@@ -3200,7 +3232,7 @@
         "name": "rendering.desktop/web_animations_staggered_chaining"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
     },
     {
@@ -3208,7 +3240,7 @@
         "name": "rendering.desktop/web_animations_staggered_triggering_page"
     },
     {
-        "duration": "24.0",
+        "duration": "26.0",
         "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
     },
     {
@@ -3216,7 +3248,7 @@
         "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
     },
     {
-        "duration": "40.0",
+        "duration": "32.0",
         "name": "rendering.desktop/wikipedia_2018"
     },
     {
@@ -3232,11 +3264,11 @@
         "name": "rendering.desktop/yahoo_news_2018"
     },
     {
-        "duration": "36.0",
+        "duration": "26.0",
         "name": "rendering.desktop/yahoo_news_pinch_2018"
     },
     {
-        "duration": "28.0",
+        "duration": "30.0",
         "name": "rendering.desktop/yahoo_sports_2018"
     },
     {
@@ -3260,7 +3292,7 @@
         "name": "speedometer/http://browserbench.org/Speedometer/"
     },
     {
-        "duration": "154.0",
+        "duration": "156.0",
         "name": "speedometer2-future/Speedometer2"
     },
     {
@@ -3268,7 +3300,7 @@
         "name": "speedometer2/Speedometer2"
     },
     {
-        "duration": "76.0",
+        "duration": "78.0",
         "name": "system_health.common_desktop/browse:media:googleplaystore:2018"
     },
     {
@@ -3292,15 +3324,15 @@
         "name": "system_health.common_desktop/browse:media:youtubetv:2019"
     },
     {
-        "duration": "78.0",
+        "duration": "76.0",
         "name": "system_health.common_desktop/browse:news:cnn:2018"
     },
     {
-        "duration": "88.0",
+        "duration": "90.0",
         "name": "system_health.common_desktop/browse:news:flipboard:2018"
     },
     {
-        "duration": "8.0",
+        "duration": "10.0",
         "name": "system_health.common_desktop/browse:news:hackernews:2018"
     },
     {
@@ -3308,7 +3340,7 @@
         "name": "system_health.common_desktop/browse:news:nytimes:2018"
     },
     {
-        "duration": "88.0",
+        "duration": "90.0",
         "name": "system_health.common_desktop/browse:news:reddit:2018"
     },
     {
@@ -3320,7 +3352,7 @@
         "name": "system_health.common_desktop/browse:search:google_india:2018"
     },
     {
-        "duration": "132.0",
+        "duration": "134.0",
         "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
     },
     {
@@ -3328,15 +3360,15 @@
         "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
     },
     {
-        "duration": "86.0",
+        "duration": "96.0",
         "name": "system_health.common_desktop/browse:social:twitter:2018"
     },
     {
-        "duration": "122.0",
+        "duration": "124.0",
         "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
     },
     {
-        "duration": "114.0",
+        "duration": "116.0",
         "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
     },
     {
@@ -3344,7 +3376,11 @@
         "name": "system_health.common_desktop/browse:tools:docs_scrolling"
     },
     {
-        "duration": "8.0",
+        "duration": "130.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "10.0",
         "name": "system_health.common_desktop/browse:tools:maps:2019"
     },
     {
@@ -3364,19 +3400,19 @@
         "name": "system_health.common_desktop/load:chrome:blank"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:games:alphabetty:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:games:bubbles:2019"
     },
     {
-        "duration": "34.0",
+        "duration": "40.0",
         "name": "system_health.common_desktop/load:games:lazors"
     },
     {
-        "duration": "38.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:games:miniclip:2018"
     },
     {
@@ -3400,7 +3436,7 @@
         "name": "system_health.common_desktop/load:media:flickr:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:media:google_images:2018"
     },
     {
@@ -3408,7 +3444,7 @@
         "name": "system_health.common_desktop/load:media:imgur:2018"
     },
     {
-        "duration": "38.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:media:soundcloud:2018"
     },
     {
@@ -3416,11 +3452,11 @@
         "name": "system_health.common_desktop/load:media:youtube:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:news:bbc:2018"
     },
     {
-        "duration": "36.0",
+        "duration": "40.0",
         "name": "system_health.common_desktop/load:news:cnn:2018"
     },
     {
@@ -3432,15 +3468,15 @@
         "name": "system_health.common_desktop/load:news:hackernews:2018"
     },
     {
-        "duration": "40.0",
+        "duration": "38.0",
         "name": "system_health.common_desktop/load:news:nytimes:2018"
     },
     {
-        "duration": "36.0",
+        "duration": "34.0",
         "name": "system_health.common_desktop/load:news:qq:2018"
     },
     {
-        "duration": "38.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:news:reddit:2018"
     },
     {
@@ -3448,7 +3484,7 @@
         "name": "system_health.common_desktop/load:news:wikipedia:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:search:amazon:2018"
     },
     {
@@ -3464,7 +3500,7 @@
         "name": "system_health.common_desktop/load:search:flipkart:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:search:google:2018"
     },
     {
@@ -3472,7 +3508,7 @@
         "name": "system_health.common_desktop/load:search:taobao:2018"
     },
     {
-        "duration": "32.0",
+        "duration": "34.0",
         "name": "system_health.common_desktop/load:search:yahoo:2018"
     },
     {
@@ -3480,7 +3516,7 @@
         "name": "system_health.common_desktop/load:search:yandex:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load:social:instagram:2018"
     },
     {
@@ -3496,7 +3532,7 @@
         "name": "system_health.common_desktop/load:tools:chat:2020"
     },
     {
-        "duration": "40.0",
+        "duration": "42.0",
         "name": "system_health.common_desktop/load:tools:docs:2019"
     },
     {
@@ -3504,7 +3540,7 @@
         "name": "system_health.common_desktop/load:tools:drive:2019"
     },
     {
-        "duration": "58.0",
+        "duration": "60.0",
         "name": "system_health.common_desktop/load:tools:gmail:2019"
     },
     {
@@ -3516,7 +3552,7 @@
         "name": "system_health.common_desktop/load:tools:weather:2019"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
     },
     {
@@ -3524,7 +3560,7 @@
         "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
     },
     {
-        "duration": "256.0",
+        "duration": "248.0",
         "name": "system_health.common_desktop/long_running:tools:gmail-background"
     },
     {
@@ -3540,7 +3576,7 @@
         "name": "system_health.common_desktop/multitab:misc:typical24:2018"
     },
     {
-        "duration": "92.0",
+        "duration": "90.0",
         "name": "system_health.common_desktop/play:media:google_play_music"
     },
     {
@@ -3552,7 +3588,7 @@
         "name": "system_health.memory_desktop/browse:media:googleplaystore:2018"
     },
     {
-        "duration": "132.0",
+        "duration": "134.0",
         "name": "system_health.memory_desktop/browse:media:imgur"
     },
     {
@@ -3568,11 +3604,11 @@
         "name": "system_health.memory_desktop/browse:media:youtube:2019"
     },
     {
-        "duration": "124.0",
+        "duration": "122.0",
         "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
     },
     {
-        "duration": "72.0",
+        "duration": "70.0",
         "name": "system_health.memory_desktop/browse:news:cnn:2018"
     },
     {
@@ -3580,15 +3616,15 @@
         "name": "system_health.memory_desktop/browse:news:flipboard:2018"
     },
     {
-        "duration": "94.0",
+        "duration": "96.0",
         "name": "system_health.memory_desktop/browse:news:hackernews:2018"
     },
     {
-        "duration": "106.0",
+        "duration": "104.0",
         "name": "system_health.memory_desktop/browse:news:nytimes:2018"
     },
     {
-        "duration": "82.0",
+        "duration": "86.0",
         "name": "system_health.memory_desktop/browse:news:reddit:2018"
     },
     {
@@ -3600,19 +3636,19 @@
         "name": "system_health.memory_desktop/browse:search:google_india:2018"
     },
     {
-        "duration": "126.0",
+        "duration": "130.0",
         "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
     },
     {
-        "duration": "106.0",
+        "duration": "110.0",
         "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
     },
     {
-        "duration": "80.0",
+        "duration": "82.0",
         "name": "system_health.memory_desktop/browse:social:twitter:2018"
     },
     {
-        "duration": "116.0",
+        "duration": "118.0",
         "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
     },
     {
@@ -3620,15 +3656,19 @@
         "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
     },
     {
-        "duration": "70.0",
+        "duration": "72.0",
         "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
     },
     {
         "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "6.0",
         "name": "system_health.memory_desktop/browse:tools:maps:2019"
     },
     {
-        "duration": "56.0",
+        "duration": "58.0",
         "name": "system_health.memory_desktop/browse:tools:sheets:2019"
     },
     {
@@ -3664,11 +3704,11 @@
         "name": "system_health.memory_desktop/load:games:spychase:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "36.0",
         "name": "system_health.memory_desktop/load:media:9gag"
     },
     {
-        "duration": "32.0",
+        "duration": "30.0",
         "name": "system_health.memory_desktop/load:media:dailymotion:2019"
     },
     {
@@ -3688,7 +3728,7 @@
         "name": "system_health.memory_desktop/load:media:imgur:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "system_health.memory_desktop/load:media:soundcloud:2018"
     },
     {
@@ -3704,7 +3744,7 @@
         "name": "system_health.memory_desktop/load:news:cnn:2018"
     },
     {
-        "duration": "34.0",
+        "duration": "32.0",
         "name": "system_health.memory_desktop/load:news:flipboard"
     },
     {
@@ -3724,7 +3764,7 @@
         "name": "system_health.memory_desktop/load:news:reddit:2018"
     },
     {
-        "duration": "30.0",
+        "duration": "32.0",
         "name": "system_health.memory_desktop/load:news:wikipedia:2018"
     },
     {
@@ -3748,7 +3788,7 @@
         "name": "system_health.memory_desktop/load:search:google:2018"
     },
     {
-        "duration": "30.0",
+        "duration": "28.0",
         "name": "system_health.memory_desktop/load:search:taobao:2018"
     },
     {
@@ -3768,11 +3808,11 @@
         "name": "system_health.memory_desktop/load:social:pinterest:2019"
     },
     {
-        "duration": "30.0",
+        "duration": "28.0",
         "name": "system_health.memory_desktop/load:social:vk:2018"
     },
     {
-        "duration": "48.0",
+        "duration": "50.0",
         "name": "system_health.memory_desktop/load:tools:chat:2020"
     },
     {
@@ -3784,15 +3824,15 @@
         "name": "system_health.memory_desktop/load:tools:drive:2019"
     },
     {
-        "duration": "52.0",
+        "duration": "54.0",
         "name": "system_health.memory_desktop/load:tools:gmail:2019"
     },
     {
-        "duration": "30.0",
+        "duration": "28.0",
         "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
     },
     {
-        "duration": "32.0",
+        "duration": "28.0",
         "name": "system_health.memory_desktop/load:tools:weather:2019"
     },
     {
@@ -3800,7 +3840,7 @@
         "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
     },
     {
-        "duration": "32.0",
+        "duration": "30.0",
         "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
     },
     {
@@ -3824,7 +3864,7 @@
         "name": "system_health.memory_desktop/play:media:google_play_music"
     },
     {
-        "duration": "80.0",
+        "duration": "82.0",
         "name": "system_health.memory_desktop/play:media:soundcloud:2018"
     },
     {
@@ -3836,7 +3876,7 @@
         "name": "tracing.tracing_with_background_memory_infra/Facebook"
     },
     {
-        "duration": "22.0",
+        "duration": "20.0",
         "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
     },
     {
@@ -3844,7 +3884,7 @@
         "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
     },
     {
@@ -3868,11 +3908,11 @@
         "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
     },
     {
-        "duration": "90.0",
+        "duration": "88.0",
         "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2018"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "v8.browsing_desktop-future/browse:media:imgur"
     },
     {
@@ -3884,7 +3924,7 @@
         "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
     },
     {
@@ -3892,35 +3932,35 @@
         "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
     },
     {
-        "duration": "96.0",
+        "duration": "104.0",
         "name": "v8.browsing_desktop-future/browse:news:cnn:2018"
     },
     {
-        "duration": "102.0",
+        "duration": "110.0",
         "name": "v8.browsing_desktop-future/browse:news:flipboard:2018"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "v8.browsing_desktop-future/browse:news:hackernews:2018"
     },
     {
-        "duration": "126.0",
+        "duration": "124.0",
         "name": "v8.browsing_desktop-future/browse:news:nytimes:2018"
     },
     {
-        "duration": "102.0",
+        "duration": "100.0",
         "name": "v8.browsing_desktop-future/browse:news:reddit:2018"
     },
     {
-        "duration": "106.0",
+        "duration": "114.0",
         "name": "v8.browsing_desktop-future/browse:search:google:2018"
     },
     {
-        "duration": "78.0",
+        "duration": "86.0",
         "name": "v8.browsing_desktop-future/browse:search:google_india:2018"
     },
     {
-        "duration": "146.0",
+        "duration": "156.0",
         "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
     },
     {
@@ -3932,47 +3972,51 @@
         "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
     },
     {
-        "duration": "134.0",
+        "duration": "132.0",
         "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
     },
     {
-        "duration": "128.0",
+        "duration": "138.0",
         "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
     },
     {
-        "duration": "88.0",
+        "duration": "96.0",
         "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
     },
     {
-        "duration": "34.0",
-        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
-    },
-    {
-        "duration": "74.0",
-        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
-    },
-    {
-        "duration": "90.0",
-        "name": "v8.browsing_desktop/browse:media:googleplaystore:2018"
-    },
-    {
-        "duration": "20.0",
-        "name": "v8.browsing_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "188.0",
-        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
-    },
-    {
-        "duration": "128.0",
-        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+        "duration": "150.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
     },
     {
         "duration": "18.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "88.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "192.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "132.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "24.0",
         "name": "v8.browsing_desktop/browse:media:youtube:2019"
     },
     {
-        "duration": "140.0",
+        "duration": "146.0",
         "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
     },
     {
@@ -3984,55 +4028,59 @@
         "name": "v8.browsing_desktop/browse:news:flipboard:2018"
     },
     {
-        "duration": "20.0",
+        "duration": "18.0",
         "name": "v8.browsing_desktop/browse:news:hackernews:2018"
     },
     {
-        "duration": "128.0",
+        "duration": "130.0",
         "name": "v8.browsing_desktop/browse:news:nytimes:2018"
     },
     {
-        "duration": "102.0",
+        "duration": "106.0",
         "name": "v8.browsing_desktop/browse:news:reddit:2018"
     },
     {
-        "duration": "106.0",
+        "duration": "104.0",
         "name": "v8.browsing_desktop/browse:search:google:2018"
     },
     {
-        "duration": "78.0",
+        "duration": "76.0",
         "name": "v8.browsing_desktop/browse:search:google_india:2018"
     },
     {
-        "duration": "146.0",
+        "duration": "144.0",
         "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
     },
     {
-        "duration": "128.0",
+        "duration": "134.0",
         "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
     },
     {
-        "duration": "98.0",
+        "duration": "104.0",
         "name": "v8.browsing_desktop/browse:social:twitter:2018"
     },
     {
-        "duration": "132.0",
+        "duration": "140.0",
         "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
     },
     {
-        "duration": "128.0",
+        "duration": "126.0",
         "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
     },
     {
-        "duration": "88.0",
+        "duration": "86.0",
         "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
     },
     {
-        "duration": "20.0",
+        "duration": "140.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "18.0",
         "name": "v8.browsing_desktop/browse:tools:maps:2019"
     },
     {
-        "duration": "74.0",
+        "duration": "72.0",
         "name": "v8.browsing_desktop/browse:tools:sheets:2019"
     },
     {
@@ -4068,27 +4116,27 @@
         "name": "webrtc/pause_play_peerconnections"
     },
     {
+        "duration": "7.0",
+        "name": "views_perftests/_gtest_"
+    },
+    {
+        "duration": "16.0",
+        "name": "media_perftests/_gtest_"
+    },
+    {
         "duration": "60.0",
         "name": "net_perftests/_gtest_"
     },
     {
+        "duration": "270.0",
+        "name": "dawn_perf_tests/_gtest_"
+    },
+    {
         "duration": "67.0",
         "name": "performance_browser_tests/_gtest_"
     },
     {
         "duration": "270.0",
-        "name": "dawn_perf_tests/_gtest_"
-    },
-    {
-        "duration": "16.0",
-        "name": "media_perftests/_gtest_"
-    },
-    {
-        "duration": "270.0",
         "name": "base_perftests/_gtest_"
-    },
-    {
-        "duration": "7.0",
-        "name": "views_perftests/_gtest_"
     }
 ]
\ No newline at end of file
diff --git a/tools/perf/measurements/rasterize_and_record_micro.py b/tools/perf/measurements/rasterize_and_record_micro.py
index 2e6cbfaa..2f19a6a 100644
--- a/tools/perf/measurements/rasterize_and_record_micro.py
+++ b/tools/perf/measurements/rasterize_and_record_micro.py
@@ -94,23 +94,11 @@
                            record_time_partial_invalidation)
 
     if self._report_detailed_results:
-      pixels_rasterized_with_non_solid_color = \
-          data['pixels_rasterized_with_non_solid_color']
-      pixels_rasterized_as_opaque = data['pixels_rasterized_as_opaque']
-      total_layers = data['total_layers']
-      total_picture_layers = data['total_picture_layers']
-      total_picture_layers_with_no_content = \
-          data['total_picture_layers_with_no_content']
-      total_picture_layers_off_screen = data['total_picture_layers_off_screen']
-
-      results.AddMeasurement('pixels_rasterized_with_non_solid_color',
-                             'count', pixels_rasterized_with_non_solid_color)
-      results.AddMeasurement('pixels_rasterized_as_opaque', 'count',
-                             pixels_rasterized_as_opaque)
-      results.AddMeasurement('total_layers', 'count', total_layers)
-      results.AddMeasurement('total_picture_layers', 'count',
-                             total_picture_layers)
-      results.AddMeasurement('total_picture_layers_with_no_content', 'count',
-                             total_picture_layers_with_no_content)
-      results.AddMeasurement('total_picture_layers_off_screen', 'count',
-                             total_picture_layers_off_screen)
+      for metric in ('pixels_rasterized_with_non_solid_color',
+                     'pixels_rasterized_as_opaque',
+                     'visible_pixels_for_lcd_text',
+                     'visible_pixels_for_non_lcd_text', 'total_layers',
+                     'total_picture_layers',
+                     'total_picture_layers_with_no_content',
+                     'total_picture_layers_off_screen'):
+        results.AddMeasurement(metric, 'count', data[metric])
diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc
index d7b79feb..291bdee 100644
--- a/ui/base/accelerators/accelerator.cc
+++ b/ui/base/accelerators/accelerator.cc
@@ -26,10 +26,55 @@
 #include "ui/events/keycodes/keyboard_code_conversion.h"
 #endif
 
+#if defined(OS_CHROMEOS)
+#include "ui/base/ui_base_features.h"
+#endif
+
 namespace ui {
 
 namespace {
 
+#if defined(OS_CHROMEOS)
+template <DomKey::Base T>
+using DomKeyConst = typename ui::DomKey::Constant<T>;
+
+// ChromeOS has several shortcuts that uses ASCII punctuation key as a main key
+// to triger them (e.g. ctrl+shift+alt+/). However, many of these keys have
+// different VKEY on different keyboard layouts, (some require shift or altgr
+// to type in), so using these keys combined with shift may not work well on
+// non-US layouts.  Instead of using VKEY, the new mapping uses DomKey as a key
+// to trigger and maps to VKEY+modifier that would have generated the same key
+// on US-keyboard.  See crbug.com/1067269 for more details.
+struct {
+  KeyboardCode vkey;
+  const DomKey::Base dom_key;
+  const DomKey::Base shifted_dom_key;
+} kAccelConversionMap[] = {
+    {VKEY_1, DomKeyConst<'1'>::Character, DomKeyConst<'!'>::Character},
+    {VKEY_2, DomKeyConst<'2'>::Character, DomKeyConst<'@'>::Character},
+    {VKEY_3, DomKeyConst<'3'>::Character, DomKeyConst<'#'>::Character},
+    {VKEY_4, DomKeyConst<'4'>::Character, DomKeyConst<'$'>::Character},
+    {VKEY_5, DomKeyConst<'5'>::Character, DomKeyConst<'%'>::Character},
+    {VKEY_6, DomKeyConst<'6'>::Character, DomKeyConst<'&'>::Character},
+    {VKEY_7, DomKeyConst<'7'>::Character, DomKeyConst<'^'>::Character},
+    {VKEY_8, DomKeyConst<'8'>::Character, DomKeyConst<'*'>::Character},
+    {VKEY_9, DomKeyConst<'9'>::Character, DomKeyConst<'('>::Character},
+    {VKEY_0, DomKeyConst<'0'>::Character, DomKeyConst<')'>::Character},
+    {VKEY_OEM_MINUS, DomKeyConst<'-'>::Character, DomKeyConst<'_'>::Character},
+    {VKEY_OEM_PLUS, DomKeyConst<'='>::Character, DomKeyConst<'+'>::Character},
+    {VKEY_OEM_4, DomKeyConst<'['>::Character, DomKeyConst<'{'>::Character},
+    {VKEY_OEM_6, DomKeyConst<']'>::Character, DomKeyConst<'}'>::Character},
+    {VKEY_OEM_5, DomKeyConst<'\\'>::Character, DomKeyConst<'|'>::Character},
+    {VKEY_OEM_1, DomKeyConst<';'>::Character, DomKeyConst<':'>::Character},
+    {VKEY_OEM_7, DomKeyConst<'\''>::Character, DomKeyConst<'\"'>::Character},
+    {VKEY_OEM_3, DomKeyConst<'`'>::Character, DomKeyConst<'~'>::Character},
+    {VKEY_OEM_COMMA, DomKeyConst<','>::Character, DomKeyConst<'<'>::Character},
+    {VKEY_OEM_PERIOD, DomKeyConst<'.'>::Character, DomKeyConst<'>'>::Character},
+    {VKEY_OEM_2, DomKeyConst<'/'>::Character, DomKeyConst<'?'>::Character},
+};
+
+#endif
+
 const int kModifierMask = EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_ALT_DOWN |
                           EF_COMMAND_DOWN | EF_ALTGR_DOWN;
 
@@ -66,7 +111,28 @@
       modifiers_(key_event.flags() & kInterestingFlagsMask),
       time_stamp_(key_event.time_stamp()),
       interrupted_by_mouse_event_(false),
-      source_device_id_(key_event.source_device_id()) {}
+      source_device_id_(key_event.source_device_id()) {
+#if defined(OS_CHROMEOS)
+  if (features::IsNewShortcutMappingEnabled()) {
+    DomKey dom_key = key_event.GetDomKey();
+    if (!dom_key.IsCharacter())
+      return;
+    for (auto entry : kAccelConversionMap) {
+      // ALTGR is always canceled because it's not required on US Keyboard.
+      if (entry.dom_key == dom_key) {
+        // No shift punctuation key on US keyboard.
+        key_code_ = entry.vkey;
+        modifiers_ &= ~(ui::EF_SHIFT_DOWN | ui::EF_ALTGR_DOWN);
+      }
+      if (entry.shifted_dom_key == dom_key) {
+        // Punctuation key with shift on US keyboard.
+        key_code_ = entry.vkey;
+        modifiers_ = (modifiers_ | ui::EF_SHIFT_DOWN) & ~ui::EF_ALTGR_DOWN;
+      }
+    }
+  }
+#endif
+}
 
 Accelerator::Accelerator(const Accelerator& accelerator) {
   key_code_ = accelerator.key_code_;
diff --git a/ui/base/accelerators/accelerator.h b/ui/base/accelerators/accelerator.h
index 0949568d1..d4b97e5b 100644
--- a/ui/base/accelerators/accelerator.h
+++ b/ui/base/accelerators/accelerator.h
@@ -42,8 +42,6 @@
   // for example:
   //     Accelerator(ui::VKEY_Z, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)
   // would correspond to the shortcut "ctrl + shift + z".
-  //
-  // NOTE: this constructor strips out non key related flags.
   Accelerator(KeyboardCode key_code,
               int modifiers,
               KeyState key_state = KeyState::PRESSED,
diff --git a/ui/base/accelerators/accelerator_manager_unittest.cc b/ui/base/accelerators/accelerator_manager_unittest.cc
index 76681ea1..eae146af 100644
--- a/ui/base/accelerators/accelerator_manager_unittest.cc
+++ b/ui/base/accelerators/accelerator_manager_unittest.cc
@@ -5,9 +5,13 @@
 #include "ui/base/accelerators/accelerator_manager.h"
 
 #include "base/stl_util.h"
+#include "base/test/scoped_feature_list.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/accelerators/test_accelerator_target.h"
+#include "ui/base/ui_base_features.h"
+#include "ui/events/event.h"
 #include "ui/events/event_constants.h"
+#include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 
 namespace ui {
@@ -162,6 +166,43 @@
   }
 }
 
+#if defined(OS_CHROMEOS)
+TEST_F(AcceleratorManagerTest, NewMapping) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(features::kNewShortcutMapping);
+
+  // Test new mapping with a ASCII punctuation shortcut that doesn't involve
+  // shift.
+  TestAcceleratorTarget target;
+  {
+    // ']' + ctrl
+    const Accelerator accelerator(VKEY_OEM_6, EF_CONTROL_DOWN);
+    manager_.Register({accelerator}, AcceleratorManager::kNormalPriority,
+                      &target);
+    KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_1, ui::DomCode::NONE,
+                   ui::EF_CONTROL_DOWN, ui::DomKey::Constant<']'>::Character,
+                   base::TimeTicks());
+    const Accelerator trigger(event);
+    EXPECT_TRUE(manager_.IsRegistered(trigger));
+    EXPECT_TRUE(manager_.Process(trigger));
+  }
+
+  // Test new mapping with a ASCII punctuation shortcut that involves shift.
+  {
+    // ']' + ctrl + shift, which produces '}' on US layout.
+    const Accelerator accelerator(VKEY_OEM_6, EF_CONTROL_DOWN | EF_SHIFT_DOWN);
+    manager_.Register({accelerator}, AcceleratorManager::kNormalPriority,
+                      &target);
+    KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_1, ui::DomCode::NONE,
+                   ui::EF_CONTROL_DOWN, ui::DomKey::Constant<'}'>::Character,
+                   base::TimeTicks());
+    const Accelerator trigger(event);
+    EXPECT_TRUE(manager_.IsRegistered(trigger));
+    EXPECT_TRUE(manager_.Process(trigger));
+  }
+}
+#endif
+
 }  // namespace
 }  // namespace test
 }  // namespace ui
diff --git a/ui/base/l10n/l10n_util.cc b/ui/base/l10n/l10n_util.cc
index 70cae720..f21fee3 100644
--- a/ui/base/l10n/l10n_util.cc
+++ b/ui/base/l10n/l10n_util.cc
@@ -888,6 +888,12 @@
   }
 }
 
+void GetAcceptLanguages(std::vector<std::string>* locale_codes) {
+  for (const char* accept_language : kAcceptLanguageList) {
+    locale_codes->push_back(accept_language);
+  }
+}
+
 bool IsLanguageAccepted(const std::string& display_locale,
                         const std::string& locale) {
   for (const char* accept_language : kAcceptLanguageList) {
diff --git a/ui/base/l10n/l10n_util.h b/ui/base/l10n/l10n_util.h
index a371dc42..21de1482 100644
--- a/ui/base/l10n/l10n_util.h
+++ b/ui/base/l10n/l10n_util.h
@@ -212,6 +212,9 @@
     const std::string& display_locale,
     std::vector<std::string>* locale_codes);
 
+// Returns a vector of untranslated locale codes usable for accept-languages.
+UI_BASE_EXPORT void GetAcceptLanguages(std::vector<std::string>* locale_codes);
+
 // Returns true if |locale| is in a predefined AcceptLanguageList and
 // a display name for the |locale| is available in the locale |display_locale|.
 UI_BASE_EXPORT bool IsLanguageAccepted(const std::string& display_locale,
diff --git a/ui/base/test/ui_controls_internal_win.cc b/ui/base/test/ui_controls_internal_win.cc
index 92b69ebd..60a2cae 100644
--- a/ui/base/test/ui_controls_internal_win.cc
+++ b/ui/base/test/ui_controls_internal_win.cc
@@ -255,37 +255,14 @@
 LRESULT CALLBACK InputDispatcher::KeyHook(int n_code,
                                           WPARAM w_param,
                                           LPARAM l_param) {
-  HHOOK next_hook = next_hook_;
-  if (n_code == HC_ACTION) {
+  if ((n_code == HC_ACTION) && (HIWORD(l_param) & KF_UP)) {
     DCHECK(current_dispatcher_);
-    // Only send when the key is transitioning from pressed to released. Note
-    // that the documentation for the bit state on KeyboardProc [1] can lead to
-    // confusion. The relevant information is that the transition state (bit 31
-    // -- zero-based) is always 1 for WM_KEYUP.
-    // [1]
-    // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984.aspx
-    //
-    // While this documentation states that the previous key state (bit 30) is
-    // always 1 on WM_KEYUP it has been observed to be 0 when the preceding
-    // WM_KEYDOWN is intercepted (e.g., by an extension hooking a keyboard
-    // shortcut).
-    //
-    // And to add to the confusion about bit 30, the documentation for WM_KEYUP
-    // [2] and for general keyboard input [3] contradict each other, one saying
-    // it's always set to 1, the other saying it's always set to 0 on
-    // WM_KEYUP...
-    // [2] https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-keyup
-    // [3]
-    // https://docs.microsoft.com/en-us/windows/desktop/inputdev/about-keyboard-input#keystroke-message-flags
-    if (l_param & (1 << 31)) {
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE,
-          base::BindOnce(&InputDispatcher::MatchingMessageProcessed,
-                         current_dispatcher_->weak_factory_.GetWeakPtr(),
-                         false));
-    }
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::BindOnce(&InputDispatcher::MatchingMessageProcessed,
+                       current_dispatcher_->weak_factory_.GetWeakPtr(), false));
   }
-  return CallNextHookEx(next_hook, n_code, w_param, l_param);
+  return CallNextHookEx(next_hook_, n_code, w_param, l_param);
 }
 
 void InputDispatcher::DispatchedMessage(
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc
index 3e85fd52..f81a6d8 100644
--- a/ui/base/ui_base_features.cc
+++ b/ui/base/ui_base_features.cc
@@ -25,6 +25,15 @@
 // https://crbug.com/895886.
 const base::Feature kSettingsShowsPerKeyboardSettings = {
     "InputMethodIntegratedSettings", base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Experimental shortcut handling and mapping to address i18n issues.
+// https://crbug.com/1067269
+const base::Feature kNewShortcutMapping = {"NewShortcutMapping",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
+
+bool IsNewShortcutMappingEnabled() {
+  return base::FeatureList::IsEnabled(kNewShortcutMapping);
+}
 #endif  // defined(OS_CHROMEOS)
 
 // Update of the virtual keyboard settings UI as described in
diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h
index 5ac7a04d..d1c07ab 100644
--- a/ui/base/ui_base_features.h
+++ b/ui/base/ui_base_features.h
@@ -92,6 +92,12 @@
 #if defined(OS_CHROMEOS)
 COMPONENT_EXPORT(UI_BASE_FEATURES)
 extern const base::Feature kHandwritingGesture;
+
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+extern const base::Feature kNewShortcutMapping;
+
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+bool IsNewShortcutMappingEnabled();
 #endif
 
 COMPONENT_EXPORT(UI_BASE_FEATURES)
diff --git a/ui/chromeos/events/BUILD.gn b/ui/chromeos/events/BUILD.gn
index 6378fd3..34fad25 100644
--- a/ui/chromeos/events/BUILD.gn
+++ b/ui/chromeos/events/BUILD.gn
@@ -22,6 +22,7 @@
     "//base",
     "//chromeos/constants",
     "//device/udev_linux",
+    "//ui/base:features",
     "//ui/base/ime/chromeos",
     "//ui/events",
     "//ui/events:dom_keycode_converter",
diff --git a/ui/chromeos/events/event_rewriter_chromeos.cc b/ui/chromeos/events/event_rewriter_chromeos.cc
index 8ef9d68..378585c 100644
--- a/ui/chromeos/events/event_rewriter_chromeos.cc
+++ b/ui/chromeos/events/event_rewriter_chromeos.cc
@@ -24,6 +24,7 @@
 #include "device/udev_linux/scoped_udev.h"
 #include "ui/base/ime/chromeos/ime_keyboard.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/chromeos/events/modifier_key.h"
 #include "ui/chromeos/events/pref_names.h"
 #include "ui/events/devices/device_data_manager.h"
@@ -199,12 +200,18 @@
   EventRewriterChromeOS::MutableKeyState result;
 };
 
+// If |strict| is true, the flags must match exactly the same. In other words,
+// the event will be rewritten only if the exactly specified modifier is
+// pressed.  If false, it can match even if other modifiers are pressed.
 bool MatchKeyboardRemapping(
     const EventRewriterChromeOS::MutableKeyState& suspect,
-    const KeyboardRemapping::Condition& test) {
+    const KeyboardRemapping::Condition& test,
+    bool strict = false) {
+  bool flag_matched = strict ? suspect.flags == test.flags
+                             : ((suspect.flags & test.flags) == test.flags);
   return ((test.key_code == ui::VKEY_UNKNOWN) ||
           (test.key_code == suspect.key_code)) &&
-         ((suspect.flags & test.flags) == test.flags);
+         flag_matched;
 }
 
 void ApplyRemapping(const EventRewriterChromeOS::MutableKeyState& changes,
@@ -221,14 +228,16 @@
 // Given a set of KeyboardRemapping structs, finds a matching struct
 // if possible, and updates the remapped event values. Returns true if a
 // remapping was found and remapped values were updated.
+// See MatchKeyboardRemapping() for |strict|.
 bool RewriteWithKeyboardRemappings(
     const KeyboardRemapping* mappings,
     size_t num_mappings,
     const EventRewriterChromeOS::MutableKeyState& input_state,
-    EventRewriterChromeOS::MutableKeyState* remapped_state) {
+    EventRewriterChromeOS::MutableKeyState* remapped_state,
+    bool strict = false) {
   for (size_t i = 0; i < num_mappings; ++i) {
     const KeyboardRemapping& map = mappings[i];
-    if (MatchKeyboardRemapping(input_state, map.condition)) {
+    if (MatchKeyboardRemapping(input_state, map.condition, strict)) {
       remapped_state->flags = (input_state.flags & ~map.condition.flags);
       ApplyRemapping(map.result, remapped_state);
       return true;
@@ -1113,6 +1122,28 @@
   }
 
   if (incoming.flags & ui::EF_COMMAND_DOWN) {
+    bool strict = ::features::IsNewShortcutMappingEnabled();
+    bool skip_search_key_remapping =
+        delegate_ && delegate_->IsSearchKeyAcceleratorReserved();
+    if (strict) {
+      // These two keys are used to select to Home/End.
+      static const KeyboardRemapping kNewSearchRemappings[] = {
+          {// Search+Shift+Left -> as is
+           {ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, ui::VKEY_LEFT},
+           {ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, ui::DomCode::ARROW_LEFT,
+            ui::DomKey::ARROW_LEFT, ui::VKEY_LEFT}},
+          {// Search+Shift+Right -> as is
+           {ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, ui::VKEY_RIGHT},
+           {ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, ui::DomCode::ARROW_RIGHT,
+            ui::DomKey::ARROW_RIGHT, ui::VKEY_RIGHT}},
+      };
+      if (!skip_search_key_remapping &&
+          RewriteWithKeyboardRemappings(kNewSearchRemappings,
+                                        base::size(kNewSearchRemappings),
+                                        incoming, state, /*strict=*/true)) {
+        return;
+      }
+    }
     static const KeyboardRemapping kSearchRemappings[] = {
         {// Search+BackSpace -> Delete
          {ui::EF_COMMAND_DOWN, ui::VKEY_BACK},
@@ -1135,12 +1166,10 @@
          {ui::EF_COMMAND_DOWN, ui::VKEY_OEM_PERIOD},
          {ui::EF_NONE, ui::DomCode::INSERT, ui::DomKey::INSERT,
           ui::VKEY_INSERT}}};
-    bool skip_search_key_remapping =
-        delegate_ && delegate_->IsSearchKeyAcceleratorReserved();
     if (!skip_search_key_remapping &&
         RewriteWithKeyboardRemappings(kSearchRemappings,
                                       base::size(kSearchRemappings), incoming,
-                                      state)) {
+                                      state, strict)) {
       return;
     }
   }
@@ -1326,42 +1355,63 @@
   }
 
   if (state->flags & ui::EF_COMMAND_DOWN) {
-    // Remap Search+<number> to F<number>.
-    // We check the DOM3 |code| here instead of the VKEY, as these keys may
-    // have different |KeyboardCode|s when modifiers are pressed, such as shift.
-    static const struct {
+    const bool strict = ::features::IsNewShortcutMappingEnabled();
+    struct SearchToFunctionMap {
       ui::DomCode input_dom_code;
       MutableKeyState result;
-    } kNumberKeysToFkeys[] = {
-        {ui::DomCode::DIGIT1,
-         {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}},
-        {ui::DomCode::DIGIT2,
-         {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, ui::VKEY_F2}},
-        {ui::DomCode::DIGIT3,
-         {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, ui::VKEY_F3}},
-        {ui::DomCode::DIGIT4,
-         {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, ui::VKEY_F4}},
-        {ui::DomCode::DIGIT5,
-         {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, ui::VKEY_F5}},
-        {ui::DomCode::DIGIT6,
-         {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, ui::VKEY_F6}},
-        {ui::DomCode::DIGIT7,
-         {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, ui::VKEY_F7}},
-        {ui::DomCode::DIGIT8,
-         {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, ui::VKEY_F8}},
-        {ui::DomCode::DIGIT9,
-         {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, ui::VKEY_F9}},
-        {ui::DomCode::DIGIT0,
-         {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, ui::VKEY_F10}},
-        {ui::DomCode::MINUS,
-         {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, ui::VKEY_F11}},
-        {ui::DomCode::EQUAL,
-         {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, ui::VKEY_F12}}};
-    for (const auto& map : kNumberKeysToFkeys) {
-      if (state->code == map.input_dom_code) {
-        state->flags &= ~ui::EF_COMMAND_DOWN;
-        ApplyRemapping(map.result, state);
-        return;
+    };
+
+    // We check the DOM3 |code| here instead of the VKEY, as these keys may
+    // have different |KeyboardCode|s when modifiers are pressed, such as
+    // shift.
+    if (strict) {
+      // Remap Search + 1/2 to F11/12.
+      static const SearchToFunctionMap kNumberKeysToFkeys[] = {
+          {ui::DomCode::DIGIT1,
+           {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F12, ui::VKEY_F11}},
+          {ui::DomCode::DIGIT2,
+           {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, ui::VKEY_F12}},
+      };
+      for (const auto& map : kNumberKeysToFkeys) {
+        if (state->code == map.input_dom_code) {
+          state->flags &= ~ui::EF_COMMAND_DOWN;
+          ApplyRemapping(map.result, state);
+          return;
+        }
+      }
+    } else {
+      // Remap Search + top row to F1~F12.
+      static const SearchToFunctionMap kNumberKeysToFkeys[] = {
+          {ui::DomCode::DIGIT1,
+           {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}},
+          {ui::DomCode::DIGIT2,
+           {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, ui::VKEY_F2}},
+          {ui::DomCode::DIGIT3,
+           {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, ui::VKEY_F3}},
+          {ui::DomCode::DIGIT4,
+           {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, ui::VKEY_F4}},
+          {ui::DomCode::DIGIT5,
+           {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, ui::VKEY_F5}},
+          {ui::DomCode::DIGIT6,
+           {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, ui::VKEY_F6}},
+          {ui::DomCode::DIGIT7,
+           {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, ui::VKEY_F7}},
+          {ui::DomCode::DIGIT8,
+           {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, ui::VKEY_F8}},
+          {ui::DomCode::DIGIT9,
+           {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, ui::VKEY_F9}},
+          {ui::DomCode::DIGIT0,
+           {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, ui::VKEY_F10}},
+          {ui::DomCode::MINUS,
+           {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, ui::VKEY_F11}},
+          {ui::DomCode::EQUAL,
+           {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, ui::VKEY_F12}}};
+      for (const auto& map : kNumberKeysToFkeys) {
+        if (state->code == map.input_dom_code) {
+          state->flags &= ~ui::EF_COMMAND_DOWN;
+          ApplyRemapping(map.result, state);
+          return;
+        }
       }
     }
   }
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 4a89279..2206f2a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -134,7 +134,7 @@
 <translation id="2542049655219295786">Google टेबल</translation>
 <translation id="2547921442987553570"><ph name="EXTENSION_NAME" /> में जोड़ें</translation>
 <translation id="255937426064304553">यूएस अंतर्राष्ट्रीय</translation>
-<translation id="2562685439590298522"> दस्तावेज़</translation>
+<translation id="2562685439590298522">Docs</translation>
 <translation id="2563185590376525700">मेढक</translation>
 <translation id="2614589611416690597"><ph name="VIDEO_TYPE" /> वीडियो</translation>
 <translation id="2620090360073999360">इस समय Google डिस्क तक नहीं पहुंचा जा सकता.</translation>
diff --git a/ui/content_accelerators/accelerator_util.cc b/ui/content_accelerators/accelerator_util.cc
index de1d68f..4417e581 100644
--- a/ui/content_accelerators/accelerator_util.cc
+++ b/ui/content_accelerators/accelerator_util.cc
@@ -6,6 +6,7 @@
 
 #include "build/build_config.h"
 #include "third_party/blink/public/common/input/web_input_event.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/events/blink/blink_event_util.h"
 #include "ui/events/event.h"
 #include "ui/events/event_constants.h"
@@ -14,13 +15,23 @@
 
 ui::Accelerator GetAcceleratorFromNativeWebKeyboardEvent(
     const content::NativeWebKeyboardEvent& event) {
+#if defined(OS_CHROMEOS)
+  if (::features::IsNewShortcutMappingEnabled()) {
+    // TODO: This must be the same as below and it's simpler.
+    // Cleanup if this change sticks.
+    auto* os_event = static_cast<ui::KeyEvent*>(event.os_event);
+    return ui::Accelerator(*os_event);
+  }
+#endif
   Accelerator::KeyState key_state =
       event.GetType() == blink::WebInputEvent::kKeyUp
           ? Accelerator::KeyState::RELEASED
           : Accelerator::KeyState::PRESSED;
-  return ui::Accelerator(static_cast<ui::KeyboardCode>(event.windows_key_code),
-                         WebEventModifiersToEventFlags(event.GetModifiers()),
-                         key_state, event.TimeStamp());
+  ui::KeyboardCode keyboard_code =
+      static_cast<ui::KeyboardCode>(event.windows_key_code);
+  int modifiers = WebEventModifiersToEventFlags(event.GetModifiers());
+  return ui::Accelerator(keyboard_code, modifiers, key_state,
+                         event.TimeStamp());
 }
 
 }  // namespace ui
diff --git a/ui/gfx/paint_vector_icon.cc b/ui/gfx/paint_vector_icon.cc
index cb7497b7..01c19741 100644
--- a/ui/gfx/paint_vector_icon.cc
+++ b/ui/gfx/paint_vector_icon.cc
@@ -116,6 +116,8 @@
       case R_MOVE_TO:
       case LINE_TO:
       case R_LINE_TO:
+      case QUADRATIC_TO_SHORTHAND:
+      case R_QUADRATIC_TO_SHORTHAND:
         return 2;
 
       case CIRCLE:
@@ -124,6 +126,9 @@
       case PATH_COLOR_ARGB:
       case CUBIC_TO_SHORTHAND:
       case CLIP:
+      case QUADRATIC_TO:
+      case R_QUADRATIC_TO:
+      case OVAL:
         return 4;
 
       case ROUND_RECT:
@@ -182,7 +187,12 @@
   RETURN_IF_IS(CUBIC_TO);
   RETURN_IF_IS(R_CUBIC_TO);
   RETURN_IF_IS(CUBIC_TO_SHORTHAND);
+  RETURN_IF_IS(QUADRATIC_TO);
+  RETURN_IF_IS(R_QUADRATIC_TO);
+  RETURN_IF_IS(QUADRATIC_TO_SHORTHAND);
+  RETURN_IF_IS(R_QUADRATIC_TO_SHORTHAND);
   RETURN_IF_IS(CIRCLE);
+  RETURN_IF_IS(OVAL);
   RETURN_IF_IS(ROUND_RECT);
   RETURN_IF_IS(CLOSE);
   RETURN_IF_IS(CANVAS_DIMENSIONS);
@@ -212,6 +222,13 @@
   return path;
 }
 
+bool IsCommandTypeCurve(CommandType command) {
+  return command == CUBIC_TO || command == R_CUBIC_TO ||
+         command == CUBIC_TO_SHORTHAND || command == QUADRATIC_TO ||
+         command == R_QUADRATIC_TO || command == QUADRATIC_TO_SHORTHAND ||
+         command == R_QUADRATIC_TO_SHORTHAND;
+}
+
 void PaintPath(Canvas* canvas,
                const PathElement* path_elements,
                size_t path_size,
@@ -348,28 +365,55 @@
         path.rCubicTo(arg(0), arg(1), arg(2), arg(3), arg(4), arg(5));
         break;
 
-      case CUBIC_TO_SHORTHAND: {
-        // Compute the first control point (|x1| and |y1|) as the reflection
-        // of the second control point on the previous command relative to
-        // the current point. If there is no previous command or if the
-        // previous command is not a cubic Bezier curve, the first control
-        // point is coincident with the current point. Refer to the SVG
-        // path specs for further details.
+      case CUBIC_TO_SHORTHAND:
+      case QUADRATIC_TO_SHORTHAND:
+      case R_QUADRATIC_TO_SHORTHAND: {
+        // Compute the first control point (|x1| and |y1|) as the reflection of
+        // the last control point on the previous command relative to the
+        // current point. If there is no previous command or if the previous
+        // command is not a Bezier curve, the first control point is coincident
+        // with the current point. Refer to the SVG path specs for further
+        // details.
+        // Note that |x1| and |y1| will correspond to the sole control point if
+        // calculating a quadratic curve.
         SkPoint last_point;
         path.getLastPt(&last_point);
         SkScalar delta_x = 0;
         SkScalar delta_y = 0;
-        if (previous_command_type == CUBIC_TO ||
-            previous_command_type == R_CUBIC_TO ||
-            previous_command_type == CUBIC_TO_SHORTHAND) {
+        if (IsCommandTypeCurve(previous_command_type)) {
           SkPoint last_control_point = path.getPoint(path.countPoints() - 2);
+          // We find what the delta was between the last curve's starting point
+          // and the control point. This difference is what we will reflect on
+          // the current point, creating our new control point.
           delta_x = last_point.fX - last_control_point.fX;
           delta_y = last_point.fY - last_control_point.fY;
         }
 
         SkScalar x1 = last_point.fX + delta_x;
         SkScalar y1 = last_point.fY + delta_y;
-        path.cubicTo(x1, y1, arg(0), arg(1), arg(2), arg(3));
+        if (command_type == CUBIC_TO_SHORTHAND)
+          path.cubicTo(x1, y1, arg(0), arg(1), arg(2), arg(3));
+        else if (command_type == QUADRATIC_TO_SHORTHAND)
+          path.quadTo(x1, y1, arg(0), arg(1));
+        else if (command_type == R_QUADRATIC_TO_SHORTHAND)
+          path.rQuadTo(x1, y1, arg(0), arg(1));
+        break;
+      }
+
+      case QUADRATIC_TO:
+        path.quadTo(arg(0), arg(1), arg(2), arg(3));
+        break;
+
+      case R_QUADRATIC_TO:
+        path.rQuadTo(arg(0), arg(1), arg(2), arg(3));
+        break;
+
+      case OVAL: {
+        SkScalar x = arg(0);
+        SkScalar y = arg(1);
+        SkScalar rx = arg(2);
+        SkScalar ry = arg(3);
+        path.addOval(SkRect::MakeLTRB(x - rx, y - ry, x + rx, y + ry));
         break;
       }
 
diff --git a/ui/gfx/vector_icon_types.h b/ui/gfx/vector_icon_types.h
index 39ac664..6dc9842 100644
--- a/ui/gfx/vector_icon_types.h
+++ b/ui/gfx/vector_icon_types.h
@@ -46,7 +46,12 @@
   DECLARE_VECTOR_COMMAND(CUBIC_TO)                                             \
   DECLARE_VECTOR_COMMAND(R_CUBIC_TO)                                           \
   DECLARE_VECTOR_COMMAND(CUBIC_TO_SHORTHAND)                                   \
+  DECLARE_VECTOR_COMMAND(QUADRATIC_TO)                                         \
+  DECLARE_VECTOR_COMMAND(R_QUADRATIC_TO)                                       \
+  DECLARE_VECTOR_COMMAND(QUADRATIC_TO_SHORTHAND)                               \
+  DECLARE_VECTOR_COMMAND(R_QUADRATIC_TO_SHORTHAND)                             \
   DECLARE_VECTOR_COMMAND(CIRCLE)                                               \
+  DECLARE_VECTOR_COMMAND(OVAL)                                                 \
   DECLARE_VECTOR_COMMAND(ROUND_RECT)                                           \
   DECLARE_VECTOR_COMMAND(CLOSE)                                                \
   /* Sets the dimensions of the canvas in dip. */                              \
diff --git a/ui/gl/init/create_gr_gl_interface.cc b/ui/gl/init/create_gr_gl_interface.cc
index 3e0fab1641..dbc61ccd 100644
--- a/ui/gl/init/create_gr_gl_interface.cc
+++ b/ui/gl/init/create_gr_gl_interface.cc
@@ -504,8 +504,8 @@
       gl->glGetFramebufferAttachmentParameterivEXTFn;
   functions->fGetRenderbufferParameteriv =
       gl->glGetRenderbufferParameterivEXTFn;
-  functions->fBindFramebuffer =
-      bind_with_flush_on_mac(gl->glBindFramebufferEXTFn);
+  functions->fBindFramebuffer = bind_slow_with_flush_on_mac(
+      gl->glBindFramebufferEXTFn, progress_reporter);
   functions->fFramebufferTexture2D = gl->glFramebufferTexture2DEXTFn;
   functions->fCheckFramebufferStatus = gl->glCheckFramebufferStatusEXTFn;
   functions->fDeleteFramebuffers = bind_slow_with_flush_on_mac(
diff --git a/ui/message_center/views/notification_view_md.cc b/ui/message_center/views/notification_view_md.cc
index 4410eb8..6c915525 100644
--- a/ui/message_center/views/notification_view_md.cc
+++ b/ui/message_center/views/notification_view_md.cc
@@ -81,25 +81,12 @@
 constexpr gfx::Insets kSettingsRadioButtonPadding(14, 18, 14, 18);
 constexpr gfx::Insets kSettingsButtonRowPadding(8);
 
-// Background of inline actions area.
-constexpr SkColor kActionsRowBackgroundColor = SkColorSetRGB(0xee, 0xee, 0xee);
 // Ripple ink drop opacity of action buttons.
 const float kActionButtonInkDropRippleVisibleOpacity = 0.08f;
 // Highlight (hover) ink drop opacity of action buttons.
 const float kActionButtonInkDropHighlightVisibleOpacity = 0.08f;
 // Text color of action button.
 constexpr SkColor kActionButtonTextColor = gfx::kGoogleBlue600;
-// Background color of the large image.
-constexpr SkColor kLargeImageBackgroundColor = SkColorSetRGB(0xf5, 0xf5, 0xf5);
-// Background color of the inline settings.
-constexpr SkColor kInlineSettingsBackgroundColor =
-    SkColorSetRGB(0xEE, 0xEE, 0xEE);
-
-// Text color and icon color of inline reply area when the textfield is empty.
-constexpr SkColor kTextfieldPlaceholderTextColorMD =
-    SkColorSetA(SK_ColorWHITE, 0x8A);
-constexpr SkColor kTextfieldPlaceholderIconColorMD =
-    SkColorSetA(SK_ColorWHITE, 0x60);
 
 // The icon size of inline reply input field.
 constexpr int kInputReplyButtonSize = 20;
@@ -269,9 +256,7 @@
 
 // LargeImageView //////////////////////////////////////////////////////////////
 
-LargeImageView::LargeImageView() {
-  SetBackground(views::CreateSolidBackground(kLargeImageBackgroundColor));
-}
+LargeImageView::LargeImageView() = default;
 
 LargeImageView::~LargeImageView() = default;
 
@@ -308,6 +293,12 @@
   return "LargeImageView";
 }
 
+void LargeImageView::OnThemeChanged() {
+  View::OnThemeChanged();
+  SetBackground(views::CreateSolidBackground(GetNativeTheme()->GetSystemColor(
+      ui::NativeTheme::kColorId_NotificationLargeImageBackground)));
+}
+
 // Returns expected size of the image right after resizing.
 // The GetResizedImageSize().width() <= kLargeImageMaxSize.width() holds, but
 // GetResizedImageSize().height() may be larger than kLargeImageMaxSize.height()
@@ -376,7 +367,6 @@
       button_(new views::ImageButton(this)) {
   auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kHorizontal, gfx::Insets(), 0));
-  SetBackground(views::CreateSolidBackground(kActionsRowBackgroundColor));
 
   SetInkDropMode(InkDropMode::ON);
   set_ink_drop_visible_opacity(1);
@@ -384,9 +374,6 @@
   AddChildView(ink_drop_container_);
 
   textfield_->set_controller(this);
-  textfield_->SetTextColor(SK_ColorWHITE);
-  textfield_->SetBackgroundColor(SK_ColorTRANSPARENT);
-  textfield_->set_placeholder_text_color(kTextfieldPlaceholderTextColorMD);
   textfield_->SetBorder(views::CreateEmptyBorder(kInputTextfieldPadding));
   AddChildView(textfield_);
   layout->SetFlexForView(textfield_, 1);
@@ -440,6 +427,18 @@
   return gfx::kGoogleBlue600;
 }
 
+void NotificationInputContainerMD::OnThemeChanged() {
+  InkDropHostView::OnThemeChanged();
+  auto* theme = GetNativeTheme();
+  SetBackground(views::CreateSolidBackground(theme->GetSystemColor(
+      ui::NativeTheme::kColorId_NotificationActionsRowBackground)));
+  textfield_->SetTextColor(SK_ColorWHITE);
+  textfield_->SetBackgroundColor(SK_ColorTRANSPARENT);
+  textfield_->set_placeholder_text_color(theme->GetSystemColor(
+      ui::NativeTheme::kColorId_TextfieldPlaceholderColor));
+  SetButtonImage();
+}
+
 bool NotificationInputContainerMD::HandleKeyEvent(views::Textfield* sender,
                                                   const ui::KeyEvent& event) {
   if (event.type() == ui::ET_KEY_PRESSED &&
@@ -454,12 +453,7 @@
 
 void NotificationInputContainerMD::OnAfterUserAction(views::Textfield* sender) {
   DCHECK_EQ(sender, textfield_);
-  button_->SetImage(
-      views::Button::STATE_NORMAL,
-      gfx::CreateVectorIcon(kNotificationInlineReplyIcon, kInputReplyButtonSize,
-                            textfield_->GetText().empty()
-                                ? kTextfieldPlaceholderIconColorMD
-                                : SK_ColorWHITE));
+  SetButtonImage();
 }
 
 void NotificationInputContainerMD::ButtonPressed(views::Button* sender,
@@ -470,6 +464,18 @@
   }
 }
 
+void NotificationInputContainerMD::SetButtonImage() {
+  auto placeholder_icon_color_id =
+      textfield_->GetText().empty()
+          ? ui::NativeTheme::kColorId_NotificationEmptyPlaceholderIconColor
+          : ui::NativeTheme::kColorId_NotificationPlaceholderIconColor;
+  button_->SetImage(
+      views::Button::STATE_NORMAL,
+      gfx::CreateVectorIcon(
+          kNotificationInlineReplyIcon, kInputReplyButtonSize,
+          GetNativeTheme()->GetSystemColor(placeholder_icon_color_id)));
+}
+
 // InlineSettingsRadioButton ///////////////////////////////////////////////////
 
 class InlineSettingsRadioButton : public views::RadioButton {
@@ -478,10 +484,15 @@
       : views::RadioButton(label_text, 1 /* group */) {
     SetEnabledTextColors(kRegularTextColorMD);
     label()->SetFontList(GetTextFontList());
-    label()->SetBackgroundColor(kInlineSettingsBackgroundColor);
     label()->SetSubpixelRenderingEnabled(false);
   }
 
+  void OnThemeChanged() override {
+    RadioButton::OnThemeChanged();
+    label()->SetBackgroundColor(GetNativeTheme()->GetSystemColor(
+        ui::NativeTheme::kColorId_NotificationInlineSettingsBackground));
+  }
+
  private:
   // views::RadioButton:
   SkColor GetIconImageColor(int icon_state) const override {
@@ -857,7 +868,6 @@
   header_row_->SetAccentColor(notification.accent_color() == SK_ColorTRANSPARENT
                                   ? kNotificationDefaultAccentColor
                                   : notification.accent_color());
-  header_row_->SetBackgroundColor(kNotificationBackgroundColor);
   header_row_->SetTimestamp(notification.timestamp());
   header_row_->SetAppNameElideBehavior(gfx::ELIDE_TAIL);
   header_row_->SetSummaryText(base::string16());
@@ -1343,9 +1353,6 @@
   settings_row_->SetVisible(inline_settings_visible);
   content_row_->SetVisible(!inline_settings_visible);
   header_row_->SetDetailViewsVisible(!inline_settings_visible);
-  header_row_->SetBackgroundColor(inline_settings_visible
-                                      ? kInlineSettingsBackgroundColor
-                                      : kNotificationBackgroundColor);
 
   // Always check "Don't block" when inline settings is shown.
   // If it's already blocked, users should not see inline settings.
@@ -1383,7 +1390,9 @@
   MessageView::UpdateCornerRadius(top_radius, bottom_radius);
   action_buttons_row_->SetBackground(views::CreateBackgroundFromPainter(
       std::make_unique<NotificationBackgroundPainter>(
-          0, bottom_radius, kActionsRowBackgroundColor)));
+          0, bottom_radius,
+          GetNativeTheme()->GetSystemColor(
+              ui::NativeTheme::kColorId_NotificationActionsRowBackground))));
   highlight_path_generator_->set_top_radius(top_radius);
   highlight_path_generator_->set_bottom_radius(bottom_radius);
 }
@@ -1424,6 +1433,15 @@
     MessageView::OnSettingsButtonPressed(event);
 }
 
+void NotificationViewMD::OnThemeChanged() {
+  MessageView::OnThemeChanged();
+  bool inline_settings_visible = settings_row_ && !settings_row_->GetVisible();
+  header_row_->SetBackgroundColor(GetNativeTheme()->GetSystemColor(
+      inline_settings_visible
+          ? ui::NativeTheme::kColorId_NotificationInlineSettingsBackground
+          : ui::NativeTheme::kColorId_NotificationDefaultBackground));
+}
+
 void NotificationViewMD::Activate() {
   GetWidget()->widget_delegate()->SetCanActivate(true);
   GetWidget()->Activate();
@@ -1485,7 +1503,8 @@
 }
 
 SkColor NotificationViewMD::GetInkDropBaseColor() const {
-  return kInlineSettingsBackgroundColor;
+  return GetNativeTheme()->GetSystemColor(
+      ui::NativeTheme::kColorId_NotificationInlineSettingsBackground);
 }
 
 void NotificationViewMD::InkDropAnimationStarted() {
diff --git a/ui/message_center/views/notification_view_md.h b/ui/message_center/views/notification_view_md.h
index bbc1dc0..bc0520e 100644
--- a/ui/message_center/views/notification_view_md.h
+++ b/ui/message_center/views/notification_view_md.h
@@ -63,6 +63,7 @@
 
   void OnPaint(gfx::Canvas* canvas) override;
   const char* GetClassName() const override;
+  void OnThemeChanged() override;
 
  private:
   gfx::Size GetResizedImageSize();
@@ -129,6 +130,7 @@
   void RemoveLayerBeneathView(ui::Layer* layer) override;
   std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
   SkColor GetInkDropBaseColor() const override;
+  void OnThemeChanged() override;
 
   // Overridden from views::TextfieldController:
   bool HandleKeyEvent(views::Textfield* sender,
@@ -142,6 +144,8 @@
   views::ImageButton* button() const { return button_; }
 
  private:
+  void SetButtonImage();
+
   NotificationInputDelegate* const delegate_;
 
   views::InkDropContainerView* const ink_drop_container_;
@@ -194,6 +198,7 @@
   bool IsManuallyExpandedOrCollapsed() const override;
   void SetManuallyExpandedOrCollapsed(bool value) override;
   void OnSettingsButtonPressed(const ui::Event& event) override;
+  void OnThemeChanged() override;
 
   // views::InkDropObserver:
   void InkDropAnimationStarted() override;
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc
index aac3821..ea31f22 100644
--- a/ui/native_theme/common_theme.cc
+++ b/ui/native_theme/common_theme.cc
@@ -368,6 +368,19 @@
     case NativeTheme::kColorId_LinkPressed:
       return gfx::kGoogleBlue600;
 
+    // Notification view
+    // TODO(crbug.com/1065604): Add support for dark mode.
+    case NativeTheme::kColorId_NotificationDefaultBackground:
+    case NativeTheme::kColorId_NotificationPlaceholderIconColor:
+      return SK_ColorWHITE;
+    case NativeTheme::kColorId_NotificationActionsRowBackground:
+    case NativeTheme::kColorId_NotificationInlineSettingsBackground:
+      return SkColorSetRGB(0xee, 0xee, 0xee);
+    case NativeTheme::kColorId_NotificationLargeImageBackground:
+      return SkColorSetRGB(0xf5, 0xf5, 0xf5);
+    case NativeTheme::kColorId_NotificationEmptyPlaceholderIconColor:
+      return SkColorSetA(SK_ColorWHITE, 0x60);
+
     // Scrollbar
     case NativeTheme::kColorId_OverlayScrollbarThumbBackground:
       return SK_ColorBLACK;
diff --git a/ui/native_theme/native_theme_color_id.h b/ui/native_theme/native_theme_color_id.h
index 0fddcbf..7e63aefa 100644
--- a/ui/native_theme/native_theme_color_id.h
+++ b/ui/native_theme/native_theme_color_id.h
@@ -74,6 +74,13 @@
   OP(kColorId_LinkPressed),                                                    \
   OP(kColorId_OverlayScrollbarThumbBackground),                                \
   OP(kColorId_OverlayScrollbarThumbForeground),                                \
+  /* Notification view */                                                      \
+  OP(kColorId_NotificationDefaultBackground),                                  \
+  OP(kColorId_NotificationActionsRowBackground),                               \
+  OP(kColorId_NotificationInlineSettingsBackground),                           \
+  OP(kColorId_NotificationLargeImageBackground),                               \
+  OP(kColorId_NotificationPlaceholderIconColor),                               \
+  OP(kColorId_NotificationEmptyPlaceholderIconColor),                          \
   /* Slider */                                                                 \
   OP(kColorId_SliderThumbDefault),                                             \
   OP(kColorId_SliderTroughDefault),                                            \
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index d8c09129..12d116d 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -776,19 +776,15 @@
         return;
       }
     }
+    const int command = part.menu->GetCommand();
     if (part.menu->GetDelegate()->ShouldExecuteCommandWithoutClosingMenu(
-            part.menu->GetCommand(), event)) {
-      part.menu->GetDelegate()->ExecuteCommand(part.menu->GetCommand(),
-                                               event.flags());
+            command, event)) {
+      part.menu->GetDelegate()->ExecuteCommand(command, event.flags());
       return;
     }
     if (!part.menu->NonIconChildViewsCount() &&
         part.menu->GetDelegate()->IsTriggerableEvent(part.menu, event)) {
-      base::TimeDelta shown_time = base::TimeTicks::Now() - menu_start_time_;
-      if (!state_.context_menu || !View::ShouldShowContextMenuOnMousePress() ||
-          shown_time > menu_selection_hold_time) {
-        Accept(part.menu, event.flags());
-      }
+      Accept(part.menu, event.flags());
       return;
     }
   } else if (part.type == MenuPart::MENU_ITEM) {
diff --git a/ui/views/controls/menu/menu_host_root_view.cc b/ui/views/controls/menu/menu_host_root_view.cc
index bbb1290..890b5655 100644
--- a/ui/views/controls/menu/menu_host_root_view.cc
+++ b/ui/views/controls/menu/menu_host_root_view.cc
@@ -94,4 +94,7 @@
              : nullptr;
 }
 
+BEGIN_METADATA(MenuHostRootView)
+METADATA_PARENT_CLASS(RootView)
+END_METADATA()
 }  // namespace views
diff --git a/ui/views/controls/menu/menu_host_root_view.h b/ui/views/controls/menu/menu_host_root_view.h
index e37dd79..8554831 100644
--- a/ui/views/controls/menu/menu_host_root_view.h
+++ b/ui/views/controls/menu/menu_host_root_view.h
@@ -21,6 +21,8 @@
 // such that when MenuHostRootView is deleted it doesn't delete the menu items.
 class MenuHostRootView : public internal::RootView {
  public:
+  METADATA_HEADER(MenuHostRootView);
+
   MenuHostRootView(Widget* widget, SubmenuView* submenu);
 
   void ClearSubmenu() { submenu_ = nullptr; }
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 4cb98c1..1473343 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -1517,11 +1517,6 @@
   context_menu_controller_->ShowContextMenuForView(this, p, source_type);
 }
 
-// static
-bool View::ShouldShowContextMenuOnMousePress() {
-  return kContextMenuOnMousePress;
-}
-
 gfx::Point View::GetKeyboardContextMenuLocation() {
   gfx::Rect vis_bounds = GetVisibleBounds();
   gfx::Point screen_point(vis_bounds.x() + vis_bounds.width() / 2,
diff --git a/ui/views/view.h b/ui/views/view.h
index b1dfe17e..257434d 100644
--- a/ui/views/view.h
+++ b/ui/views/view.h
@@ -1222,10 +1222,6 @@
   virtual void ShowContextMenu(const gfx::Point& p,
                                ui::MenuSourceType source_type);
 
-  // On some platforms, we show context menu on mouse press instead of release.
-  // This method returns true for those platforms.
-  static bool ShouldShowContextMenuOnMousePress();
-
   // Returns the location, in screen coordinates, to show the context menu at
   // when the context menu is shown from the keyboard. This implementation
   // returns the middle of the visible region of this view.
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java
index a83a3a5..cf937490 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java
@@ -7,9 +7,9 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.FragmentManager;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentManager;
 
 import org.junit.Assert;
 import org.junit.Rule;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
index 19ee2ce0..fda8534 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
@@ -6,7 +6,8 @@
 
 import android.net.Uri;
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.FragmentManager;
+
+import androidx.fragment.app.FragmentManager;
 
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/DataClearingTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/DataClearingTest.java
index 36b1470..8499a2e 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/DataClearingTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/DataClearingTest.java
@@ -9,7 +9,8 @@
 import static org.chromium.weblayer.BrowsingDataType.COOKIES_AND_SITE_DATA;
 
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.FragmentManager;
+
+import androidx.fragment.app.FragmentManager;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ExternalNavigationTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ExternalNavigationTest.java
index 9777941..b02a4e7 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ExternalNavigationTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ExternalNavigationTest.java
@@ -8,7 +8,8 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.Fragment;
+
+import androidx.fragment.app.Fragment;
 
 import org.junit.Assert;
 import org.junit.Rule;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
index 6beff15..0862e40e 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
@@ -17,9 +17,9 @@
 import android.os.Parcelable;
 import android.provider.MediaStore;
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.Fragment;
 
 import androidx.core.app.ActivityCompat;
+import androidx.fragment.app.Fragment;
 
 import org.junit.After;
 import org.junit.Assert;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
index 20e6fc0..353339a5 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
@@ -12,9 +12,10 @@
 import android.os.Bundle;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.rule.ActivityTestRule;
-import android.support.v4.app.Fragment;
 import android.text.TextUtils;
 
+import androidx.fragment.app.Fragment;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.junit.Assert;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SmokeTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SmokeTest.java
index 8a1f6850..c61c70b7 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SmokeTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SmokeTest.java
@@ -5,7 +5,8 @@
 package org.chromium.weblayer.test;
 
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.Fragment;
+
+import androidx.fragment.app.Fragment;
 
 import org.junit.Assert;
 import org.junit.Rule;
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TopControlsTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TopControlsTest.java
index 97f2483..bf080756 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TopControlsTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TopControlsTest.java
@@ -6,10 +6,11 @@
 
 import android.os.Build;
 import android.support.test.filters.SmallTest;
-import android.support.v4.app.Fragment;
 import android.view.View;
 import android.widget.FrameLayout;
 
+import androidx.fragment.app.Fragment;
+
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/weblayer/browser/browser_impl.cc b/weblayer/browser/browser_impl.cc
index e2e39cb2..f8beb88 100644
--- a/weblayer/browser/browser_impl.cc
+++ b/weblayer/browser/browser_impl.cc
@@ -275,6 +275,7 @@
       AttachCurrentThread(), java_impl_,
       active_tab_ ? active_tab_->GetJavaTab() : nullptr);
 #endif
+  VisibleSecurityStateOfActiveTabChanged();
   for (BrowserObserver& obs : browser_observers_)
     obs.OnActiveTabChanged(active_tab_);
   if (active_tab_)
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
index c3a236c..458860cd 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
@@ -305,7 +305,7 @@
     }
 
     @Override
-    public void onReceivedDownloadNotification(IObjectWrapper appContextWrapper, Intent intent) {
+    public void onReceivedBroadcast(IObjectWrapper appContextWrapper, Intent intent) {
         StrictModeWorkaround.apply();
         Context context = ObjectWrapper.unwrap(appContextWrapper, Context.class);
         DownloadImpl.forwardIntent(context, intent, mProfileManager);
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
index 20b27a2..78887fa 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
@@ -70,8 +70,8 @@
       in IObjectWrapper appContext,
       in IObjectWrapper remoteContext) = 10;
 
-  // Forwards download intent notifications to the implementation.
-  void onReceivedDownloadNotification(in IObjectWrapper appContext, in Intent intent) = 11;
+  // Forwards broadcast from a notification to the implementation.
+  void onReceivedBroadcast(in IObjectWrapper appContext, in Intent intent) = 11;
 
   // Added in Version 82.
   void enumerateAllProfileNames(in IObjectWrapper valueCallback) = 12;
diff --git a/weblayer/browser/url_bar/url_bar_browsertest.cc b/weblayer/browser/url_bar/url_bar_browsertest.cc
index ad3e6cd..76c39e1 100644
--- a/weblayer/browser/url_bar/url_bar_browsertest.cc
+++ b/weblayer/browser/url_bar/url_bar_browsertest.cc
@@ -24,10 +24,13 @@
     ASSERT_TRUE(embedded_test_server()->Start());
     browser_ = Browser::Create(GetProfile(), nullptr);
     tab_ = static_cast<TabImpl*>(browser_->AddTab(Tab::Create(GetProfile())));
+    another_tab_ =
+        static_cast<TabImpl*>(browser_->AddTab(Tab::Create(GetProfile())));
     browser_->SetActiveTab(tab_);
   }
   void PostRunTestOnMainThread() override {
     tab_ = nullptr;
+    another_tab_ = nullptr;
     browser_.reset();
     WebLayerBrowserTest::PostRunTestOnMainThread();
   }
@@ -42,8 +45,11 @@
         std::move(closure));
   }
 
+  void SetActiveTab(TabImpl* tab) { browser_->SetActiveTab(tab); }
+
  protected:
   TabImpl* tab_ = nullptr;
+  TabImpl* another_tab_ = nullptr;
 
  private:
   std::unique_ptr<Browser> browser_;
@@ -69,4 +75,20 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_F(UrlBarBrowserTest, ChangingActiveTabUpdatesUrlBarView) {
+  NavigateAndWaitForCompletion(real_url(), tab_);
+  NavigateAndWaitForCompletion(real_url(), another_tab_);
+
+  {
+    base::RunLoop run_loop;
+    SetVisibleSecurityStateChangedCallback(run_loop.QuitClosure());
+
+    SetActiveTab(another_tab_);
+
+    // The test won't finish until
+    // BrowserImpl::VisibleSecurityStateOfActiveTabChanged() gets called.
+    run_loop.Run();
+  }
+}
+
 }  // namespace weblayer
diff --git a/weblayer/public/java/AndroidManifest.xml b/weblayer/public/java/AndroidManifest.xml
index 2215ec2..2e3917c 100644
--- a/weblayer/public/java/AndroidManifest.xml
+++ b/weblayer/public/java/AndroidManifest.xml
@@ -54,7 +54,7 @@
                 android:resource="@xml/weblayer_file_paths" />
         </provider>
 
-        <receiver android:name="org.chromium.weblayer.DownloadBroadcastReceiver"
+        <receiver android:name="org.chromium.weblayer.BroadcastReceiver"
             android:exported="false">
             <intent-filter>
                 <!-- these need to be in sync with DownloadImpl.java-->
diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn
index 73fa83a..d9782f907 100644
--- a/weblayer/public/java/BUILD.gn
+++ b/weblayer/public/java/BUILD.gn
@@ -25,6 +25,7 @@
 
 android_library("java") {
   sources = [
+    "org/chromium/weblayer/BroadcastReceiver.java",
     "org/chromium/weblayer/Browser.java",
     "org/chromium/weblayer/BrowserFragment.java",
     "org/chromium/weblayer/BrowsingDataType.java",
@@ -37,7 +38,6 @@
     "org/chromium/weblayer/CrashReporterCallback.java",
     "org/chromium/weblayer/CrashReporterController.java",
     "org/chromium/weblayer/Download.java",
-    "org/chromium/weblayer/DownloadBroadcastReceiver.java",
     "org/chromium/weblayer/DownloadCallback.java",
     "org/chromium/weblayer/DownloadError.java",
     "org/chromium/weblayer/DownloadState.java",
diff --git a/weblayer/public/java/org/chromium/weblayer/DownloadBroadcastReceiver.java b/weblayer/public/java/org/chromium/weblayer/BroadcastReceiver.java
similarity index 71%
rename from weblayer/public/java/org/chromium/weblayer/DownloadBroadcastReceiver.java
rename to weblayer/public/java/org/chromium/weblayer/BroadcastReceiver.java
index 2b8d95f..f78ca697 100644
--- a/weblayer/public/java/org/chromium/weblayer/DownloadBroadcastReceiver.java
+++ b/weblayer/public/java/org/chromium/weblayer/BroadcastReceiver.java
@@ -4,7 +4,6 @@
 
 package org.chromium.weblayer;
 
-import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.os.RemoteException;
@@ -12,16 +11,15 @@
 import org.chromium.weblayer_private.interfaces.ObjectWrapper;
 
 /**
- * Listens to events from the download system notifications.
+ * Listens to events from WebLayer-spawned notifications.
  */
-public class DownloadBroadcastReceiver extends BroadcastReceiver {
+class BroadcastReceiver extends android.content.BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
         try {
             WebLayer.loadAsync(context, webLayer -> {
                 try {
-                    webLayer.getImpl().onReceivedDownloadNotification(
-                            ObjectWrapper.wrap(context), intent);
+                    webLayer.getImpl().onReceivedBroadcast(ObjectWrapper.wrap(context), intent);
                 } catch (RemoteException e) {
                     throw new RuntimeException(e);
                 }
diff --git a/weblayer/public/java/org/chromium/weblayer/Browser.java b/weblayer/public/java/org/chromium/weblayer/Browser.java
index 2f5473564..c354d6b2 100644
--- a/weblayer/public/java/org/chromium/weblayer/Browser.java
+++ b/weblayer/public/java/org/chromium/weblayer/Browser.java
@@ -5,12 +5,12 @@
 package org.chromium.weblayer;
 
 import android.os.RemoteException;
-import android.support.v4.app.Fragment;
 import android.view.View;
 import android.webkit.ValueCallback;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
 
 import org.chromium.weblayer_private.interfaces.APICallException;
 import org.chromium.weblayer_private.interfaces.IBrowser;
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragment.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragment.java
index 2f0ed708..0a1c1c0d 100644
--- a/weblayer/public/java/org/chromium/weblayer/BrowserFragment.java
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragment.java
@@ -11,12 +11,12 @@
 import android.content.IntentSender.SendIntentException;
 import android.os.Bundle;
 import android.os.RemoteException;
-import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
 
 import org.chromium.weblayer_private.interfaces.APICallException;
 import org.chromium.weblayer_private.interfaces.IBrowserFragment;
diff --git a/weblayer/public/java/org/chromium/weblayer/Profile.java b/weblayer/public/java/org/chromium/weblayer/Profile.java
index 1b5f51b..fc490c1d 100644
--- a/weblayer/public/java/org/chromium/weblayer/Profile.java
+++ b/weblayer/public/java/org/chromium/weblayer/Profile.java
@@ -284,7 +284,7 @@
             // Intent objects need to be created in the client library so they can refer to the
             // broadcast receiver that will handle them. The broadcast receiver needs to be in the
             // client library because it's referenced in the manifest.
-            return new Intent(WebLayer.getAppContext(), DownloadBroadcastReceiver.class);
+            return new Intent(WebLayer.getAppContext(), BroadcastReceiver.class);
         }
     }
 }
diff --git a/weblayer/public/java/org/chromium/weblayer/WebLayer.java b/weblayer/public/java/org/chromium/weblayer/WebLayer.java
index 407df33..3ee05c7 100644
--- a/weblayer/public/java/org/chromium/weblayer/WebLayer.java
+++ b/weblayer/public/java/org/chromium/weblayer/WebLayer.java
@@ -12,7 +12,6 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.v4.app.Fragment;
 import android.util.AndroidRuntimeException;
 import android.util.Log;
 import android.util.Pair;
@@ -20,6 +19,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
 
 import org.chromium.weblayer_private.interfaces.APICallException;
 import org.chromium.weblayer_private.interfaces.BrowserFragmentArgs;
@@ -609,7 +609,7 @@
             // Intent objects need to be created in the client library so they can refer to the
             // broadcast receiver that will handle them. The broadcast receiver needs to be in the
             // client library because it's referenced in the manifest.
-            return new Intent(WebLayer.getAppContext(), DownloadBroadcastReceiver.class);
+            return new Intent(WebLayer.getAppContext(), BroadcastReceiver.class);
         }
     }
 }
diff --git a/weblayer/public/java/org/chromium/weblayer/WebLayerFileProvider.java b/weblayer/public/java/org/chromium/weblayer/WebLayerFileProvider.java
index bfc948c1..1db972b 100644
--- a/weblayer/public/java/org/chromium/weblayer/WebLayerFileProvider.java
+++ b/weblayer/public/java/org/chromium/weblayer/WebLayerFileProvider.java
@@ -4,7 +4,7 @@
 
 package org.chromium.weblayer;
 
-import android.support.v4.content.FileProvider;
+import androidx.core.content.FileProvider;
 
 /**
  * Subclass of FileProvider which prevents conflicts with the embedding application manifest.
diff --git a/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_browsertests_apk/WebLayerBrowserTestsActivity.java b/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_browsertests_apk/WebLayerBrowserTestsActivity.java
index 38dd169..4837dda 100644
--- a/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_browsertests_apk/WebLayerBrowserTestsActivity.java
+++ b/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_browsertests_apk/WebLayerBrowserTestsActivity.java
@@ -5,14 +5,15 @@
 package org.chromium.weblayer_browsertests_apk;
 
 import android.net.Uri;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
 import android.view.View;
 import android.view.ViewGroup.LayoutParams;
 import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.content_public.browser.BrowserStartupController;
 import org.chromium.native_test.NativeBrowserTest;
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java
index 573980b..f83987d8 100644
--- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java
+++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java
@@ -11,10 +11,6 @@
 import android.os.StrictMode;
 import android.os.StrictMode.ThreadPolicy;
 import android.os.StrictMode.VmPolicy;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.text.InputType;
 import android.view.View;
 import android.view.ViewGroup;
@@ -24,6 +20,11 @@
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 import org.chromium.base.ContextUtils;
 import org.chromium.weblayer.Browser;
 import org.chromium.weblayer.NewTabCallback;
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java
index 41990d47..7495340 100644
--- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java
+++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java
@@ -6,10 +6,6 @@
 
 import android.net.Uri;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.text.InputType;
 import android.view.View;
 import android.view.ViewGroup;
@@ -19,6 +15,11 @@
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 import org.chromium.weblayer.Browser;
 import org.chromium.weblayer.Profile;
 import org.chromium.weblayer.Tab;
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
index 44d74b9..70605b94 100644
--- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
+++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
@@ -10,10 +10,6 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.text.TextUtils;
 import android.view.ContextMenu;
 import android.view.KeyEvent;
@@ -32,6 +28,11 @@
 import android.widget.TextView;
 import android.widget.ViewSwitcher;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 import org.chromium.weblayer.Browser;
 import org.chromium.weblayer.ContextMenuParams;
 import org.chromium.weblayer.DownloadCallback;