diff --git a/DEPS b/DEPS
index 0273f608..91370b07 100644
--- a/DEPS
+++ b/DEPS
@@ -196,7 +196,7 @@
   # luci-go CIPD package version.
   # Make sure the revision is uploaded by infra-packagers builder.
   # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console
-  'luci_go': 'git_revision:1120f810b7ab7eb71bd618c4c57fe82a60d4f2fe',
+  'luci_go': 'git_revision:70263bc59d62128d76f23e84906a4205ebbb749a',
 
   # This can be overridden, e.g. with custom_vars, to build clang from HEAD
   # instead of downloading the prebuilt pinned revision.
@@ -228,7 +228,7 @@
   # 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': 'b5de6be2a85db643be308096ee30cd70fa830ca0',
+  'skia_revision': '23c616fc05af30041551951b203fdaec3eb8c32b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -240,7 +240,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '8f214193940b2e7eda70746b7b42f96b0b4ce73b',
+  'angle_revision': '392ba63fc9b9ed695db2ea3918df7054cd28378a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -248,7 +248,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'bc0d5454cea346a9f174962a2b4aa42cab84afdc',
+  'pdfium_revision': '2def44bca533ecd17356eb05edf1d5ad4a043155',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -287,7 +287,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': '8c0c217b5a1ded98ce62a3c7394942bcb3b95396',
+  'harfbuzz_revision': 'c08f1b89037b9a0277b8cef67ff2f38bcf253dfd',
   # 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.
@@ -307,7 +307,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '4fbcf694489cacb3afc5e8d8094bf33cdee3adb6',
+  'devtools_frontend_revision': 'ded8fe3d4605335955d06cc561560036a2c55f25',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -347,7 +347,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '5d17ed6541afd44ffcc2e267d533ebd03354c75d',
+  'dawn_revision': 'a6ddb0e1164cd2c75dfd4d80d56a32e2ff0dffef',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -767,7 +767,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': '5FmojmYp53y0XBXcZuz3Mglv3JiYPGYex2LMT6kbzv8C',
+          'version': '5EsskEwtu6Hzju-fNoomuLOMy9gfI2OYkzR37-UWmjkC',
       },
     ],
     'condition': 'checkout_android',
@@ -998,12 +998,12 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'bb5fb34c30997db4768ffd673f7b436cd9a7414d',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '49bf56977ad867ac62db27cb15dcf5c5c8c46701',
       'condition': 'checkout_linux',
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '49a703f3d915b140c9f373107e1ba17f30e2487d',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd76912e4d7e6e2ee0ed4d48a627f058ed6bc42ec',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1582,7 +1582,7 @@
   'src/third_party/usrsctp/usrsctplib':
     Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '978003f36a3bc1e9fdeafae26dbfe825684b0a25',
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@902c4504128fce062af3203efc9ae86749282a5f',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@42ab48e887454463c7acb2d3dd8aa2532104b786',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'f67d7fa397e83060b76a1ec53579116a0bbdff7a',
@@ -1621,7 +1621,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'b46ab16f9798d2cb78e7f9f34f76d4f2470ba48a',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'cfea2182f8e41c3d8293d4e26b291ef2abf23257',
+    Var('webrtc_git') + '/src.git' + '@' + '5c375fe5c8f3cfdb1bd5be216eb3c07d7eceea1e',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1682,7 +1682,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f416b8e9038f7ca88ddd2c83e37f892acff4005c',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@ca9c9855a368879f237f4b90e0689075c07cfe87',
     'condition': 'checkout_src_internal',
   },
 
@@ -1690,7 +1690,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/eche_app/app',
-        'version': 'UOJ3XLQTDH0c8m98d-9ToR3ek2JD3ITYCNYI3y5-6mUC',
+        'version': 'QuzeLNEamGD028n2M7BQJniXb9qezhbHgg3mlp2-vhsC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1712,7 +1712,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'GivQO5DjmJwovheqcsPKrMyquWjqOln-sbNPlujhS7oC',
+        'version': 'jHxeZd98fzCt3yylgt0UnTMgBRvhyUTkf8o5HJ6coZAC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS
index 31cfa1cf..27b2181 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1968,6 +1968,9 @@
                   '|third_party/libovr'\
                   '|third_party/openvr',
     },
+    'vscode_tooling': {
+      'filepath': 'tools/vscode',
+    },
     'vulkan': {
       'filepath': 'gpu/vulkan'\
                   '|third_party/vulkan'
@@ -2833,6 +2836,7 @@
                          'tranbaoduy+watch@chromium.org',
                          'yhanada+watchvk@chromium.org'],
     'virtual_reality': ['feature-vr-reviews@chromium.org'],
+    'vscode_tooling': ['vscode-users@chromium.org'],
     'vulkan': ['cblume+vulkan@chromium.org',
                'penghuang+vulkan@chromium.org'],
     'wake_lock': ['mattreynolds+watch@chromium.org',
diff --git a/ash/DEPS b/ash/DEPS
index d4bcb4b..5b636e4be 100644
--- a/ash/DEPS
+++ b/ash/DEPS
@@ -57,7 +57,6 @@
   "+chromeos/components/phonehub",
   "+chromeos/components/proximity_auth/public/mojom",
   "+chromeos/components/quick_answers",
-  "+chromeos/components/security_token_pin",
   "+chromeos/components/sensors",
   "+chromeos/crosapi/cpp/crosapi_constants.h",
   "+chromeos/crosapi/mojom",
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index f7f9f6f5..9171087 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -1101,6 +1101,9 @@
       <message name="IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_UNPIN" desc="Title of the unpin option in the holding space item context menu.">
         Unpin
       </message>
+      <message name="IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_DANGEROUS_FILE" desc="Text displayed in a holding space download chip to indicate the underlying download is a dangerous file.">
+        Dangerous file
+      </message>
       <message name="IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_PAUSED_WITH_SIZE_INFO" desc="Text displayed in a holding space download chip to indicate the underlying download is paused and has accompanying size info (see IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_SIZE_INFO).">
         Paused, <ph name="SIZE_INFO">$1<ex>10/100 MB</ex></ph>
       </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_DANGEROUS_FILE.png.sha1 b/ash/ash_strings_grd/IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_DANGEROUS_FILE.png.sha1
new file mode 100644
index 0000000..ddaacdc
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_DANGEROUS_FILE.png.sha1
@@ -0,0 +1 @@
+18464b2b0ae6d807a179ec77d9cce43a8e43dabf
\ No newline at end of file
diff --git a/ash/components/BUILD.gn b/ash/components/BUILD.gn
index 9873608..0fa60b2 100644
--- a/ash/components/BUILD.gn
+++ b/ash/components/BUILD.gn
@@ -14,6 +14,7 @@
     "//ash/components/audio:unit_tests",
     "//ash/components/pcie_peripheral:unit_tests",
     "//ash/components/power:unit_tests",
+    "//ash/components/security_token_pin:unit_tests",
   ]
 
   data_deps = [
diff --git a/chromeos/components/security_token_pin/BUILD.gn b/ash/components/security_token_pin/BUILD.gn
similarity index 84%
rename from chromeos/components/security_token_pin/BUILD.gn
rename to ash/components/security_token_pin/BUILD.gn
index c07f7b4..7b5e1d33 100644
--- a/chromeos/components/security_token_pin/BUILD.gn
+++ b/ash/components/security_token_pin/BUILD.gn
@@ -2,7 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos")
+import("//build/config/chromeos/ui_mode.gni")
+
+assert(is_chromeos_ash, "Non-ChromeOS builds cannot depend on //ash")
 
 component("security_token_pin") {
   sources = [
diff --git a/chromeos/components/security_token_pin/DEPS b/ash/components/security_token_pin/DEPS
similarity index 100%
rename from chromeos/components/security_token_pin/DEPS
rename to ash/components/security_token_pin/DEPS
diff --git a/chromeos/components/security_token_pin/DIR_METADATA b/ash/components/security_token_pin/DIR_METADATA
similarity index 100%
rename from chromeos/components/security_token_pin/DIR_METADATA
rename to ash/components/security_token_pin/DIR_METADATA
diff --git a/chromeos/components/security_token_pin/OWNERS b/ash/components/security_token_pin/OWNERS
similarity index 100%
rename from chromeos/components/security_token_pin/OWNERS
rename to ash/components/security_token_pin/OWNERS
diff --git a/chromeos/components/security_token_pin/constants.h b/ash/components/security_token_pin/constants.h
similarity index 83%
rename from chromeos/components/security_token_pin/constants.h
rename to ash/components/security_token_pin/constants.h
index 6495755a..2eb65c2 100644
--- a/chromeos/components/security_token_pin/constants.h
+++ b/ash/components/security_token_pin/constants.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 CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
-#define CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
+#ifndef ASH_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
+#define ASH_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
 
 // This header contains types related to the security token PIN requests.
 
@@ -37,4 +37,4 @@
 }  // namespace security_token_pin
 }  // namespace ash
 
-#endif  // CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
+#endif  // ASH_COMPONENTS_SECURITY_TOKEN_PIN_CONSTANTS_H_
diff --git a/chromeos/components/security_token_pin/error_generator.cc b/ash/components/security_token_pin/error_generator.cc
similarity index 96%
rename from chromeos/components/security_token_pin/error_generator.cc
rename to ash/components/security_token_pin/error_generator.cc
index 21c0d16..18ca973 100644
--- a/chromeos/components/security_token_pin/error_generator.cc
+++ b/ash/components/security_token_pin/error_generator.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/components/security_token_pin/error_generator.h"
+#include "ash/components/security_token_pin/error_generator.h"
 
 #include "base/i18n/message_formatter.h"
 #include "base/i18n/number_formatting.h"
diff --git a/chromeos/components/security_token_pin/error_generator.h b/ash/components/security_token_pin/error_generator.h
similarity index 78%
rename from chromeos/components/security_token_pin/error_generator.h
rename to ash/components/security_token_pin/error_generator.h
index fd7c808..6a54b2f2 100644
--- a/chromeos/components/security_token_pin/error_generator.h
+++ b/ash/components/security_token_pin/error_generator.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
-#define CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
+#ifndef ASH_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
+#define ASH_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
 
 #include <string>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/component_export.h"
-#include "chromeos/components/security_token_pin/constants.h"
 
 namespace chromeos {
 namespace security_token_pin {
@@ -31,4 +31,4 @@
 }  // namespace security_token_pin
 }  // namespace ash
 
-#endif  // CHROMEOS_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
+#endif  // ASH_COMPONENTS_SECURITY_TOKEN_PIN_ERROR_GENERATOR_H_
diff --git a/chromeos/components/security_token_pin/error_generator_unittest.cc b/ash/components/security_token_pin/error_generator_unittest.cc
similarity index 96%
rename from chromeos/components/security_token_pin/error_generator_unittest.cc
rename to ash/components/security_token_pin/error_generator_unittest.cc
index 949dc5b4..62ab0e4 100644
--- a/chromeos/components/security_token_pin/error_generator_unittest.cc
+++ b/ash/components/security_token_pin/error_generator_unittest.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/components/security_token_pin/error_generator.h"
+#include "ash/components/security_token_pin/error_generator.h"
 
 #include <string>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
diff --git a/ash/login/security_token_request_controller.cc b/ash/login/security_token_request_controller.cc
index b3ba478..fc6c9655 100644
--- a/ash/login/security_token_request_controller.cc
+++ b/ash/login/security_token_request_controller.cc
@@ -7,13 +7,13 @@
 #include <string>
 #include <utility>
 
+#include "ash/components/security_token_pin/error_generator.h"
 #include "ash/login/ui/pin_request_widget.h"
 #include "ash/public/cpp/login_types.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/i18n/number_formatting.h"
-#include "chromeos/components/security_token_pin/error_generator.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace ash {
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn
index 7bd27ff..1733d5603 100644
--- a/ash/public/cpp/BUILD.gn
+++ b/ash/public/cpp/BUILD.gn
@@ -377,9 +377,9 @@
   ]
 
   public_deps = [
+    "//ash/components/security_token_pin",
     "//ash/public/mojom",
     "//base",
-    "//chromeos/components/security_token_pin",
     "//chromeos/crosapi/mojom",
     "//chromeos/services/assistant/public/mojom",
     "//chromeos/services/bluetooth_config/public/mojom",
diff --git a/ash/public/cpp/login_types.h b/ash/public/cpp/login_types.h
index 1da1a918..7532d7e 100644
--- a/ash/public/cpp/login_types.h
+++ b/ash/public/cpp/login_types.h
@@ -5,13 +5,13 @@
 #ifndef ASH_PUBLIC_CPP_LOGIN_TYPES_H_
 #define ASH_PUBLIC_CPP_LOGIN_TYPES_H_
 
+#include "ash/components/security_token_pin/constants.h"
 #include "ash/public/cpp/ash_public_export.h"
 #include "ash/public/cpp/session/user_info.h"
 #include "base/callback.h"
 #include "base/time/time.h"
 #include "base/token.h"
 #include "chromeos/components/proximity_auth/public/mojom/auth_type.mojom-forward.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "components/account_id/account_id.h"
 
 namespace ash {
diff --git a/ash/shell.cc b/ash/shell.cc
index 8cc9da2..8284cc7 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -1191,7 +1191,7 @@
   video_detector_ = std::make_unique<VideoDetector>();
 
   tooltip_controller_ = std::make_unique<views::corewm::TooltipController>(
-      std::make_unique<views::corewm::TooltipAura>());
+      std::make_unique<views::corewm::TooltipAura>(), activation_client());
   AddPreTargetHandler(tooltip_controller_.get());
 
   modality_filter_ = std::make_unique<SystemModalContainerEventFilter>(this);
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 3cf70db1..16a547d 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">አዋቅር</translation>
 <translation id="3573179567135747900">ወደ «<ph name="FROM_LOCALE" />» መልሰህ ቀይር (ዳግም ማስጀመር ይፈልጋል)</translation>
 <translation id="3576141592585647168">የጊዜ ሰቅ ይለውጡ</translation>
+<translation id="3580650856351781466">የንግግር ፋይሎችን በማውረድ ላይ</translation>
 <translation id="3593039967545720377">የእርስዎን የቅንጥብ ሰሌዳ ለመመልከት <ph name="SHORTCUT_KEY_NAME" /> + Vን በመጫን የቅንጥብ ሰሌዳዎን ይድረሱ። ለመጀመር አንድ ንጥል ይቅዱ።</translation>
 <translation id="3593646411856133110">ክፍት መተግበሪያዎችን ለመመልከት ወደ ላይ በጣት ጠርገው ይያዙ</translation>
 <translation id="3595596368722241419">ባትሪ ሙሉ ነው</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index c0d1a4f..c8a80fa 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -385,7 +385,7 @@
 <translation id="3977512764614765090">Batteriet er på <ph name="PERCENTAGE" /> % og oplader.</translation>
 <translation id="3995138139523574647">USB-C-enhed (porten bagpå i højre side)</translation>
 <translation id="40062176907008878">Håndskrift</translation>
-<translation id="4017989525502048489">Laserpegepind</translation>
+<translation id="4017989525502048489">Lasermarkør</translation>
 <translation id="4021716437419160885">Rul ned</translation>
 <translation id="4028481283645788203">Der kræves en adgangskode som ekstra sikkerhed</translation>
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
@@ -429,7 +429,7 @@
 <translation id="4322742403972824594">Tastaturgenvejen Ctrl+Alt+pil op er blevet ændret. Hvis du vil bruge Home-tasten, skal du trykke på tasten <ph name="LAUNCHER_KEY_NAME" />+venstrepil.</translation>
 <translation id="4331809312908958774">Chrome OS</translation>
 <translation id="4333628967105022692">Lacros understøttes ikke, når flere brugere er logget ind.</translation>
-<translation id="4338109981321384717">Forstørrelsesglas</translation>
+<translation id="4338109981321384717">Lup</translation>
 <translation id="4351433414020964307">Assistenten indlæses...</translation>
 <translation id="4356930093361201197">tilstanden Høj kontrast</translation>
 <translation id="4371348193907997655">Cast-indstillinger</translation>
@@ -858,7 +858,7 @@
 <translation id="7749640678855296659">Din mikrofon er i øjeblikket slået fra</translation>
 <translation id="776344839111254542">Klik for at se opdateringsoplysninger</translation>
 <translation id="7780159184141939021">Roter skærm</translation>
-<translation id="7796353162336583443">Tryk på knappen for styluspen på hylden for at skrive en note, tage et screenshot eller bruge Google Assistent, laserpegepinden eller luppen.</translation>
+<translation id="7796353162336583443">Tryk på knappen for styluspen på hylden for at skrive en note, tage et screenshot eller bruge Google Assistent, lasermarkøren eller luppen.</translation>
 <translation id="7798302898096527229">Tryk på Søg eller Shift for at annullere.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> og <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Stærkt signal</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index f58863c90..fe3bb94 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Einrichten</translation>
 <translation id="3573179567135747900">Zurücksetzen auf "<ph name="FROM_LOCALE" />" (Neustart erforderlich)</translation>
 <translation id="3576141592585647168">Zeitzone ändern</translation>
+<translation id="3580650856351781466">Sprachdateien werden heruntergeladen</translation>
 <translation id="3593039967545720377">Du kannst die Zwischenablage öffnen, indem du „<ph name="SHORTCUT_KEY_NAME" /> + V“ drückst. Kopiere ein Element, das du zwischenspeichern und einfügen möchtest.</translation>
 <translation id="3593646411856133110">Nach oben wischen und halten, um geöffnete Apps zu sehen</translation>
 <translation id="3595596368722241419">Akku voll</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 30ad0d5..8aa617e 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -885,7 +885,7 @@
 <translation id="7977927628060636163">మొబైల్ నెట్‌వర్క్‌ల కోసం వెతుకుతోంది...</translation>
 <translation id="7980780401175799550">Chrome OSలో నావిగేట్ చేయడానికి కొత్త మార్గాలను ట్రై చేయండి</translation>
 <translation id="7982789257301363584">నెట్‌వర్క్</translation>
-<translation id="7984197416080286869">చాలా ఎక్కువ వేలిముద్ర ప్రయత్నాలు చేసారు</translation>
+<translation id="7984197416080286869">చాలా ఎక్కువ వేలిముద్ర ప్రయత్నాలు చేశారు</translation>
 <translation id="7994370417837006925">బహుళ సైన్-ఇన్</translation>
 <translation id="7995804128062002838">స్క్రీన్‌ను క్యాప్చర్ చేయడం విఫలమైంది</translation>
 <translation id="8000066093800657092">ఏ నెట్‌వర్క్ లేదు</translation>
diff --git a/ash/webui/sample_system_web_app_ui/BUILD.gn b/ash/webui/sample_system_web_app_ui/BUILD.gn
index aa0c06f..47181125 100644
--- a/ash/webui/sample_system_web_app_ui/BUILD.gn
+++ b/ash/webui/sample_system_web_app_ui/BUILD.gn
@@ -12,6 +12,8 @@
 
 static_library("sample_system_web_app_ui") {
   sources = [
+    "sample_page_handler.cc",
+    "sample_page_handler.h",
     "sample_system_web_app_ui.cc",
     "sample_system_web_app_ui.h",
     "untrusted_sample_system_web_app_ui.cc",
@@ -23,19 +25,29 @@
   deps = [
     "//ash/webui/resources:sample_system_web_app_resources",
     "//ash/webui/resources:sample_system_web_app_untrusted_resources",
+    "//ash/webui/sample_system_web_app_ui/mojom",
     "//content/public/browser",
     "//ui/webui",
   ]
 }
 
 js_type_check("closure_compile") {
-  deps = [ ":untrusted" ]
+  deps = [
+    ":trusted",
+    ":untrusted",
+  ]
+  closure_flags = default_closure_args + mojom_js_args
 }
 
 js_library("untrusted") {
   sources = [ "resources/untrusted.js" ]
 }
 
+js_library("trusted") {
+  sources = [ "resources/page_handler.js" ]
+  deps = [ "//ash/webui/sample_system_web_app_ui/mojom:mojom_webui_js" ]
+}
+
 js2gtest("browser_tests_js") {
   test_type = "mojo_lite_webui"
 
@@ -44,6 +56,25 @@
   defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
 }
 
+# Prefix for the generated variables, in this case
+# `IDR_ASH_SAMPLE_SYSTEM_WEB_APP_`.
+grd_prefix = "ash_sample_system_web_app"
+mojo_grdp_file = "$target_gen_dir/sample_system_web_app_mojo_resources.grdp"
+
+# Rule to generate a grdp with all the generated mojo bindings.
+generate_grd("build_mojo_grdp") {
+  out_grd = mojo_grdp_file
+  grd_prefix = grd_prefix
+
+  deps = [ "//ash/webui/sample_system_web_app_ui/mojom:mojom_webui_js" ]
+
+  # Flatten out the dependency tree of your mojom and add any files not included
+  # in `chrome://resources` here.
+  input_files = [ "ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom-webui.js" ]
+
+  input_files_base_dir = rebase_path("$root_gen_dir/mojom-webui", "//")
+}
+
 generate_grd("build_untrusted_grd") {
   input_files_base_dir = rebase_path("resources", "//")
   input_files = [
@@ -63,13 +94,18 @@
     "sandbox.html",
     "main.js",
     "worker.js",
+    "page_handler.js",
     "timer.html",
     "timer.js",
   ]
 
   # Manifest for generated files generated by resources:component_playground.
   manifest_files = [ "$target_gen_dir/resources/build_manifest.json" ]
-  grd_prefix = "ash_sample_system_web_app"
+  grd_prefix = grd_prefix
   out_grd = "$target_gen_dir/${grd_prefix}_resources.grd"
-  deps = [ "resources:component_playground" ]
+  deps = [
+    ":build_mojo_grdp",
+    "resources:component_playground",
+  ]
+  grdp_files = [ mojo_grdp_file ]
 }
diff --git a/ash/webui/sample_system_web_app_ui/mojom/BUILD.gn b/ash/webui/sample_system_web_app_ui/mojom/BUILD.gn
new file mode 100644
index 0000000..70c6a81
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/mojom/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//mojo/public/tools/bindings/mojom.gni")
+
+assert(is_chromeos, "Sample System Web App is Chrome OS only")
+assert(!is_official_build,
+       "Sample System Web App is only built for unofficial builds")
+
+mojom("mojom") {
+  sources = [ "sample_system_web_app_ui.mojom" ]
+  public_deps = [ "//mojo/public/mojom/base" ]
+  webui_module_path = "/ash/webui/sample_system_web_app_ui/mojom/"
+}
diff --git a/ash/webui/sample_system_web_app_ui/mojom/OWNERS b/ash/webui/sample_system_web_app_ui/mojom/OWNERS
new file mode 100644
index 0000000..08850f4
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/mojom/OWNERS
@@ -0,0 +1,2 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom b/ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom
new file mode 100644
index 0000000..4106599
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom
@@ -0,0 +1,57 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module ash.mojom.sample_swa;
+
+// This file contains an example Mojo interface for the Sample System Web App
+// UI. It's only built on non-official Chrome OS builds. The Mojo interface
+// shows five types of interactions:
+//  1. Getting a value.
+//  2. Setting a value.
+//  3. Asking for an action to be executed.
+//  4. Being notified about an event.
+
+// Sample preferences that are managed by the PageHandler and are the return
+// value of the `getPreferences()` JS method.
+struct Preferences {
+  string background;
+  string foreground;
+};
+
+// Implemented in the browser process. The Sample System Web App WebUI uses
+// this interface to retrieve an endpoint to the PageHandler interface and pass
+// its own Page endpoint to receive notifications.
+//
+// The use of a factory is recommended to ensure that there is always a "Page"
+// interface bound to the "PageHandler" interface. The alternative of getting a
+// "PageHandler" remote directly and calling SetPage(page_remote) also works but
+// could lead to races where the Page is not bound.
+interface PageHandlerFactory {
+  // Create a page handler for the Sample System Web App UI and link it to it.
+  CreatePageHandler(pending_receiver<PageHandler> handler,
+                    pending_remote<Page> page);
+};
+
+// Implemented in the browser process. The Sample System Web App WebUI uses
+// this interface to query or send requests to the browser process.
+interface PageHandler {
+  // Getter example. Returns preferences stored in the browser process side.
+  GetPreferences() => (Preferences preferences);
+
+  // Setter example. Send a message to the browser.
+  Send(string message);
+
+  // Fire-and-forget action example. Triggers `Page.OnEventOccurred`
+  // asynchronously.
+  DoSomething();
+};
+
+// Implemented in Javascript. The browser uses this to send status updates to
+// the web page.
+interface Page {
+  // Notification example. Here the controller notifies the page that some
+  // event occurred. The |name| parameter tells the page the name of the
+  // event that occurred.
+  OnEventOccurred(string name);
+};
diff --git a/ash/webui/sample_system_web_app_ui/resources/index.html b/ash/webui/sample_system_web_app_ui/resources/index.html
index 4135fd0..27dff064 100644
--- a/ash/webui/sample_system_web_app_ui/resources/index.html
+++ b/ash/webui/sample_system_web_app_ui/resources/index.html
@@ -8,8 +8,6 @@
 <br>
 <a href="/sandbox.html"><button>Untrusted Sandbox Demo</button></a>
 <a href="/component_playground.html"><button>Component Playground</button></a>
-<!-- Below mojo script required to run browser tests -->
-<script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script>
 <div>
   <div>
     <label for="number1">Multiply number 1: </label>
@@ -25,7 +23,22 @@
   </div>
 </div>
 
-
 <p id="result">Result: 0</p>
 
-<script src="main.js"></script>
+<div>
+  <button id="do-something" type="button">Do Something (via Mojo)</button>
+  <div>
+    <label for="mojo-event">Mojo event: </label>
+    <input type="text" readonly id="mojo-event">
+  </div>
+  <div>
+    <label for="background">Preferences background: </label>
+    <input type="text" readonly id="background">
+  </div>
+  <div>
+    <label for="foreground">Preferences foreground: </label>
+    <input type="text" readonly id="foreground">
+  </div>
+</div>
+
+<script src="main.js" type="module"></script>
diff --git a/ash/webui/sample_system_web_app_ui/resources/main.js b/ash/webui/sample_system_web_app_ui/resources/main.js
index 40c8bcd..0418f2c 100644
--- a/ash/webui/sample_system_web_app_ui/resources/main.js
+++ b/ash/webui/sample_system_web_app_ui/resources/main.js
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import {pageHandler, callbackRouter} from './page_handler.js';
 
 const first = document.querySelector('#number1');
 const second = document.querySelector('#number2');
@@ -24,3 +25,33 @@
   result.textContent = event.data[0];
   additional.value = event.data[1];
 };
+
+// Exposes the pageHandler to the user as a window's global variable for
+// testing.
+window.pageHandler = pageHandler;
+window.callbackRouter = callbackRouter;
+window.eventCount = new Map();
+
+// Example of adding an event listener for `OnEventOccurred`.
+callbackRouter.onEventOccurred.addListener((name) => {
+  document.querySelector('#mojo-event').value = name;
+  window.eventCount.set(name, 1 + (window.eventCount.get(name) || 0));
+});
+
+// Example of sending information to the browser process.
+pageHandler.send(`message at ${Date.now()}`);
+
+// Example of getting information from the browser process.
+(async () => {
+  // Mojo results get wrapped in a "response" object that contains
+  // a member for each of the Mojo callback's argument, in this case
+  // a `preferences` member.
+  const {preferences} = await pageHandler.getPreferences();
+  document.querySelector('#background').value = preferences.background;
+  document.querySelector('#foreground').value = preferences.foreground;
+})();
+
+const mojoButton = document.querySelector('#do-something');
+mojoButton.onclick = () => {
+  pageHandler.doSomething();
+};
diff --git a/ash/webui/sample_system_web_app_ui/resources/page_handler.js b/ash/webui/sample_system_web_app_ui/resources/page_handler.js
new file mode 100644
index 0000000..9602f52
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/resources/page_handler.js
@@ -0,0 +1,53 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Convenience module to bind to initialize a PageHandler
+ * remote i.e. a PageHandler that we can use to talk to the browser.
+ *
+ * For more complex interfaces, e.g. interfaces where a many arguments need
+ * to be converted to Mojo structs, it's recommended to create a wrapper class
+ * around PageHandlerRemote. This allows clients to have a centralized place
+ * to perform the conversion. For example a wrapper class for this PageHandler
+ * would roughly be:
+ *
+ *  class PageHandlerWrapper {
+ *    constructor() {
+ *      this.pageHandler_ = new PageHandlerRemote();
+ *      const factoryRemote = PageHandlerFactory.getRemote();
+ *      factoryRemote.createPageHandler(
+ *         this.pageHandler_.$.bindNewPipeAndPassReceiver(),
+ *       this.callbackRouter.$.bindNewPipeAndPassRemote());
+ *    }
+ *
+ *    send(message) {
+ *      this.pageHandler_.send(message);
+ *    }
+ *
+ *    doSomething() {
+ *      this.pageHandler_.doSomething();
+ *    }
+ *
+ *    async getPreferences() {
+ *      return this.pageHandler_.getPreferences();
+ *    }
+ *  }
+ */
+
+import {PageHandlerFactory, PageHandlerRemote, PageCallbackRouter} from '/ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom-webui.js';
+
+// Used to make calls on the remote PageHandler interface. Singleton that client
+// modules can use directly.
+export const pageHandler = new PageHandlerRemote();
+
+// Use this subscribe to events e.g.
+// `callbackRouter.onEventOccurred.addListener(handleEvent)`.
+export const callbackRouter = new PageCallbackRouter();
+
+
+// Use PageHandlerFactory to create a connection to PageHandler.
+const factoryRemote = PageHandlerFactory.getRemote();
+factoryRemote.createPageHandler(
+  pageHandler.$.bindNewPipeAndPassReceiver(),
+  callbackRouter.$.bindNewPipeAndPassRemote());
diff --git a/ash/webui/sample_system_web_app_ui/sample_page_handler.cc b/ash/webui/sample_system_web_app_ui/sample_page_handler.cc
new file mode 100644
index 0000000..5163674
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/sample_page_handler.cc
@@ -0,0 +1,53 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/webui/sample_system_web_app_ui/sample_page_handler.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/task/thread_pool.h"
+
+namespace ash {
+
+PageHandler::PageHandler(
+    mojo::PendingReceiver<mojom::sample_swa::PageHandler> pending_receiver,
+    mojo::PendingRemote<mojom::sample_swa::Page> pending_page)
+    : receiver_(this, std::move(pending_receiver)),
+      page_(std::move(pending_page)) {}
+
+PageHandler::~PageHandler() = default;
+
+void PageHandler::GetPreferences(GetPreferencesCallback callback) {
+  // Returns hardcoded preferences. In a real application this would
+  // be done with the help of Preference APIs.
+  std::move(callback).Run(
+      mojom::sample_swa::Preferences::New(/*background=*/"#ffffff",
+                                          /*foreground=*/"#000000"));
+}
+
+void PageHandler::Send(const std::string& message) {
+  message_ = message;
+  VLOG(1) << "Message set: " << message;
+  // In real application we would do something with the received value.
+}
+
+void PageHandler::DoSomething() {
+  // Pretends to do some work. In reality it just posts a task that will,
+  // once completed, issue an event notification to the page. We use a weak
+  // ptr to the PageHandler object, as the thread pool's lifetime may
+  // be longer than that of PageHandler.
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, base::BindOnce([]() {
+        // Do some work here.
+      }),
+      base::BindOnce(&PageHandler::OnSomethingDone,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void PageHandler::OnSomethingDone() {
+  page_->OnEventOccurred("DoSomething is done");
+}
+
+}  // namespace ash
diff --git a/ash/webui/sample_system_web_app_ui/sample_page_handler.h b/ash/webui/sample_system_web_app_ui/sample_page_handler.h
new file mode 100644
index 0000000..879f7e9
--- /dev/null
+++ b/ash/webui/sample_system_web_app_ui/sample_page_handler.h
@@ -0,0 +1,60 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_WEBUI_SAMPLE_SYSTEM_WEB_APP_UI_SAMPLE_PAGE_HANDLER_H_
+#define ASH_WEBUI_SAMPLE_SYSTEM_WEB_APP_UI_SAMPLE_PAGE_HANDLER_H_
+
+#include <memory>
+
+#include "ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom.h"
+#include "base/memory/weak_ptr.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/mojom/base/string16.mojom.h"
+
+namespace ash {
+
+// Implements the PageHandler interface. For illustration purposes this
+// class also interacts with a remote Page. There are five examples of
+// interaction.
+//  1. The UI fetches "preferences" (an example of "get")
+//  2. The UI sends a message, (an example of "set")
+//  3. The UI asks the PageHandler to execute an action (DoSomething).
+//  4. The PageHandler notifies the page about an event.
+class PageHandler : public mojom::sample_swa::PageHandler {
+ public:
+  PageHandler(
+      mojo::PendingReceiver<mojom::sample_swa::PageHandler> pending_receiver,
+      mojo::PendingRemote<mojom::sample_swa::Page> pending_page);
+  ~PageHandler() override;
+
+  PageHandler(const PageHandler&) = delete;
+  PageHandler& operator=(const PageHandler&) = delete;
+
+ private:
+  // Shows how the page can retrieve information from the browser process.
+  void GetPreferences(GetPreferencesCallback callback) override;
+
+  // Shows how the page can send information to the browser process.
+  void Send(const std::string& message) override;
+
+  // Handles the page requesting an action from the controller.
+  void DoSomething() override;
+
+  // Called as a reaction to DoSomething; invoked when DoSomething is done.
+  void OnSomethingDone();
+
+  mojo::Receiver<mojom::sample_swa::PageHandler> receiver_;
+  mojo::Remote<mojom::sample_swa::Page> page_;
+
+  std::string message_;
+
+  base::WeakPtrFactory<PageHandler> weak_ptr_factory_{this};
+};
+
+}  // namespace ash
+
+#endif  // ASH_WEBUI_SAMPLE_SYSTEM_WEB_APP_UI_SAMPLE_PAGE_HANDLER_H_
diff --git a/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.cc b/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.cc
index 0685b82f..fba1105 100644
--- a/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.cc
+++ b/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.cc
@@ -4,10 +4,11 @@
 
 #include "ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h"
 
-#include <memory>
+#include <utility>
 
 #include "ash/grit/ash_sample_system_web_app_resources.h"
 #include "ash/grit/ash_sample_system_web_app_resources_map.h"
+#include "ash/webui/sample_system_web_app_ui/sample_page_handler.h"
 #include "ash/webui/sample_system_web_app_ui/url_constants.h"
 #include "base/memory/ptr_util.h"
 #include "content/public/browser/web_contents.h"
@@ -23,7 +24,6 @@
     : ui::MojoWebUIController(web_ui) {
   auto trusted_source = base::WrapUnique(
       content::WebUIDataSource::Create(kChromeUISampleSystemWebAppHost));
-
   trusted_source->AddResourcePath("", IDR_ASH_SAMPLE_SYSTEM_WEB_APP_INDEX_HTML);
   trusted_source->AddResourcePaths(base::make_span(
       kAshSampleSystemWebAppResources, kAshSampleSystemWebAppResourcesSize));
@@ -76,4 +76,22 @@
 
 SampleSystemWebAppUI::~SampleSystemWebAppUI() = default;
 
+void SampleSystemWebAppUI::BindInterface(
+    mojo::PendingReceiver<mojom::sample_swa::PageHandlerFactory> factory) {
+  if (sample_page_factory_.is_bound()) {
+    sample_page_factory_.reset();
+  }
+  sample_page_factory_.Bind(std::move(factory));
+}
+
+void SampleSystemWebAppUI::CreatePageHandler(
+    mojo::PendingReceiver<mojom::sample_swa::PageHandler> handler,
+    mojo::PendingRemote<mojom::sample_swa::Page> page) {
+  DCHECK(page.is_valid());
+  sample_page_handler_ =
+      std::make_unique<PageHandler>(std::move(handler), std::move(page));
+}
+
+WEB_UI_CONTROLLER_TYPE_IMPL(SampleSystemWebAppUI)
+
 }  // namespace ash
diff --git a/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h b/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h
index ca04255..ab83cb5 100644
--- a/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h
+++ b/ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h
@@ -9,17 +9,46 @@
 #error Sample System Web App should only be included in unofficial builds.
 #endif
 
+#include <memory>
+
+#include "ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "ui/webui/mojo_web_ui_controller.h"
 
 namespace ash {
 
 // The WebUI for chrome://sample-system-web-app/.
-class SampleSystemWebAppUI : public ui::MojoWebUIController {
+class SampleSystemWebAppUI : public ui::MojoWebUIController,
+                             public mojom::sample_swa::PageHandlerFactory {
  public:
   explicit SampleSystemWebAppUI(content::WebUI* web_ui);
   SampleSystemWebAppUI(const SampleSystemWebAppUI&) = delete;
   SampleSystemWebAppUI& operator=(const SampleSystemWebAppUI&) = delete;
   ~SampleSystemWebAppUI() override;
+
+  void BindInterface(
+      mojo::PendingReceiver<mojom::sample_swa::PageHandlerFactory> factory);
+
+ private:
+  // mojom::sample_swa::PageHandlerFactory:
+  void CreatePageHandler(
+      mojo::PendingReceiver<mojom::sample_swa::PageHandler> handler,
+      mojo::PendingRemote<mojom::sample_swa::Page> page) override;
+
+  mojo::Receiver<mojom::sample_swa::PageHandlerFactory> sample_page_factory_{
+      this};
+
+  // Handles requests from the user visible page. Created when the page calls
+  // PageHandlerFactory::CreatePageHandler(). Expected to live as long as
+  // the WebUIController. In most cases this matches the lifetime of the page.
+  // However, sometimes the WebUIController is re-used within same-origin
+  // navigations. Calling CreatePageHandler() multiple times will replace the
+  // existing sample_page_handler_.
+  std::unique_ptr<mojom::sample_swa::PageHandler> sample_page_handler_;
+
+  WEB_UI_CONTROLLER_TYPE_DECL();
 };
 
 }  // namespace ash
diff --git a/ash/webui/sample_system_web_app_ui/test/sample_system_web_app_ui_browsertest.js b/ash/webui/sample_system_web_app_ui/test/sample_system_web_app_ui_browsertest.js
index c99dc7b7..54a277a 100644
--- a/ash/webui/sample_system_web_app_ui/test/sample_system_web_app_ui_browsertest.js
+++ b/ash/webui/sample_system_web_app_ui/test/sample_system_web_app_ui_browsertest.js
@@ -21,6 +21,11 @@
   get runAccessibilityChecks() {
     return false;
   }
+
+  /** @override */
+  get isAsync() {
+    return true;
+  }
 };
 
 // Tests that chrome://sample-system-web-app runs js file and that it goes
@@ -30,8 +35,36 @@
 
   assertEquals(header.innerText, 'Sample System Web App');
   assertEquals(document.location.origin, HOST_ORIGIN);
+  testDone();
 });
 
+// Test the ability to get information from the page handler.
+TEST_F('SampleSystemWebAppUIBrowserTest', 'FetchPreferences', async () => {
+  const {preferences} = await window.pageHandler.getPreferences();
+  assertDeepEquals({background: '#ffffff', foreground: '#000000'}, preferences);
+  testDone();
+})
+
+// Test the ability to trigger work in the page handler.
+TEST_F('SampleSystemWebAppUIBrowserTest', 'DoSomething', async () => {
+  const pageHandler = window.pageHandler;
+  const callbackRouter = window.callbackRouter;
+
+  // Now execute our test: zero the event count and call doSomething.
+  window.eventCount.set('DoSomething is done', 0)
+  pageHandler.doSomething();
+
+  // Ensure the DoSomething() is called on the browser side.
+  await pageHandler.$.flushForTesting();
+
+  // Await the C++ process to call back with the event.
+  await callbackRouter.$.flush();
+  // Verify the expected event count.
+  assertEquals(1, window.eventCount.get('DoSomething is done'));
+
+  testDone();
+})
+
 var SampleSystemWebAppUIUntrustedBrowserTest = class extends testing.Test {
   /** @override */
   get browsePreload() {
@@ -55,11 +88,10 @@
     'SampleSystemWebAppUIUntrustedBrowserTest', 'HasChromeUntrustedIframe',
     () => {
       const iframe = document.querySelector('iframe');
-      window.onmessage =
-          (event) => {
-            assertEquals(event.origin, UNTRUSTED_HOST_ORIGIN);
-            assertEquals(event.data.success, true);
-            testDone();
-          };
-          iframe.contentWindow.postMessage('hello', UNTRUSTED_HOST_ORIGIN);
+      window.onmessage = (event) => {
+        assertEquals(event.origin, UNTRUSTED_HOST_ORIGIN);
+        assertEquals(event.data.success, true);
+        testDone();
+      };
+      iframe.contentWindow.postMessage('hello', UNTRUSTED_HOST_ORIGIN);
     });
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index bca2f1f..e89a2a0 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-6.20210810.1.1
+6.20210810.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index bca2f1f..e89a2a0 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-6.20210810.1.1
+6.20210810.3.1
diff --git a/chrome/VERSION b/chrome/VERSION
index 4094de3d..fa5cb75 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=94
 MINOR=0
-BUILD=4604
+BUILD=4605
 PATCH=0
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index a6678b1..207c1b4 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1064,8 +1064,8 @@
   "java/src/org/chromium/chrome/browser/sharing/sms_fetcher/SmsFetcherMessageHandler.java",
   "java/src/org/chromium/chrome/browser/signin/SigninBridge.java",
   "java/src/org/chromium/chrome/browser/signin/SigninChecker.java",
+  "java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java",
   "java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java",
-  "java/src/org/chromium/chrome/browser/signin/SigninHelperProvider.java",
   "java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java",
   "java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java",
   "java/src/org/chromium/chrome/browser/signin/SyncConsentActivityLauncherImpl.java",
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn
index 3533ab4b..efa009a8 100644
--- a/chrome/android/features/autofill_assistant/BUILD.gn
+++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -321,6 +321,7 @@
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java",
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java",
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/BottomSheetOnboardingCoordinatorTest.java",
+    "javatests/src/org/chromium/chrome/browser/autofill_assistant/DirectActionsIntegrationTest.java",
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/InChromeTriggeringTest.java",
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/MiniActionTestUtil.java",
     "javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureParameters.java",
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependenciesImpl.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependenciesImpl.java
index 425b39f1..327dd001 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependenciesImpl.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependenciesImpl.java
@@ -40,6 +40,7 @@
     private final ActivityKeyboardVisibilityDelegate mKeyboardVisibilityDelegate;
     private final ApplicationViewportInsetSupplier mBottomInsetProvider;
     private final ActivityTabProvider mActivityTabProvider;
+    private final CompositorViewHolder mCompositorViewHolder;
 
     // Dependencies tied to the web_contents.
     private final OnboardingCoordinatorFactory mOnboardingCoordinatorFactory;
@@ -69,6 +70,7 @@
         mKeyboardVisibilityDelegate = keyboardVisibilityDelegate;
         mBottomInsetProvider = bottomInsetProvider;
         mActivityTabProvider = activityTabProvider;
+        mCompositorViewHolder = compositorViewHolder;
         mTriggerScriptBridge = new AssistantTriggerScriptBridge(this);
     }
 
@@ -143,4 +145,7 @@
     public ActivityTabProvider getActivityTabProvider() {
         return mActivityTabProvider;
     }
+    public CompositorViewHolder getCompositorViewHolder() {
+        return mCompositorViewHolder;
+    }
 }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandlerImpl.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandlerImpl.java
index eaa131d..5e5dd20b 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandlerImpl.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandlerImpl.java
@@ -114,6 +114,15 @@
         afterOnboarding.onResult(null);
     }
 
+    @Override
+    public void showFatalError() {
+        AutofillAssistantClient client = getOrCreateClient();
+        if (client == null) {
+            return;
+        }
+        client.showFatalError();
+    }
+
     private WebContents getWebContents() {
         Tab tab = mActivityTabProvider.get();
         if (tab == null) {
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
index 0f2c689..cf814b6 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
@@ -175,6 +175,16 @@
                 arguments.values().toArray(new String[arguments.size()]), overlayCoordinator);
     }
 
+    /**
+     * Displays a generic error message. Intended for direct actions only, to let specific direct
+     * actions show an error on failure.
+     */
+    public void showFatalError() {
+        if (mNativeClientAndroid == 0) return;
+        AutofillAssistantClientJni.get().showFatalError(
+                mNativeClientAndroid, AutofillAssistantClient.this);
+    }
+
     @CalledByNative
     private void chooseAccountAsyncIfNecessary(@Nullable String userName) {
         if (mAccountInitializationStarted) return;
@@ -361,5 +371,6 @@
         boolean performDirectAction(long nativeClientAndroid, AutofillAssistantClient caller,
                 String actionId, String experimentId, String[] argumentNames,
                 String[] argumentValues, @Nullable AssistantOverlayCoordinator overlayCoordinator);
+        void showFatalError(long nativeClientAndroid, AutofillAssistantClient caller);
     }
 }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
index f1bd1242..bf927ed 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
@@ -9,6 +9,7 @@
 import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -21,6 +22,7 @@
 
 import androidx.test.filters.MediumTest;
 
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -86,9 +88,11 @@
         FakeDirectActionReporter reporter = new FakeDirectActionReporter();
         reportAvailableDirectActions(mHandler, reporter);
 
-        assertEquals(1, reporter.mActions.size());
+        Assert.assertThat(reporter.getDirectActions(),
+                containsInAnyOrder("onboarding", "onboarding_and_start"));
 
-        FakeDirectActionReporter.FakeDefinition onboarding = reporter.mActions.get(0);
+        FakeDirectActionReporter.FakeDefinition onboarding =
+                reporter.mActions.get(reporter.getDirectActions().indexOf("onboarding"));
         assertEquals("onboarding", onboarding.mId);
         assertEquals(2, onboarding.mParameters.size());
         assertEquals("name", onboarding.mParameters.get(0).mName);
@@ -208,7 +212,7 @@
     public void testOnboarding() throws Exception {
         mModuleEntryProvider.setInstalled();
 
-        assertThat(isOnboardingReported(), is(true));
+        assertThat(isActionReported("onboarding"), is(true));
         acceptOnboarding();
 
         assertTrue(AutofillAssistantPreferencesUtil.isAutofillOnboardingAccepted());
@@ -219,7 +223,7 @@
     public void testModuleNotAvailable() throws Exception {
         mModuleEntryProvider.setCannotInstall();
 
-        assertThat(isOnboardingReported(), is(true));
+        assertThat(isActionReported("onboarding"), is(true));
         assertFalse(performAction("onboarding", Bundle.EMPTY));
     }
 
@@ -229,7 +233,7 @@
     public void testInstallModuleOnDemand() throws Exception {
         mModuleEntryProvider.setNotInstalled();
 
-        assertThat(isOnboardingReported(), is(true));
+        assertThat(isActionReported("onboarding"), is(true));
         acceptOnboarding();
     }
 
@@ -244,12 +248,12 @@
         assertEquals(Boolean.TRUE, onboardingCallback.waitForResult("accept onboarding"));
     }
 
-    private boolean isOnboardingReported() throws Exception {
+    private boolean isActionReported(String actionId) throws Exception {
         FakeDirectActionReporter reporter = new FakeDirectActionReporter();
         reportAvailableDirectActions(mHandler, reporter);
 
         for (FakeDirectActionReporter.FakeDefinition definition : reporter.mActions) {
-            if (definition.mId.equals("onboarding")) {
+            if (definition.mId.equals(actionId)) {
                 return true;
             }
         }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/DirectActionsIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/DirectActionsIntegrationTest.java
new file mode 100644
index 0000000..cbf5d732
--- /dev/null
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/DirectActionsIntegrationTest.java
@@ -0,0 +1,176 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.autofill_assistant;
+
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.verify;
+
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.checkElementExists;
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntil;
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition;
+import static org.chromium.chrome.browser.autofill_assistant.MiniActionTestUtil.addTapSteps;
+import static org.chromium.chrome.browser.autofill_assistant.ProtoTestUtil.toCssSelector;
+
+import android.os.Bundle;
+
+import androidx.test.filters.MediumTest;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestRule;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import org.chromium.base.Callback;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto;
+import org.chromium.chrome.browser.autofill_assistant.proto.DirectActionProto;
+import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto;
+import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto;
+import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
+import org.chromium.chrome.browser.directactions.DirectActionHandler;
+import org.chromium.chrome.browser.directactions.FakeDirectActionReporter;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * Tests autofill-assistant direct actions.
+ */
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+@RunWith(ChromeJUnit4ClassRunner.class)
+public class DirectActionsIntegrationTest {
+    public DirectActionsIntegrationTest() {}
+
+    private final CustomTabActivityTestRule mTestRule = new CustomTabActivityTestRule();
+
+    @Rule
+    public final TestRule mRulesChain =
+            RuleChain.outerRule(mTestRule).around(new AutofillAssistantCustomTabTestRule(
+                    mTestRule, "autofill_assistant_target_website.html"));
+
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    Callback<Bundle> mDirectActionResultCallback;
+
+    private AutofillAssistantModuleEntry mModuleEntry;
+    private AssistantDependenciesImpl mAssistantDependencies;
+    private DirectActionHandler mDirectActionHandler;
+    private FakeDirectActionReporter mDirectActionReporter;
+
+    @Before
+    public void setUp() {
+        mDirectActionReporter = new FakeDirectActionReporter();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModuleEntry =
+                    AutofillAssistantModuleEntryProvider.INSTANCE.getModuleEntryIfInstalled();
+            assert mModuleEntry != null;
+            mAssistantDependencies =
+                    (AssistantDependenciesImpl) AutofillAssistantFacade.createDependencies(
+                            mTestRule.getActivity(), mModuleEntry);
+            mDirectActionHandler = AutofillAssistantFacade.createDirectActionHandler(
+                    mTestRule.getActivity(), mAssistantDependencies.getBottomSheetController(),
+                    mAssistantDependencies.getBrowserControls(),
+                    mAssistantDependencies.getCompositorViewHolder(),
+                    mAssistantDependencies.getActivityTabProvider());
+        });
+    }
+
+    @Test
+    @MediumTest
+    @Features.
+    EnableFeatures({ChromeFeatureList.DIRECT_ACTIONS, ChromeFeatureList.AUTOFILL_ASSISTANT,
+            ChromeFeatureList.AUTOFILL_ASSISTANT_DIRECT_ACTIONS})
+    public void
+    testOnboardingAndStart() {
+        AutofillAssistantPreferencesUtil.setInitialPreferences(false);
+        mDirectActionHandler.reportAvailableDirectActions(mDirectActionReporter);
+        Assert.assertThat(mDirectActionReporter.getDirectActions(),
+                containsInAnyOrder("onboarding", "onboarding_and_start"));
+
+        ArrayList<ActionProto> list = new ArrayList<>();
+        // Tapping touch_area_one will make it disappear.
+        addTapSteps(toCssSelector("#touch_area_one"), list);
+
+        AutofillAssistantTestScript script = new AutofillAssistantTestScript(
+                SupportedScriptProto.newBuilder()
+                        .setPath("autofill_assistant_target_website.html")
+                        .setPresentation(PresentationProto.newBuilder().setDirectAction(
+                                DirectActionProto.newBuilder()
+                                        .addNames("some_direct_action")
+                                        .build()))
+                        .build(),
+                list);
+
+        AutofillAssistantTestService testService =
+                new AutofillAssistantTestService(Collections.singletonList(script));
+        testService.scheduleForInjection();
+
+        Bundle arguments = new Bundle();
+        arguments.putString("name", "some_direct_action");
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mDirectActionHandler.performDirectAction(
+                    "onboarding_and_start", arguments, mDirectActionResultCallback);
+        });
+
+        waitUntilViewMatchesCondition(withText("I agree"), isDisplayed());
+        onView(withText("I agree")).perform(click());
+
+        waitUntil(() -> !checkElementExists(mTestRule.getWebContents(), "touch_area_one"));
+        verify(mDirectActionResultCallback)
+                .onResult(argThat(bundle -> bundle.getBoolean("success")));
+    }
+
+    @Test
+    @MediumTest
+    @Features.
+    EnableFeatures({ChromeFeatureList.DIRECT_ACTIONS, ChromeFeatureList.AUTOFILL_ASSISTANT,
+            ChromeFeatureList.AUTOFILL_ASSISTANT_DIRECT_ACTIONS})
+    public void
+    testOnboardingAndStartShowsErrorMessageIfRequested() {
+        AutofillAssistantPreferencesUtil.setInitialPreferences(false);
+        mDirectActionHandler.reportAvailableDirectActions(mDirectActionReporter);
+        Assert.assertThat(mDirectActionReporter.getDirectActions(),
+                containsInAnyOrder("onboarding", "onboarding_and_start"));
+
+        // No scripts available.
+        AutofillAssistantTestService testService =
+                new AutofillAssistantTestService(Collections.emptyList());
+        testService.scheduleForInjection();
+
+        Bundle arguments = new Bundle();
+        arguments.putString("name", "some_direct_action");
+        arguments.putBoolean("show_error_on_failure", true);
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mDirectActionHandler.performDirectAction(
+                    "onboarding_and_start", arguments, mDirectActionResultCallback);
+        });
+
+        waitUntilViewMatchesCondition(withText("I agree"), isDisplayed());
+        onView(withText("I agree")).perform(click());
+
+        waitUntilViewMatchesCondition(withText("Sorry, something went wrong."), isDisplayed());
+        verify(mDirectActionResultCallback)
+                .onResult(argThat(bundle -> !bundle.getBoolean("success")));
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java
index 3c604023..54f331d9 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java
@@ -68,4 +68,9 @@
      */
     void performAction(
             String name, String experimentIds, Bundle arguments, Callback<Boolean> callback);
+
+    /**
+     * Displays a generic error message to the user.
+     */
+    void showFatalError();
 }
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandler.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandler.java
index 91c3e79..e6813a04 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandler.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandler.java
@@ -32,7 +32,9 @@
     private static final String ACTION_NAME = "name";
     private static final String EXPERIMENT_IDS = "experiment_ids";
     private static final String ONBOARDING_ACTION = "onboarding";
+    private static final String ONBOARDING_AND_START_ACTION = "onboarding_and_start";
     private static final String USER_NAME = "user_name";
+    private static final String SHOW_ERROR_ON_FAILURE = "show_error_on_failure";
 
     private final Context mContext;
     private final BottomSheetController mBottomSheetController;
@@ -68,6 +70,12 @@
                     .withParameter(ACTION_NAME, Type.STRING, /* required= */ false)
                     .withParameter(EXPERIMENT_IDS, Type.STRING, /* required= */ false)
                     .withResult(AA_ACTION_RESULT, Type.BOOLEAN);
+            reporter.addDirectAction(ONBOARDING_AND_START_ACTION)
+                    .withParameter(ACTION_NAME, Type.STRING, /* required= */ true)
+                    .withParameter(USER_NAME, Type.STRING, /* required= */ false)
+                    .withParameter(EXPERIMENT_IDS, Type.STRING, /* required= */ false)
+                    .withParameter(SHOW_ERROR_ON_FAILURE, Type.BOOLEAN, /* required= */ false)
+                    .withResult(AA_ACTION_RESULT, Type.BOOLEAN);
             return;
         }
 
@@ -109,7 +117,8 @@
             return true;
         }
         // Only handle and perform the action if it is known to the controller.
-        if (isActionAvailable(actionId) || ONBOARDING_ACTION.equals(actionId)) {
+        if (isActionAvailable(actionId) || ONBOARDING_ACTION.equals(actionId)
+                || ONBOARDING_AND_START_ACTION.equals(actionId)) {
             performAction(actionId, arguments, callback);
             return true;
         }
@@ -180,6 +189,38 @@
                 delegate.performOnboarding(experimentIds, arguments, booleanCallback);
                 return;
             }
+            if (ONBOARDING_AND_START_ACTION.equals(actionId)) {
+                delegate.performOnboarding(experimentIds, arguments, onboardingResult -> {
+                    if (!onboardingResult) {
+                        booleanCallback.onResult(false);
+                        return;
+                    }
+                    boolean showErrorOnFailure = arguments.getBoolean(SHOW_ERROR_ON_FAILURE, false);
+                    delegate.fetchWebsiteActions(arguments.getString(USER_NAME, ""),
+                            arguments.getString(EXPERIMENT_IDS, ""), arguments,
+                            fetchActionsResult -> {
+                                if (!fetchActionsResult) {
+                                    booleanCallback.onResult(false);
+                                    if (showErrorOnFailure) {
+                                        delegate.showFatalError();
+                                    }
+                                    return;
+                                }
+                                String afterOnboardingActionId =
+                                        arguments.getString(ACTION_NAME, "");
+                                if (!isActionAvailable(afterOnboardingActionId)) {
+                                    booleanCallback.onResult(false);
+                                    if (showErrorOnFailure) {
+                                        delegate.showFatalError();
+                                    }
+                                    return;
+                                }
+                                delegate.performAction(afterOnboardingActionId, experimentIds,
+                                        arguments, booleanCallback);
+                            });
+                });
+                return;
+            }
 
             Callback<Boolean> successCallback = (success) -> {
                 booleanCallback.onResult(success && !delegate.getActions().isEmpty());
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
index 7f237bf..79f0730 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Sleep oortjies om hulle te groepeer</translation>
 <translation id="5846292395804797011">Maak <ph name="TITLE_OF_GROUP" />-groep met <ph name="NUMBER_OF_TABS" /> oortjies toe</translation>
 <translation id="6040143037577758943">Maak toe</translation>
+<translation id="6054741997831917303">Hierdie item se prys het onlangs van <ph name="PREVIOUS_PRICE" /> na <ph name="NEW_PRICE" /> gedaal</translation>
 <translation id="6193448654517602979">Kies oortjies</translation>
 <translation id="6510648526783655549">Maak oortjiestrook toe</translation>
 <translation id="6562820390860419811">Skuif oortjie na links</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
index 0c1a1ac4..d007fc0 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">اسحب علامات التبويب لجمعها.</translation>
 <translation id="5846292395804797011">إغلاق المجموعة "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="NUMBER_OF_TABS" /> علامة تبويب</translation>
 <translation id="6040143037577758943">إغلاق</translation>
+<translation id="6054741997831917303">انخفض مؤخرًا سعر هذا المنتج من <ph name="PREVIOUS_PRICE" /> إلى <ph name="NEW_PRICE" />.</translation>
 <translation id="6193448654517602979">اختيار علامات التبويب</translation>
 <translation id="6510648526783655549">إغلاق شريط علامات التبويب</translation>
 <translation id="6562820390860419811">نقل علامة التبويب إلى اليمين</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
index 3b752d7..092ec3ec 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
@@ -48,7 +48,7 @@
 <translation id="58326064309361797">Prevucite kartice da ih grupišete</translation>
 <translation id="5846292395804797011">Zatvaranje grupe kartica <ph name="TITLE_OF_GROUP" /> sa sljedećim brojem kartica: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="6040143037577758943">Zatvori</translation>
-<translation id="6054741997831917303">Cijena ovog artikla bila je <ph name="PREVIOUS_PRICE" />, a sada iznosi <ph name="NEW_PRICE" /></translation>
+<translation id="6054741997831917303">Cijena ove stavke je nedavno pala sa <ph name="PREVIOUS_PRICE" /> na <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Odaberite kartice</translation>
 <translation id="6510648526783655549">Zatvaranje trake kartice</translation>
 <translation id="6562820390860419811">Pomjeranje kartice ulijevo</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb
index 9be4c9a..e5cb45e 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Přetažením můžete karty uspořádat do skupin</translation>
 <translation id="5846292395804797011">Zavřít skupinu <ph name="TITLE_OF_GROUP" /> s tímto počtem karet: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="6040143037577758943">Zavřít</translation>
+<translation id="6054741997831917303">Cena této položky nedávno klesla z <ph name="PREVIOUS_PRICE" /> na <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Vyberte karty</translation>
 <translation id="6510648526783655549">Zavřít lištu karet</translation>
 <translation id="6562820390860419811">Přesunout kartu doleva</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
index 3a44a08..b53dcecd 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Træk og slip faner for at gruppere dem</translation>
 <translation id="5846292395804797011">Luk gruppen <ph name="TITLE_OF_GROUP" /> med <ph name="NUMBER_OF_TABS" /> faner</translation>
 <translation id="6040143037577758943">Luk</translation>
+<translation id="6054741997831917303">Prisen på denne vare er for nylig faldet fra <ph name="PREVIOUS_PRICE" /> til <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Vælg faner</translation>
 <translation id="6510648526783655549">Luk fanelinje</translation>
 <translation id="6562820390860419811">Flyt fane til venstre</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
index 1c24c8e..3317a07 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Σύρετε καρτέλες για να τις ομαδοποιήσετε.</translation>
 <translation id="5846292395804797011">Κλείσιμο της ομάδας <ph name="TITLE_OF_GROUP" /> με τις <ph name="NUMBER_OF_TABS" /> καρτέλες</translation>
 <translation id="6040143037577758943">Κλείσιμο</translation>
+<translation id="6054741997831917303">Η τιμή αυτού του στοιχείου μειώθηκε πρόσφατα από <ph name="PREVIOUS_PRICE" /> σε <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Επιλογή καρτελών</translation>
 <translation id="6510648526783655549">Κλείσιμο γραμμής καρτελών</translation>
 <translation id="6562820390860419811">Μετακίνηση καρτέλας αριστερά</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb
index 010709b..b61f8a9 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Arrastra las pestañas para agruparlas</translation>
 <translation id="5846292395804797011">Cerrar grupo <ph name="TITLE_OF_GROUP" /> con <ph name="NUMBER_OF_TABS" /> pestañas</translation>
 <translation id="6040143037577758943">Cerrar</translation>
+<translation id="6054741997831917303">El precio de este elemento ha bajado recientemente de <ph name="PREVIOUS_PRICE" /> a <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Selecciona pestañas</translation>
 <translation id="6510648526783655549">Cerrar barra de pestañas</translation>
 <translation id="6562820390860419811">Mover pestaña a la izquierda</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb
index e57280a..b953fae 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Fitxak taldekatzeko, arrasta itzazu</translation>
 <translation id="5846292395804797011">Itxi <ph name="NUMBER_OF_TABS" /> fitxa dituen <ph name="TITLE_OF_GROUP" /> fitxa taldea</translation>
 <translation id="6040143037577758943">Itxi</translation>
+<translation id="6054741997831917303">Produktu honen prezioa jaitsi egin da, eta <ph name="PREVIOUS_PRICE" /> izatetik <ph name="NEW_PRICE" /> izatera pasatu</translation>
 <translation id="6193448654517602979">Hautatu fitxak</translation>
 <translation id="6510648526783655549">Itxi fitxen zinta</translation>
 <translation id="6562820390860419811">Eraman fitxa ezkerrera</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
index 88e9ec3..c557a9d3 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">برای گروه‌بندی برگه‌ها، آن‌ها را بکشید</translation>
 <translation id="5846292395804797011">بستن گروه <ph name="TITLE_OF_GROUP" /> با <ph name="NUMBER_OF_TABS" /> برگه</translation>
 <translation id="6040143037577758943">بستن</translation>
+<translation id="6054741997831917303">قیمت این محصول اخیراً از <ph name="PREVIOUS_PRICE" /> به <ph name="NEW_PRICE" /> کاهش یافته است</translation>
 <translation id="6193448654517602979">انتخاب برگه‌ها</translation>
 <translation id="6510648526783655549">بستن نوار برگه</translation>
 <translation id="6562820390860419811">انتقال برگه به راست</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb
index 9272378..c2e7558b 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Faites glisser les onglets pour les regrouper</translation>
 <translation id="5846292395804797011">Fermez le groupe <ph name="TITLE_OF_GROUP" /> qui contient <ph name="NUMBER_OF_TABS" /> onglets</translation>
 <translation id="6040143037577758943">Fermer</translation>
+<translation id="6054741997831917303">Le prix de cet article est récemment passé de <ph name="PREVIOUS_PRICE" /> à <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Sélectionner des onglets</translation>
 <translation id="6510648526783655549">Fermer la barre d'onglets</translation>
 <translation id="6562820390860419811">Déplacer l'onglet vers la gauche</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
index ddac0da..cd3a02a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">A lapokat húzással csoportosíthatja</translation>
 <translation id="5846292395804797011">A következő, <ph name="NUMBER_OF_TABS" /> lapot tartalmazó csoport bezárása: <ph name="TITLE_OF_GROUP" /></translation>
 <translation id="6040143037577758943">Bezárás</translation>
+<translation id="6054741997831917303">A tétel ára nemrég csökkent. Régi ár: <ph name="PREVIOUS_PRICE" />, új ár: <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Lapok kiválasztása</translation>
 <translation id="6510648526783655549">Lapsor bezárása</translation>
 <translation id="6562820390860419811">Lap mozgatása balra</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
index 59687b2..53700835 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Dragðu flipa til að sameina þá</translation>
 <translation id="5846292395804797011">Loka <ph name="TITLE_OF_GROUP" />-hópi með <ph name="NUMBER_OF_TABS" /> flipum</translation>
 <translation id="6040143037577758943">Loka</translation>
+<translation id="6054741997831917303">Verð á þessari vöru lækkaði nýlega úr <ph name="PREVIOUS_PRICE" /> í <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Velja flipa</translation>
 <translation id="6510648526783655549">Loka fliparæmu</translation>
 <translation id="6562820390860419811">Færa flipa til vinstri</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
index 004e69e7..79922dd 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Trascina le schede per raggrupparle</translation>
 <translation id="5846292395804797011">Chiudi il gruppo <ph name="TITLE_OF_GROUP" /> con <ph name="NUMBER_OF_TABS" /> schede</translation>
 <translation id="6040143037577758943">Chiudi</translation>
+<translation id="6054741997831917303">Il prezzo di questo articolo è recentemente sceso da <ph name="PREVIOUS_PRICE" /> a <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Seleziona schede</translation>
 <translation id="6510648526783655549">Chiudi la tabstrip</translation>
 <translation id="6562820390860419811">Sposta scheda a sinistra</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb
index 3adb1ec2..56de45fb 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Топтоо үчүн өтмөктөрдү сүйрөп келиңиз</translation>
 <translation id="5846292395804797011"><ph name="TITLE_OF_GROUP" /> тобундагы <ph name="NUMBER_OF_TABS" /> өтмөктү жабуу</translation>
 <translation id="6040143037577758943">Жабуу</translation>
+<translation id="6054741997831917303"><ph name="PREVIOUS_PRICE" /> турган бул нерсенин баасы <ph name="NEW_PRICE" /> болуп калды</translation>
 <translation id="6193448654517602979">Өтмөктөрдү тандоо</translation>
 <translation id="6510648526783655549">Өтмөк тасмасын жабуу</translation>
 <translation id="6562820390860419811">Өтмөктү солго жылдыруу</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
index 2b3ec7ca..269484c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">ລາກແຖບເພື່ອຈັດກຸ່ມພວກມັນ</translation>
 <translation id="5846292395804797011">ປິດກຸ່ມ <ph name="TITLE_OF_GROUP" /> ທີ່ມີ <ph name="NUMBER_OF_TABS" /> ແຖບ</translation>
 <translation id="6040143037577758943">ປິດ</translation>
+<translation id="6054741997831917303">ລາຄາຂອງສິນຄ້ານນີ້ຫຼຸດລົງຈາກ <ph name="PREVIOUS_PRICE" /> ເປັນ <ph name="NEW_PRICE" /> ເມື່ອບໍ່ດົນມານີ້</translation>
 <translation id="6193448654517602979">ເລືອກແຖບ</translation>
 <translation id="6510648526783655549">ປິດລາຍແຖບ</translation>
 <translation id="6562820390860419811">ຍ້າຍແຖບໄປຊ້າຍ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb
index 43b9f9e25..f80b2b4c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">ടാബുകൾ ഗ്രൂപ്പ് ചെയ്യാൻ അവ വലിച്ചിടുക</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> ടാബുകളുള്ള <ph name="TITLE_OF_GROUP" /> ഗ്രൂപ്പ് അടയ്ക്കുക</translation>
 <translation id="6040143037577758943">അടയ്ക്കുക</translation>
+<translation id="6054741997831917303">ഈ ഇനത്തിന്റെ വില അടുത്തിടെ <ph name="PREVIOUS_PRICE" /> എന്നതിൽ നിന്ന് <ph name="NEW_PRICE" /> ആയി കുറഞ്ഞു</translation>
 <translation id="6193448654517602979">തിരഞ്ഞെടുക്കൂ</translation>
 <translation id="6510648526783655549">തുറന്ന് വച്ചിട്ടുള്ള ടാബുകൾ അടയ്ക്കുക</translation>
 <translation id="6562820390860419811">ടാബ് ഇടത്തേക്ക് നീക്കുക</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
index 9b9349b..22ab939c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">တဘ်များကို အုပ်စုဖွဲ့ရန် ၎င်းတို့ကို ဖိဆွဲပါ</translation>
 <translation id="5846292395804797011">တဘ် <ph name="NUMBER_OF_TABS" /> ခုဖြင့် <ph name="TITLE_OF_GROUP" /> အုပ်စုကို ပိတ်ရန်</translation>
 <translation id="6040143037577758943">ပိတ်ရန်</translation>
+<translation id="6054741997831917303">ဤပစ္စည်းမှာ မကြာမီက <ph name="PREVIOUS_PRICE" /> မှ <ph name="NEW_PRICE" /> သို့ ဈေးကျသွားသည်</translation>
 <translation id="6193448654517602979">တဘ်ရွေးရန်</translation>
 <translation id="6510648526783655549">တဘ်ဘားတန်းကို ပိတ်ရန်</translation>
 <translation id="6562820390860419811">တဘ်ကို ဘယ်ဘက်သို့ ရွှေ့ရန်</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
index 7ca4af7..496b891 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Przeciągaj karty, by je grupować</translation>
 <translation id="5846292395804797011">Zamknij grupę <ph name="TITLE_OF_GROUP" /> z <ph name="NUMBER_OF_TABS" /> kartami</translation>
 <translation id="6040143037577758943">Zamknij</translation>
+<translation id="6054741997831917303">Ostatnio cena tego elementu spadła z <ph name="PREVIOUS_PRICE" /> do <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Wybierz karty</translation>
 <translation id="6510648526783655549">Zamknij pasek kart</translation>
 <translation id="6562820390860419811">Przenieś kartę w lewo</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
index 1aeb4609..e824bee 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Arraste as guias para agrupá-las</translation>
 <translation id="5846292395804797011">Fechar grupo "<ph name="TITLE_OF_GROUP" />" com <ph name="NUMBER_OF_TABS" /> guias</translation>
 <translation id="6040143037577758943">Fechar</translation>
+<translation id="6054741997831917303">O preço deste item caiu de <ph name="PREVIOUS_PRICE" /> para <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Selecione as guias</translation>
 <translation id="6510648526783655549">Fechar barra de guias</translation>
 <translation id="6562820390860419811">Mover guia para a esquerda</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb
index 395f7f2..d31de06a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Arraste os separadores para os agrupar.</translation>
 <translation id="5846292395804797011">Feche o grupo <ph name="TITLE_OF_GROUP" /> com <ph name="NUMBER_OF_TABS" /> separadores.</translation>
 <translation id="6040143037577758943">Fechar</translation>
+<translation id="6054741997831917303">O preço deste artigo desceu recentemente de <ph name="PREVIOUS_PRICE" /> para <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Selecione separadores</translation>
 <translation id="6510648526783655549">Fechar Faixa de separadores</translation>
 <translation id="6562820390860419811">Mover o separador para a esquerda</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
index c8e603c3..376cd3f 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">පටිති කණ්ඩායම් කිරීමට ඒවා අදින්න</translation>
 <translation id="5846292395804797011"><ph name="TITLE_OF_GROUP" /> සමූහය ටැබ <ph name="NUMBER_OF_TABS" />ක් සමග දිග හරින්න</translation>
 <translation id="6040143037577758943">වසන්න</translation>
+<translation id="6054741997831917303">මෙම අයිතමයෙහි මිල මෑතකදී <ph name="PREVIOUS_PRICE" /> සිට <ph name="NEW_PRICE" /> දක්වා පහත වැටී ඇත</translation>
 <translation id="6193448654517602979">පටිති තෝරන්න</translation>
 <translation id="6510648526783655549">ටැබ් තීරුව වසන්න</translation>
 <translation id="6562820390860419811">පටිත්ත වමට ගෙන යන්න</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
index 22fa34c..aaa6ae68 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Karty zoskupíte presunutím</translation>
 <translation id="5846292395804797011">Zavrieť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="NUMBER_OF_TABS" /> kartami</translation>
 <translation id="6040143037577758943">Zavrieť</translation>
+<translation id="6054741997831917303">Cena tejto položky nedávno klesla z <ph name="PREVIOUS_PRICE" /> na <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Vyberte karty</translation>
 <translation id="6510648526783655549">Zavrieť panel kariet</translation>
 <translation id="6562820390860419811">Presunúť kartu doľava</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb
index 37ce40e5..6a3324c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Gruppera flikar genom att dra dem</translation>
 <translation id="5846292395804797011">Stäng gruppen <ph name="TITLE_OF_GROUP" /> med <ph name="NUMBER_OF_TABS" /> flikar</translation>
 <translation id="6040143037577758943">Stäng</translation>
+<translation id="6054741997831917303">Priset på den här varan minskade nyligen från <ph name="PREVIOUS_PRICE" /> till <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Välj flikar</translation>
 <translation id="6510648526783655549">Stäng flikhuvud</translation>
 <translation id="6562820390860419811">Flytta fliken åt vänster</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
index 97a1e2f7..5442f6d 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Buruta vichupo ili uviweke katika kikundi</translation>
 <translation id="5846292395804797011">Funga kikundi cha <ph name="TITLE_OF_GROUP" /> chenye vichupo <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="6040143037577758943">Funga</translation>
+<translation id="6054741997831917303">Hivi majuzi, bei ya kipengee hiki ilipunguzwa kutoka <ph name="PREVIOUS_PRICE" /> ikawa <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Chagua vichupo</translation>
 <translation id="6510648526783655549">Funga ukanda wa vichupo</translation>
 <translation id="6562820390860419811">Sogeza kichupo kushoto</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
index f605055..dbd6f7e 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Gruplandırmak için sekmeleri sürükleyin</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> sekmeli <ph name="TITLE_OF_GROUP" /> grubunu kapat</translation>
 <translation id="6040143037577758943">Kapat</translation>
+<translation id="6054741997831917303">Yakın zamanda bu ürünün <ph name="PREVIOUS_PRICE" /> olan fiyatı düştü ve <ph name="NEW_PRICE" /> oldu</translation>
 <translation id="6193448654517602979">Sekmeleri seçin</translation>
 <translation id="6510648526783655549">Sekme şeridini kapat</translation>
 <translation id="6562820390860419811">Sekmeyi sola taşı</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
index 18ea0265..e03eb80 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Перетягуйте вкладки, щоб групувати їх</translation>
 <translation id="5846292395804797011">Закрити групу "<ph name="TITLE_OF_GROUP" />" зі стількома вкладками: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="6040143037577758943">Закрити</translation>
+<translation id="6054741997831917303">Ціна на цей товар нещодавно знизилася з <ph name="PREVIOUS_PRICE" /> до <ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Виберіть вкладки</translation>
 <translation id="6510648526783655549">Закрити панель вкладок</translation>
 <translation id="6562820390860419811">Перемістити вкладку ліворуч</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb
index d0430a66..86ca71b 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Varaqlarni guruhlash uchun bir-birining ustiga torting</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> varaqli <ph name="TITLE_OF_GROUP" /> guruhini yopish</translation>
 <translation id="6040143037577758943">Yopish</translation>
+<translation id="6054741997831917303">Bu mahsulot narxi yaqinda <ph name="PREVIOUS_PRICE" /> dan <ph name="NEW_PRICE" /> ga tushdi</translation>
 <translation id="6193448654517602979">Varaqlarni tanlang</translation>
 <translation id="6510648526783655549">Varaqlar panelini yopish</translation>
 <translation id="6562820390860419811">Varaqni chapga siljitish</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
index 0c58b8a..7923c9ce 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
@@ -48,6 +48,7 @@
 <translation id="58326064309361797">Hudula amathebhu ukuze uwafake eqenjini</translation>
 <translation id="5846292395804797011">Vala iqembu elingu-<ph name="TITLE_OF_GROUP" /> lamathebhu angu-<ph name="NUMBER_OF_TABS" /></translation>
 <translation id="6040143037577758943">Vala</translation>
+<translation id="6054741997831917303">Intengo yale nto isanda kwehla kusuka ku-<ph name="PREVIOUS_PRICE" /> ukuya ku-<ph name="NEW_PRICE" /></translation>
 <translation id="6193448654517602979">Khetha amathebhu</translation>
 <translation id="6510648526783655549">Vala umugqa wamathebhu</translation>
 <translation id="6562820390860419811">Hambisa ithebhu ngakwesokunxele</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
index b9db7eff..7d6704c4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -34,7 +34,7 @@
 import org.chromium.chrome.browser.download.DownloadManagerService;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.language.GlobalAppLocaleController;
-import org.chromium.chrome.browser.signin.SigninHelperProvider;
+import org.chromium.chrome.browser.signin.SigninCheckerProvider;
 import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
 import org.chromium.components.crash.browser.ChildProcessCrashObserver;
@@ -338,7 +338,7 @@
             LibraryPrefetcher.asyncPrefetchLibrariesToMemory();
             getBrowserStartupController().startBrowserProcessesSync(
                     LibraryProcessType.PROCESS_BROWSER, /*singleProcess=*/false);
-            SigninHelperProvider.get();
+            SigninCheckerProvider.get();
         } finally {
             TraceEvent.end("ChromeBrowserInitializer.startChromeBrowserProcessesSync");
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
index 91403301..e4178dea 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -74,7 +74,7 @@
 import org.chromium.chrome.browser.rlz.RevenueStats;
 import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
 import org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardShareActivity;
-import org.chromium.chrome.browser.signin.SigninHelperProvider;
+import org.chromium.chrome.browser.signin.SigninCheckerProvider;
 import org.chromium.chrome.browser.webapps.WebApkVersionManager;
 import org.chromium.chrome.browser.webapps.WebappRegistry;
 import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
@@ -361,7 +361,7 @@
         deferredStartupHandler.addDeferredTask(new Runnable() {
             @Override
             public void run() {
-                SigninHelperProvider.get().onMainActivityStart();
+                SigninCheckerProvider.get().onMainActivityStart();
                 RevenueStats.getInstance();
             }
         });
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
index 2319666..de5f1fc2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -17,7 +17,6 @@
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
 import org.chromium.chrome.browser.signin.services.SigninManager;
-import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver;
 import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver;
 import org.chromium.chrome.browser.signin.services.SigninPreferencesManager;
 import org.chromium.chrome.browser.signin.ui.SigninPromoController;
@@ -170,8 +169,8 @@
      * Observer to get notifications about various sign-in events.
      */
     @VisibleForTesting
-    public class SigninObserver implements SignInStateObserver, SignInAllowedObserver,
-                                           ProfileDataCache.Observer, AccountsChangeObserver {
+    public class SigninObserver
+            implements SignInStateObserver, ProfileDataCache.Observer, AccountsChangeObserver {
         private final SigninManager mSigninManager;
         private final AccountManagerFacade mAccountManagerFacade;
 
@@ -182,9 +181,7 @@
             mSigninManager = signinManager;
             mAccountManagerFacade = AccountManagerFacadeProvider.getInstance();
 
-            mSigninManager.addSignInAllowedObserver(this);
             mSigninManager.addSignInStateObserver(this);
-
             mProfileDataCache.addObserver(this);
             mAccountManagerFacade.addObserver(this);
         }
@@ -193,7 +190,6 @@
             if (mUnregistered) return;
             mUnregistered = true;
 
-            mSigninManager.removeSignInAllowedObserver(this);
             mSigninManager.removeSignInStateObserver(this);
             mProfileDataCache.removeObserver(this);
             mAccountManagerFacade.removeObserver(this);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelperProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
similarity index 91%
rename from chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelperProvider.java
rename to chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
index 5ecc4e8..25ef7e2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelperProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
@@ -14,13 +14,11 @@
 /**
  * This class is used to get a singleton instance of {@link SigninChecker}.
  */
-public class SigninHelperProvider {
+public final class SigninCheckerProvider {
     private static SigninChecker sInstance;
 
     /**
      * @return A singleton instance of {@link SigninChecker}.
-     *
-     * TODO(crbug/1198038): Rename this class to SigninCheckerProvider
      */
     @MainThread
     public static SigninChecker get() {
@@ -35,4 +33,6 @@
         }
         return sInstance;
     }
+
+    private SigninCheckerProvider() {}
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
index 30b43aa..987f324 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -68,9 +68,7 @@
     private final IdentityMutator mIdentityMutator;
     private final AndroidSyncSettings mAndroidSyncSettings;
     private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>();
-    private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers =
-            new ObserverList<>();
-    private List<Runnable> mCallbacksWaitingForPendingOperation = new ArrayList<>();
+    private final List<Runnable> mCallbacksWaitingForPendingOperation = new ArrayList<>();
     private boolean mSigninAllowedByPolicy;
 
     /**
@@ -238,19 +236,9 @@
         mSignInStateObservers.removeObserver(observer);
     }
 
-    @Override
-    public void addSignInAllowedObserver(SignInAllowedObserver observer) {
-        mSignInAllowedObservers.addObserver(observer);
-    }
-
-    @Override
-    public void removeSignInAllowedObserver(SignInAllowedObserver observer) {
-        mSignInAllowedObservers.removeObserver(observer);
-    }
-
     private void notifySignInAllowedChanged() {
         PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
-            for (SignInAllowedObserver observer : mSignInAllowedObservers) {
+            for (SignInStateObserver observer : mSignInStateObservers) {
                 observer.onSignInAllowedChanged();
             }
         });
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
index 9cd85bc..f663e02 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -21,7 +21,7 @@
 import org.chromium.chrome.browser.signin.services.DisplayableProfileData;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
-import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver;
+import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver;
 import org.chromium.chrome.browser.sync.SyncService;
 import org.chromium.chrome.browser.sync.SyncService.SyncStateChangedListener;
 import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils;
@@ -44,7 +44,7 @@
  * in.
  */
 public class SignInPreference
-        extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer,
+        extends Preference implements SignInStateObserver, ProfileDataCache.Observer,
                                       SyncStateChangedListener, AccountsChangeObserver {
     @IntDef({State.SIGNIN_DISABLED_BY_POLICY, State.SIGNIN_DISALLOWED, State.GENERIC_PROMO,
             State.SIGNED_IN})
@@ -85,7 +85,7 @@
         mAccountManagerFacade.addObserver(this);
         IdentityServicesProvider.get()
                 .getSigninManager(Profile.getLastUsedRegularProfile())
-                .addSignInAllowedObserver(this);
+                .addSignInStateObserver(this);
         mProfileDataCache.addObserver(this);
         FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone();
         SyncService syncService = SyncService.get();
@@ -103,7 +103,7 @@
         mAccountManagerFacade.removeObserver(this);
         IdentityServicesProvider.get()
                 .getSigninManager(Profile.getLastUsedRegularProfile())
-                .removeSignInAllowedObserver(this);
+                .removeSignInStateObserver(this);
         mProfileDataCache.removeObserver(this);
         SyncService syncService = SyncService.get();
         if (syncService != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
index dfd8fbdd..519c168 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
@@ -19,7 +19,7 @@
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
 import org.chromium.chrome.browser.signin.services.SigninManager;
-import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver;
+import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver;
 import org.chromium.chrome.browser.signin.ui.PersonalizedSigninPromoView;
 import org.chromium.chrome.browser.signin.ui.SigninPromoController;
 import org.chromium.components.signin.AccountManagerFacade;
@@ -36,7 +36,7 @@
  * A preference that displays Personalized Sync Promo when the user is not syncing.
  */
 public class SyncPromoPreference extends Preference
-        implements SignInAllowedObserver, ProfileDataCache.Observer, AccountsChangeObserver {
+        implements SignInStateObserver, ProfileDataCache.Observer, AccountsChangeObserver {
     @Retention(RetentionPolicy.SOURCE)
     @IntDef({State.PROMO_HIDDEN, State.PERSONALIZED_SIGNIN_PROMO, State.PERSONALIZED_SYNC_PROMO})
     public @interface State {
@@ -73,7 +73,7 @@
         SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
                 Profile.getLastUsedRegularProfile());
         mAccountManagerFacade.addObserver(this);
-        signinManager.addSignInAllowedObserver(this);
+        signinManager.addSignInStateObserver(this);
         mProfileDataCache.addObserver(this);
         FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone();
 
@@ -87,7 +87,7 @@
         SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
                 Profile.getLastUsedRegularProfile());
         mAccountManagerFacade.removeObserver(this);
-        signinManager.removeSignInAllowedObserver(this);
+        signinManager.removeSignInStateObserver(this);
         mProfileDataCache.removeObserver(this);
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
index e07bd90..3534a03 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
@@ -177,7 +177,8 @@
             return expectedPrimaryAccount.equals(
                     mAccountManagerTestRule.getCurrentSignedInAccount());
         });
-        Assert.assertEquals(2, SigninHelperProvider.get().getNumOfChildAccountChecksDoneForTests());
+        Assert.assertEquals(
+                2, SigninCheckerProvider.get().getNumOfChildAccountChecksDoneForTests());
         Assert.assertTrue(
                 actionTester.getActions().contains("Signin_Signin_WipeDataOnChildAccountSignin"));
     }
@@ -195,7 +196,7 @@
         // The check should be done twice, once at activity start-up, the other when account
         // is added.
         CriteriaHelper.pollUiThread(() -> {
-            return SigninHelperProvider.get().getNumOfChildAccountChecksDoneForTests() == 2;
+            return SigninCheckerProvider.get().getNumOfChildAccountChecksDoneForTests() == 2;
         });
         Assert.assertNull(mAccountManagerTestRule.getCurrentSignedInAccount());
         Assert.assertFalse(
@@ -213,7 +214,7 @@
 
         // The check should be done once at activity start-up
         CriteriaHelper.pollUiThread(() -> {
-            return SigninHelperProvider.get().getNumOfChildAccountChecksDoneForTests() == 1;
+            return SigninCheckerProvider.get().getNumOfChildAccountChecksDoneForTests() == 1;
         });
         Assert.assertNull(mAccountManagerTestRule.getCurrentSignedInAccount());
         Assert.assertFalse(
@@ -231,7 +232,7 @@
 
         // The check should be done once at activity start-up
         CriteriaHelper.pollUiThread(() -> {
-            return SigninHelperProvider.get().getNumOfChildAccountChecksDoneForTests() == 1;
+            return SigninCheckerProvider.get().getNumOfChildAccountChecksDoneForTests() == 1;
         });
         Assert.assertNull(mAccountManagerTestRule.getCurrentSignedInAccount());
         Assert.assertFalse(
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb
index b865baf..d2820ab9 100644
--- a/chrome/app/resources/chromium_strings_te.xtb
+++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -9,7 +9,7 @@
 <translation id="1185134272377778587">Chromium గురించి</translation>
 <translation id="1315551408014407711">మీ కొత్త Chromium ప్రొఫైల్‍ను సెట్ అప్ చేయండి</translation>
 <translation id="1396446129537741364">Chromium పాస్‌వర్డ్‌లను చూపడానికి ప్రయత్నిస్తోంది.</translation>
-<translation id="1414495520565016063">మీరు Chromiumకు సైన్ ఇన్ చేసారు!</translation>
+<translation id="1414495520565016063">మీరు Chromiumకు సైన్ ఇన్ చేశారు!</translation>
 <translation id="151962892725702025">మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున, Chromium OS, మీ డేటాను సింక్ చేయ‌లేక‌పోయింది.</translation>
 <translation id="1524282610922162960">Chromium ట్యాబ్‌ను షేర్ చేయండి</translation>
 <translation id="1553461853655228091">మీ పరిసరాల 3D మ్యాప్‌ను సృష్టించడానికి Chromiumకు మీ కెమెరాను యాక్సెస్ చేసే అనుమతి కావాలి</translation>
@@ -109,7 +109,7 @@
 <translation id="452711251841752011">Chromiumకు స్వాగతం; కొత్త బ్రౌజర్ విండో తెరవబడింది</translation>
 <translation id="4544142686420020088">Chromium అప్‌డేట్ అవ్వలేదు, ఏదో తప్పు జరిగింది. <ph name="BEGIN_LINK" />Chromium అప్‌డేట్ సమస్యలు, విఫలమైన అప్‌డేట్‌లను పరిష్కరించండి.<ph name="END_LINK" /></translation>
 <translation id="454579500955453258">కొత్త Chromium ప్రొఫైల్‌లో కొనసాగించాలా?</translation>
-<translation id="4567424176335768812">మీరు <ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేసారు. ఇప్పుడు మీరు సైన్ ఇన్ చేసిన అన్ని పరికరాల్లో మీ బుక్‌మార్క్‌లు, చరిత్ర మరియు ఇతర సెట్టింగ్‌లను యాక్సెస్ చేయవచ్చు.</translation>
+<translation id="4567424176335768812">మీరు <ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేశారు. ఇప్పుడు మీరు సైన్ ఇన్ చేసిన అన్ని పరికరాల్లో మీ బుక్‌మార్క్‌లు, చరిత్ర మరియు ఇతర సెట్టింగ్‌లను యాక్సెస్ చేయవచ్చు.</translation>
 <translation id="459535195905078186">Chromium యాప్‌లు</translation>
 <translation id="4665829708273112819">హెచ్చరిక: Chromium మీ బ్రౌజింగ్ హిస్టరీను రికార్డ్ చేయకుండా ఎక్స్‌టెన్ష‌న్‌లను నివారించలేదు. ఈ ఎక్స్‌టెన్ష‌న్‌ను అజ్ఞాత మోడ్‌లో డిజేబుల్ చేయడానికి, ఈ ఆప్షన్‌ను రద్దు చేయండి.</translation>
 <translation id="4677944499843243528">ఈ ప్రొఫైల్‌ను మరొక కంప్యూటర్ (<ph name="HOST_NAME" />)లో మరో Chromium ప్రాసెస్ (<ph name="PROCESS_ID" />) ఉపయోగిస్తున్నట్లు కనిపిస్తోంది. Chromium ప్రొఫైల్‌ను లాక్ చేసినందున అది పాడవదు. ఈ ప్రొఫైల్‌ను వేరే ప్రాసెస్‌లు ఏవీ ఉపయోగించడం లేదని మీకు ఖచ్చితంగా తెలిస్తే, ప్రొఫైల్‌ను అన్‌లాక్ చేసి Chromiumను మళ్లీ ప్రారంభించవచ్చు.</translation>
@@ -223,7 +223,7 @@
 <translation id="7337881442233988129">Chromium</translation>
 <translation id="7339898014177206373">కొత్త విండో</translation>
 <translation id="734373864078049451">మీ వెబ్, బుక్‌మార్క్‌లు మరియు ఇతర Chromium అంశాలు ఇక్కడ చూపబడతాయి.</translation>
-<translation id="7349591376906416160"><ph name="TARGET_URL_HOSTNAME" />ను యాక్సెస్ చేయడం కోసం <ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరిచే విధంగా Chromiumను మీ సిస్టమ్ నిర్వాహకుడు కాన్ఫిగర్ చేసారు.</translation>
+<translation id="7349591376906416160"><ph name="TARGET_URL_HOSTNAME" />ను యాక్సెస్ చేయడం కోసం <ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరిచే విధంగా Chromiumను మీ సిస్టమ్ నిర్వాహకుడు కాన్ఫిగర్ చేశారు.</translation>
 <translation id="7448255348454382571">Chromium OSని మళ్లీ ప్రారంభించండి</translation>
 <translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium Dev</translation>
 <translation id="7451052299415159299">ఈ సైట్ కోసం మీ కెమెరాను యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 9f158ac..5fb21aa 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Vertaal <ph name="LANGUAGE" /> altyd</translation>
 <translation id="1108600514891325577">Stop</translation>
 <translation id="1110155001042129815">Wag</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">Agtergrondoortjie gebruik tans Bluetooth</translation>
 <translation id="1113892970288677790">Kies saamgestelde kunswerke en prente</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -534,6 +535,7 @@
 <translation id="156793199942386351">"<ph name="CURRENTKEY" />" is reeds toegewys aan die handeling "<ph name="ACTION" />". Druk enige sleutel en <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-konsole</translation>
 <translation id="1568323446248056064">Maak vertoontoestelinstellings oop</translation>
+<translation id="1570604804919108255">Ontdemp kennisgewings</translation>
 <translation id="1571738973904005196">Bekyk oortjie: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Gas)</translation>
 <translation id="1572266655485775982">Aktiveer Wi-Fi</translation>
@@ -591,6 +593,7 @@
 <translation id="1621485112342885423">Jou mandjies</translation>
 <translation id="1621729191093924223">Kenmerke wat 'n mikrofoon nodig het, sal nie werk nie</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" />-data sal uitgevee word</translation>
+<translation id="1621984899599015181">Jou organisasie bestuur opsies om te deel. Sommige items word dalk versteek.</translation>
 <translation id="1622054403950683339">Vergeet Wi-Fi-netwerk</translation>
 <translation id="1623132449929929218">Die prente is nie tans beskikbaar nie. Herkoppel asseblief aan die internet om die muurpapierversamelings te sien.</translation>
 <translation id="1623723619460186680">Dowwer blou lig</translation>
@@ -836,6 +839,7 @@
 <translation id="1850508293116537636">Draai kloksgewys</translation>
 <translation id="1852141627593563189">Vind skadelike sagteware</translation>
 <translation id="1852799913675865625">Kon nie die volgende lêer lees nie: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Gaan voort waar jy opgehou het. In Instellings kan jy programme stel om altyd terug te stel wanneer hulle begin of jy kan terugstelling afskakel.</translation>
 <translation id="1854180393107901205">Hou op uitsaai</translation>
 <translation id="1855079636134697549">Kamera is aangeskakel</translation>
 <translation id="1856715684130786728">Voeg ligging by …</translation>
@@ -965,6 +969,7 @@
 <translation id="1989113344093894667">Kan nie inhoud vasvang nie</translation>
 <translation id="1990046457226896323">Spraaklêers is afgelaai</translation>
 <translation id="1990512225220753005">Moenie kortpaaie op hierdie bladsy wys nie</translation>
+<translation id="199191324030140441">Skakel Moenie Steur Nie af</translation>
 <translation id="1992397118740194946">Nie gestel nie</translation>
 <translation id="1992924914582925289">Verwyder van toestel</translation>
 <translation id="1994173015038366702">Werf-URL</translation>
@@ -1006,6 +1011,7 @@
 
 Jy kan hierdie rekening se instellings bestuur deur die Family Link-program op jou toestel te installeer.  Ons het vir jou instruksies in 'n e-pos gestuur.</translation>
 <translation id="2040460856718599782">Oeps! Kon jou nie staaf nie. Gaan asseblief jou aanmeldingeiebewyse weer na en probeer weer.</translation>
+<translation id="2040894699575719559">Ligging is geblokkeer</translation>
 <translation id="2042279886444479655">Aktiewe profiele</translation>
 <translation id="2044014337866019681">Maak asseblief seker dat jy <ph name="ACCOUNT" /> verifieer om die sessie te ontsluit.</translation>
 <translation id="204497730941176055">Microsoft-sertifikaattemplaatnaam</translation>
@@ -1492,6 +1498,7 @@
 <translation id="2527167509808613699">Enige tipe verbinding</translation>
 <translation id="2530166226437958497">Foutsporing</translation>
 <translation id="2532589005999780174">Hoëkontrasmodus</translation>
+<translation id="2533649878691950253">Hierdie werf is verhinder om te weet wat jou presiese ligging is omdat jy dit gewoonlik nie toelaat nie</translation>
 <translation id="253434972992662860">Laat wag</translation>
 <translation id="253557089021624350">Telling van aktiewe aktiwiteite</translation>
 <translation id="2535799430745250929">Geen sellulêre netwerk bestaan nie</translation>
@@ -1679,6 +1686,7 @@
 <translation id="2738771556149464852">Nie na die tyd nie</translation>
 <translation id="2739191690716947896">Ontfout</translation>
 <translation id="2739240477418971307">Verander jou toeganklikheidinstellings</translation>
+<translation id="2739965161385757621">Gaan my instellings na</translation>
 <translation id="274029851662193272">Ingeduik</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Maak terugstellingterminaal oop</translation>
@@ -1803,6 +1811,7 @@
 <translation id="2864601841139725659">Stel jou profielfoto</translation>
 <translation id="2865919525181940183">Skermkiekie van programme wat tans op die skerm is</translation>
 <translation id="286674810810214575">Gaan tans kragbronne na …</translation>
+<translation id="2866876751734765554">Privaatheidkontrolering</translation>
 <translation id="2867768963760577682">Maak as vasgespelde oortjie oop</translation>
 <translation id="2868746137289129307">Hierdie uitbreiding is verouderd en volgens ondernemingsbeleid gedeaktiveer. Dit kan outomaties geaktiveer word wanneer 'n nuwer weergawe beskikbaar is.</translation>
 <translation id="2870560284913253234">Werf</translation>
@@ -2332,6 +2341,7 @@
 <translation id="3446274660183028131">Begin Parallels Desktop om Windows te installeer.</translation>
 <translation id="344630545793878684">Lees jou data op 'n aantal webwerwe</translation>
 <translation id="3446650212859500694">Hierdie lêer het sensitiewe inhoud</translation>
+<translation id="3446827946208017735">Verstaan en gaan die mees kritieke privaatheidinstellings op een plek na</translation>
 <translation id="3448086340637592206">Google Chrome en Chrome-bedryfstelsel se bykomende bepalings</translation>
 <translation id="3448492834076427715">Dateer rekening op</translation>
 <translation id="3449393517661170867">Nuwe oortjievenster</translation>
@@ -3523,7 +3533,6 @@
 <translation id="4733793249294335256">Ligging</translation>
 <translation id="473546211690256853">Hierdie rekening word bestuur deur <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Die stelsel kon nie toestelidentifiseerders vir hierdie toestel bepaal nie.</translation>
-<translation id="473581466100273252">Wissel tussen inskrywings wat onlangs toegemaak is</translation>
 <translation id="4736292055110123391">Sinkroniseer jou boekmerke, wagwoorde, geskiedenis en meer op al jou toestelle</translation>
 <translation id="473775607612524610">Dateer op</translation>
 <translation id="473936925429402449">Ekstra inhoud <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /> gekies</translation>
@@ -3676,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – deurweef</translation>
 <translation id="4901309472892185668">Kies eksperimenttoestand vir die <ph name="EXPERIMENT_NAME" />-eksperiment.</translation>
 <translation id="49027928311173603">Die beleid wat van die bediener afgelaai is, is ongeldig: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Geskiedenis word nie in Incognito gestoor nie</translation>
 <translation id="4906490889887219338">Stel netwerklêerdelings op of bestuur dit. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Hierdie lêer word nie gereeld afgelaai nie en kan gevaarlik wees.</translation>
 <translation id="4907306957610201395">Toestemmingkategorie</translation>
@@ -3762,6 +3770,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Kon geen <ph name="VM_TYPE" />-VM'e kry nie}=1{1 <ph name="VM_TYPE" />-VM is gekry: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" />-VM'e is gekry: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Geen internetverbinding nie.</translation>
 <translation id="4998430619171209993">Aan</translation>
+<translation id="4999804342505941663">Skakel Moenie Steur Nie aan</translation>
 <translation id="5000922062037820727">Geblokkeer (aanbeveel)</translation>
 <translation id="5005498671520578047">Kopieer wagwoord</translation>
 <translation id="5006218871145547804">Android-program-ADB in Crostini</translation>
@@ -5087,6 +5096,7 @@
 <translation id="6468485451923838994">Lettertipes</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> lêers</translation>
 <translation id="6469557521904094793">Skakel sellulêre netwerk aan</translation>
+<translation id="6470823736074966819">Demp kennisgewings</translation>
 <translation id="6472893788822429178">Wys tuisknoppie</translation>
 <translation id="6474498546677193336">Kon nie ontdeel nie want 'n program gebruik tans hierdie vouer. Die vouer sal ontdeel word wanneer Linux weer afgeskakel word.</translation>
 <translation id="6474884162850599008">Ontkoppel Google Drive-rekening</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 85d4ad0d..fbfe5b9 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -444,6 +444,7 @@
 <translation id="1476088332184200792">ወደ መሣሪያዎ ይቅዱ</translation>
 <translation id="1476607407192946488">የ&amp;ቋንቋ ቅንብሮች...</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> የእርስዎን ዘመናዊ ካርድ እንደገባ እንዲቆይ ይፈልግብዎታል።</translation>
+<translation id="1477654881618305065">የእርስዎ ድርጅት ይህን ይዘት እርስዎ እንዲያጋሩ አይፈቅድም። እገዛ ካስፈለገዎት አስተዳዳሪዎን ያነጋግሩ።</translation>
 <translation id="1478340334823509079">ዝርዝሮች፦ <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">መጫን አልነቃም</translation>
 <translation id="1480571698637441426">ጥያቄዎችን በሚጠይቁበት ጊዜ የተበጁ ምላሾችን ለማግኘት ረዳትዎ በማያ ገጽዎ ላይ ያለው ቅጽበታዊ ገጽ እይታን እንዲደርስ ይፍቀዱለት። ይህ እንዲሁም በመጫወት ላይ ያሉ የዘፈኖች ወይም የቪዲዮዎች መረጃን ሊያካትት ይችላል።</translation>
@@ -619,6 +620,7 @@
 <translation id="1643921258693943800">በአቅራቢያ አጋራ ለመጠቀም፣ ብሉቱዝን እና Wi-Fiን ያብሩ</translation>
 <translation id="1644574205037202324">ታሪክ</translation>
 <translation id="1645516838734033527">የእርስዎን <ph name="DEVICE_TYPE" /> ደህንነቱ እንደተጠበቀ ለማቆየት Smart Lock በእርስዎ ስልክ ላይ የማያ ገጽ መቆለፊያ ያስፈልገዋል።</translation>
+<translation id="1646793251510634025">ፍለጋን እና አሰሳን ለማትባት ቅንብሮችን ይገምግሙ</translation>
 <translation id="1646982517418478057">ይህን የዕውቅና ማረጋገጫ ፋይል ለማመስጠር እባክዎ የይለፍ ቃል ያስገቡ</translation>
 <translation id="1648528859488547844">አካባቢን ለመወሰን Wi‑Fi፣ ብሉቱዝ ወይም የተንቀሳቃሽ ስልክ አውታረ መረቦችን ተጠቀም</translation>
 <translation id="164936512206786300">የብሉቱዝ መሣሪያን ነጥል</translation>
@@ -1470,6 +1472,7 @@
 <translation id="2514326558286966059">በጣት አሻራዎ በፍጥነት ይክፈቱ</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">አንድ ተጨማሪ መቀየሪያ ይመድቡ</translation>
+<translation id="251722524540674480">የተጠቃሚ ስምዎን ያረጋግጡ</translation>
 <translation id="2517472476991765520">ቃኝ</translation>
 <translation id="2518024842978892609">የደንበኛ እውቅና ማረጋገጫዎችዎን ይጠቀማል</translation>
 <translation id="2519517390894391510">የእውቅና ማረጋገጫ መገለጫ ስም</translation>
@@ -2174,6 +2177,7 @@
 <translation id="3288047731229977326">በገንቢ ሁኔታ የሚሄዱ ጥያዎች የእርስዎን ኮምፒውተር ሊጎዱ ይችላሉ። እርስዎ ገንቢ ካልሆኑ ደህንነትዎን ለማረገገጥ በገንቢ ሁኔታ የሚሄዱ ቅጥያዎችን ማሰናከል አለብዎ።</translation>
 <translation id="3289668031376215426">ራስ-ሰር ዓቢይ ሆሄ ማድረጊያ</translation>
 <translation id="3289856944988573801">ዝማኔዎች ካሉ ለማየት እባክዎ Ethernet ወይም Wi-Fi ይጠቀሙ።</translation>
+<translation id="3291436823898732747">የተሻሻለ አሰሳ፦ ለምሳሌ፣ መተየብ ከመጀመርዎ በፊት በኦምኒቦክስ ውስጥ ያሉ የአስተያየት ጥቆማዎች</translation>
 <translation id="3293644607209440645">ይህን ገጽ ላክ</translation>
 <translation id="32939749466444286">የLinux መያዣ አልጀመረም። እባክዎ እንደገና ይሞክሩ።</translation>
 <translation id="3294437725009624529">እንግዳ</translation>
@@ -3510,7 +3514,6 @@
 <translation id="4733793249294335256">አካባቢ</translation>
 <translation id="473546211690256853">ይህ መለያ በ<ph name="DOMAIN" /> ነው የሚተዳደረው</translation>
 <translation id="4735803855089279419">ሥርዓቱ ለዚህ መሣሪያ የመሣሪያ መለያዎችን መወሰን አልቻለም።</translation>
-<translation id="473581466100273252">በቅርብ ጊዜ የተዘጉ ግቤቶችን ይቀያይሩ</translation>
 <translation id="4736292055110123391">የእርስዎን ዕልባቶች፣ የይለፍ ቃላት፣ ታሪክ እና ተጨማሪ ነገሮች በሁሉም መሣሪያዎችዎ ላይ ያሳምሩ</translation>
 <translation id="473775607612524610">አዘምን</translation>
 <translation id="473936925429402449">ተመርጧል፣ ተጨማሪ ይዘት <ph name="CURRENT_ELEMENT" /> ከ<ph name="TOTAL_ELEMENTS" /></translation>
@@ -3663,7 +3666,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> ኸዝ - የተጠላለፈ</translation>
 <translation id="4901309472892185668">ለ<ph name="EXPERIMENT_NAME" /> ሙከራ የሙከራ ሁኔታን ይምረጡ።</translation>
 <translation id="49027928311173603">ከአገልጋዩ የወረደው መመሪያ ልክ ያልሆነ ነው፦ <ph name="VALIDATION_ERROR" />።</translation>
-<translation id="4905269543817054577">ታሪክ ማንነት በማያሳውቅ ውስጥ አልተቀመጠም</translation>
 <translation id="4906490889887219338">የአውታረ መረብ ፋይል ማጋራቶችን ያዋቅሩ ወይም ያቀናብሩ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ይህ ፋይል በተለምዶ የሚወርድ አይደለም፣ እና አደገኛ ሊሆን ይችላል።</translation>
 <translation id="4907306957610201395">የፈቃድ ምድብ</translation>
@@ -4206,6 +4208,7 @@
 <translation id="5505307013568720083">ቀለም ጨርሷል</translation>
 <translation id="5505794066310932198">አዛዥን ይቀያይሩ</translation>
 <translation id="5507756662695126555">ክህደት የሌለበት</translation>
+<translation id="5507795078844206688">የሚጎበኟቸው የገጾች ዩአርኤል፣ ለምሳሌ https://www.google.com</translation>
 <translation id="5509693895992845810">አስቀምጥ &amp;እንደ…</translation>
 <translation id="5509914365760201064">ሰጪ፦ <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">የምስል መግለጫዎችን ከGoogle አግኝ</translation>
@@ -4523,6 +4526,7 @@
 <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation>
 <translation id="5870086504539785141">የተደራሽነት ምናሌ ዝጋ</translation>
 <translation id="5870155679953074650">ከባድ ስህተቶች</translation>
+<translation id="5875534259258494936">ማያ ገጽን ማጋራት አብቅቷል</translation>
 <translation id="5876576639916258720">በማሄድ ላይ...</translation>
 <translation id="5876851302954717356">በቀኝ በኩል አዲስ ትር</translation>
 <translation id="5877064549588274448">ሰርጥ ተለውጧል። ለውጦችን ለመተግበር መሳሪያዎን ዳግም ያስጀምሩ።</translation>
@@ -5382,6 +5386,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> እንደ ስር ሊሄድ አይችልም።</translation>
 <translation id="6812841287760418429">ለውጦችን አስቀምጥ</translation>
 <translation id="6813907279658683733">መላው ማያ ገጽ</translation>
+<translation id="6814033694018386318">ለGoogle የሚያጋሩት ነገር</translation>
 <translation id="6817174620439930047">አንድ ጣቢያ የMIDI መሣሪያዎችን ለመድረስ ለሚመለከተው ሥርዓት ብቻ የተወሰኑ መልእክቶችን ለመጠቀም ሲፈልግ ጠይቅ (የሚመከር)</translation>
 <translation id="6818198425579322765">የሚተረጎመው የገጽ ቋንቋ</translation>
 <translation id="6818802132960437751">አብሮገነብ የቫይረስ መከላከያ</translation>
@@ -5877,6 +5882,7 @@
 <translation id="7374376573160927383">የዩኤስቢ መሣሪያዎችን ያቀናብሩ</translation>
 <translation id="7374461526650987610">የፕሮቶኮል ተቆጣጣሪዎች</translation>
 <translation id="7375235221357833624">{0,plural, =1{በአንድ ሰዓት ውስጥ መሣሪያን አዘምን}one{በ# ሰዓታት ውስጥ መሣሪያን አዘምን}other{በ# ሰዓታት ውስጥ መሣሪያን አዘምን}}</translation>
+<translation id="7376543451826039186">ፈጣን አሰሳ - ለምሳሌ፣ አሁን ባለው ገጽ ላይ በመመስረት የተወሰነ ተጨማሪ ይዘትን በንቃት ይጫኑ</translation>
 <translation id="7376553024552204454">በሚንቀሳቀስበት ጊዜ የመዳፊት ጠቋሚን አድምቅ</translation>
 <translation id="737728204345822099">ወደዚህ ጣቢያ ያደረጉት የጉብኝትዎ መዝገብ በደህንነት ቁልፍዎ ላይ ሊቀመጥ ይችላል።</translation>
 <translation id="7377451353532943397">የዳሳሽ መዳረሻን ማገዱን ቀጥል</translation>
@@ -5934,6 +5940,7 @@
 <translation id="7427798576651127129">ጥሪ ከ<ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">ምንም HID መሣሪያዎች አልተገኙም</translation>
 <translation id="7431991332293347422">ፍለጋን እና ተጨማሪ ነገሮችን ግላዊነት ለማላበስ የእርስዎ የአሰሳ ታሪክ እንዴት ጥቅም ላይ እንደሚውል ይቆጣጠሩ</translation>
+<translation id="7432200167665670017">የእርስዎ አስተዳዳሪ «<ph name="EXTENSION_NAME" />»ን አግዷል - የመተግበሪያ መታወቂያ <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">የእርስዎን <ph name="DEVICE_TYPE" /> እየተጠቀሙ ለመቀጠል ዘመናዊ ካርድ ያስገቡ</translation>
 <translation id="7433957986129316853">ይቀጥል</translation>
 <translation id="7434509671034404296">ገንቢ</translation>
@@ -5963,6 +5970,7 @@
 <translation id="7460045493116006516">እርስዎ የጫኑት አሁን ያለ ገጽታ</translation>
 <translation id="7461924472993315131">ሰካ</translation>
 <translation id="746216226901520237">በሚቀጥለው ጊዜ ስልክዎ የእርስዎን <ph name="DEVICE_TYPE" /> ይከፍታል። በቅንብሮች ውስጥ Smart Lock ማጥፋት ይችላሉ።</translation>
+<translation id="7464637891177137294">በGoogle መለያዎ <ph name="ACCOUNT" /> ውስጥ ያስቀምጡት</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ክፍት ትር፣ የትር ቅንጥብ ለመቀየር ይጫኑ}one{# ክፍት ትሮች፣ የትር ቅንጥብ ለመቀየር ይጫኑ}other{# ክፍት ትሮች፣ የትር ቅንጥብ ለመቀየር ይጫኑ}}</translation>
 <translation id="7465635034594602553">የሆነ ችግር ተፈጥሯል። እባክዎ ትንሽ ደቂቃዎች ይጠብቁና እንደገና <ph name="APP_NAME" />ን ያሂዱ።</translation>
 <translation id="7465778193084373987">የNetscape ሰርቲፊኬት የመሻሪያ URL</translation>
@@ -6026,6 +6034,7 @@
 <translation id="7525625923260515951">የተመረጠውን ጽሑፍ ይስሙ</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 ተጨማሪ}one{{NUM_DOWNLOADS} ተጨማሪ}other{{NUM_DOWNLOADS} ተጨማሪ}}</translation>
 <translation id="7526989658317409655">ቦታ ያዥ</translation>
+<translation id="7527758104894292229">በእርስዎ Google መለያ <ph name="ACCOUNT" /> ውስጥ ያዘምኑት</translation>
 <translation id="7529411698175791732">የበይነመረብ ግንኙነትዎን ይፈትሹ። ችግሩ ከቀጠለ ዘግተው ወጥተው እንደገና ለመግባት ይሞክሩ።</translation>
 <translation id="7529876053219658589">{0,plural, =1{እንግዳን ዝጋ}one{እንግዳን ዝጋ}other{እንግዳን ዝጋ}}</translation>
 <translation id="7530016656428373557">የትፋት ፍጥነት በዋት</translation>
@@ -6413,6 +6422,7 @@
 <translation id="7898725031477653577">ሁል ጊዜ ተርጉም</translation>
 <translation id="790040513076446191">ከግላዊነት ጋር የተገናኙ ቅንብሮችን ይቆጣጠሩ</translation>
 <translation id="7901405293566323524">የስልክ መገናኛ</translation>
+<translation id="7901914889562552258">የገጽ ልኬቶችን በመጠቀም የተሻሻለ Chrome</translation>
 <translation id="7903345046358933331">ገጹ ምላሽ የማይሰጥ ሆኗል። ምላሽ እስከሚሰጥ ሊጠብቁት ወይም ሊዘጉት ይችላሉ።</translation>
 <translation id="7903742244674067440">የእነዚህን ዕውቅና ማረጋገጫ ባለሥልጣናት የሚለዩ የዕውቅና ማረጋገጫዎች በፋይሉ ላይ አለዎት</translation>
 <translation id="7903859912536385558">የተረጋጋ (የታመነ ሞካሪ)</translation>
@@ -6884,6 +6894,7 @@
 <translation id="8392364544846746346">አንድ ጣቢያ በመሣሪያዎ ላይ ፋይሎችን ወይም አቃፊዎችን ማርትዕ ሲፈልግ ይጠይቅ</translation>
 <translation id="8392451568018454956">የ<ph name="USER_EMAIL_ADDRESS" /> አማራጮች ምናሌ</translation>
 <translation id="8393511274964623038">ተሰኪውን አቁም</translation>
+<translation id="839363317075970734">የብሉቱዝ መሣሪያ ዝርዝሮች</translation>
 <translation id="8393700583063109961">መልዕክት ይላኩ</translation>
 <translation id="8397825320644530257">የተገናኘ ስልክ ያላቅቁ</translation>
 <translation id="8398877366907290961">ለማንኛውም ቀጥል</translation>
@@ -7134,6 +7145,7 @@
 <translation id="8681614230122836773">Chrome በእርስዎ ኮምፒውተር ላይ ጎጂ ሶፍትዌር አግኝቷል</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> ተገናኝቶ ዝግጁ ነው</translation>
 <translation id="8683081248374354009">ቡድንን ዳግም አስጀምር</translation>
+<translation id="8683526617475118045">የሚያገኙት ነገር</translation>
 <translation id="8688672835843460752">ይገኛል</translation>
 <translation id="8690129572193755009">ጣቢያዎች ፕሮቶኮሎችን ለመቆጣጠር መጠየቅ ይችላሉ</translation>
 <translation id="8695139659682234808">ከውቅረት በኋላ የወላጅ መቆጣጠሪያዎችን ያክሉ</translation>
@@ -7187,6 +7199,7 @@
 <translation id="8737685506611670901"><ph name="PROTOCOL" /> አገናኞች በ<ph name="REPLACED_HANDLER_TITLE" /> ፈንታ ክፈት</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">ገጹ የሚተረጎምበትን ቋንቋ ይምረጡ</translation>
+<translation id="8737916108453753541">የአሰሳውን ባህሪ ለመረዳት ዩአርኤሎቹ ለGoogle ተጋርተዋል</translation>
 <translation id="8740247629089392745">ይህን Chromebook ለ<ph name="SUPERVISED_USER_NAME" /> መስጠት ይችላሉ። ማዋቀር ሊጠናቀቅ ትንሽ ነው የቀረው፣ እንግዲህ የማሰስ ጊዜው አሁን ነው።</translation>
 <translation id="8741944563400125534">የመቀያየሪያ መዳረሻ ውቅረት መመሪያ</translation>
 <translation id="8742998548129056176">ይህ ስለመሣሪያዎ እና እንዴት እርስዎ እንደሚጠቀሙበት የተመለከተ አጠቃላይ መረጃ (እንደ የባትሪ ደረጃ፣ የሥርዓትና የመተግበሪያ እንቅስቃሴ፣ እና ስህተቶች) የተመለከተ አጠቃላይ መረጃ ነው። ውሂቡ Androidን ለማሻሻል ጥቅም ላይ ይውላል፣ እና አንዳንድ የተዋሃደ መረጃ እንዲሁም የGoogle መተግበሪያዎች እና እንደ የAndroid ገንቢዎች ያሉ አጋሮች የእነሱ መተግበሪያዎች እና ምርቶች የተሻሉ እንዲያደርጉ ያግዛቸዋል።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index a319fcd..4a176cb9 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">ترجمة اللغة <ph name="LANGUAGE" /> دائمًا</translation>
 <translation id="1108600514891325577">إي&amp;قاف</translation>
 <translation id="1110155001042129815">انتظار</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">هناك علامة تبويب خلفية تستخدم البلوتوث</translation>
 <translation id="1113892970288677790">اختَر الأعمال الفنية والصور المنظَّمة.</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -535,6 +536,7 @@
 <translation id="156793199942386351">سبق وتم تخصيص مفتاح "<ph name="CURRENTKEY" />" للإجراء "<ph name="ACTION" />". يمكنك الضغط على أي مفتاح لاختيار <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">‏وحدة تحكم JavaScript</translation>
 <translation id="1568323446248056064">فتح إعدادات الجهاز للعرض</translation>
+<translation id="1570604804919108255">إعادة صوت الاشعارات</translation>
 <translation id="1571738973904005196">عرض علامة التبويب <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (وضع الضيف)</translation>
 <translation id="1572266655485775982">‏تفعيل شبكة Wi-Fi</translation>
@@ -592,6 +594,7 @@
 <translation id="1621485112342885423">سلات التسوّق</translation>
 <translation id="1621729191093924223">لن تعمل الميزات التي تحتاج إلى ميكروفون.</translation>
 <translation id="1621831347985899379">سيتم حذف بيانات <ph name="DEVICE_TYPE" /></translation>
+<translation id="1621984899599015181">تتولّى مؤسستك إدارة خيارات المشاركة. وقد تكون بعض العناصر مخفية.</translation>
 <translation id="1622054403950683339">‏حذف شبكة Wi-Fi</translation>
 <translation id="1623132449929929218">الصور غير متوفِّرة حاليًا. يُرجى إعادة الاتصال بالإنترنت للاطِّلاع على مجموعات الخلفية.</translation>
 <translation id="1623723619460186680">خفض الإضاءة الزرقاء</translation>
@@ -829,6 +832,7 @@
 <translation id="1850508293116537636">تدوير &amp;في اتجاه عقارب الساعة</translation>
 <translation id="1852141627593563189">العثور على البرامج الضارّة</translation>
 <translation id="1852799913675865625">حدث خطأ أثناء محاولة قراءة الملف: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">يمكنك المتابعة من حيث توقفت، ويمكنك ضبط التطبيقات لاستعادتها دائمًا عند بدء التشغيل أو إيقاف الاستعادة في "الإعدادات".</translation>
 <translation id="1854180393107901205">إيقاف الإرسال</translation>
 <translation id="1855079636134697549">تم تشغيل الكاميرا.</translation>
 <translation id="1856715684130786728">إضافة موقع...</translation>
@@ -957,6 +961,7 @@
 <translation id="1989113344093894667">لا يمكن تصوير المحتوى</translation>
 <translation id="1990046457226896323">تم تنزيل ملفات ميزة "النسخ النصي التلقائي".</translation>
 <translation id="1990512225220753005">عدم إظهار الاختصارات في هذه الصفحة</translation>
+<translation id="199191324030140441">إيقاف وضع "عدم الإزعاج"</translation>
 <translation id="1992397118740194946">لم يتم تعيينه</translation>
 <translation id="1992924914582925289">إزالة من الجهاز</translation>
 <translation id="1994173015038366702">‏عنوان URL للموقع</translation>
@@ -998,6 +1003,7 @@
 
 يمكنك إدارة إعدادات هذا الحساب من خلال تثبيت تطبيق Family Link على جهازك.  ولقد أرسلنا لك التعليمات في رسالة إلكترونية.</translation>
 <translation id="2040460856718599782">عفوًا، حدث خطأ ما أثناء محاولة مصادقتك. يُرجى التحقق جيدًا من بيانات اعتماد تسجيل الدخول وإعادة المحاولة.</translation>
+<translation id="2040894699575719559">تم حظر الموقع الجغرافي</translation>
 <translation id="2042279886444479655">الملفات التعريفية النشطة</translation>
 <translation id="2044014337866019681">يُرجى إثبات ملكية الحساب <ph name="ACCOUNT" /> حتى تتمكّن من فتح قفل هذا الجهاز.</translation>
 <translation id="204497730941176055">‏اسم قالب الشهادات لـ Microsoft</translation>
@@ -1481,6 +1487,7 @@
 <translation id="2527167509808613699">جميع أنواع الاتصالات</translation>
 <translation id="2530166226437958497">تحديد المشاكل وحلّها</translation>
 <translation id="2532589005999780174">وضع التباين العالي</translation>
+<translation id="2533649878691950253">تم حظر تعرّف هذا الموقع الإلكتروني على موقعك الجغرافي الدقيق لأنّك عادةً لا تسمح بهذا الإجراء.</translation>
 <translation id="253434972992662860">إي&amp;قاف مؤقت</translation>
 <translation id="253557089021624350">عدد مرات التحقق من الاتصال</translation>
 <translation id="2535799430745250929">لا تتوفّر شبكة جوّال</translation>
@@ -1668,6 +1675,7 @@
 <translation id="2738771556149464852">آخر يوم للصلاحية</translation>
 <translation id="2739191690716947896">تصحيح الأخطاء</translation>
 <translation id="2739240477418971307">تغيير إعدادات إمكانية الوصول</translation>
+<translation id="2739965161385757621">مراجعة الإعدادات</translation>
 <translation id="274029851662193272">منخفضة</translation>
 <translation id="2740531572673183784">حسنًا</translation>
 <translation id="2741713322780029189">فتح الوحدة الطرفية للاسترداد</translation>
@@ -1793,6 +1801,7 @@
 <translation id="2864601841139725659">تعيين صورة الملف الشخصي</translation>
 <translation id="2865919525181940183">لقطة شاشة للبرامج التي تظهر على الشاشة حاليًا</translation>
 <translation id="286674810810214575">جارٍ التحقق من مصادر الطاقة...</translation>
+<translation id="2866876751734765554">مراجعة الخصوصية</translation>
 <translation id="2867768963760577682">فتح كعلامة تبويب مثبتة</translation>
 <translation id="2868746137289129307">تعتبر هذه الإضافة قديمة وغير مفعّلة بواسطة سياسة المؤسسة. وقد تصبح مفعّلة تلقائيًا عندما يتوفر إصدار أحدث.</translation>
 <translation id="2870560284913253234">الموقع</translation>
@@ -2323,6 +2332,7 @@
 <translation id="3446274660183028131">‏يُرجى تشغيل نظام Parallels Desktop لتثبيت نظام التشغيل Windows.</translation>
 <translation id="344630545793878684">قراءة بياناتك على عدد من المواقع الإلكترونية</translation>
 <translation id="3446650212859500694">هذا الملف به محتوى حسّاس.</translation>
+<translation id="3446827946208017735">فهم الإعدادات المُهمّة للخصوصية ومراجعتها من مكان واحد</translation>
 <translation id="3448086340637592206">‏بنود الخدمة الإضافية لكلٍّ من متصفّح Google Chrome و"نظام التشغيل Chrome"</translation>
 <translation id="3448492834076427715">تحديث الحساب</translation>
 <translation id="3449393517661170867">نافذة ذات علامات تبويب جديدة</translation>
@@ -3510,7 +3520,6 @@
 <translation id="4733793249294335256">الموقع</translation>
 <translation id="473546211690256853">تتم إدارة هذا الحساب من خلال <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">تعذَّر على النظام تحديد معرِّفات هذا الجهاز.</translation>
-<translation id="473581466100273252">تبديل الإدخالات المُغلَقة مؤخرًا</translation>
 <translation id="4736292055110123391">مزامنة الإشارات المرجعية وكلمات المرور والسجلّ وغيرها على جميع أجهزتك</translation>
 <translation id="473775607612524610">تحديث</translation>
 <translation id="473936925429402449">تم الاختيار، المحتوى الإضافي <ph name="CURRENT_ELEMENT" /> من أصل <ph name="TOTAL_ELEMENTS" />.</translation>
@@ -3663,7 +3672,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> هرتز - متداخل</translation>
 <translation id="4901309472892185668">يمكنك اختيار حالة للتجربة <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">السياسة التي تم تنزيلها من الخادم غير صالحة: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">لا يتم حفظ السجلّ في "وضع التصفُّح المتخفي"</translation>
 <translation id="4906490889887219338">إعداد خوادم مشاركة الملفات على الشبكة أو إدارتها <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">لا يتم تنزيل هذا الملف بشكل شائع وقد يكون ضارًا.</translation>
 <translation id="4907306957610201395">فئة الإذن</translation>
@@ -3749,6 +3757,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{‏لم يتم العثور على أجهزة افتراضية (VM) من نوع <ph name="VM_TYPE" />.}=1{‏تم العثور على جهاز افتراضي (VM) واحد من نوع <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />.}two{‏تم العثور على جهازَين افتراضيّين (VM) ({NUM_VMS}) من نوع <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />.}few{‏تم العثور على {NUM_VMS} أجهزة افتراضية (VM) من نوع <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />.}many{‏تم العثور على {NUM_VMS} جهازًا افتراضيًا (VM) من نوع <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />.}other{‏تم العثور على {NUM_VMS} جهاز افتراضي (VM) من نوع <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />.}}</translation>
 <translation id="4997086284911172121">لا يتوفر اتصال بالإنترنت.</translation>
 <translation id="4998430619171209993">مفعّل</translation>
+<translation id="4999804342505941663">تفعيل وضع "عدم الإزعاج"</translation>
 <translation id="5000922062037820727">محظور  (موصى به)</translation>
 <translation id="5005498671520578047">نسخ كلمة المرور</translation>
 <translation id="5006218871145547804">‏أداة ADB في تطبيق متوافق مع Android لنظام التشغيل Crostini</translation>
@@ -5073,6 +5082,7 @@
 <translation id="6468485451923838994">الخطوط</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ملف</translation>
 <translation id="6469557521904094793">تفعيل شبكة الجوّال</translation>
+<translation id="6470823736074966819">كتم صوت الإشعارات</translation>
 <translation id="6472893788822429178">عرض زر الصفحة الرئيسية</translation>
 <translation id="6474498546677193336">‏تعذّر إلغاء المشاركة بسبب استخدام تطبيق لهذا الملف. سيتم إلغاء مشاركة الملف عند إيقاف Linux.</translation>
 <translation id="6474884162850599008">‏إلغاء ربط حساب Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 8103c8f..8a682b5 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -3512,7 +3512,6 @@
 <translation id="4733793249294335256">অৱস্থান</translation>
 <translation id="473546211690256853">এই একাউণ্টটো <ph name="DOMAIN" />য়ে পৰিচালনা কৰে</translation>
 <translation id="4735803855089279419">এই ডিভাইচৰ বাবে ছিষ্টেমে ডিভাইচ চিনাক্তকাৰীক নির্ধাৰণ কৰিব নোৱাৰিলে।</translation>
-<translation id="473581466100273252">শেহতীয়াকৈ বন্ধ কৰা প্ৰবিষ্টিসমূহ ট’গল কৰক</translation>
 <translation id="4736292055110123391">আপোনাৰ সকলো ডিভাইচত নিজৰ বুকমার্ক, পাছৱর্ড, ইতিহাস আৰু অধিক সমল ছিংক কৰক</translation>
 <translation id="473775607612524610">আপডে'ট কৰক</translation>
 <translation id="473936925429402449">অতিৰিক্ত <ph name="TOTAL_ELEMENTS" /> টা সমলৰ <ph name="CURRENT_ELEMENT" /> নম্বৰটো বাছনি কৰা হৈছে</translation>
@@ -3665,7 +3664,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> হাৰ্টজ - একত্ৰিত</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> পৰীক্ষণৰ বাবে পৰীক্ষণৰ স্থিতি বাছনি কৰক।</translation>
 <translation id="49027928311173603">ছাৰ্ভাৰৰ পৰা ডাউনল’ড কৰা নীতিটো অমান্য: <ph name="VALIDATION_ERROR" />।</translation>
-<translation id="4905269543817054577">ইনক’গনিট’ ম’ডত ইতিহাস ছেভ কৰা নহয়</translation>
 <translation id="4906490889887219338">নেটৱৰ্কৰ ফাইল শ্বেয়াৰ কৰা সুবিধাটো ছেট আপ অথবা পৰিচালনা কৰক। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">এই ফাইলটো সাধাৰণতে ডাউনল’ড কৰা নহয় আৰু ই ক্ষতিকাৰক হ’ব পাৰে।</translation>
 <translation id="4907306957610201395">অনুমতিৰ শ্ৰেণী</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 785b407..8b7fe87f 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -3503,7 +3503,6 @@
 <translation id="4733793249294335256">Məkan</translation>
 <translation id="473546211690256853">Bu hesab <ph name="DOMAIN" /> tərəfindən idarə olunur</translation>
 <translation id="4735803855089279419">Sistem bu cihazda cihaz identifikatorları aşkarlamadı.</translation>
-<translation id="473581466100273252">Son Bağlanan Daxiletmələri Keçirin</translation>
 <translation id="4736292055110123391">Bütün cihazlardakı əlfəcin, parol, tarixçə və daha çoxunu sinxronizasiya edin</translation>
 <translation id="473775607612524610">Güncəlləşdirin</translation>
 <translation id="473936925429402449"><ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /> əlavə məzmun seçilib</translation>
@@ -3656,7 +3655,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hs - iç-içə keçmiş</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> təcrübəsi üçün təcrübə vəziyyətini seçin.</translation>
 <translation id="49027928311173603">Serverdən endirilmiş qaydalar güvənsizdir: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Tarixçə Anonim rejimdə yadda saxlanılmır</translation>
 <translation id="4906490889887219338">Şəbəkə fayl paylaşımlarını ayarlayın və ya idarə edin. <ph name="LINK_BEGIN" />Ətraflı məlumat<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Bu tətbiq adətən endirilmir və təhlükəli ola bilər.</translation>
 <translation id="4907306957610201395">İcazə Kateqoriyası</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 28f9312..7419226 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -3509,7 +3509,6 @@
 <translation id="4733793249294335256">Месцазнаходжанне</translation>
 <translation id="473546211690256853">Гэты ўліковы запіс належыць дамену <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Сістэма не змагла вызначыць ідэнтыфікатары прылад для гэтай прылады.</translation>
-<translation id="473581466100273252">Паказаць або схаваць нядаўна закрытыя элементы</translation>
 <translation id="4736292055110123391">Сінхранізацыя закладак, пароляў, гісторыі і іншага на ўсіх вашых прыладах</translation>
 <translation id="473775607612524610">Абнавіць</translation>
 <translation id="473936925429402449">Выбрана, дадатковае змесціва: <ph name="CURRENT_ELEMENT" /> з <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3662,7 +3661,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц – празрадковая разгортка</translation>
 <translation id="4901309472892185668">Выберыце стан для эксперымента "<ph name="EXPERIMENT_NAME" />".</translation>
 <translation id="49027928311173603">Палітыка, спампаваная з сервера, памылковая: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">У рэжыме інкогніта гісторыя не захоўваецца</translation>
 <translation id="4906490889887219338">Наладка сеткавых файлаабменнікаў і кіраванне імі. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Гэты файл звычайна не спампоўваецца і можа быць небяспечным.</translation>
 <translation id="4907306957610201395">Катэгорыя дазволаў</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 0a4a0c84..7d3767c 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -3530,7 +3530,6 @@
 <translation id="4733793249294335256">Местоположение</translation>
 <translation id="473546211690256853">Този профил се управлява от <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Системата не успя да определи идентификаторите за това устройство.</translation>
-<translation id="473581466100273252">Превключване на наскоро затворените записи</translation>
 <translation id="4736292055110123391">Синхронизиране на вашите отметки, пароли, история и др. на всичките ви устройства</translation>
 <translation id="473775607612524610">Актуализиране</translation>
 <translation id="473936925429402449">Избрано. Допълнително съдържание <ph name="CURRENT_ELEMENT" /> от <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3683,7 +3682,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Хц – презредова развивка</translation>
 <translation id="4901309472892185668">Изберете състояние за експеримента „<ph name="EXPERIMENT_NAME" />“.</translation>
 <translation id="49027928311173603">Изтегленото от сървъра правило е невалидно: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">В режим „инкогнито“ историята не се запазва</translation>
 <translation id="4906490889887219338">Настройване или управление на споделени хранилища в мрежата. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Този файл обикновено не се изтегля и може да е опасен.</translation>
 <translation id="4907306957610201395">Категория за разрешения</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 9644d5c..f977dfc 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -3518,7 +3518,6 @@
 <translation id="4733793249294335256">লোকেশন</translation>
 <translation id="473546211690256853">এই অ্যাকাউন্টটি <ph name="DOMAIN" /> দ্বারা পরিচালিত</translation>
 <translation id="4735803855089279419">সিস্টেমটি এই ডিভাইসের জন্য ডিভাইস শনাক্তকারী নির্ধারণ করতে পারেনি।</translation>
-<translation id="473581466100273252">সম্প্রতি বন্ধ হওয়া এন্ট্রিগুলি টগল করুন</translation>
 <translation id="4736292055110123391">আপনার সমস্ত ডিভাইসে বুকমার্ক, পাসওয়ার্ড, ইতিহাস এবং আরও অনেক কিছু সিঙ্ক করুন</translation>
 <translation id="473775607612524610">আপডেট করুন</translation>
 <translation id="473936925429402449">বেছে নেওয়া ও অতিরিক্ত কন্টেন্ট থাকা মোট <ph name="TOTAL_ELEMENTS" />টি এলিমেন্টের মধ্যে <ph name="CURRENT_ELEMENT" /> নম্বর এলিমেন্ট</translation>
@@ -3671,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> হার্জ - ইন্টারলেস করা</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> এক্সপেরিমেন্টের জন্য এক্সপেরিমেন্টের স্ট্যাটাস বেছে নিন।</translation>
 <translation id="49027928311173603">সার্ভার থেকে ডাউনলোড করা নীতিটি ভুল: <ph name="VALIDATION_ERROR" />৷</translation>
-<translation id="4905269543817054577">'ছদ্মবেশী' মোডে ইতিহাস সেভ করা হয় না</translation>
 <translation id="4906490889887219338">নেটওয়ার্ক ফাইল শেয়ার (SMB) সেট-আপ বা ম্যানেজ করুন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">এই ফাইলটি সাধারণভাবে ডাউনলোড করা হয় না এবং এটি বিপজ্জনক হতে পারে।</translation>
 <translation id="4907306957610201395">অনুমতির শ্রেণীবিভাগ</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index d4ccf96..e23bbd7 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -537,7 +537,7 @@
 <translation id="156793199942386351">Tipka "<ph name="CURRENTKEY" />" je već dodijeljena radnji "<ph name="ACTION" />". Pritisnite bilo koju tipku da <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Konzola za JavaScript</translation>
 <translation id="1568323446248056064">Otvori postavke uređaja za ekran</translation>
-<translation id="1570604804919108255">Uključi zvuk obavijesti</translation>
+<translation id="1570604804919108255">Uključi zvuk obavještenja</translation>
 <translation id="1571738973904005196">Prikaži karticu: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gost)</translation>
 <translation id="1572266655485775982">Omogućavanje WiFi-ja</translation>
@@ -595,7 +595,7 @@
 <translation id="1621485112342885423">Vaše korpe</translation>
 <translation id="1621729191093924223">Funkcije za koje je potreban mikrofon neće funkcionirati</translation>
 <translation id="1621831347985899379">Podaci uređaja <ph name="DEVICE_TYPE" /> će se izbrisati</translation>
-<translation id="1621984899599015181">Opcijama za dijeljenje upravlja vaša organizacija. Neke su stavke možda skrivene.</translation>
+<translation id="1621984899599015181">Opcijama dijeljenja upravlja vaša organizacija. Neke stavke su možda sakrivene.</translation>
 <translation id="1622054403950683339">Zanemari WiFi mrežu</translation>
 <translation id="1623132449929929218">Slike trenutno nisu dostupne. Ponovo se povežite na internet da vidite kolekcije pozadinskih slika.</translation>
 <translation id="1623723619460186680">Smanjenje plavog svjetla</translation>
@@ -838,7 +838,7 @@
 <translation id="1850508293116537636">Rotiraj u smjeru kazaljke na satu</translation>
 <translation id="1852141627593563189">Pronađi štetan softver</translation>
 <translation id="1852799913675865625">Došlo je do greške prilikom čitanja fajla: <ph name="ERROR_TEXT" />.</translation>
-<translation id="1854049213067042715">Nastavite tamo gdje ste stali. U postavkama možete postaviti aplikacije tako da se uvijek vrati prilikom pokretanja ili isključite vraćanje.</translation>
+<translation id="1854049213067042715">Nastavite gdje ste stali. U Postavkama možete postaviti da se aplikacije uvijek vraćaju prilikom pokretanja ili možete isključiti vraćanje.</translation>
 <translation id="1854180393107901205">Zaustavi emitiranje</translation>
 <translation id="1855079636134697549">Kamera je uključena</translation>
 <translation id="1856715684130786728">Dodaj lokaciju...</translation>
@@ -968,7 +968,7 @@
 <translation id="1989113344093894667">Nije moguće snimanje sadržaja</translation>
 <translation id="1990046457226896323">Fajlovi govora su preuzeti</translation>
 <translation id="1990512225220753005">Ne prikazuj prečice na ovoj stranici</translation>
-<translation id="199191324030140441">Isključivanje načina Ne uznemiravaj</translation>
+<translation id="199191324030140441">Isključi funkciju Ne ometaj</translation>
 <translation id="1992397118740194946">Nije postavljeno</translation>
 <translation id="1992924914582925289">Ukloni s uređaja</translation>
 <translation id="1994173015038366702">URL web lokacije</translation>
@@ -1497,7 +1497,7 @@
 <translation id="2527167509808613699">Bilo koja vrsta veze</translation>
 <translation id="2530166226437958497">Rješavanje problema</translation>
 <translation id="2532589005999780174">Način rada visokog kontrasta</translation>
-<translation id="2533649878691950253">Web-lokaciji je blokiran pristup vašoj točnoj lokaciji jer to obično ne dopuštate</translation>
+<translation id="2533649878691950253">Ovoj web lokaciji je blokiran pristup vašoj tačnoj lokaciji jer to obično ne dozvoljavate</translation>
 <translation id="253434972992662860">&amp;Pauziraj</translation>
 <translation id="253557089021624350">Broj aktivnih radnji</translation>
 <translation id="2535799430745250929">Mobilna mreža ne postoji</translation>
@@ -1684,7 +1684,7 @@
 <translation id="2738771556149464852">Ne poslije</translation>
 <translation id="2739191690716947896">Otkloni pogrešku</translation>
 <translation id="2739240477418971307">Promijeniti postavke pristupačnosti</translation>
-<translation id="2739965161385757621">Pregled postavki</translation>
+<translation id="2739965161385757621">Pregledaj moje postavke</translation>
 <translation id="274029851662193272">Utisnuto</translation>
 <translation id="2740531572673183784">Uredu</translation>
 <translation id="2741713322780029189">Otvorite terminal za oporavak</translation>
@@ -2339,7 +2339,7 @@
 <translation id="3446274660183028131">Pokrenite Parallels Desktop da instalirate Windows.</translation>
 <translation id="344630545793878684">Čitati vaše podatke na nizu web lokacija</translation>
 <translation id="3446650212859500694">U ovom fajlu postoji osjetljiv sadržaj</translation>
-<translation id="3446827946208017735">Objašnjenje i pregled najkritičnijih postavki privatnosti na jednom mjestu</translation>
+<translation id="3446827946208017735">Shvatite i pregledajte najkritičnije postavke privatnosti na jednom mjestu</translation>
 <translation id="3448086340637592206">Dodatni uslovi za Google Chrome i Chrome OS</translation>
 <translation id="3448492834076427715">Ažuriraj račun</translation>
 <translation id="3449393517661170867">Novi prozor u kartici</translation>
@@ -3531,7 +3531,6 @@
 <translation id="4733793249294335256">Lokacija</translation>
 <translation id="473546211690256853">Ovim računom upravlja <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistem nije uspio odrediti identifikatore uređaja za ovaj uređaj.</translation>
-<translation id="473581466100273252">Uključi/isključi nedavno zatvorene unose</translation>
 <translation id="4736292055110123391">Sinhronizirajte oznake, lozinke, historije i drugo na svim svojim uređajima</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="473936925429402449">Odabrani dodatni sadržaj. <ph name="CURRENT_ELEMENT" />. element od ukupno <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3684,7 +3683,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – skeniranje s preplitanjem</translation>
 <translation id="4901309472892185668">Odaberite stanje za eksperiment <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Pravilo preuzeto sa servera je nevažeće: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historija se ne pohranjuje u anonimnom načinu rada</translation>
 <translation id="4906490889887219338">Postavite dijeljenje fajlova na mreži ili upravljajte njime. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ovaj fajl se ne preuzima često i može biti opasan.</translation>
 <translation id="4907306957610201395">Kategorija odobrenja</translation>
@@ -3770,7 +3768,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nijedan VM <ph name="VM_TYPE" /> nije pronađen}=1{Pronađen je 1 VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}one{Pronađen je {NUM_VMS} VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}few{Pronađena su {NUM_VMS} VM-a <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Pronađeno je {NUM_VMS} VM-ova <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Nema internetske veze.</translation>
 <translation id="4998430619171209993">Uključeno</translation>
-<translation id="4999804342505941663">Uključi opciju Ne uznemiravaj</translation>
+<translation id="4999804342505941663">Uključi funkciju Ne ometaj</translation>
 <translation id="5000922062037820727">Blokirano (preporučeno)</translation>
 <translation id="5005498671520578047">Kopiranje lozinke</translation>
 <translation id="5006218871145547804">ADB Android aplikacija na Crostiniju</translation>
@@ -5095,7 +5093,7 @@
 <translation id="6468485451923838994">Fontovi</translation>
 <translation id="6468773105221177474">Broj fajlova: <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Uključi mobilnu mrežu</translation>
-<translation id="6470823736074966819">Zanemari obavijesti</translation>
+<translation id="6470823736074966819">Isključi zvuk obavještenja</translation>
 <translation id="6472893788822429178">Prikaz dugmeta za početni ekran</translation>
 <translation id="6474498546677193336">Poništavanje dijeljenja nije uspjelo jer neka aplikacija koristi ovaj folder. Dijeljenje foldera će se poništiti nakon sljedećeg isključivanja Linuxa.</translation>
 <translation id="6474884162850599008">Prekini vezu s računom za Google Disk</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index e27d289..963fff8 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -3515,7 +3515,6 @@
 <translation id="4733793249294335256">Ubicació</translation>
 <translation id="473546211690256853"><ph name="DOMAIN" /> gestiona aquest compte.</translation>
 <translation id="4735803855089279419">El sistema no ha pogut determinar els identificadors d'aquest dispositiu.</translation>
-<translation id="473581466100273252">Commuta les entrades tancades recentment</translation>
 <translation id="4736292055110123391">Sincronitza les adreces d'interès, les contrasenyes, l'historial i altres elements en tots els dispositius</translation>
 <translation id="473775607612524610">Actualitza</translation>
 <translation id="473936925429402449">Seleccionat, contingut addicional, <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3668,7 +3667,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz, entrellaçat</translation>
 <translation id="4901309472892185668">Selecciona l'estat de l'experiment <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">La política que s'ha baixat del servidor no és vàlida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">L'historial no es desa en mode d'incògnit</translation>
 <translation id="4906490889887219338">Configura o gestiona els fitxers compartits de la xarxa. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Aquest fitxer no se sol baixar i podria ser perillós.</translation>
 <translation id="4907306957610201395">Categoria de permisos</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 2e9d68e..46ac9ea 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Vždy překládat jazyk <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Zastavit</translation>
 <translation id="1110155001042129815">Počkat</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">Karta na pozadí používá Bluetooth</translation>
 <translation id="1113892970288677790">Vyberte umělecká díla a obrázky</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -533,6 +534,7 @@
 <translation id="156793199942386351">Klávesa <ph name="CURRENTKEY" /> je už přiřazena k akci <ph name="ACTION" />. Pokud chcete <ph name="RESPONSE" />, stiskněte libovolnou klávesu.</translation>
 <translation id="1567993339577891801">Konzole JavaScriptu</translation>
 <translation id="1568323446248056064">Otevřít nastavení displeje</translation>
+<translation id="1570604804919108255">Zapnout zvuk oznámení</translation>
 <translation id="1571738973904005196">Zobrazit kartu: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (host)</translation>
 <translation id="1572266655485775982">Aktivovat Wi-Fi</translation>
@@ -590,6 +592,7 @@
 <translation id="1621485112342885423">Vaše nákupní košíky</translation>
 <translation id="1621729191093924223">Funkce vyžadující mikrofon nebudou k dispozici</translation>
 <translation id="1621831347985899379">Data zařízení <ph name="DEVICE_TYPE" /> budou smazána</translation>
+<translation id="1621984899599015181">Možnosti sdílení spravuje vaše organizace. Některé položky mohou být skryty.</translation>
 <translation id="1622054403950683339">Zapomenout síť Wi-Fi</translation>
 <translation id="1623132449929929218">Obrázky aktuálně nejsou k dispozici. Chcete-li zobrazit sbírky tapet, znovu se připojte k internetu.</translation>
 <translation id="1623723619460186680">Snížení intenzity modrého světla</translation>
@@ -827,6 +830,7 @@
 <translation id="1850508293116537636">Otočit &amp;ve směru hodinových ručiček</translation>
 <translation id="1852141627593563189">Najděte škodlivý software</translation>
 <translation id="1852799913675865625">Došlo k chybě při čtení souboru: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Pokračujte tam, kde jste přestali. V Nastavení můžete zapnout nebo vypnout automatické obnovování aplikací při spuštění.</translation>
 <translation id="1854180393107901205">Zastavit odesílání</translation>
 <translation id="1855079636134697549">Kamera je zapnutá</translation>
 <translation id="1856715684130786728">Přidat polohu...</translation>
@@ -954,6 +958,7 @@
 <translation id="1989113344093894667">Obsah se nepodařilo zaznamenat</translation>
 <translation id="1990046457226896323">Stažené řečové soubory</translation>
 <translation id="1990512225220753005">Nezobrazovat zkratky na této stránce</translation>
+<translation id="199191324030140441">Vypnout režim Nerušit</translation>
 <translation id="1992397118740194946">Hodnota není nastavena</translation>
 <translation id="1992924914582925289">Odstranit ze zařízení</translation>
 <translation id="1994173015038366702">Adresa URL webu</translation>
@@ -995,6 +1000,7 @@
 
 Chcete-li spravovat nastavení tohoto účtu, nainstalujte si do zařízení aplikaci Family Link.  Pokyny jsme vám odeslali e-mailem.</translation>
 <translation id="2040460856718599782">Jejda! Při ověřování vaší totožnosti došlo k chybě. Zkontrolujte prosím identifikační údaje a zkuste to znovu.</translation>
+<translation id="2040894699575719559">Místo bylo zablokováno</translation>
 <translation id="2042279886444479655">Aktivní profily</translation>
 <translation id="2044014337866019681">Pokud tuto relaci chcete odemknout, zkontrolujte, zda ověřujete účet <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Název šablony certifikátu Microsoft</translation>
@@ -1478,6 +1484,7 @@
 <translation id="2527167509808613699">Jakýkoli typ spojení</translation>
 <translation id="2530166226437958497">Odstraňování problémů</translation>
 <translation id="2532589005999780174">Režim vysokého kontrastu</translation>
+<translation id="2533649878691950253">Přístup tohoto webu k vaší přesné poloze byl zablokován, protože ho obvykle nepovolujete</translation>
 <translation id="253434972992662860">&amp;Pozastavit</translation>
 <translation id="253557089021624350">Aktivity zabraňující ukončení</translation>
 <translation id="2535799430745250929">Žádná mobilní síť není k dispozici</translation>
@@ -1664,6 +1671,7 @@
 <translation id="2738771556149464852">Nikoli po</translation>
 <translation id="2739191690716947896">Ladit</translation>
 <translation id="2739240477418971307">Změnit nastavení přístupnosti</translation>
+<translation id="2739965161385757621">Zkontrolovat nastavení</translation>
 <translation id="274029851662193272">Ryté</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Otevřít terminál pro obnovení</translation>
@@ -1788,6 +1796,7 @@
 <translation id="2864601841139725659">Nastavení profilové fotky</translation>
 <translation id="2865919525181940183">Snímek obrazovky programů, které jsou aktuálně na obrazovce.</translation>
 <translation id="286674810810214575">Probíhá kontrola zdrojů napájení...</translation>
+<translation id="2866876751734765554">Kontrola ochrany soukromí</translation>
 <translation id="2867768963760577682">Otevřít jako připnutou kartu</translation>
 <translation id="2868746137289129307">Toto rozšíření je zastaralé a je zakázáno podnikovou zásadou. Možná bude opět automaticky povoleno, až bude k dispozici novější verze.</translation>
 <translation id="2870560284913253234">Stránky</translation>
@@ -2317,6 +2326,7 @@
 <translation id="3446274660183028131">Pokud chcete nainstalovat systém Windows, spusťte nástroj Parallels Desktop.</translation>
 <translation id="344630545793878684">Čtení vašich dat na mnoha webech</translation>
 <translation id="3446650212859500694">Obsah tohoto souboru je citlivý</translation>
+<translation id="3446827946208017735">Zkontrolujte většinu důležitých nastavení ochrany soukromí na jednom místě</translation>
 <translation id="3448086340637592206">Doplňující smluvní podmínky prohlížeče Google Chrome a systému Chrome OS</translation>
 <translation id="3448492834076427715">Aktualizovat účet</translation>
 <translation id="3449393517661170867">Nové okno na kartě</translation>
@@ -3506,7 +3516,6 @@
 <translation id="4733793249294335256">Umístění</translation>
 <translation id="473546211690256853">Tento účet spravuje <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Systému se nepodařilo zjistit identifikátory tohoto zařízení.</translation>
-<translation id="473581466100273252">Přepnout nedávno zavřené položky</translation>
 <translation id="4736292055110123391">Synchronizujte záložky, hesla, historii a další údaje do všech svých zařízení</translation>
 <translation id="473775607612524610">Aktualizovat</translation>
 <translation id="473936925429402449">Vybráno, extra obsah <ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3659,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – s prokládáním</translation>
 <translation id="4901309472892185668">Vyberte stav experimentální funkce <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Zásada stažená ze serveru je neplatná: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">V anonymním režimu se neukládá historie</translation>
 <translation id="4906490889887219338">Nastavit nebo spravovat sdílená úložiště na síti. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Tento soubor se běžně nestahuje a může být nebezpečný.</translation>
 <translation id="4907306957610201395">Kategorie oprávnění</translation>
@@ -3745,6 +3753,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nebyly nalezeny žádné virtuální počítače typu <ph name="VM_TYPE" />}=1{Byl nalezen 1 virtuální počítač typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}few{Byly nalezeny {NUM_VMS} virtuální počítače typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}many{Bylo nalezeno {NUM_VMS} virtuálního počítače typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Bylo nalezeno {NUM_VMS} virtuálních počítačů typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Nejste připojeni k internetu.</translation>
 <translation id="4998430619171209993">Zapnuto</translation>
+<translation id="4999804342505941663">Zapnout režim Nerušit</translation>
 <translation id="5000922062037820727">Blokováno (doporučeno)</translation>
 <translation id="5005498671520578047">Kopírování hesla</translation>
 <translation id="5006218871145547804">ADB aplikací Android pro Crostini</translation>
@@ -5069,6 +5078,7 @@
 <translation id="6468485451923838994">Písma</translation>
 <translation id="6468773105221177474">Počet souborů: <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Zapnout mobilní síť</translation>
+<translation id="6470823736074966819">Vypnout oznámení</translation>
 <translation id="6472893788822429178">Zobrazit tlačítko Domovská stránka</translation>
 <translation id="6474498546677193336">Sdílení se nepodařilo zrušit, protože tuto složku používá nějaká aplikace. Sdílení složky bude zrušeno při příštím vypnutí systému Linux.</translation>
 <translation id="6474884162850599008">Odpojit účet Disku Google</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index fabe76f3..b7a730f 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Oversæt altid <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">Vent</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">En fane i baggrunden anvender Bluetooth</translation>
 <translation id="1113892970288677790">Vælg blandt udvalgte kunstværker og billeder</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -535,6 +536,7 @@
 <translation id="156793199942386351">"<ph name="CURRENTKEY" />" er allerede tildelt handlingen "<ph name="ACTION" />". Tryk på en vilkårlig tast for at <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-konsol</translation>
 <translation id="1568323446248056064">Åbn enhedens skærmindstillinger</translation>
+<translation id="1570604804919108255">Slå lyden til for notifikationer</translation>
 <translation id="1571738973904005196">Se fanen: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gæst)</translation>
 <translation id="1572266655485775982">Aktivér Wi-Fi</translation>
@@ -592,6 +594,7 @@
 <translation id="1621485112342885423">Dine kurve</translation>
 <translation id="1621729191093924223">Funktioner, der skal bruge en mikrofon, fungerer ikke</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" />-data slettes</translation>
+<translation id="1621984899599015181">Delingsindstilingerne administreres af din organisation. Nogle elementer er muligvis skjult.</translation>
 <translation id="1622054403950683339">Glem Wi-Fi-netværk</translation>
 <translation id="1623132449929929218">Billederne er ikke tilgængelige i øjeblikket. Opret internetforbindelse igen for at se samlingerne med baggrunde.</translation>
 <translation id="1623723619460186680">Reduktion af blåt lys</translation>
@@ -837,6 +840,7 @@
 <translation id="1850508293116537636">Roter med &amp;uret</translation>
 <translation id="1852141627593563189">Find skadelig software</translation>
 <translation id="1852799913675865625">Der opstod en fejl under forsøg på at læse filen: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Fortsæt, hvor du slap. Du kan indstille apps til altid at blive gendannet ved opstart i Indstillinger.</translation>
 <translation id="1854180393107901205">Stop cast</translation>
 <translation id="1855079636134697549">Kameraet er slået til</translation>
 <translation id="1856715684130786728">Tilføj placering...</translation>
@@ -966,6 +970,7 @@
 <translation id="1989113344093894667">Der kan ikke tages screenshot af indhold</translation>
 <translation id="1990046457226896323">Talefilerne blev downloadet</translation>
 <translation id="1990512225220753005">Vis ikke genveje på denne side</translation>
+<translation id="199191324030140441">Deaktiver Forstyr ikke</translation>
 <translation id="1992397118740194946">Ikke angivet</translation>
 <translation id="1992924914582925289">Fjern fra enhed</translation>
 <translation id="1994173015038366702">Webadresse</translation>
@@ -1007,6 +1012,7 @@
 
 Du kan administrere indstillingerne for denne konto ved at installere Family Link-appen på din enhed.  Vi har sendt en mail med vejledning.</translation>
 <translation id="2040460856718599782">Ups! Noget gik galt under forsøget på at godkende dig. Kontrollér dine loginoplysninger, og prøv igen.</translation>
+<translation id="2040894699575719559">Stedet er blokeret</translation>
 <translation id="2042279886444479655">Aktive profiler</translation>
 <translation id="2044014337866019681">Sørg for, at du bekræfter <ph name="ACCOUNT" /> for at låse sessionen op.</translation>
 <translation id="204497730941176055">Navn på skabelon til Microsoft-certifikat</translation>
@@ -1493,6 +1499,7 @@
 <translation id="2527167509808613699">Enhver form for forbindelse</translation>
 <translation id="2530166226437958497">Fejlfinding</translation>
 <translation id="2532589005999780174">Tilstanden Høj kontrast</translation>
+<translation id="2533649878691950253">Dette websites adgang til din præcise placering blev blokeret, fordi du normalt ikke tillader denne adgang</translation>
 <translation id="253434972992662860">&amp;Pause</translation>
 <translation id="253557089021624350">Antal aktiviteter, der bruger udvidelsen</translation>
 <translation id="2535799430745250929">Der er intet mobilnetværk</translation>
@@ -1680,6 +1687,7 @@
 <translation id="2738771556149464852">Ikke efter</translation>
 <translation id="2739191690716947896">Fejlretning</translation>
 <translation id="2739240477418971307">Skift dine tilgængelighedsindstillinger</translation>
+<translation id="2739965161385757621">Gennemgå mine indstillinger</translation>
 <translation id="274029851662193272">Sænket</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Åbn terminal til gendannelse</translation>
@@ -1804,6 +1812,7 @@
 <translation id="2864601841139725659">Vælg profilbillede</translation>
 <translation id="2865919525181940183">Screenshot af de programmer, der lige nu er på skærmen</translation>
 <translation id="286674810810214575">Tjekker strømkilder...</translation>
+<translation id="2866876751734765554">Gennemgang af privatliv</translation>
 <translation id="2867768963760577682">Åbn som fastgjort fane</translation>
 <translation id="2868746137289129307">Denne udvidelse er forældet og deaktiveret af virksomhedspolitikken. Den kan aktiveres automatisk, når en nyere version er tilgængelig.</translation>
 <translation id="2870560284913253234">Website</translation>
@@ -2333,6 +2342,7 @@
 <translation id="3446274660183028131">Start Parallels Desktop for at installere Windows.</translation>
 <translation id="344630545793878684">Læs dine data på en række websites</translation>
 <translation id="3446650212859500694">Denne fil har følsomt indhold</translation>
+<translation id="3446827946208017735">Forstå og gennemgå de vigtigste privatlivsindstillinger samlet på ét sted</translation>
 <translation id="3448086340637592206">Yderligere vilkår for Google Chrome og Chrome OS</translation>
 <translation id="3448492834076427715">Opdater konto</translation>
 <translation id="3449393517661170867">Nyt fanevindue</translation>
@@ -3524,7 +3534,6 @@
 <translation id="4733793249294335256">Placering</translation>
 <translation id="473546211690256853">Denne konto administreres af <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Systemet kunne ikke fastslå enheds-id'erne for denne enhed.</translation>
-<translation id="473581466100273252">Slå nyligt lukkede elementer til/fra</translation>
 <translation id="4736292055110123391">Synkroniser dine bogmærker, dine adgangskoder, din historik og meget mere på alle dine enheder</translation>
 <translation id="473775607612524610">Opdater</translation>
 <translation id="473936925429402449">Valgt, yderligere indhold <ph name="CURRENT_ELEMENT" /> ud af <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3677,7 +3686,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – sammenflettet</translation>
 <translation id="4901309472892185668">Vælg eksperimenttilstand for eksperimentet <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Den politik, der er downloadet fra serveren, er ugyldig: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historik gemmes ikke i inkognitotilstand</translation>
 <translation id="4906490889887219338">Konfigurer eller administrer fildeling via netværk. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Denne fil er ikke downloadet på almindelig vis og kan være farlig.</translation>
 <translation id="4907306957610201395">Tilladelseskategori</translation>
@@ -3763,6 +3771,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Der blev ikke fundet nogen <ph name="VM_TYPE" />-VM'er}=1{Der blev fundet 1 <ph name="VM_TYPE" />-VM: <ph name="VM_NAME_LIST" />}one{Der blev fundet {NUM_VMS} <ph name="VM_TYPE" />-VM: <ph name="VM_NAME_LIST" />}other{Der blev fundet {NUM_VMS} <ph name="VM_TYPE" />-VM'er: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Der er ingen internetforbindelse.</translation>
 <translation id="4998430619171209993">Til</translation>
+<translation id="4999804342505941663">Aktivér Forstyr ikke</translation>
 <translation id="5000922062037820727">Blokeret (anbefales)</translation>
 <translation id="5005498671520578047">Kopiér adgangskode</translation>
 <translation id="5006218871145547804">Adb til Android-apps i Crostini</translation>
@@ -5087,6 +5096,7 @@
 <translation id="6468485451923838994">Skrifttyper</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> filer</translation>
 <translation id="6469557521904094793">Aktivér mobilnetværk</translation>
+<translation id="6470823736074966819">Slå lyden fra for notifikationer</translation>
 <translation id="6472893788822429178">Vis knappen Startside</translation>
 <translation id="6474498546677193336">Delingen kunne ikke ophæves, fordi mappen stadig anvendes af en app. Delingen af mappen ophæves, næste gang Linux lukkes.</translation>
 <translation id="6474884162850599008">Fjern tilknytningen af din Google Drev-konto</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index dcbd4b9..d9411eed 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -443,6 +443,7 @@
 <translation id="1476088332184200792">Auf mein Gerät kopieren</translation>
 <translation id="1476607407192946488">&amp;Spracheinstellungen</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> erfordert, dass deine Smartcard eingesteckt ist.</translation>
+<translation id="1477654881618305065">Ihre Organisation lässt das Teilen dieser Inhalte nicht zu. Wenn Sie Hilfe benötigen, wenden Sie sich bitte an Ihren Administrator.</translation>
 <translation id="1478340334823509079">Details: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Die Installation ist nicht aktiviert</translation>
 <translation id="1480571698637441426">Damit Sie relevantere Antworten auf Fragen erhalten, können Sie Assistant erlauben, auf einen Screenshot Ihres Bildschirms zuzugreifen. Das kann auch Informationen über abgespielte Lieder oder Videos umfassen.</translation>
@@ -615,6 +616,7 @@
 <translation id="1643921258693943800">Bluetooth und WLAN aktivieren, um Nearby Share zu verwenden</translation>
 <translation id="1644574205037202324">Verlauf</translation>
 <translation id="1645516838734033527">Damit Smart Lock Ihr <ph name="DEVICE_TYPE" /> schützen kann, muss auf Ihrem Smartphone die Displaysperre eingerichtet sein.</translation>
+<translation id="1646793251510634025">Einstellungen für die Such- und Browseroptimierung prüfen</translation>
 <translation id="1646982517418478057">Bitte geben Sie ein Passwort zur Verschlüsselung dieses Zertifikats ein</translation>
 <translation id="1648528859488547844">Standort über WLAN oder Mobilfunknetz bestimmen</translation>
 <translation id="164936512206786300">Bluetooth-Gerät entkoppeln</translation>
@@ -1458,6 +1460,7 @@
 <translation id="2514326558286966059">Mit dem Fingerabdruck schneller entsperren</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Einen weiteren Schalter zuweisen</translation>
+<translation id="251722524540674480">Nutzernamen bestätigen</translation>
 <translation id="2517472476991765520">Scannen</translation>
 <translation id="2518024842978892609">Clientzertifikate verwenden</translation>
 <translation id="2519517390894391510">Name des Zertifikats</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3288047731229977326">Erweiterungen im Entwicklermodus können auf Ihrem Computer Schaden anrichten. Wenn Sie kein Entwickler sind, sollten Sie diese Erweiterungen im Entwicklermodus deaktivieren, um sicher zu sein.</translation>
 <translation id="3289668031376215426">Automatische Groß-/Kleinschreibung</translation>
 <translation id="3289856944988573801">Verwenden Sie Ethernet oder WLAN zur Suche nach Updates.</translation>
+<translation id="3291436823898732747">Verbessertes Browsing: Beispielsweise werden in der Omnibox Vorschläge angezeigt, bevor Sie anfangen zu tippen</translation>
 <translation id="3293644607209440645">Diese Seite senden</translation>
 <translation id="32939749466444286">Der Linux-Container konnte nicht gestartet werden. Bitte versuchen Sie es noch einmal.</translation>
 <translation id="3294437725009624529">Gast</translation>
@@ -3500,7 +3504,6 @@
 <translation id="4733793249294335256">Ort</translation>
 <translation id="473546211690256853">Dieses Konto wird von <ph name="DOMAIN" /> verwaltet.</translation>
 <translation id="4735803855089279419">Das System konnte die Gerätekennungen für dieses Gerät nicht ermitteln.</translation>
-<translation id="473581466100273252">Kürzlich geschlossene Einträge ein-/ausblenden</translation>
 <translation id="4736292055110123391">Lesezeichen, Passwörter, Verlauf und mehr auf allen Geräten synchronisieren</translation>
 <translation id="473775607612524610">Aktualisieren</translation>
 <translation id="473936925429402449">Ausgewählt, zusätzlicher Inhalt <ph name="CURRENT_ELEMENT" /> von <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3653,7 +3656,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz, Zeilensprung</translation>
 <translation id="4901309472892185668">Wählen Sie den Teststatus für den Test „<ph name="EXPERIMENT_NAME" />“ aus.</translation>
 <translation id="49027928311173603">Die vom Server heruntergeladene Richtlinie ist ungültig: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Im Inkognitomodus wird der Verlauf nicht gespeichert</translation>
 <translation id="4906490889887219338">Netzwerkfreigaben einrichten oder verwalten. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Diese Datei ist ein ungewöhnlicher Download und könnte schädlich sein.</translation>
 <translation id="4907306957610201395">Berechtigungskategorie</translation>
@@ -4194,6 +4196,7 @@
 <translation id="5505307013568720083">Patrone leer</translation>
 <translation id="5505794066310932198">Commander ein-/ausschalten</translation>
 <translation id="5507756662695126555">Zugelassen</translation>
+<translation id="5507795078844206688">URLs der Seiten, die Sie besuchen, z. B. https://www.google.com</translation>
 <translation id="5509693895992845810">Speichern &amp;unter...</translation>
 <translation id="5509914365760201064">Aussteller: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Bildbeschreibungen von Google verwenden</translation>
@@ -4511,6 +4514,7 @@
 <translation id="5869522115854928033">Gespeicherte Passwörter</translation>
 <translation id="5870086504539785141">Bedienungshilfemenü schließen</translation>
 <translation id="5870155679953074650">Harte Fehler</translation>
+<translation id="5875534259258494936">Bildschirmfreigabe beendet</translation>
 <translation id="5876576639916258720">Wird ausgeführt…</translation>
 <translation id="5876851302954717356">Neuer Tab rechts</translation>
 <translation id="5877064549588274448">Kanal geändert. Starten Sie Ihr Gerät neu, um die Änderungen zu übernehmen.</translation>
@@ -5370,6 +5374,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> kann nicht als Root ausgeführt werden.</translation>
 <translation id="6812841287760418429">Änderungen beibehalten</translation>
 <translation id="6813907279658683733">Gesamter Bildschirm</translation>
+<translation id="6814033694018386318">Folgendes wird mit Google geteilt</translation>
 <translation id="6817174620439930047">Nachfragen, wenn eine Website versucht, mit systemexklusiven Meldungen auf MIDI-Geräte zuzugreifen (empfohlen)</translation>
 <translation id="6818198425579322765">Sprache der Seite, die übersetzt wird</translation>
 <translation id="6818802132960437751">Integrierter Virenschutz</translation>
@@ -5865,6 +5870,7 @@
 <translation id="7374376573160927383">USB-Geräte verwalten</translation>
 <translation id="7374461526650987610">Protokoll-Handler</translation>
 <translation id="7375235221357833624">{0,plural, =1{Gerät innerhalb von einer Stunde aktualisieren}other{Gerät innerhalb von # Stunden aktualisieren}}</translation>
+<translation id="7376543451826039186">Schnelleres Surfen: Beispielsweise werden bestimmte zusätzliche Inhalte basierend auf der aktuell aufgerufenen Seite proaktiv geladen</translation>
 <translation id="7376553024552204454">Cursor bei Bewegung hervorheben</translation>
 <translation id="737728204345822099">Auf Ihrem Sicherheitsschlüssel kann zum Besuch dieser Website ein Datensatz angelegt werden.</translation>
 <translation id="7377451353532943397">Zugriff auf den Sensor weiterhin blockieren</translation>
@@ -5922,6 +5928,7 @@
 <translation id="7427798576651127129">Mit <ph name="DEVICE_NAME" /> anrufen</translation>
 <translation id="7431719494109538750">Keine HID-Geräte gefunden</translation>
 <translation id="7431991332293347422">Legen Sie fest, wie Ihr Browserverlauf zur Personalisierung der Google Suche verwendet wird</translation>
+<translation id="7432200167665670017">Ihr Administrator hat „<ph name="EXTENSION_NAME" />“ blockiert – App-ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Smartcard einstecken, um <ph name="DEVICE_TYPE" /> weiterhin zu verwenden</translation>
 <translation id="7433957986129316853">Beibehalten</translation>
 <translation id="7434509671034404296">Entwickler</translation>
@@ -5951,6 +5958,7 @@
 <translation id="7460045493116006516">Derzeit installiertes Design</translation>
 <translation id="7461924472993315131">Anpinnen</translation>
 <translation id="746216226901520237">Das nächste Mal wird Ihr <ph name="DEVICE_TYPE" /> von Ihrem Smartphone entsperrt. Sie können Smart Lock in den Einstellungen deaktivieren.</translation>
+<translation id="7464637891177137294">Im Google-Konto <ph name="ACCOUNT" /> speichern</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# offener Tab; zum Ein- oder Ausblenden der Tableiste tippen}other{# offene Tabs; zum Ein- oder Ausblenden der Tableiste tippen}}</translation>
 <translation id="7465635034594602553">Ein Fehler ist aufgetreten. Bitte warten Sie ein paar Minuten und führen Sie <ph name="APP_NAME" /> dann noch einmal aus.</translation>
 <translation id="7465778193084373987">URL zum Zurückrufen von Netscape-Zertifikaten</translation>
@@ -6014,6 +6022,7 @@
 <translation id="7525625923260515951">Ausgewählten Text vorlesen lassen</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{noch 1}other{{NUM_DOWNLOADS} weitere}}</translation>
 <translation id="7526989658317409655">Platzhalter</translation>
+<translation id="7527758104894292229">In Ihrem Google-Konto <ph name="ACCOUNT" /> aktualisieren</translation>
 <translation id="7529411698175791732">Prüfen Sie Ihre Internetverbindung. Wenn das Problem weiterhin besteht, melden Sie sich ab und wieder an.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Gastfenster schließen}other{Gastfenster schließen}}</translation>
 <translation id="7530016656428373557">Entladerate in Watt</translation>
@@ -6400,6 +6409,7 @@
 <translation id="7898725031477653577">Immer übersetzen</translation>
 <translation id="790040513076446191">Datenschutzeinstellungen bearbeiten</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Verbesserung von Chrome durch Seitenmesswerte</translation>
 <translation id="7903345046358933331">Die Seite reagiert nicht mehr. Sie können warten, bis sie wieder reagiert, oder sie schließen.</translation>
 <translation id="7903742244674067440">Ihre gespeicherten Zertifikate identifizieren diese Zertifizierungsstellen</translation>
 <translation id="7903859912536385558">stabil (Trusted Tester)</translation>
@@ -6866,6 +6876,7 @@
 <translation id="8392364544846746346">Nachfragen, wenn eine Website Dateien oder Ordner auf meinem Gerät bearbeiten möchte</translation>
 <translation id="8392451568018454956">Optionsmenü für <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Plug-in anhalten</translation>
+<translation id="839363317075970734">Details zum Bluetooth-Gerät</translation>
 <translation id="8393700583063109961">Nachricht senden</translation>
 <translation id="8397825320644530257">Verbundenes Smartphone trennen</translation>
 <translation id="8398877366907290961">Trotzdem fortfahren</translation>
@@ -7098,7 +7109,7 @@
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> wird nun im Vollbildmodus angezeigt und hat Ihren Cursor deaktiviert.</translation>
 <translation id="8668052347555487755">Farbmodus</translation>
 <translation id="8669284339312441707">Wärmer</translation>
-<translation id="8670537393737592796">Installieren Sie <ph name="APP_NAME" />, um schnell hierher zurückzukehren, indem Sie unten auf die Installationsschaltfläche klicken</translation>
+<translation id="8670537393737592796">Installieren Sie <ph name="APP_NAME" />, um schnell hierher zurückzukehren, indem Sie oben auf die Installationsschaltfläche klicken</translation>
 <translation id="867085395664725367">Ein temporärer Serverfehler ist aufgetreten.</translation>
 <translation id="8673026256276578048">Im Web suchen...</translation>
 <translation id="8673383193459449849">Serverfehler</translation>
@@ -7116,6 +7127,7 @@
 <translation id="8681614230122836773">Chrome hat auf Ihrem Computer schädliche Software gefunden</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> ist verbunden und bereit</translation>
 <translation id="8683081248374354009">Gruppe zurücksetzen</translation>
+<translation id="8683526617475118045">Vorteile</translation>
 <translation id="8688672835843460752">Verfügbar</translation>
 <translation id="8690129572193755009">Websites dürfen nachfragen, wenn sie Protokolle verarbeiten möchten</translation>
 <translation id="8695139659682234808">Jugendschutzeinstellungen nach der Einrichtung hinzufügen</translation>
@@ -7169,6 +7181,7 @@
 <translation id="8737685506611670901"><ph name="PROTOCOL" />-Links anstelle von <ph name="REPLACED_HANDLER_TITLE" /> öffnen</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Wählen Sie die Sprache aus, in die die Seite übersetzt werden soll</translation>
+<translation id="8737916108453753541">Die URLs werden mit Google geteilt, damit wir Ihr Browserverhalten besser nachvollziehen können</translation>
 <translation id="8740247629089392745">Sie können dieses Chromebook nun <ph name="SUPERVISED_USER_NAME" /> geben. Die Einrichtung ist fast abgeschlossen, jetzt ist es an der Zeit, auf Entdeckungstour zu gehen.</translation>
 <translation id="8741944563400125534">Einrichtung des Schalterzugriffs</translation>
 <translation id="8742998548129056176">Dies sind allgemeine Informationen zu Ihrem Gerät und dessen Nutzung, zum Beispiel der Akkustand, System- und App-Aktivitäten und Fehler. Die Daten werden dazu verwendet, Android zu verbessern. Einige aggregierte Daten helfen auch Apps und Partnern von Google, beispielsweise Android-Entwicklern, ihre Apps und Produkte weiter zu verbessern.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index d61e7e00..1a204c49 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Να μεταφράζονται πάντα τα <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Διακοπή</translation>
 <translation id="1110155001042129815">Αναμονή</translation>
+<translation id="1111781754511998498">Προβολέας</translation>
 <translation id="1112420131909513020">Μια καρτέλα παρασκηνίου χρησιμοποιεί Bluetooth</translation>
 <translation id="1113892970288677790">Επιλέξτε οργανωμένα έργα τέχνης και εικόνες.</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -534,6 +535,7 @@
 <translation id="156793199942386351">Το <ph name="CURRENTKEY" /> έχει ήδη ανατεθεί στην ενέργεια "<ph name="ACTION" />". Πατήστε οποιοδήποτε πλήκτρο για <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Κονσόλα JavaScript</translation>
 <translation id="1568323446248056064">Άνοιγμα των ρυθμίσεων οθόνης της συσκευής</translation>
+<translation id="1570604804919108255">Κατάργηση σίγασης ειδοποιήσεων</translation>
 <translation id="1571738973904005196">Προβολή καρτέλας: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Επισκέπτης)</translation>
 <translation id="1572266655485775982">Ενεργοποίηση Wi-Fi</translation>
@@ -591,6 +593,7 @@
 <translation id="1621485112342885423">Τα καλάθια σας</translation>
 <translation id="1621729191093924223">Οι λειτουργίες που χρειάζονται μικρόφωνο δεν θα είναι διαθέσιμες.</translation>
 <translation id="1621831347985899379">Τα δεδομένα της συσκευής <ph name="DEVICE_TYPE" /> θα διαγραφούν</translation>
+<translation id="1621984899599015181">Η διαχείριση των επιλογών κοινοποίησης πραγματοποιείται από τον οργανισμό σας. Ορισμένα στοιχεία ενδέχεται να είναι κρυφά.</translation>
 <translation id="1622054403950683339">Διαγραφή δικτύου Wi-Fi</translation>
 <translation id="1623132449929929218">Οι εικόνες δεν είναι διαθέσιμες προς το παρόν. Συνδεθείτε ξανά στο διαδίκτυο, για να δείτε τις συλλογές ταπετσαριών.</translation>
 <translation id="1623723619460186680">Μείωση μπλε φωτός</translation>
@@ -836,6 +839,7 @@
 <translation id="1850508293116537636">Περιστροφή &amp;προς τα δεξιά</translation>
 <translation id="1852141627593563189">Εύρεση επιβλαβούς λογισμικού</translation>
 <translation id="1852799913675865625">Παρουσιάστηκε σφάλμα κατά την απόπειρα ανάγνωσης του αρχείου: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Συνεχίστε από εκεί όπου είχατε σταματήσει. Μπορείτε να ρυθμίσετε τις εφαρμογές ώστε να γίνεται πάντοτε επαναφορά κατά την εκκίνηση ή να απενεργοποιήσετε την επαναφορά στις Ρυθμίσεις.</translation>
 <translation id="1854180393107901205">Διακοπή μετάδοσης</translation>
 <translation id="1855079636134697549">Η κάμερα είναι ενεργοποιημένη</translation>
 <translation id="1856715684130786728">Προσθήκη τοποθεσίας…</translation>
@@ -965,6 +969,7 @@
 <translation id="1989113344093894667">Δεν είναι δυνατή η λήψη του περιεχομένου</translation>
 <translation id="1990046457226896323">Έγινε λήψη των αρχείων ομιλίας.</translation>
 <translation id="1990512225220753005">Να μην εμφανίζονται οι συντομεύσεις σε αυτήν τη σελίδα</translation>
+<translation id="199191324030140441">Απενεργοποίηση της λειτουργίας Μην ενοχλείτε</translation>
 <translation id="1992397118740194946">Δεν έχει οριστεί</translation>
 <translation id="1992924914582925289">Κατάργηση από τη συσκευή</translation>
 <translation id="1994173015038366702">URL ιστότοπου</translation>
@@ -1006,6 +1011,7 @@
 
 Μπορείτε να διαχειριστείτε τις ρυθμίσεις αυτού του λογαριασμού εγκαθιστώντας την εφαρμογή Family Link στη συσκευή σας.  Σας στείλαμε οδηγίες σε ένα μήνυμα ηλεκτρονικού ταχυδρομείου.</translation>
 <translation id="2040460856718599782">Ωχ! Κάτι πήγε στραβά κατά την προσπάθειά μας να ελέγξουμε την ταυτότητά σας. Ελέγξτε πάλι τα διαπιστευτήρια σύνδεσής σας και δοκιμάστε ξανά.</translation>
+<translation id="2040894699575719559">Η τοποθεσία αποκλείστηκε</translation>
 <translation id="2042279886444479655">Ενεργά προφίλ</translation>
 <translation id="2044014337866019681">Βεβαιωθείτε ότι επαληθεύετε τον λογαριασμό <ph name="ACCOUNT" /> για να ξεκλειδώσετε την περίοδο λειτουργίας.</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -1492,6 +1498,7 @@
 <translation id="2527167509808613699">Όλα τα είδη συνδέσεων</translation>
 <translation id="2530166226437958497">Αντιμετώπιση προβλημάτων</translation>
 <translation id="2532589005999780174">Λειτουργία υψηλής αντίθεσης</translation>
+<translation id="2533649878691950253">Ο ιστότοπος αυτός αποκλείστηκε από το να γνωρίζει την ακριβή τοποθεσία σας, γιατί συνήθως δεν το επιτρέπετε</translation>
 <translation id="253434972992662860">&amp;Παύση</translation>
 <translation id="253557089021624350">Πλήθος Keepalive</translation>
 <translation id="2535799430745250929">Δεν υπάρχουν διαθέσιμα δίκτυα κινητής τηλεφωνίας</translation>
@@ -1679,6 +1686,7 @@
 <translation id="2738771556149464852">Όχι αργότερα από</translation>
 <translation id="2739191690716947896">Εντοπισμός σφαλμάτων</translation>
 <translation id="2739240477418971307">Αλλαγή των ρυθμίσεων προσβασιμότητας</translation>
+<translation id="2739965161385757621">Έλεγχος ρυθμίσεων</translation>
 <translation id="274029851662193272">Συμπτυγμένο</translation>
 <translation id="2740531572673183784">ΟK</translation>
 <translation id="2741713322780029189">Άνοιγμα τερματικού ανάκτησης</translation>
@@ -1803,6 +1811,7 @@
 <translation id="2864601841139725659">Ρύθμιση της εικόνας προφίλ σας</translation>
 <translation id="2865919525181940183">Στιγμιότυπο οθόνης των προγραμμάτων που εμφανίζονται αυτήν τη στιγμή στην οθόνη</translation>
 <translation id="286674810810214575">Έλεγχος πηγών ενέργειας...</translation>
+<translation id="2866876751734765554">Έλεγχος απορρήτου</translation>
 <translation id="2867768963760577682">Άνοιγμα σε καρφιτσωμένη καρτέλα</translation>
 <translation id="2868746137289129307">Αυτή η επέκταση δεν είναι ενημερωμένη και έχει απενεργοποιηθεί από την εταιρική πολιτική. Ενδέχεται να ενεργοποιηθεί αυτόματα όταν υπάρχει διαθέσιμη μια νεότερη έκδοση.</translation>
 <translation id="2870560284913253234">Ιστότοπος</translation>
@@ -2332,6 +2341,7 @@
 <translation id="3446274660183028131">Εκκινήστε το Parallels Desktop για να εγκαταστήσετε τα Windows.</translation>
 <translation id="344630545793878684">Ανάγνωση των δεδομένων σας σε ορισμένους ιστότοπους</translation>
 <translation id="3446650212859500694">Αυτό το αρχείο έχει ευαίσθητο περιεχόμενο.</translation>
+<translation id="3446827946208017735">Κατανοήστε και εξετάστε τις σημαντικότερες ρυθμίσεις απορρήτου σε ένα μέρος</translation>
 <translation id="3448086340637592206">Πρόσθετοι Όροι Google Chrome και Chrome OS</translation>
 <translation id="3448492834076427715">Ενημέρωση λογαριασμού</translation>
 <translation id="3449393517661170867">Νέο παράθυρο με καρτέλες</translation>
@@ -3523,7 +3533,6 @@
 <translation id="4733793249294335256">Τοποθεσία</translation>
 <translation id="473546211690256853">Η διαχείριση αυτού του λογαριασμού γίνεται από τον τομέα <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Το σύστημα δεν κατάφερε να προσδιορίσει αναγνωριστικά συσκευής για αυτήν τη συσκευή.</translation>
-<translation id="473581466100273252">Εναλλαγή καταχωρίσεων που έκλεισαν πρόσφατα</translation>
 <translation id="4736292055110123391">Συγχρονίστε τους σελιδοδείκτες, τους κωδικούς πρόσβασης, το ιστορικό σας και άλλο περιεχόμενο σε όλες τις συσκευές σας</translation>
 <translation id="473775607612524610">Ενημέρωση</translation>
 <translation id="473936925429402449">Επιλεγμένο, επιπλέον περιεχόμενο <ph name="CURRENT_ELEMENT" /> από <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - περιπλεγμένη</translation>
 <translation id="4901309472892185668">Επιλέξτε κατάσταση πειράματος για το πείραμα <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Η πολιτική της οποίας έγινε λήψη από το διακομιστή δεν είναι έγκυρη: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Το ιστορικό δεν αποθηκεύεται σε κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="4906490889887219338">Ρύθμιση ή διαχείριση κοινής χρήσης αρχείων δικτύου. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Δεν πραγματοποιείται συχνά λήψη αυτού του αρχείου και ενδέχεται να είναι επικίνδυνη.</translation>
 <translation id="4907306957610201395">Κατηγορία δικαιωμάτων</translation>
@@ -3762,6 +3770,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Δεν βρέθηκαν VM <ph name="VM_TYPE" />}=1{Βρέθηκε 1 VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Βρέθηκαν {NUM_VMS} VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Δεν υπάρχει σύνδεση στο διαδίκτυο.</translation>
 <translation id="4998430619171209993">Ενεργό</translation>
+<translation id="4999804342505941663">Ενεργοποίηση λειτουργίας Μην ενοχλείτε</translation>
 <translation id="5000922062037820727">Αποκλείεται (συνιστάται)</translation>
 <translation id="5005498671520578047">Αντιγραφή κωδικού πρόσβασης</translation>
 <translation id="5006218871145547804">ADB εφαρμογής Android Crostini</translation>
@@ -5087,6 +5096,7 @@
 <translation id="6468485451923838994">Γραμματοσειρές</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> αρχεία</translation>
 <translation id="6469557521904094793">Ενεργοποίηση δικτύου κινητής τηλεφωνίας</translation>
+<translation id="6470823736074966819">Σίγαση ειδοποιήσεων</translation>
 <translation id="6472893788822429178">Εμφάνιση κουμπιού Αρχικής σελίδας</translation>
 <translation id="6474498546677193336">Η κατάργηση κοινοποίησης δεν ήταν δυνατή, επειδή μια εφαρμογή χρησιμοποιεί αυτόν τον φάκελο. Η κοινοποίηση του φακέλου θα καταργηθεί κατά τον επόμενο τερματισμό λειτουργίας του Linux.</translation>
 <translation id="6474884162850599008">Αποσύνδεση του λογαριασμού Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 1ac367bb..6a3d9b6 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -3533,7 +3533,6 @@
 <translation id="4733793249294335256">Location</translation>
 <translation id="473546211690256853">This account is managed by <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">The system failed to determine device identifiers for this device.</translation>
-<translation id="473581466100273252">Toggle recently closed entries</translation>
 <translation id="4736292055110123391">Sync your bookmarks, passwords, history and more on all your devices</translation>
 <translation id="473775607612524610">Update</translation>
 <translation id="473936925429402449">Selected; extra content <ph name="CURRENT_ELEMENT" /> out of <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3686,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – interlaced</translation>
 <translation id="4901309472892185668">Select experiment state for the <ph name="EXPERIMENT_NAME" /> experiment.</translation>
 <translation id="49027928311173603">The policy downloaded from the server is invalid: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">History isn’t saved in Incognito</translation>
 <translation id="4906490889887219338">Set up or manage network file shares. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">This file is not commonly downloaded and may be dangerous.</translation>
 <translation id="4907306957610201395">Permission Category</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 0b07d56e..1a4f1b0 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3504,7 +3504,6 @@
 <translation id="4733793249294335256">Ubicación</translation>
 <translation id="473546211690256853">Esta cuenta está administrada por <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">El sistema no pudo determinar los identificadores de dispositivo para este dispositivo.</translation>
-<translation id="473581466100273252">Activar o desactivar las entradas cerradas recientemente</translation>
 <translation id="4736292055110123391">Sincroniza tus favoritos, contraseñas, historial y mucho más en todos tus dispositivos</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="473936925429402449">Seleccionado, contenido adicional: <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3657,7 +3656,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelazado)</translation>
 <translation id="4901309472892185668">Selecciona el estado del experimento <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">La política descargada del servidor no es válida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">El historial no se guarda en el modo Incógnito</translation>
 <translation id="4906490889887219338">Configura o administra archivos compartidos de red. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Este archivo no se descarga con frecuencia y podría ser peligroso.</translation>
 <translation id="4907306957610201395">Categoría de permiso</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 0129d43f..2a8db34 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Traducir siempre del <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Detener</translation>
 <translation id="1110155001042129815">Esperar</translation>
+<translation id="1111781754511998498">Proyector</translation>
 <translation id="1112420131909513020">La pestaña en segundo plano está usando el Bluetooth</translation>
 <translation id="1113892970288677790">Elige imágenes y obras de arte seleccionadas</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">La tecla <ph name="CURRENTKEY" /> ya está asignada a la acción <ph name="ACTION" />. Pulsa cualquier tecla para <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Consola JavaScript</translation>
 <translation id="1568323446248056064">Abrir la configuración de la pantalla</translation>
+<translation id="1570604804919108255">Activar sonido de notificaciones</translation>
 <translation id="1571738973904005196">Ver pestaña: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (invitado)</translation>
 <translation id="1572266655485775982">Habilitar Wi-Fi</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">Tus carritos</translation>
 <translation id="1621729191093924223">Las funciones que necesiten un micrófono no se podrán utilizar</translation>
 <translation id="1621831347985899379">Se eliminarán los datos de <ph name="DEVICE_TYPE" /></translation>
+<translation id="1621984899599015181">Las opciones de compartir las gestiona tu organización. Es posible que se oculten algunos elementos.</translation>
 <translation id="1622054403950683339">Olvidar red Wi-Fi</translation>
 <translation id="1623132449929929218">Las imágenes no están disponibles en este momento. Vuelve a conectarte a Internet para ver colecciones de fondos de pantalla.</translation>
 <translation id="1623723619460186680">Reducción de luz azul</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">Girar a la &amp;derecha</translation>
 <translation id="1852141627593563189">Encontrar software dañino</translation>
 <translation id="1852799913675865625">Se ha producido un error al intentar leer el archivo: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Continúa donde lo dejaste. Para hacer que las aplicaciones se restauren siempre al iniciar el dispositivo o para desactivar la restauración, ve a Configuración.</translation>
 <translation id="1854180393107901205">Detener el envío</translation>
 <translation id="1855079636134697549">La cámara está activada</translation>
 <translation id="1856715684130786728">Añadir ubicación...</translation>
@@ -953,6 +957,7 @@
 <translation id="1989113344093894667">No se puede capturar el contenido</translation>
 <translation id="1990046457226896323">Archivos de voz descargados</translation>
 <translation id="1990512225220753005">No mostrar accesos directos en esta página</translation>
+<translation id="199191324030140441">Desactivar No molestar</translation>
 <translation id="1992397118740194946">Sin configurar</translation>
 <translation id="1992924914582925289">Eliminar del dispositivo</translation>
 <translation id="1994173015038366702">URL del sitio</translation>
@@ -994,6 +999,7 @@
 
 Puedes gestionar la configuración de esta cuenta instalando la aplicación Family Link en el dispositivo.  Te hemos enviado instrucciones por correo electrónico.</translation>
 <translation id="2040460856718599782">¡Vaya! Parece que algo ha fallado al intentar identificarte. Vuelve a comprobar tus credenciales de inicio de sesión e inténtalo de nuevo.</translation>
+<translation id="2040894699575719559">Ubicación bloqueada</translation>
 <translation id="2042279886444479655">Perfiles activos</translation>
 <translation id="2044014337866019681">Asegúrate de que estás verificando <ph name="ACCOUNT" /> para desbloquear la sesión.</translation>
 <translation id="204497730941176055">Nombre de plantilla de certificado de Microsoft</translation>
@@ -1478,6 +1484,7 @@
 <translation id="2527167509808613699">Cualquier tipo de conexión</translation>
 <translation id="2530166226437958497">Solución de problemas</translation>
 <translation id="2532589005999780174">Modo de contraste alto</translation>
+<translation id="2533649878691950253">Se ha bloqueado el acceso a tu ubicación precisa en este sitio, ya que normalmente no concedes este permiso</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="253557089021624350">Número de actividades en curso</translation>
 <translation id="2535799430745250929">No existe ninguna red móvil</translation>
@@ -1664,6 +1671,7 @@
 <translation id="2738771556149464852">Anterior a</translation>
 <translation id="2739191690716947896">Depurar</translation>
 <translation id="2739240477418971307">Cambiar tu configuración de accesibilidad</translation>
+<translation id="2739965161385757621">Revisar mis ajustes</translation>
 <translation id="274029851662193272">Hundida</translation>
 <translation id="2740531572673183784">Aceptar</translation>
 <translation id="2741713322780029189">Abrir terminal en modo de recuperación</translation>
@@ -1788,6 +1796,7 @@
 <translation id="2864601841139725659">Selecciona tu foto de perfil</translation>
 <translation id="2865919525181940183">Captura de pantalla de los programas que hay en la pantalla ahora mismo</translation>
 <translation id="286674810810214575">Comprobando fuentes de alimentación...</translation>
+<translation id="2866876751734765554">Revisión de privacidad</translation>
 <translation id="2867768963760577682">Abrir como pestaña fija</translation>
 <translation id="2868746137289129307">Esta extensión está obsoleta e inhabilitada por la política de empresas. Es posible que se habilite automáticamente cuando haya una nueva versión disponible.</translation>
 <translation id="2870560284913253234">Sitio</translation>
@@ -2317,6 +2326,7 @@
 <translation id="3446274660183028131">Abre Parallels Desktop para instalar Windows.</translation>
 <translation id="344630545793878684">Leer tus datos en varios sitios web</translation>
 <translation id="3446650212859500694">Este archivo incluye contenido sensible</translation>
+<translation id="3446827946208017735">Consulta y revisa los ajustes de privacidad más importantes en un solo lugar</translation>
 <translation id="3448086340637592206">Términos Adicionales de Google Chrome y Chrome OS</translation>
 <translation id="3448492834076427715">Actualizar cuenta</translation>
 <translation id="3449393517661170867">Nueva ventana con pestañas</translation>
@@ -3506,7 +3516,6 @@
 <translation id="4733793249294335256">Ubicación</translation>
 <translation id="473546211690256853">Esta cuenta está administrada por <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">El sistema no ha podido determinar los identificadores de este dispositivo.</translation>
-<translation id="473581466100273252">Mostrar/Ocultar entradas cerradas recientemente</translation>
 <translation id="4736292055110123391">Sincroniza tus marcadores, tus contraseñas, tu historial y mucho más en todos tus dispositivos</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="473936925429402449">Seleccionado contenido adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3659,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - entrelazado</translation>
 <translation id="4901309472892185668">Selecciona el estado del experimento <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">La política que has descargado del servidor no es válida (<ph name="VALIDATION_ERROR" />).</translation>
-<translation id="4905269543817054577">En incógnito, el historial no se guarda</translation>
 <translation id="4906490889887219338">Configurar o gestionar sistemas de archivos compartidos de red. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Este archivo no se descarga habitualmente y puede ser peligroso.</translation>
 <translation id="4907306957610201395">Categoría de permisos</translation>
@@ -3745,6 +3753,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{No se ha encontrado ninguna máquina virtual <ph name="VM_TYPE" />}=1{Se ha encontrado 1 máquina virtual <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Se han encontrado {NUM_VMS} máquinas virtuales <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Sin conexión a Internet.</translation>
 <translation id="4998430619171209993">Activado</translation>
+<translation id="4999804342505941663">Activar No molestar</translation>
 <translation id="5000922062037820727">Bloqueado (recomendado)</translation>
 <translation id="5005498671520578047">Copiar contraseña</translation>
 <translation id="5006218871145547804">ADB de aplicaciones Android en Crostini</translation>
@@ -5069,6 +5078,7 @@
 <translation id="6468485451923838994">Fuentes</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> archivos</translation>
 <translation id="6469557521904094793">Activar red móvil</translation>
+<translation id="6470823736074966819">Silenciar notificaciones</translation>
 <translation id="6472893788822429178">Mostrar el botón Página principal</translation>
 <translation id="6474498546677193336">No se ha podido dejar de compartir esta carpeta porque una aplicación está usándola. Se dejará de compartir la próxima vez que se apague Linux.</translation>
 <translation id="6474884162850599008">Desconectar cuenta de Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 64384486..c134b3bc 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">Asukoht</translation>
 <translation id="473546211690256853">Kontot haldab <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Süsteemil ei õnnestunud määrata sellele seadmele seadme tuvastajaid.</translation>
-<translation id="473581466100273252">Kuva/peida hiljuti suletud kirjed</translation>
 <translation id="4736292055110123391">Järjehoidjate, paroolide, ajalugu ja muu sünkroonimine kõigis teie seadmetes</translation>
 <translation id="473775607612524610">Värskenda</translation>
 <translation id="473936925429402449">Valitud, lisasisu üksus <ph name="CURRENT_ELEMENT" /> <ph name="TOTAL_ELEMENTS" />-st</translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – ülereaskannimine</translation>
 <translation id="4901309472892185668">Valige katse <ph name="EXPERIMENT_NAME" /> olek.</translation>
 <translation id="49027928311173603">Serverist alla laaditud reegel on kehtetu: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Ajalugu inkognito režiimis ei salvestata</translation>
 <translation id="4906490889887219338">Seadistage või hallake failide võrguhoidlaid. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Seda faili ei laadita tavaliselt alla ja see võib olla ohtlik.</translation>
 <translation id="4907306957610201395">Loa kategooria</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 94a284f..7c23bae 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Itzuli <ph name="LANGUAGE" /> beti</translation>
 <translation id="1108600514891325577">&amp;Gelditu</translation>
 <translation id="1110155001042129815">Itxaron</translation>
+<translation id="1111781754511998498">Proiektorea</translation>
 <translation id="1112420131909513020">Atzeko planoko fitxa bat Bluetooth-a erabiltzen ari da</translation>
 <translation id="1113892970288677790">Hautatu aukeratutako artelan eta irudietako bat</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">"<ph name="ACTION" />" ekintzari esleitu zaio dagoeneko "<ph name="CURRENTKEY" />". Sakatu edozein tekla <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-en kontsola</translation>
 <translation id="1568323446248056064">Ireki pantailaren ezarpenak</translation>
+<translation id="1570604804919108255">Erakutsi jakinarazpenak</translation>
 <translation id="1571738973904005196">Ikusi fitxa: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gonbidatua)</translation>
 <translation id="1572266655485775982">Gaitu Wi-Fi konexioa</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">Zure saskiak</translation>
 <translation id="1621729191093924223">Mikrofono bat behar duten eginbideek ez dute funtzionatuko</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> gailuko datuak ezabatu egingo dira</translation>
+<translation id="1621984899599015181">Zure erakundeak kudeatzen ditu partekatzeko aukerak. Baliteke elementu batzuk ezkutatuta egotea.</translation>
 <translation id="1622054403950683339">Ahaztu wifi-sarea</translation>
 <translation id="1623132449929929218">Irudiak ez daude erabilgarri. Horma-paperen bildumak ikusteko, konektatu berriro Internetera.</translation>
 <translation id="1623723619460186680">Argi urdina murrizteko aukera</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">Biratu e&amp;rlojuaren orratzen norabidean</translation>
 <translation id="1852141627593563189">Bilatu software kaltegarria</translation>
 <translation id="1852799913675865625">Errore bat gertatu da fitxategia irakurtzen saiatzean: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Jarraitu utzi zenuen tokitik. Aplikazioak abioan beti leheneratzeko edo leheneratzea desaktibatzeko, joan ezarpenetara.</translation>
 <translation id="1854180393107901205">Utzi igortzeari</translation>
 <translation id="1855079636134697549">Aktibatu da kamera</translation>
 <translation id="1856715684130786728">Gehitu kokapena…</translation>
@@ -953,6 +957,7 @@
 <translation id="1989113344093894667">Ezin da kapturatu edukia</translation>
 <translation id="1990046457226896323">Deskargatu dira ahotsa testu bihurtzeko fitxategiak</translation>
 <translation id="1990512225220753005">Ez erakutsi lasterbideak orri honetan</translation>
+<translation id="199191324030140441">Desaktibatu ez molestatzeko modua</translation>
 <translation id="1992397118740194946">Ezarri gabe</translation>
 <translation id="1992924914582925289">Kendu gailutik</translation>
 <translation id="1994173015038366702">Webgunearen URLa</translation>
@@ -994,6 +999,7 @@
 
 Kontu honen ezarpenak kudeatzeko, instalatu Family Link aplikazioa zure gailuan.  Posta elektronikoz bidali dizkizugu argibideak.</translation>
 <translation id="2040460856718599782">Arazoren bat izan da zu autentifikatzen saiatzean. Egiaztatu bi aldiz saioa hasteko erabili dituzun kredentzialak eta saiatu berriro.</translation>
+<translation id="2040894699575719559">Blokeatu egin da kokapena</translation>
 <translation id="2042279886444479655">Profil aktiboak</translation>
 <translation id="2044014337866019681">Ziurtatu <ph name="ACCOUNT" /> kontua ari zarela egiaztatzen saioa desblokeatzeko.</translation>
 <translation id="204497730941176055">Microsoft ziurtagiriaren txantiloiaren izena</translation>
@@ -1477,6 +1483,7 @@
 <translation id="2527167509808613699">Edozein motatako konexioa</translation>
 <translation id="2530166226437958497">Irtenbideak</translation>
 <translation id="2532589005999780174">Kontraste handiko modua</translation>
+<translation id="2533649878691950253">Webgune honi blokeatu egin zaio zure kokapen zehatza hautemateko aukera, normalean ez duzulako ematen</translation>
 <translation id="253434972992662860">&amp;Pausatu</translation>
 <translation id="253557089021624350">Aktibo mantentzen dutenak</translation>
 <translation id="2535799430745250929">Ez dago sare mugikorrik</translation>
@@ -1663,6 +1670,7 @@
 <translation id="2738771556149464852">Ez honen atzetik</translation>
 <translation id="2739191690716947896">Araztu</translation>
 <translation id="2739240477418971307">Aldatu erabilerraztasun-ezarpenak</translation>
+<translation id="2739965161385757621">Berrikusi ezarpenak</translation>
 <translation id="274029851662193272">Beheratua</translation>
 <translation id="2740531572673183784">Ados</translation>
 <translation id="2741713322780029189">Ireki berreskuratzeko terminala</translation>
@@ -1787,6 +1795,7 @@
 <translation id="2864601841139725659">Ezarri profileko argazkia</translation>
 <translation id="2865919525181940183">Pantailan dauden programen pantaila-argazkia</translation>
 <translation id="286674810810214575">Energia-iturriak egiaztatzen…</translation>
+<translation id="2866876751734765554">Pribatutasun-berrikuspena</translation>
 <translation id="2867768963760577682">Ireki fitxa ainguratu gisa</translation>
 <translation id="2868746137289129307">Enpresaren gidalerroak zaharkituta eta desgaituta utzi du luzapena. Automatikoki gai liteke bertsio berria eskuragarri egotean.</translation>
 <translation id="2870560284913253234">Webgunea</translation>
@@ -2316,6 +2325,7 @@
 <translation id="3446274660183028131">Windows instalatzeko, abiarazi Parallels Desktop.</translation>
 <translation id="344630545793878684">Irakurri zenbait webgunetan dituzun datuak</translation>
 <translation id="3446650212859500694">Fitxategiak kontuzko edukia dauka</translation>
+<translation id="3446827946208017735">Ulertu eta berrikusi pribatutasun-ezarpen garrantzitsuenak toki berean</translation>
 <translation id="3448086340637592206">Google Chrome eta Chrome OS zerbitzuen baldintza gehigarriak</translation>
 <translation id="3448492834076427715">Eguneratu kontua</translation>
 <translation id="3449393517661170867">Leiho fitxadun berria</translation>
@@ -3506,7 +3516,6 @@
 <translation id="4733793249294335256">Kokapena</translation>
 <translation id="473546211690256853"><ph name="DOMAIN" /> domeinuak kudeatzen du kontua</translation>
 <translation id="4735803855089279419">Sistemak ezin izan ditu zehaztu gailuaren identifikatzaileak.</translation>
-<translation id="473581466100273252">Zabaldu/Tolestu itxitako azken sarrerak</translation>
 <translation id="4736292055110123391">Sinkronizatu laster-markak, pasahitzak, historia eta beste gauza asko zure gailu guztietan</translation>
 <translation id="473775607612524610">Eguneratu</translation>
 <translation id="473936925429402449">Hautatuta, <ph name="CURRENT_ELEMENT" /> elementu gehigarritatik <ph name="TOTAL_ELEMENTS" />garrenera</translation>
@@ -3659,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - gurutzatuta</translation>
 <translation id="4901309472892185668">Hautatu <ph name="EXPERIMENT_NAME" /> probaren egoera.</translation>
 <translation id="49027928311173603">Zerbitzarirako deskargatu diren gidalerroek ez dute balio: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historia ez da gordetzen ezkutuko moduan</translation>
 <translation id="4906490889887219338">Konfiguratu edo kudeatu sareko fitxategiak partekatzeko biltegiak. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Fitxategia ez da deskargatu ohi eta baliteke arriskutsua izatea.</translation>
 <translation id="4907306957610201395">Baimen-kategoria</translation>
@@ -3745,6 +3753,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Ez da aurkitu <ph name="VM_TYPE" /> makina birtualik}=1{1 <ph name="VM_TYPE" /> makina birtual aurkitu da: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> makina birtual aurkitu dira: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Ez zaude konektatuta Internetera.</translation>
 <translation id="4998430619171209993">Aktibatuta</translation>
+<translation id="4999804342505941663">Aktibatu ez molestatzeko modua</translation>
 <translation id="5000922062037820727">Blokeatuta (gomendatua)</translation>
 <translation id="5005498671520578047">Kopiatu pasahitza</translation>
 <translation id="5006218871145547804">Crostini-ren Android-erako aplikazioen ADB</translation>
@@ -5069,6 +5078,7 @@
 <translation id="6468485451923838994">Letrak</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> fitxategi</translation>
 <translation id="6469557521904094793">Aktibatu sare mugikorra</translation>
+<translation id="6470823736074966819">Ezkutatu jakinarazpenak</translation>
 <translation id="6472893788822429178">Erakutsi Hasiera botoia</translation>
 <translation id="6474498546677193336">Ezin izan zaio utzi karpeta partekatzeari, aplikazio bat ari delako hura erabiltzen. Linux ixten den hurrengoan utziko zaio karpeta partekatzeari.</translation>
 <translation id="6474884162850599008">Deskonektatu Google Drive-ko kontua</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 276ce72..9044f837 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> همیشه ترجمه شود</translation>
 <translation id="1108600514891325577">&amp;توقف</translation>
 <translation id="1110155001042129815">انتظار</translation>
+<translation id="1111781754511998498">پروژکتور</translation>
 <translation id="1112420131909513020">برگه پس‌زمینه درحال استفاده از بلوتوث است</translation>
 <translation id="1113892970288677790">انتخاب کارهای هنری و تصاویر برگزیده</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -532,6 +533,7 @@
 <translation id="156793199942386351">«<ph name="CURRENTKEY" />» قبلاً به کنش «<ph name="ACTION" />» اختصاص یافته است. برای <ph name="RESPONSE" />، یکی از کلیدها را فشار دهید.</translation>
 <translation id="1567993339577891801">کنسول جاوا اسکریپت</translation>
 <translation id="1568323446248056064">باز کردن تنظیمات نمایشگر دستگاه</translation>
+<translation id="1570604804919108255">باصدا کردن اعلان‌ها</translation>
 <translation id="1571738973904005196">مشاهده برگه: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (مهمان)</translation>
 <translation id="1572266655485775982">‏فعال کردن Wi-Fi</translation>
@@ -589,6 +591,7 @@
 <translation id="1621485112342885423">سبدهای خرید شما</translation>
 <translation id="1621729191093924223">ویژگی‌هایی که به میکروفون نیاز دارند کار نخواهند کرد</translation>
 <translation id="1621831347985899379">داده‌های <ph name="DEVICE_TYPE" /> حذف خواهد شد</translation>
+<translation id="1621984899599015181">سازمانتان گزینه‌های هم‌رسانی را مدیریت می‌کند. ممکن است برخی‌از موارد پنهان شده باشند.</translation>
 <translation id="1622054403950683339">‏فراموش کردن شبکه Wi-Fi</translation>
 <translation id="1623132449929929218">درحال‌حاضر تصاویر دردسترس نیستند. برای دیدن مجموعه‌های کاغذدیواری دوباره به اینترنت متصل شوید.</translation>
 <translation id="1623723619460186680">کاهش نور آبی</translation>
@@ -834,6 +837,7 @@
 <translation id="1850508293116537636">چرخاندن در جهت &amp;عقربه‌های ساعت</translation>
 <translation id="1852141627593563189">یافتن نرم‌افزارهای مضر</translation>
 <translation id="1852799913675865625">خطایی در حین خواندن این فایل وجود داشت: <ph name="ERROR_TEXT" /></translation>
+<translation id="1854049213067042715">کارتان را از جایی که متوقف کرده‌اید ادامه دهید. در «تنظیمات» می‌توانید برنامه‌ها را طوری تنظیم کنید که همیشه هنگام راه‌اندازی بازیابی شوند یا بازیابی را خاموش کنید.</translation>
 <translation id="1854180393107901205">توقف فرستادن</translation>
 <translation id="1855079636134697549">دوربین روشن شد</translation>
 <translation id="1856715684130786728">افزودن موقعیت مکانی...</translation>
@@ -962,6 +966,7 @@
 <translation id="1989113344093894667">نمی‌توان محتوا را ضبط کرد</translation>
 <translation id="1990046457226896323">فایل‌های گفتاری بارگیری شد</translation>
 <translation id="1990512225220753005">میان‌برها در این صفحه نشان داده نشود</translation>
+<translation id="199191324030140441">خاموش کردن «مزاحم نشوید»</translation>
 <translation id="1992397118740194946">تنظیم نشده</translation>
 <translation id="1992924914582925289">حذف از دستگاه</translation>
 <translation id="1994173015038366702">نشانی وب سایت</translation>
@@ -1003,6 +1008,7 @@
 
 با نصب برنامه Family Link در دستگاهتان می‌توانید تنظیمات این حساب را مدیریت کنید.  دستورالعمل‌ها در قالب ایمیل برایتان ارسال کردیم.</translation>
 <translation id="2040460856718599782">وای! هنگام اصالت‌سنجی شما مشکلی پیش آمد. لطفاً اطلاعات کاربری ورود به سیستمتان را دوباره بررسی کرده و دوباره امتحان نمایید.</translation>
+<translation id="2040894699575719559">مکان مسدود شد</translation>
 <translation id="2042279886444479655">نمایه‌های فعال</translation>
 <translation id="2044014337866019681">لطفاً مطمئن شوید <ph name="ACCOUNT" /> را به‌تأیید می‌رسانید تا قفل جلسه باز شود.</translation>
 <translation id="204497730941176055">‏نام الگوی گواهی Microsoft</translation>
@@ -1489,6 +1495,7 @@
 <translation id="2527167509808613699">هر نوع اتصال</translation>
 <translation id="2530166226437958497">عیب‌یابی</translation>
 <translation id="2532589005999780174">حالت کنتراست بالا</translation>
+<translation id="2533649878691950253">اجازه دسترسی به مکان دقیق شما به این سایت داده نشد چون شما معمولاً این اجازه را اعطا نمی‌کنید</translation>
 <translation id="253434972992662860">&amp;توقف موقت</translation>
 <translation id="253557089021624350">شمارش استفاده</translation>
 <translation id="2535799430745250929">شبکه داده تلفن همراهی موجود نیست</translation>
@@ -1676,6 +1683,7 @@
 <translation id="2738771556149464852">نه بعد از</translation>
 <translation id="2739191690716947896">رفع اشکال</translation>
 <translation id="2739240477418971307">تغییر تنظیمات دسترس‌پذیریتان</translation>
+<translation id="2739965161385757621">مرور تنظیمات</translation>
 <translation id="274029851662193272">فرورفته</translation>
 <translation id="2740531572673183784">تأیید</translation>
 <translation id="2741713322780029189">باز کردن پایانه بازیابی</translation>
@@ -1800,6 +1808,7 @@
 <translation id="2864601841139725659">عکس نمایه اضافه کنید</translation>
 <translation id="2865919525181940183">نماگرفت برنامه‌هایی که درحال‌حاضر روی صفحه هستند</translation>
 <translation id="286674810810214575">درحال بررسی منابع برق...</translation>
+<translation id="2866876751734765554">مرور حریم‌خصوصی</translation>
 <translation id="2867768963760577682">بازکردن به‌عنوان برگه پین شده</translation>
 <translation id="2868746137289129307">این افزونه قدیمی است و خط‌مشی شرکت آن را غیرفعال کرده است. شاید وقتی یک نسخه جدیدتر در دسترس قرار گیرد به صورت خودکار فعال شود.</translation>
 <translation id="2870560284913253234">سایت</translation>
@@ -2329,6 +2338,7 @@
 <translation id="3446274660183028131">‏لطفاً برای نصب Windows، ‏Parallels Desktop را راه‌اندازی کنید.</translation>
 <translation id="344630545793878684">خواندن داده‌های شما در تعدادی از وب‌سایت‌ها</translation>
 <translation id="3446650212859500694">این فایل محتوای حساس دارد</translation>
+<translation id="3446827946208017735">در یک جا از تنظیمات حریم‌خصوصی بسیار مهم مطلع شوید و آن‌ها را مرور کنید</translation>
 <translation id="3448086340637592206">‏شرایط تکمیلی Google Chrome و Chrome OS</translation>
 <translation id="3448492834076427715">به‌روزرسانی حساب</translation>
 <translation id="3449393517661170867">پنجره برگه‌دار جدید</translation>
@@ -3520,7 +3530,6 @@
 <translation id="4733793249294335256">مکان</translation>
 <translation id="473546211690256853"><ph name="DOMAIN" />، این حساب را مدیریت می‌کند</translation>
 <translation id="4735803855089279419">سیستم نتوانست شناسه‌های دستگاه را برای این دستگاه تعیین کند.</translation>
-<translation id="473581466100273252">پنهان/ نمایان کردن ورودی‌های اخیراً بسته‌شده</translation>
 <translation id="4736292055110123391">همگام‌سازی نشانک‌ها، سابقه، و موارد دیگر در همه دستگاه‌ها</translation>
 <translation id="473775607612524610">به‌روزرسانی</translation>
 <translation id="473936925429402449">انتخاب‌شده، محتوای اضافی <ph name="CURRENT_ELEMENT" /> از <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3673,7 +3682,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> هرتز - درهم‌بافته</translation>
 <translation id="4901309472892185668">وضعیت آزمایش را برای آزمایش <ph name="EXPERIMENT_NAME" /> انتخاب کنید.</translation>
 <translation id="49027928311173603">خط‌مشی بارگیری‌شده از سرور نامعتبر است: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">سابقه در «حالت ناشناس» ذخیره نمی‌شود</translation>
 <translation id="4906490889887219338">راه‌اندازی یا مدیریت دستگاه‌های ذخیره‌سازی متصل به شبکه. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">این فایل معمولاً بارگیری نمی‌شود و ممکن است خطرناک باشد.</translation>
 <translation id="4907306957610201395">دسته مجوز</translation>
@@ -3759,6 +3767,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{هیچ ماشین مجازی <ph name="VM_TYPE" /> پیدا نشد}=1{‏۱ ماشین مجازی <ph name="VM_TYPE" /> پیدا شد: <ph name="VM_NAME_LIST" />}one{‏{NUM_VMS} ماشین مجازی <ph name="VM_TYPE" /> پیدا شد: <ph name="VM_NAME_LIST" />}other{‏{NUM_VMS} ماشین مجازی <ph name="VM_TYPE" /> پیدا شد: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">اتصال اینترنت ندارید.</translation>
 <translation id="4998430619171209993">روشن</translation>
+<translation id="4999804342505941663">روشن کردن «مزاحم نشوید»</translation>
 <translation id="5000922062037820727">مسدود (توصیه می‌شود)</translation>
 <translation id="5005498671520578047">کپی گذرواژه</translation>
 <translation id="5006218871145547804">‏پُل اشکال‌زدایی برنامه Android در Crostini</translation>
@@ -5083,6 +5092,7 @@
 <translation id="6468485451923838994">قلم‌ها</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> فایل</translation>
 <translation id="6469557521904094793">روشن کردن شبکه تلفن همراه</translation>
+<translation id="6470823736074966819">بی‌صدا کردن اعلان‌ها</translation>
 <translation id="6472893788822429178">نمایش دکمه صفحه اصلی</translation>
 <translation id="6474498546677193336">‏لغو هم‌رسانی امکان‌پذیر نیست زیرا برنامه‌ای از این پوشه استفاده می‌کند. دفعه بعد که Linux را خاموش کنید، پوشه لغو هم‌رسانی می‌شود.</translation>
 <translation id="6474884162850599008">‏قطع ارتباط حساب Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index c3b9427..e15e874e 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -3519,7 +3519,6 @@
 <translation id="4733793249294335256">Sijainti</translation>
 <translation id="473546211690256853">Tätä tiliä hallitsee <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Järjestelmä ei onnistunut määrittämään tämän laitteen laitetunnisteita.</translation>
-<translation id="473581466100273252">Äskettäin suljetut kohteet päälle/pois</translation>
 <translation id="4736292055110123391">Synkronoi muun muassa kirjanmerkit, salasanat ja historia kaikilla laitteillasi</translation>
 <translation id="473775607612524610">Päivitä</translation>
 <translation id="473936925429402449">Valittu, ylimääräinen sisältö: <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /></translation>
@@ -3672,7 +3671,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – lomitettu</translation>
 <translation id="4901309472892185668">Valitse kokeilutila tälle kokeilulle: <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Palvelimelta ladattu käytäntö on virheellinen: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historiaa ei tallenneta incognito-tilassa</translation>
 <translation id="4906490889887219338">Aloita verkkotiedostojen jakaminen tai muuta sitä. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Tätä tiedostoa ei ladata usein ja se saattaa olla haitallinen.</translation>
 <translation id="4907306957610201395">Käyttöoikeusluokka</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 523bf0d8..ffa620e 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -3524,7 +3524,6 @@
 <translation id="4733793249294335256">Lokasyon</translation>
 <translation id="473546211690256853">Pinamamahalaan ang account na ito ng <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Hindi natukoy ng system ang mga pagkakakilanlan ng device para sa device na ito.</translation>
-<translation id="473581466100273252">I-toggle ang Mga Kamakailang Isinarang Entry</translation>
 <translation id="4736292055110123391">I-sync ang iyong mga bookmark, password, history, at higit pa sa lahat ng device mo</translation>
 <translation id="473775607612524610">I-update</translation>
 <translation id="473936925429402449">Pinili, karagdagang content na <ph name="CURRENT_ELEMENT" /> sa <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3677,7 +3676,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - naka-interlace</translation>
 <translation id="4901309472892185668">Pumili ng status ng eksperimento para sa eksperimentong <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Di-wasto ang patakaran na-download mula sa server: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Hindi nase-save ang history sa Incognito</translation>
 <translation id="4906490889887219338">Mag-set up o mamahala ng mga file share ng network. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Hindi karaniwang dina-download ang app na ito at maaaring mapanganib.</translation>
 <translation id="4907306957610201395">Kategorya ng Pahintulot</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index dbe8954..2aa07584 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -3509,7 +3509,6 @@
 <translation id="4733793249294335256">Emplacement</translation>
 <translation id="473546211690256853">Ce compte est géré par <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Impossible de déterminer quels sont les identifiants de cet appareil.</translation>
-<translation id="473581466100273252">Basculez entre les entrées récemment fermées</translation>
 <translation id="4736292055110123391">Synchronisez vos favoris, vos mots de passe, votre historique et plus encore sur tous vos appareils</translation>
 <translation id="473775607612524610">Mise à jour</translation>
 <translation id="473936925429402449">Sélectionné, contenu supplémentaire <ph name="CURRENT_ELEMENT" /> sur <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3662,7 +3661,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelacé)</translation>
 <translation id="4901309472892185668">Sélectionner l'état de la fonctionnalité expérimentale <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">La règle téléchargée du serveur n'est pas valide : <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">L'historique n'est pas enregistré en mode de navigation privée</translation>
 <translation id="4906490889887219338">Configurez ou gérez les partages de fichiers sur le réseau. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ce fichier n'est pas souvent téléchargé et peut être dangereux.</translation>
 <translation id="4907306957610201395">Catégorie d'autorisation</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 5f23a54..ef00d9b 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Toujours traduire les pages en <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Arrêter</translation>
 <translation id="1110155001042129815">Attendre</translation>
+<translation id="1111781754511998498">Projecteur</translation>
 <translation id="1112420131909513020">Le Bluetooth est utilisé par un onglet d'arrière-plan</translation>
 <translation id="1113892970288677790">Faites votre choix parmi une sélection d'images et d'œuvres</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MODEL" /> <ph name="PRINTER_MANUFACTURER" /> (USB)</translation>
@@ -532,6 +533,7 @@
 <translation id="156793199942386351">Vous avez déjà associé <ph name="CURRENTKEY" /> à l'action "<ph name="ACTION" />". Appuyez sur une touche pour <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568323446248056064">Ouvrir les paramètres de l'écran</translation>
+<translation id="1570604804919108255">Réactiver les notifications</translation>
 <translation id="1571738973904005196">Afficher l'onglet <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (invité)</translation>
 <translation id="1572266655485775982">Activation du Wi-Fi</translation>
@@ -589,6 +591,7 @@
 <translation id="1621485112342885423">Vos paniers</translation>
 <translation id="1621729191093924223">Les fonctionnalités qui nécessitent l'accès au micro ne seront pas disponibles</translation>
 <translation id="1621831347985899379">Les données du <ph name="DEVICE_TYPE" /> seront supprimées</translation>
+<translation id="1621984899599015181">Les options de partage sont gérées par votre organisation. Certains éléments peuvent être masqués.</translation>
 <translation id="1622054403950683339">Supprimer le réseau Wi-Fi</translation>
 <translation id="1623132449929929218">Les images ne sont actuellement pas disponibles. Veuillez vous reconnecter pour afficher les collections de fonds d'écran.</translation>
 <translation id="1623723619460186680">Réduction de la lumière bleue</translation>
@@ -826,6 +829,7 @@
 <translation id="1850508293116537636">Rotation &amp;dans le sens des aiguilles d'une montre</translation>
 <translation id="1852141627593563189">Détecter des logiciels malveillants</translation>
 <translation id="1852799913675865625">Une erreur s'est produite lors de la tentative de lecture du fichier : <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Reprenez là où vous en étiez. Dans les paramètres, vous pouvez choisir de restaurer vos applis au démarrage ou de désactiver cette fonctionnalité.</translation>
 <translation id="1854180393107901205">Arrêter la diffusion</translation>
 <translation id="1855079636134697549">La caméra est allumée</translation>
 <translation id="1856715684130786728">Ajouter un emplacement…</translation>
@@ -954,6 +958,7 @@
 <translation id="1989113344093894667">Impossible de capturer des contenus</translation>
 <translation id="1990046457226896323">Fichiers vocaux téléchargés</translation>
 <translation id="1990512225220753005">Ne pas afficher de raccourcis sur cette page</translation>
+<translation id="199191324030140441">Désactiver le mode "Ne pas déranger"</translation>
 <translation id="1992397118740194946">Non défini</translation>
 <translation id="1992924914582925289">Supprimer de l'appareil</translation>
 <translation id="1994173015038366702">URL du site</translation>
@@ -995,6 +1000,7 @@
 
 Vous pouvez gérer les paramètres de ce compte en installant l'application Family Link sur votre appareil.  Nous vous avons envoyé des instructions par e-mail.</translation>
 <translation id="2040460856718599782">Petit problème… Une erreur s'est produite lors de la tentative d'authentification. Veuillez vérifier vos identifiants de connexion, puis réessayer.</translation>
+<translation id="2040894699575719559">Position bloquée</translation>
 <translation id="2042279886444479655">Profils actifs</translation>
 <translation id="2044014337866019681">Pour déverrouiller la session, vérifiez que vous êtes bien en train de valider <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Nom du modèle de certificat Microsoft</translation>
@@ -1478,6 +1484,7 @@
 <translation id="2527167509808613699">Toutes sortes de connexions</translation>
 <translation id="2530166226437958497">Dépannage</translation>
 <translation id="2532589005999780174">Mode Contraste élevé</translation>
+<translation id="2533649878691950253">Votre position exacte est bloquée pour ce site, car vous refusez habituellement de la communiquer</translation>
 <translation id="253434972992662860">&amp;Pause</translation>
 <translation id="253557089021624350">Nombre d'activités en cours</translation>
 <translation id="2535799430745250929">Aucun réseau mobile disponible</translation>
@@ -1665,6 +1672,7 @@
 <translation id="2738771556149464852">Pas après le</translation>
 <translation id="2739191690716947896">Déboguer</translation>
 <translation id="2739240477418971307">Modifier vos paramètres d'accessibilité</translation>
+<translation id="2739965161385757621">Vérifier mes paramètres</translation>
 <translation id="274029851662193272">Bord en retrait</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Ouvrir le terminal de récupération</translation>
@@ -1789,6 +1797,7 @@
 <translation id="2864601841139725659">Définir votre photo de profil</translation>
 <translation id="2865919525181940183">Captures d'écran des programmes actuellement à l'écran</translation>
 <translation id="286674810810214575">Vérification des sources d'alimentation…</translation>
+<translation id="2866876751734765554">Contrôle de la confidentialité</translation>
 <translation id="2867768963760577682">Ouvrir dans un onglet épinglé</translation>
 <translation id="2868746137289129307">Cette extension est obsolète et désactivée par une stratégie d'entreprise. Il se peut qu'elle soit activée automatiquement lors de la publication d'une version plus récente.</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -2318,6 +2327,7 @@
 <translation id="3446274660183028131">Veuillez lancer Parallels Desktop pour installer Windows.</translation>
 <translation id="344630545793878684">Lire vos données sur plusieurs sites web</translation>
 <translation id="3446650212859500694">Le contenu de ce fichier est sensible</translation>
+<translation id="3446827946208017735">Retrouvez vos paramètres de confidentialité les plus importants au même endroit</translation>
 <translation id="3448086340637592206">Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS</translation>
 <translation id="3448492834076427715">Mettre à jour le compte</translation>
 <translation id="3449393517661170867">Nouvelle fenêtre à onglets</translation>
@@ -3508,7 +3518,6 @@
 <translation id="4733793249294335256">Emplacement</translation>
 <translation id="473546211690256853">Ce compte est géré par <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Impossible de déterminer les identifiants de cet appareil.</translation>
-<translation id="473581466100273252">Afficher/Masquer les éléments fermés récemment</translation>
 <translation id="4736292055110123391">Synchronisez vos favoris, vos mots de passe, votre historique et plus encore sur tous vos appareils</translation>
 <translation id="473775607612524610">Mettre à jour</translation>
 <translation id="473936925429402449">Sélectionné, contenu supplémentaire <ph name="CURRENT_ELEMENT" /> sur <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3661,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelacé)</translation>
 <translation id="4901309472892185668">Sélectionnez l'état du test pour <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">La règle téléchargée depuis le serveur n'est pas valide : <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">L'historique n'est pas enregistré en navigation privée</translation>
 <translation id="4906490889887219338">Configurer ou gérer des partages de fichiers en réseau. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ce fichier n'étant pas souvent téléchargé, il peut présenter un danger.</translation>
 <translation id="4907306957610201395">Catégorie d'autorisation</translation>
@@ -3747,6 +3755,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Aucune VM <ph name="VM_TYPE" /> trouvée}=1{1 VM <ph name="VM_TYPE" /> trouvée : <ph name="VM_NAME_LIST" />}one{{NUM_VMS} VM <ph name="VM_TYPE" /> trouvée : <ph name="VM_NAME_LIST" />}other{{NUM_VMS} VM <ph name="VM_TYPE" /> trouvées : <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Aucune connexion Internet.</translation>
 <translation id="4998430619171209993">Activé</translation>
+<translation id="4999804342505941663">Activer le mode Ne pas déranger</translation>
 <translation id="5000922062037820727">Bloqué (recommandé)</translation>
 <translation id="5005498671520578047">Copier mot de passe</translation>
 <translation id="5006218871145547804">ADB pour les applications Android sur Crostini</translation>
@@ -5072,6 +5081,7 @@
 <translation id="6468485451923838994">Polices</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> fichiers</translation>
 <translation id="6469557521904094793">Activer le réseau mobile</translation>
+<translation id="6470823736074966819">Ignorer les notifications</translation>
 <translation id="6472893788822429178">Afficher le bouton Accueil</translation>
 <translation id="6474498546677193336">Impossible d'annuler le partage, car une application utilise ce dossier. Le partage sera annulé au prochain arrêt de Linux.</translation>
 <translation id="6474884162850599008">Déconnecter le compte Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index cba58a8..c58b960c 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -3505,7 +3505,6 @@
 <translation id="4733793249294335256">Localización</translation>
 <translation id="473546211690256853">Esta conta está xestionada por <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">O sistema non puido determinar os identificadores deste dispositivo.</translation>
-<translation id="473581466100273252">Ocultar ou mostrar entradas pechadas recentemente</translation>
 <translation id="4736292055110123391">Sincronizar os marcadores, os contrasinais, o historial e máis datos en todos os teus dispositivos</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="473936925429402449">Botón de contido extra (seleccionado): <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3658,7 +3657,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz: liñas entrelazadas</translation>
 <translation id="4901309472892185668">Seleccionar estado do experimento <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">A política descargada do servidor non é válida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">O historial non se garda no modo de incógnito</translation>
 <translation id="4906490889887219338">Configurar ou xestionar sistemas de ficheiros compartidos en rede. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Este ficheiro non se descarga habitualmente e pode ser perigoso.</translation>
 <translation id="4907306957610201395">Categoría de permisos</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 9eba451..c1338198 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -3501,7 +3501,6 @@
 <translation id="4733793249294335256">સ્થાન</translation>
 <translation id="473546211690256853">આ એકાઉન્ટ <ph name="DOMAIN" /> દ્વારા મેનેજ કરાય છે</translation>
 <translation id="4735803855089279419">આ ડિવાઇસ માટે ડિવાઇસ ઓળખકર્તા નક્કી કરવામાં સિસ્ટમ નિષ્ફળ થઈ.</translation>
-<translation id="473581466100273252">તાજેતરમાં બંધ કરેલી આઇટમને ટૉગલ કરો</translation>
 <translation id="4736292055110123391">તમારા બધા ડિવાઇસ પર તમારા બુકમાર્ક, પાસવર્ડ, ઇતિહાસ અને વધુ સિંક કરો</translation>
 <translation id="473775607612524610">અપડેટ કરો</translation>
 <translation id="473936925429402449">પસંદ કરેલા, <ph name="TOTAL_ELEMENTS" />માંથી વધારાના <ph name="CURRENT_ELEMENT" /> કન્ટેન્ટ</translation>
@@ -3654,7 +3653,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ઇન્ટરલેસ કરેલો</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> પ્રયોગ માટે, પ્રયોગનું સ્ટેટસ પસંદ કરો.</translation>
 <translation id="49027928311173603">સર્વરમાંથી ડાઉનલોડ કરેલી પૉલિસી અમાન્ય છે: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">છૂપા મોડમાં ઇતિહાસ સાચવવામાં આવતો નથી</translation>
 <translation id="4906490889887219338">નેટવર્ક ફાઇલ શેર સેટઅપ કરો અથવા મેનેજ કરો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">આ ફાઇલ સામાન્ય રીતે ડાઉનલોડ કરવામાં આવતી નથી અને તે જોખમી હોઈ શકે છે.</translation>
 <translation id="4907306957610201395">પરવાનગી કૅટેગરી</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 00374fb..ed09efe 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -3522,7 +3522,6 @@
 <translation id="4733793249294335256">स्थान</translation>
 <translation id="473546211690256853">यह खाता <ph name="DOMAIN" /> द्वारा प्रबंधित किया जाता है</translation>
 <translation id="4735803855089279419">सिस्‍टम इस डिवाइस के लिए डिवाइस पहचानकर्ताओं को तय नहीं कर सका.</translation>
-<translation id="473581466100273252">हाल ही में बंद किए गए आइटम दिखाएं/छिपाएं</translation>
 <translation id="4736292055110123391">अपने बुकमार्क, पासवर्ड, इतिहास, और दूसरी कई चीज़ें अपने सभी डिवाइस पर सिंक करना</translation>
 <translation id="473775607612524610">अपडेट करें</translation>
 <translation id="473936925429402449">ज़्यादा कॉन्टेंट वाले <ph name="TOTAL_ELEMENTS" /> पेजों में से<ph name="CURRENT_ELEMENT" /> पेज चुना गया</translation>
@@ -3675,7 +3674,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> हर्ट्ज़ - साथ में स्कैन किया गया</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> एक्सपेरिमेंट के लिए, एक्सपेरिमेंट की स्थिति चुनें.</translation>
 <translation id="49027928311173603">सर्वर से डाउनलोड की गई नीति अमान्य है: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">गुप्त मोड में इतिहास सेव नहीं होता</translation>
 <translation id="4906490889887219338">नेटवर्क फ़ाइल शेयर सेट अप या प्रबंधित करें. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">यह फ़ाइल आमतौर पर डाउनलोड नहीं की जाती है और यह खतरनाक हो सकती है.</translation>
 <translation id="4907306957610201395">अनुमति श्रेणी</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index e3f5104d..2fbdaa0 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -3519,7 +3519,6 @@
 <translation id="4733793249294335256">Lokacija</translation>
 <translation id="473546211690256853">Ovim računom upravlja domena <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sustav nije uspio utvrditi identifikatore ovog uređaja.</translation>
-<translation id="473581466100273252">Uključi/isključi nedavno zatvorene unose</translation>
 <translation id="4736292055110123391">Sinkronizirajte svoje oznake, zaporke, povijest i ostalo na svim svojim uređajima</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="473936925429402449">Odabrano, dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3672,7 +3671,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – isprepleteno</translation>
 <translation id="4901309472892185668">Odaberite stanje za eksperiment <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Pravilo preuzeto s poslužitelja nije važeće: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Povijest se ne sprema u anonimnom načinu</translation>
 <translation id="4906490889887219338">Postavite mrežna dijeljenja datoteka ili upravljajte njima. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ova se aplikacija ne preuzima često i može biti opasna.</translation>
 <translation id="4907306957610201395">Kategorija dopuštenja</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 51631cb..8096d12 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> - mindig legyen lefordítva</translation>
 <translation id="1108600514891325577">&amp;Leállítás</translation>
 <translation id="1110155001042129815">Várakozás</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">A háttérben futó lap Bluetooth-t használ</translation>
 <translation id="1113892970288677790">Válogatott műalkotások és képek kiválasztása</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -534,6 +535,7 @@
 <translation id="156793199942386351">A(z) „<ph name="CURRENTKEY" />” már hozzá van rendelve a következő művelethez: <ph name="ACTION" />. Nyomja le bármelyik billentyűt <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-konzol</translation>
 <translation id="1568323446248056064">Megjelenítőeszköz beállításainak megnyitása</translation>
+<translation id="1570604804919108255">Értesítések némításának feloldása</translation>
 <translation id="1571738973904005196">Lap megtekintése: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (vendég)</translation>
 <translation id="1572266655485775982">Wi-Fi engedélyezése</translation>
@@ -591,6 +593,7 @@
 <translation id="1621485112342885423">Az Ön bevásárlókosarai</translation>
 <translation id="1621729191093924223">A mikrofont igénylő funkciók nem működnek majd</translation>
 <translation id="1621831347985899379">A(z) <ph name="DEVICE_TYPE" /> adatai törlődnek</translation>
+<translation id="1621984899599015181">A megosztási beállításokat a szervezete kezeli. Előfordulhat, hogy bizonyos elemek el vannak rejtve.</translation>
 <translation id="1622054403950683339">Wi-Fi-hálózat elfelejtése</translation>
 <translation id="1623132449929929218">A képek jelenleg nem állnak rendelkezésre. Kapcsolódjon az internethez, ha szeretné megtekinteni a háttérképgyűjteményeket.</translation>
 <translation id="1623723619460186680">Kékfénycsökkentés</translation>
@@ -836,6 +839,7 @@
 <translation id="1850508293116537636">Forgatás &amp;jobbra</translation>
 <translation id="1852141627593563189">Keressen kártékony szoftvereket</translation>
 <translation id="1852799913675865625">Hiba lépett fel a fájl olvasása közben: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Ott folytathatja, ahol abbahagyta. A beállítások között kiválaszthatja azokat az alkalmazásokat, amelyeket vissza szeretne állítani minden indításkor, vagy kikapcsolhatja a visszaállítást.</translation>
 <translation id="1854180393107901205">Átküldés leállítása</translation>
 <translation id="1855079636134697549">A kamera be van kapcsolva</translation>
 <translation id="1856715684130786728">Hely hozzáadása...</translation>
@@ -964,6 +968,7 @@
 <translation id="1989113344093894667">Nem lehet rögzíteni tartalmat</translation>
 <translation id="1990046457226896323">Beszédfájlok letöltve</translation>
 <translation id="1990512225220753005">Ne jelenjenek meg parancsikonok ezen az oldalon</translation>
+<translation id="199191324030140441">A Ne zavarjanak mód kikapcsolása</translation>
 <translation id="1992397118740194946">Nincs beállítva</translation>
 <translation id="1992924914582925289">Eltávolítás az eszközről</translation>
 <translation id="1994173015038366702">Webhely URL-je</translation>
@@ -1005,6 +1010,7 @@
 
 Ha kezelni szeretné a fiók beállításait, telepítse eszközére a Family Link alkalmazást.  A szükséges utasításokat elküldtük Önnek e-mailben.</translation>
 <translation id="2040460856718599782">Hoppá! Hiba történt, miközben a rendszer megpróbálta azonosítani. Kérjük, ellenőrizze még egyszer bejelentkezési adatait, majd próbálja meg ismét.</translation>
+<translation id="2040894699575719559">Helyadatok letiltva</translation>
 <translation id="2042279886444479655">Aktív profilok</translation>
 <translation id="2044014337866019681">A munkamenet zárolásának feloldásához igazolja a következő fiókot: <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Microsoft tanúsítványsablon neve</translation>
@@ -1491,6 +1497,7 @@
 <translation id="2527167509808613699">Bármilyen kapcsolódás</translation>
 <translation id="2530166226437958497">Hibaelhárítás</translation>
 <translation id="2532589005999780174">Nagy kontrasztú mód</translation>
+<translation id="2533649878691950253">A webhely nem férhet hozzá a pontos helyadatokhoz, mivel Ön ezt általában nem engedélyezi</translation>
 <translation id="253434972992662860">&amp;Szünet</translation>
 <translation id="253557089021624350">Életben tartási számláló</translation>
 <translation id="2535799430745250929">Nincs mobilhálózat</translation>
@@ -1677,6 +1684,7 @@
 <translation id="2738771556149464852">Ezután nem:</translation>
 <translation id="2739191690716947896">Hibakeresés</translation>
 <translation id="2739240477418971307">Kisegítő beállítások módosítása</translation>
+<translation id="2739965161385757621">Beállítások áttekintése</translation>
 <translation id="274029851662193272">Süllyesztett</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Visszaállítási terminál megnyitása</translation>
@@ -1801,6 +1809,7 @@
 <translation id="2864601841139725659">Profilkép beállítása</translation>
 <translation id="2865919525181940183">A jelenleg a képernyőn lévő programok képernyőképe</translation>
 <translation id="286674810810214575">Erőforrások ellenőrzése…</translation>
+<translation id="2866876751734765554">Adatvédelmi beállítások áttekintése</translation>
 <translation id="2867768963760577682">Megnyitás rögzített lapként</translation>
 <translation id="2868746137289129307">Ez a bővítmény elavult, így a vállalati házirend letiltotta. A bővítményt automatikusan ismét engedélyezheti a rendszer akkor, amikor egy újabb verzió elérhetővé válik.</translation>
 <translation id="2870560284913253234">Webhely</translation>
@@ -2330,6 +2339,7 @@
 <translation id="3446274660183028131">A Windows telepítéséhez indítsa el a Parallels Desktop alkalmazást.</translation>
 <translation id="344630545793878684">Adatok beolvasása számos webhelyen</translation>
 <translation id="3446650212859500694">Ebben a fájlban bizalmas tartalom található.</translation>
+<translation id="3446827946208017735">Egyetlen helyen ismerheti meg és tekintheti át a legfontosabb adatvédelmi beállításokat.</translation>
 <translation id="3448086340637592206">A Google Chrome és a Chrome OS Kiegészítő Általános Szerződési Feltételei</translation>
 <translation id="3448492834076427715">Fiók frissítése</translation>
 <translation id="3449393517661170867">Új ablak lapokkal</translation>
@@ -3520,7 +3530,6 @@
 <translation id="4733793249294335256">Hely</translation>
 <translation id="473546211690256853">Ennek a fióknak a kezelője: <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">A rendszer nem tudta megállapítani az eszközazonosítókat ehhez az eszközhöz.</translation>
-<translation id="473581466100273252">Nemrég bezárt elemek ki-, illetve bekapcsolása</translation>
 <translation id="4736292055110123391">Könyvjelzők, jelszavak, előzmények és más adatok szinkronizálása minden eszközén</translation>
 <translation id="473775607612524610">Frissítés</translation>
 <translation id="473936925429402449">Kiválasztva, <ph name="TOTAL_ELEMENTS" />/<ph name="CURRENT_ELEMENT" />. extra tartalom</translation>
@@ -3673,7 +3682,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – váltottsoros</translation>
 <translation id="4901309472892185668">Válasszon ki kísérleti állapotot a következő kísérlethez: <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">A szerverről letöltött irányelv érvénytelen: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Inkognitó módban nem menti az előzményeket a rendszer</translation>
 <translation id="4906490889887219338">Hálózati fájlmegosztások beállítása, illetve kezelése. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation>
 <translation id="4907161631261076876">Ezt a fájlt nem töltik le gyakran, és veszélyes lehet.</translation>
 <translation id="4907306957610201395">Engedélykategória</translation>
@@ -3759,6 +3767,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nem található <ph name="VM_TYPE" /> típusú VM}=1{1 <ph name="VM_TYPE" /> típusú VM található: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> típusú VM található: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Nincs internetkapcsolat.</translation>
 <translation id="4998430619171209993">Be</translation>
+<translation id="4999804342505941663">A Ne zavarjanak mód bekapcsolása</translation>
 <translation id="5000922062037820727">Letiltva (ajánlott)</translation>
 <translation id="5005498671520578047">Jelszó másolása</translation>
 <translation id="5006218871145547804">ADB crostinis Android-alkalmazáshoz</translation>
@@ -5085,6 +5094,7 @@
 <translation id="6468485451923838994">Betűtípusok</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> fájl</translation>
 <translation id="6469557521904094793">Mobilhálózat bekapcsolása</translation>
+<translation id="6470823736074966819">Értesítések elnémítása</translation>
 <translation id="6472893788822429178">A Kezdőlap gomb megjelenítése</translation>
 <translation id="6474498546677193336">Nem sikerült a megosztás visszavonása, mivel valamelyik alkalmazás használja ezt a mappát. A mappa megosztásának visszavonása a Linux következő leállításakor történik majd meg.</translation>
 <translation id="6474884162850599008">Google Drive-fiók leválasztása</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index be6c27be..59edad69 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -3508,7 +3508,6 @@
 <translation id="4733793249294335256">Ներբեռնման տեղադրություն</translation>
 <translation id="473546211690256853">Այս հաշիվը կառավարում է <ph name="DOMAIN" /> տիրույթը</translation>
 <translation id="4735803855089279419">Չհաջողվեց ճանաչել սարքի նույնացուցիչները:</translation>
-<translation id="473581466100273252">Ցուցադրել/թաքցնել վերջերս փակված գրառումները</translation>
 <translation id="4736292055110123391">Համաժամացրեք ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու մյուս կարգավորումները ձեր բոլոր սարքերում</translation>
 <translation id="473775607612524610">Թարմացնել</translation>
 <translation id="473936925429402449">Ընտրված է լրացուցիչ բովանդակություն <ph name="CURRENT_ELEMENT" />-ը՝ <ph name="TOTAL_ELEMENTS" />-ից</translation>
@@ -3662,7 +3661,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Հց, միահյուսված</translation>
 <translation id="4901309472892185668">Ընտրեք «<ph name="EXPERIMENT_NAME" />» փորձարկման կարգավիճակը։</translation>
 <translation id="49027928311173603">Սերվերից ներբեռնված քաղաքականությունն անվավեր է՝ <ph name="VALIDATION_ERROR" />:</translation>
-<translation id="4905269543817054577">Ինկոգնիտո ռեժիմում պատմությունը չի պահվում</translation>
 <translation id="4906490889887219338">Կարգավորել կամ կառավարել ցանցային պահեստը <ph name="LINK_BEGIN" />Իմանալ ավելին<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Այս ֆայլը ոչ սովորական կերպով է ներբեռնվել և կարող է վտանգավոր լինել:</translation>
 <translation id="4907306957610201395">Թույլտվության կատեգորիա</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 62f239f..8427082 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">Lokasi</translation>
 <translation id="473546211690256853">Akun ini dikelola oleh <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistem gagal menentukan ID perangkat untuk perangkat ini.</translation>
-<translation id="473581466100273252">Tampilkan/Sembunyikan Item yang Baru Saja Ditutup</translation>
 <translation id="4736292055110123391">Sinkronisasikan bookmark, sandi, histori, dan lainnya di semua perangkat Anda</translation>
 <translation id="473775607612524610">Perbarui</translation>
 <translation id="473936925429402449">Dipilih, konten tambahan <ph name="CURRENT_ELEMENT" /> dari <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - saling bertaut</translation>
 <translation id="4901309472892185668">Pilih status eksperimen untuk eksperimen <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Kebijakan yang didownload dari server tidak valid: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Histori tidak disimpan dalam mode Samaran</translation>
 <translation id="4906490889887219338">Siapkan atau kelola berbagi file jaringan. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">File ini tidak biasa didownload dan mungkin berbahaya.</translation>
 <translation id="4907306957610201395">Kategori Izin</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index a18d498..d729fb52 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Þýða alltaf <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Stöðva</translation>
 <translation id="1110155001042129815">Bíða</translation>
+<translation id="1111781754511998498">Skjávarpi</translation>
 <translation id="1112420131909513020">Bakgrunnsflipi er að nota Bluetooth</translation>
 <translation id="1113892970288677790">Veldu sérvalin listaverk og myndir</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -535,6 +536,7 @@
 <translation id="156793199942386351">„<ph name="CURRENTKEY" />“ er þegar úthlutað á aðgerðina „<ph name="ACTION" />“. Ýttu á hvaða lykil sem er til að <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-stjórnborð</translation>
 <translation id="1568323446248056064">Opna skjástillingar tækis</translation>
+<translation id="1570604804919108255">Hætta að þagga tilkynningar</translation>
 <translation id="1571738973904005196">Skoða flipann: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gestur)</translation>
 <translation id="1572266655485775982">Wi-Fi virkjun</translation>
@@ -592,6 +594,7 @@
 <translation id="1621485112342885423">Körfurnar þínar</translation>
 <translation id="1621729191093924223">Eiginleikar sem þarfnast hljóðnema virka ekki</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> gögnum verður eytt</translation>
+<translation id="1621984899599015181">Fyrirtækið þitt stjórnar valkostum deilingar. Sum atriði kunna að vera falin.</translation>
 <translation id="1622054403950683339">Gleyma Wi-Fi neti</translation>
 <translation id="1623132449929929218">Myndirnar eru ekki tiltækar í augnablikinu. Endurtengjast þarf internetinu til að sjá veggfóðurssöfn.</translation>
 <translation id="1623723619460186680">Dregið úr bláu ljósi</translation>
@@ -837,6 +840,7 @@
 <translation id="1850508293116537636">Snúa réttsælis</translation>
 <translation id="1852141627593563189">Finna skaðlegan hugbúnað</translation>
 <translation id="1852799913675865625">Villa kom upp við að reyna að lesa skrána: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Haltu áfram þar sem þú hættir síðast. Þú getur stillt forrit á að endurheimta alltaf við ræsingu eða slökkt á endurheimt í stillingunum.</translation>
 <translation id="1854180393107901205">Hætta útsendingu</translation>
 <translation id="1855079636134697549">Kveikt er á myndavél</translation>
 <translation id="1856715684130786728">Bæta staðsetningu við...</translation>
@@ -966,6 +970,7 @@
 <translation id="1989113344093894667">Ekki er hægt að taka skjámynd af efni</translation>
 <translation id="1990046457226896323">Talskrár sóttar</translation>
 <translation id="1990512225220753005">Ekki sýna flýtileiðir á þessari síðu</translation>
+<translation id="199191324030140441">Slökkva á „Ónáðið ekki“</translation>
 <translation id="1992397118740194946">Ekki stillt</translation>
 <translation id="1992924914582925289">Fjarlægja úr tæki</translation>
 <translation id="1994173015038366702">Slóð vefsvæðis</translation>
@@ -1007,6 +1012,7 @@
 
 Þú getur stjórnað stillingum þessa reiknings með því að setja upp Family Link forritið á tækinu þínu.  Við sendum þér upplýsingar í tölvupósti.</translation>
 <translation id="2040460856718599782">Úbbs! Eitthvað fór úrskeiðis þegar reynt var að sannvotta þig. Farðu vel yfir innskráningarupplýsingarnar þínar og reyndu aftur.</translation>
+<translation id="2040894699575719559">Lokað á staðsetningu</translation>
 <translation id="2042279886444479655">Virkir prófílar</translation>
 <translation id="2044014337866019681">Gakktu úr skugga um að þú sért að staðfesta <ph name="ACCOUNT" /> til að taka lotuna úr lás.</translation>
 <translation id="204497730941176055">Sniðmátsheiti Microsoft-vottorðs</translation>
@@ -1493,6 +1499,7 @@
 <translation id="2527167509808613699">Hvers kyns tenging</translation>
 <translation id="2530166226437958497">Úrræðaleit</translation>
 <translation id="2532589005999780174">Mikil birtuskil</translation>
+<translation id="2533649878691950253">Lokað var á að þetta vefsvæði fengi upplýsingar um nákvæma staðsetningu þína vegna þess að þú leyfir það yfirleitt ekki</translation>
 <translation id="253434972992662860">Gera hlé</translation>
 <translation id="253557089021624350">Fjöldi sem heldur viðbót virkri</translation>
 <translation id="2535799430745250929">Ekkert farsímakerfi er til staðar</translation>
@@ -1679,6 +1686,7 @@
 <translation id="2738771556149464852">Ekki eftir</translation>
 <translation id="2739191690716947896">Villuleit</translation>
 <translation id="2739240477418971307">Breyta aðgengisstillingum</translation>
+<translation id="2739965161385757621">Yfirfara stillingar</translation>
 <translation id="274029851662193272">Þrykkt</translation>
 <translation id="2740531572673183784">Í lagi</translation>
 <translation id="2741713322780029189">Opna endurheimtarstöð</translation>
@@ -1803,6 +1811,7 @@
 <translation id="2864601841139725659">Veldu prófílmynd</translation>
 <translation id="2865919525181940183">Skjámynd af forritum sem eru á skjánum núna</translation>
 <translation id="286674810810214575">Athugar aflgjafa...</translation>
+<translation id="2866876751734765554">Persónuverndaryfirferð</translation>
 <translation id="2867768963760577682">Opna sem fastan flipa</translation>
 <translation id="2868746137289129307">Þessi viðbót er úrelt og regla frá fyrirtækinu hefur gert hana óvirka. Hún gæti sjálfkrafa orðið virk þegar ný útgáfa verður aðgengileg.</translation>
 <translation id="2870560284913253234">Vefsvæði</translation>
@@ -2332,6 +2341,7 @@
 <translation id="3446274660183028131">Ræstu Parallels Desktop til að setja upp Windows.</translation>
 <translation id="344630545793878684">Lesa gögnin þín á fjölda vefsvæða</translation>
 <translation id="3446650212859500694">Skráin inniheldur viðkvæmt efni</translation>
+<translation id="3446827946208017735">Kynntu þér og farðu yfir mikilvægar persónuverndarstillingar á einum stað</translation>
 <translation id="3448086340637592206">Viðbótarskilmálar Google Chrome og Chrome OS</translation>
 <translation id="3448492834076427715">Uppfæra reikning</translation>
 <translation id="3449393517661170867">Nýr flipagluggi</translation>
@@ -3523,7 +3533,6 @@
 <translation id="4733793249294335256">Staðsetning</translation>
 <translation id="473546211690256853">Þessum reikningi er stjórnað af <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Kerfið gat ekki ákvarðað tækisauðkenni fyrir þetta tæki.</translation>
-<translation id="473581466100273252">Sýna/fela færslur sem var lokað nýlega</translation>
 <translation id="4736292055110123391">Samstilltu bókamerkin þín, aðgangsorð, feril og fleira í öllum tækjunum þínum</translation>
 <translation id="473775607612524610">Uppfæra</translation>
 <translation id="473936925429402449">Valið, aukaefni <ph name="CURRENT_ELEMENT" /> af <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – samfléttað</translation>
 <translation id="4901309472892185668">Veldu ástand tilraunar fyrir <ph name="EXPERIMENT_NAME" /> tilraunina.</translation>
 <translation id="49027928311173603">Reglan sem sótt var frá þjóninum er ógild: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Ferill er ekki vistaður í huliðsstillingu</translation>
 <translation id="4906490889887219338">Setja upp eða hafa umsjón með samnýttum skráageymslum. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Þessi skrá er ekki sótt oft og kann að vera hættuleg.</translation>
 <translation id="4907306957610201395">Heimildarflokkur</translation>
@@ -3762,6 +3770,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Engar <ph name="VM_TYPE" /> sýndarvélar fundust}=1{1 <ph name="VM_TYPE" /> sýndarvél fannst: <ph name="VM_NAME_LIST" />}one{{NUM_VMS} <ph name="VM_TYPE" /> sýndarvél fannst: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> sýndarvélar fundust: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Engin tenging við internetið.</translation>
 <translation id="4998430619171209993">Kveikt</translation>
+<translation id="4999804342505941663">Kveikja á „Ónáðið ekki“</translation>
 <translation id="5000922062037820727">Útilokað (ráðlagt)</translation>
 <translation id="5005498671520578047">Afrita aðgangsorð</translation>
 <translation id="5006218871145547804">ADB Android forrita í Crostini</translation>
@@ -5086,6 +5095,7 @@
 <translation id="6468485451923838994">Leturgerðir</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> skrár</translation>
 <translation id="6469557521904094793">Kveikja á farsímakerfi</translation>
+<translation id="6470823736074966819">Þagga tilkynningar</translation>
 <translation id="6472893788822429178">Sýna heimahnapp</translation>
 <translation id="6474498546677193336">Ekki var hægt að hætta að deila vegna þess að forrit er að nota þessa möppu. Hætt verður að deila möppunni næst þegar slökkt er á Linux.</translation>
 <translation id="6474884162850599008">Aftengja Google Drive reikning</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 26b60a5..eddb99c 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Traduci sempre <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Interrompi</translation>
 <translation id="1110155001042129815">Attendi</translation>
+<translation id="1111781754511998498">Proiettore</translation>
 <translation id="1112420131909513020">Una scheda in secondo piano sta usando il Bluetooth</translation>
 <translation id="1113892970288677790">Seleziona opere d'arte e immagini curate</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">Il tasto "'<ph name="CURRENTKEY" />" è già stato assegnato all'azione "<ph name="ACTION" />". Premi un tasto qualsiasi per <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568323446248056064">Apri le impostazioni dello schermo</translation>
+<translation id="1570604804919108255">Riattiva audio notifiche</translation>
 <translation id="1571738973904005196">Visualizza la scheda <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Ospite)</translation>
 <translation id="1572266655485775982">Attiva Wi-Fi</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">I tuoi carrelli</translation>
 <translation id="1621729191093924223">Le funzionalità che richiedono un microfono non funzioneranno</translation>
 <translation id="1621831347985899379">I dati del <ph name="DEVICE_TYPE" /> verranno eliminati</translation>
+<translation id="1621984899599015181">Le opzioni per la condivisione sono gestite dalla tua organizzazione. Alcuni elementi potrebbero essere nascosti.</translation>
 <translation id="1622054403950683339">Elimina rete Wi-Fi</translation>
 <translation id="1623132449929929218">Le immagini non sono al momento disponibili. Riconnettiti a Internet per visualizzare le raccolte di sfondi.</translation>
 <translation id="1623723619460186680">Riduzione della luce blu</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">Ruota in senso o&amp;rario</translation>
 <translation id="1852141627593563189">Trova software dannoso</translation>
 <translation id="1852799913675865625">Si è verificato un errore durante la lettura del file: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Continua da dove avevi interrotto. Puoi impostare il ripristino delle app sempre all'avvio o disattivare il ripristino nelle Impostazioni.</translation>
 <translation id="1854180393107901205">Interrompi trasmissione</translation>
 <translation id="1855079636134697549">La fotocamera è attivata</translation>
 <translation id="1856715684130786728">Aggiungi posizione...</translation>
@@ -953,6 +957,7 @@
 <translation id="1989113344093894667">Impossibile acquisire i contenuti</translation>
 <translation id="1990046457226896323">File di contenuti vocali scaricati</translation>
 <translation id="1990512225220753005">Non mostrare scorciatoie in questa pagina</translation>
+<translation id="199191324030140441">Disattiva Non disturbare</translation>
 <translation id="1992397118740194946">Non impostata</translation>
 <translation id="1992924914582925289">Rimuovi dal dispositivo</translation>
 <translation id="1994173015038366702">URL sito</translation>
@@ -994,6 +999,7 @@
 
 Puoi gestire le impostazioni dell'account installando l'app Family Link su questo dispositivo.  Ti abbiamo inviato un'email di istruzioni.</translation>
 <translation id="2040460856718599782">Spiacenti. Si è verificato un problema durante il tentativo di autenticazione. Controlla attentamente le tue credenziali di accesso e riprova.</translation>
+<translation id="2040894699575719559">Posizione bloccata</translation>
 <translation id="2042279886444479655">Profili attivi</translation>
 <translation id="2044014337866019681">Per sbloccare la sessione devi assicurarti di verificare l'account <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Nome modello di certificato Microsoft</translation>
@@ -1477,6 +1483,7 @@
 <translation id="2527167509808613699">Qualsiasi tipo di connessione</translation>
 <translation id="2530166226437958497">Risolvere problemi</translation>
 <translation id="2532589005999780174">Modalità ad alto contrasto</translation>
+<translation id="2533649878691950253">A questo sito è stato impedito di conoscere la tua posizione precisa perché di solito non lo permetti</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="253557089021624350">Conteggio attività keep-alive</translation>
 <translation id="2535799430745250929">Nessuna rete mobile disponibile</translation>
@@ -1664,6 +1671,7 @@
 <translation id="2738771556149464852">Non dopo</translation>
 <translation id="2739191690716947896">Debug</translation>
 <translation id="2739240477418971307">Modifica delle impostazioni di accesibilità</translation>
+<translation id="2739965161385757621">Rivedi le impostazioni</translation>
 <translation id="274029851662193272">Incassato</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Apri terminale di ripristino</translation>
@@ -1788,6 +1796,7 @@
 <translation id="2864601841139725659">Imposta l'immagine del profilo</translation>
 <translation id="2865919525181940183">Screenshot dei programmi attualmente sullo schermo</translation>
 <translation id="286674810810214575">Controllo delle fonti di alimentazione…</translation>
+<translation id="2866876751734765554">Revisione della privacy</translation>
 <translation id="2867768963760577682">Apri in una scheda bloccata</translation>
 <translation id="2868746137289129307">Questa estensione è obsoleta e disattivata in base ai criteri aziendali. Potrebbe essere attivata automaticamente quando sarà disponibile una nuova versione.</translation>
 <translation id="2870560284913253234">Sito</translation>
@@ -2317,6 +2326,7 @@
 <translation id="3446274660183028131">Avvia Parallels Desktop per installare Windows.</translation>
 <translation id="344630545793878684">Lettura dei dati su una serie di siti web</translation>
 <translation id="3446650212859500694">Questo file include contenuti sensibili</translation>
+<translation id="3446827946208017735">Scopri e rivedi le impostazioni di privacy più importanti in un unico posto</translation>
 <translation id="3448086340637592206">Termini aggiuntivi di Google Chrome e Chrome OS</translation>
 <translation id="3448492834076427715">Aggiorna account</translation>
 <translation id="3449393517661170867">Nuova finestra a schede</translation>
@@ -3507,7 +3517,6 @@
 <translation id="4733793249294335256">Posizione</translation>
 <translation id="473546211690256853">Questo account è gestito da <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Il sistema non è riuscito a stabilire gli identificatori di questo dispositivo.</translation>
-<translation id="473581466100273252">Attiva/disattiva voci chiuse di recente</translation>
 <translation id="4736292055110123391">Sincronizza i preferiti, le password, la cronologia e non solo su tutti i tuoi dispositivi</translation>
 <translation id="473775607612524610">Aggiorna</translation>
 <translation id="473936925429402449">Contenuti aggiuntivi selezionati <ph name="CURRENT_ELEMENT" /> di <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3660,7 +3669,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - interlacciata</translation>
 <translation id="4901309472892185668">Seleziona lo stato dell'esperimento <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Il criterio scaricato dal server non è valido. <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">La cronologia non viene salvata in modalità di navigazione in incognito</translation>
 <translation id="4906490889887219338">Configura o gestisci condivisioni file di rete. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Questo file non viene scaricato spesso e potrebbe essere pericoloso.</translation>
 <translation id="4907306957610201395">Categoria di autorizzazione</translation>
@@ -3746,6 +3754,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nessuna VM <ph name="VM_TYPE" /> trovata}=1{1 VM <ph name="VM_TYPE" /> trovata: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} VM <ph name="VM_TYPE" /> trovate: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Nessuna connessione Internet.</translation>
 <translation id="4998430619171209993">On</translation>
+<translation id="4999804342505941663">Attiva Non disturbare</translation>
 <translation id="5000922062037820727">Bloccata (opzione consigliata)</translation>
 <translation id="5005498671520578047">Copia password</translation>
 <translation id="5006218871145547804">ADB app Android su Crostini</translation>
@@ -5070,6 +5079,7 @@
 <translation id="6468485451923838994">Caratteri</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> file</translation>
 <translation id="6469557521904094793">Attiva rete mobile</translation>
+<translation id="6470823736074966819">Disattiva audio notifiche</translation>
 <translation id="6472893788822429178">Mostra pulsante Home</translation>
 <translation id="6474498546677193336">Impossibile annullare la condivisione perché questa cartella è in uso in un'applicazione. La condivisione della cartella verrà annullata quando verrà arrestato Linux.</translation>
 <translation id="6474884162850599008">Scollega account Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index a9c9d8a..c6428ad9 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">מיקום</translation>
 <translation id="473546211690256853">חשבון זה מנוהל על ידי <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">המערכת לא הצליחה לקבוע את המזהים של המכשיר הזה.</translation>
-<translation id="473581466100273252">החלפת מצב של הצגת פריטים שנסגרו לאחרונה</translation>
 <translation id="4736292055110123391">סנכרון של הסימניות, הסיסמאות, ההיסטוריה ונתונים נוספים בכל המכשירים שברשותך</translation>
 <translation id="473775607612524610">עדכון</translation>
 <translation id="473936925429402449">נבחר, תוכן נוסף <ph name="CURRENT_ELEMENT" /> מתוך <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> הרץ – סריקה שזורה</translation>
 <translation id="4901309472892185668">יש לבחור מצב לניסוי <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">המדיניות שהורדה מהשרת אינה חוקית: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">ההיסטוריה לא נשמרת במצב אנונימי</translation>
 <translation id="4906490889887219338">הגדרה או ניהול של התקני רשת לשיתוף קבצים. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">הורדת הקובץ הזה אינה נפוצה והקובץ עלול להיות מסוכן.</translation>
 <translation id="4907306957610201395">קטגוריית הרשאה</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index e89dadb..e50dc4b 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3502,7 +3502,6 @@
 <translation id="4733793249294335256">保存先</translation>
 <translation id="473546211690256853">このアカウントは <ph name="DOMAIN" /> によって管理されています。</translation>
 <translation id="4735803855089279419">このデバイスのデバイス識別子を特定できませんでした。</translation>
-<translation id="473581466100273252">最近閉じたエントリを切り替え</translation>
 <translation id="4736292055110123391">すべてのデバイスでブックマーク、パスワード、履歴、その他の設定を同期する</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="473936925429402449">追加コンテンツ <ph name="TOTAL_ELEMENTS" /> 件中 <ph name="CURRENT_ELEMENT" /> 件目を選択しています</translation>
@@ -3655,7 +3654,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - インターレース</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> テストの試験運用機能の状態を選択します。</translation>
 <translation id="49027928311173603">サーバーからダウンロードされたポリシーが無効です: <ph name="VALIDATION_ERROR" />。</translation>
-<translation id="4905269543817054577">シークレット モードでは履歴は保存されません</translation>
 <translation id="4906490889887219338">ネットワーク ファイル共有を設定または管理します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">このファイルは一般的にダウンロードされているファイルではなく、危害を及ぼす可能性があります。</translation>
 <translation id="4907306957610201395">権限のカテゴリ</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index caa7e25e..79881f5 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -3507,7 +3507,6 @@
 <translation id="4733793249294335256">მდებარეობა</translation>
 <translation id="473546211690256853">ეს ანგარიში იმართება <ph name="DOMAIN" />-ის მიერ</translation>
 <translation id="4735803855089279419">სისტემამ ვერ დაადგინა მოწყობილობის იდენტიფიკატორები ამ მოწყობილობისთვის.</translation>
-<translation id="473581466100273252">ახლახან დახურული ჩანაწერების გადართვა</translation>
 <translation id="4736292055110123391">მოახდინეთ თქვენი სანიშნეების, პაროლების, ისტორიისა და სხვა კონტენტის სინქრონიზაცია თქვენს ყველა მოწყობილობას შორის</translation>
 <translation id="473775607612524610">განახლება</translation>
 <translation id="473936925429402449">არჩეულია, დამატებითი კონტენტი <ph name="CURRENT_ELEMENT" /> / <ph name="TOTAL_ELEMENTS" />-დან</translation>
@@ -3660,7 +3659,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> ჰც — ინტერლეისით</translation>
 <translation id="4901309472892185668">აირჩიეთ მდგომარეობა ექსპერიმენტისთვის „<ph name="EXPERIMENT_NAME" />“.</translation>
 <translation id="49027928311173603">სერვერზე გადმოწერილი პოლიტიკა არასწორია: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">ისტორია არ ინახება ინკოგნიტო რეჟიმში</translation>
 <translation id="4906490889887219338">ქსელში ფაილების გაზიარების დაყენება ან მართვა. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ამ ფაილის ჩამოტვირთვა ხშირად არ ხორციელდება ხოლმე და ის შეიძლება სახიფათო იყოს.</translation>
 <translation id="4907306957610201395">ნებართვის კატეგორია</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 59690699..76d6d718 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -616,7 +616,7 @@
 <translation id="1643921258693943800">Nearby Share функциясын пайдалану үшін Bluetooth және Wi-Fi қосыңыз.</translation>
 <translation id="1644574205037202324">Тарих</translation>
 <translation id="1645516838734033527"><ph name="DEVICE_TYPE" /> құрылғысын қауіпсіз сақтау үшін Smart Lock функциясы телефонда экран құлпын қажет етеді.</translation>
-<translation id="1646793251510634025">Іздеу және браузерді пайдалану ыңғайлы болуы үшін параметрлерді қарап шығыңыз</translation>
+<translation id="1646793251510634025">Іздеу мен браузер пайдалануды ыңғайлы қылу параметрлерін қарап шығыңыз</translation>
 <translation id="1646982517418478057">Бұл сертификатты шифрлау үшін құпия сөзді енгізіңіз</translation>
 <translation id="1648528859488547844">Орынды анықтау үшін Wi‑Fi немесе мобильдік желілерді пайдалану</translation>
 <translation id="164936512206786300">Bluetooth құрылғысын ажырату</translation>
@@ -3503,7 +3503,6 @@
 <translation id="4733793249294335256">Орын</translation>
 <translation id="473546211690256853">Бұл есептік жазбаны <ph name="DOMAIN" /> басқарады</translation>
 <translation id="4735803855089279419">Жүйе бұл құрылғыға арналған идентификаторларды анықтай алмады.</translation>
-<translation id="473581466100273252">Жақында жабылған жазбаларды көрсету не жасыру</translation>
 <translation id="4736292055110123391">Барлық құрылғыларда бетбелгілерді, құпия сөздерді, тарихты, т.б. синхрондау</translation>
 <translation id="473775607612524610">Жаңарту</translation>
 <translation id="473936925429402449">Таңдалды, <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" />-картадағы қосымша мазмұн</translation>
@@ -3656,7 +3655,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц − қабаттастырылған</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> экспериментінің күйін таңдаңыз.</translation>
 <translation id="49027928311173603">Серверден жүктелген саясат жарамсыз: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Тарих инкогнито режимінде сақталмайды</translation>
 <translation id="4906490889887219338">Желінің ортақ каталогтерін реттеу немесе басқару. <ph name="LINK_BEGIN" />Толығырақ<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Бұл файл әдетте жүктелмейді және ол қауіпті болуы мүмкін.</translation>
 <translation id="4907306957610201395">Рұқсат санаты</translation>
@@ -7183,7 +7181,7 @@
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> орнына <ph name="PROTOCOL" /> сілтемелерін ашу</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Бетті аударғыңыз келетін тілді таңдаңыз</translation>
-<translation id="8737916108453753541">Браузердің қалай жұмыс істейтінін анықтау үшін URL сілтемелер Google-ға жіберіледі.</translation>
+<translation id="8737916108453753541">Браузердің қалай жұмыс істейтінін анықтау үшін URL сілтемелері Google-ға жіберіледі.</translation>
 <translation id="8740247629089392745">Бұл Chromebook-ты енді <ph name="SUPERVISED_USER_NAME" /> пайдалана алады. Реттеулер аяқталайын деп қалды, сосын мазмұнды зерттей беруге болады.</translation>
 <translation id="8741944563400125534">Switch Access реттеу нұсқаулығы</translation>
 <translation id="8742998548129056176">Ондай дерекке құрылғыңыз бен оны пайдалану туралы жалпы ақпарат (мысалы, батарея зарядының деңгейі, жүйе мен қолданбаларды пайдалану тарихы, қателер) жатады. Мәлімет Android жүйесін жақсарту үшін пайдаланылады, ал кейбір ақпарат Google қолданбаларына және Android әзірлеушілері сияқты серіктестерге көмектеседі әрі олардың қолданбалары мен өнімдерін жақсарта түседі.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 6bd9ada..fd75e15 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">ទីតាំង</translation>
 <translation id="473546211690256853">គណនីនេះត្រូវបានគ្រប់គ្រងដោយ <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">ប្រព័ន្ធមិន​អាច​កំណត់ព័ត៌មានសម្គាល់​ឧបករណ៍​សម្រាប់​ឧបករណ៍នេះបានទេ។</translation>
-<translation id="473581466100273252">បិទ/បើកធាតុដែលបានបិទថ្មីៗ</translation>
 <translation id="4736292055110123391">ធ្វើ​សម​កាល​កម្មចំណាំ ពាក្យសម្ងាត់ ប្រវត្តិរបស់អ្នក និង​មុខងារ​ជាច្រើនទៀត​នៅលើ​ឧបករណ៍​ទាំងអស់​របស់អ្នក</translation>
 <translation id="473775607612524610">ធ្វើបច្ចុប្បន្នភាព</translation>
 <translation id="473936925429402449">បានជ្រើសរើស ខ្លឹមសារបន្ថែម <ph name="CURRENT_ELEMENT" /> ក្នុងចំណោម <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ប្រទាក់គ្នា</translation>
 <translation id="4901309472892185668">ជ្រើសរើសស្ថានភាព​ពិសោធន៍សម្រាប់​ការពិសោធ <ph name="EXPERIMENT_NAME" />។</translation>
 <translation id="49027928311173603">គោលការណ៍ដែលបានទាញយកពីម់ាស៊ីនមេគ្មានសុពលភាពទេ៖ <ph name="VALIDATION_ERROR" /></translation>
-<translation id="4905269543817054577">ប្រវត្តិ​មិនត្រូវបាន​រក្សាទុក​នៅក្នុងមុខងារ​ឯកជនទេ</translation>
 <translation id="4906490889887219338">រៀបចំ ឬ​គ្រប់គ្រង​ការចែក​រំលែក​ឯកសារ​តាមបណ្ដាញ។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ឯកសារនេះមិនមានការទាញយកជាទូទៅនោះទេ ហើយវាអាចនឹងបង្កគ្រោះថ្នាក់។</translation>
 <translation id="4907306957610201395">ប្រភេទសិទ្ធិអនុញ្ញាត</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index fb3598a..33727c9 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3511,7 +3511,6 @@
 <translation id="4733793249294335256">ಸ್ಥಳ</translation>
 <translation id="473546211690256853">ಈ ಖಾತೆಯನ್ನು <ph name="DOMAIN" /> ರಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
 <translation id="4735803855089279419">ಈ ಸಾಧನಕ್ಕಾಗಿ ಸಾಧನದ ಗುರುತುಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಸಿಸ್ಟಂ ವಿಫಲವಾಗಿದೆ.</translation>
-<translation id="473581466100273252">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾದ ನಮೂದುಗಳನ್ನು ಟಾಗಲ್ ಮಾಡಿ</translation>
 <translation id="4736292055110123391">ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲೂ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌‌ಗಳು, ಪಾಸ್‍ವರ್ಡ್‍ಗಳು, ಇತಿಹಾಸ ಹಾಗೂ ಇನ್ನೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಿ</translation>
 <translation id="473775607612524610">ಅಪ್‌ಡೇಟ್‌‌</translation>
 <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" /> ರಲ್ಲಿ <ph name="CURRENT_ELEMENT" /> ಹೆಚ್ಚುವರಿ ವಿಷಯವನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
@@ -3665,7 +3664,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ಇಂಟರ್‌ಲೇಸ್ ಆಗಿದೆ</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> ಪ್ರಯೋಗಕ್ಕಾಗಿ, ಪ್ರಯೋಗದ ಸ್ಥಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation>
 <translation id="49027928311173603">ಸರ್ವರ್‌ನಿಂದ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾದ ನೀತಿಯು ಅಮಾನ್ಯವಾಗಿದೆ: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">ಅಜ್ಞಾತ ಮೋಡ್‌ನಲ್ಲಿ ಇತಿಹಾಸವನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ</translation>
 <translation id="4906490889887219338">ನೆಟ್‌ವರ್ಕ್‌ ಫೈಲ್‌ ಹಂಚಿಕೆಗಳನ್ನು ಸೆಟಪ್‌ ಮಾಡಿ ಅಥವಾ ನಿರ್ವಹಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ಈ ಫೈಲ್ ಅನ್ನು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ ಮತ್ತು ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು.</translation>
 <translation id="4907306957610201395">ಅನುಮತಿ ವರ್ಗ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 7873afd3..da2857e4 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3520,7 +3520,6 @@
 <translation id="4733793249294335256">위치</translation>
 <translation id="473546211690256853">이 계정은 <ph name="DOMAIN" />에서 관리합니다.</translation>
 <translation id="4735803855089279419">시스템에서 이 기기의 기기 식별자를 확인하지 못했습니다.</translation>
-<translation id="473581466100273252">최근 종료한 항목 전환</translation>
 <translation id="4736292055110123391">북마크, 비밀번호, 방문 기록 등을 모든 기기에 동기화</translation>
 <translation id="473775607612524610">업데이트</translation>
 <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />개 중 <ph name="CURRENT_ELEMENT" />번째 추가 콘텐츠 선택됨</translation>
@@ -3673,7 +3672,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" />Hz - 인터레이스됨</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> 실험의 상태를 선택하세요.</translation>
 <translation id="49027928311173603">서버에서 다운로드한 정책이 잘못됨: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">시크릿 모드에서는 기록이 저장되지 않음</translation>
 <translation id="4906490889887219338">네트워크 파일 공유를 설정하거나 관리합니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">이 파일은 위험할 수 있기 때문에 일반적으로 다운로드하지 않습니다.</translation>
 <translation id="4907306957610201395">권한 카테고리</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index f5d2492..8138b499 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> тилин ар дайым которуу</translation>
 <translation id="1108600514891325577">&amp;Токтотуу</translation>
 <translation id="1110155001042129815">Күтө туруңуз</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">Фондогу өтмөк Bluetooth'ду колдонууда</translation>
 <translation id="1113892970288677790">Санат ишин жана сүрөттөрдү тандаңыз</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -534,6 +535,7 @@
 <translation id="156793199942386351">"<ph name="CURRENTKEY" />" "<ph name="ACTION" />" аракети үчүн дайындалган. <ph name="RESPONSE" /> үчүн каалаган баскычты басыңыз.</translation>
 <translation id="1567993339577891801">JavaScript консолу</translation>
 <translation id="1568323446248056064">Түзмөктөгү дисплей жөндөөлөрүн ачуу</translation>
+<translation id="1570604804919108255">Билдирмелердин үнүн чыгаруу</translation>
 <translation id="1571738973904005196"><ph name="TAB_ORIGIN" /> өтмөгүн көрүү</translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Конок)</translation>
 <translation id="1572266655485775982">Wi-Fi тармагын иштетүү</translation>
@@ -591,6 +593,7 @@
 <translation id="1621485112342885423">Себеттериңиз</translation>
 <translation id="1621729191093924223">Микрофонду колдонгон функциялар иштебейт</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> түзмөгүндөгү маалымат жок кылынат</translation>
+<translation id="1621984899599015181">Бөлүшүү параметрлерин уюмуңуз башкарат. Айрым нерселер жашырылышы мүмкүн.</translation>
 <translation id="1622054403950683339">Wi-Fi тармагы унутулсун</translation>
 <translation id="1623132449929929218">Учурда сүрөттөрдү көрүү мүмкүн эмес. Тушкагаздардын жыйнактарын көрүү үчүн Интернетке кайра туташыңыз.</translation>
 <translation id="1623723619460186680">Көк түстү азайтуу</translation>
@@ -836,6 +839,7 @@
 <translation id="1850508293116537636">&amp;Сааттын жебеси боюнча айландыруу</translation>
 <translation id="1852141627593563189">Кооптуу программаны табыңыз</translation>
 <translation id="1852799913675865625">Файлды окуюн дегенде ката кетти: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Токтогон жериңизден улантасыз. Жөндөөлөрдөн колдонмолорду иштеп баштаганда калыбына келтире тургандай кылып жөндөп же аларды калыбына келтирүүнү өчүрө аласыз.</translation>
 <translation id="1854180393107901205">Тышкы экранга чыгарууну токтотуу</translation>
 <translation id="1855079636134697549">Камера күйгүзүлдү</translation>
 <translation id="1856715684130786728">Жайгашкан жерди кошуу…</translation>
@@ -965,6 +969,7 @@
 <translation id="1989113344093894667">Мазмун сүрөткө тартылган жок</translation>
 <translation id="1990046457226896323">Кеп файлдары жүктөлүп алынды</translation>
 <translation id="1990512225220753005">Ыкчам баскычтар бул бетте көрүнбөсүн</translation>
+<translation id="199191324030140441">"Тынчымды алба" режимин өчүрүү</translation>
 <translation id="1992397118740194946">Коюлган эмес</translation>
 <translation id="1992924914582925289">Түзмөктөн алып салуу</translation>
 <translation id="1994173015038366702">Сайт URL'и</translation>
@@ -1006,6 +1011,7 @@
 
 Family Link колдонмосун түзмөгүңүзгө орнотуп, бул аккаунттун жөндөөлөрүн башкара аласыз.  Нускамаларды электрондук кат менен салып жибердик.</translation>
 <translation id="2040460856718599782">Т-у-уй ата! Аныктыгыңыз текшерилип жатканда бир жерден ката кетти. Кирүү далдаштырма дайын-даректериңизди дагы бир жолу текшерип туруп, дагы аракет кылып көрүңүз.</translation>
+<translation id="2040894699575719559">Жайгашкан жер бөгөттөлдү</translation>
 <translation id="2042279886444479655">Активдүү профилдер</translation>
 <translation id="2044014337866019681">Сеансты бөгөттөн чыгаруу үчүн <ph name="ACCOUNT" /> аккаунтун ырастап жатканыңызды текшериңиз.</translation>
 <translation id="204497730941176055">Microsoft тастыктамасынын калыбынын аталышы</translation>
@@ -1492,6 +1498,7 @@
 <translation id="2527167509808613699">Туташуунун бардык түрү</translation>
 <translation id="2530166226437958497">Бузулууларды аныктап оңдоо</translation>
 <translation id="2532589005999780174">Жогорку контраст режими</translation>
+<translation id="2533649878691950253">Адатта уруксат бербегениңизден улам, бул сайттын так жайгашкан жериңизди көрүү мүмкүнчүлүгү бөгөттөлдү</translation>
 <translation id="253434972992662860">&amp;Бир азга токтотуу</translation>
 <translation id="253557089021624350">Байланышты текшерүүчү билдирүүлөрдүн саны</translation>
 <translation id="2535799430745250929">Мобилдик тармак жок</translation>
@@ -1679,6 +1686,7 @@
 <translation id="2738771556149464852">Кийин эмес</translation>
 <translation id="2739191690716947896">Мүчүлүштүктөрдү аныктоо</translation>
 <translation id="2739240477418971307">Атайын мүмкүнчүлүктөр жөндөөлөрүн өзгөртүңүз</translation>
+<translation id="2739965161385757621">Жөндөөлөрүмдү карап чыгуу</translation>
 <translation id="274029851662193272">Ныгырылган</translation>
 <translation id="2740531572673183784">Ok</translation>
 <translation id="2741713322780029189">Калыбына келтирүү терминалын ачуу</translation>
@@ -1803,6 +1811,7 @@
 <translation id="2864601841139725659">Профилиңиздин сүрөтүн коюп алыңыз</translation>
 <translation id="2865919525181940183">Экрандагы программалардын скриншоту</translation>
 <translation id="286674810810214575">Кубат булактары текшерилүүдө...</translation>
+<translation id="2866876751734765554">Купуялыкты карап чыгуу</translation>
 <translation id="2867768963760577682">Кадалган өтмөк катары ачуу</translation>
 <translation id="2868746137289129307">Бул кеңейтүү эскирип, ишкана саясаты аркылуу өчүрүлгөн. Ал жаңыраак версия жеткиликтүү болгондо автоматтык түрдө иштетилиши мүмкүн.</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -2332,6 +2341,7 @@
 <translation id="3446274660183028131">Windows'ту орнотуу үчүн Parallels Desktop кызматын иштетиңиз.</translation>
 <translation id="344630545793878684">Дайын-даректериңизди бир нече вебсайттан окуңуз</translation>
 <translation id="3446650212859500694">Бул файлда купуя мазмун бар</translation>
+<translation id="3446827946208017735">Эң маанилүү купуялык жөндөөлөрүн бир жерден карап чыгып, түшүнө аласыз</translation>
 <translation id="3448086340637592206">Google Chrome жана Chrome OS'тун кошумча шарттары</translation>
 <translation id="3448492834076427715">Аккаунтту жаңыртуу</translation>
 <translation id="3449393517661170867">Жаңы өтмөктөгү терезе</translation>
@@ -3523,7 +3533,6 @@
 <translation id="4733793249294335256">Жайгашкан жер</translation>
 <translation id="473546211690256853">Бул аккаунтту <ph name="DOMAIN" /> башкарат</translation>
 <translation id="4735803855089279419">Тутум бул түзмөктүн далдаштырма дайындарын аныктай албай койду.</translation>
-<translation id="473581466100273252">Жакында жабылган жазууларды өчүрүү/күйгүзүү</translation>
 <translation id="4736292055110123391">Бардык түзмөктөрүңүздөгү кыстармаларды, сырсөздөрдү, таржымалыңызды жана башкаларды шайкештириңиз</translation>
 <translation id="473775607612524610">Жаңыртуу</translation>
 <translation id="473936925429402449">Тандалды, <ph name="TOTAL_ELEMENTS" /> ичинен <ph name="CURRENT_ELEMENT" />-кошумча мазмун</translation>
@@ -3676,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Герц – бириктирилген</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> тажрыйбасы үчүн абалды тандаңыз.</translation>
 <translation id="49027928311173603">Серверден жүктөлүп алынган саясат жараксыз: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Таржымал Жашыруун режимде сакталбайт</translation>
 <translation id="4906490889887219338">Тармактын жалпы файлдарын жөндөңүз же башкарыңыз. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Бул файл негизинен жүктөлүп алынбайт, ошондуктан коркунучтуу болушу мүмкүн.</translation>
 <translation id="4907306957610201395">Уруксат категориясы</translation>
@@ -3762,6 +3770,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> виртуалдык машиналары табылган жок}=1{1 <ph name="VM_TYPE" /> виртуалдык машинасы табылды: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> виртуалдык машинасы табылды: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Интернет жок.</translation>
 <translation id="4998430619171209993">Күйүк</translation>
+<translation id="4999804342505941663">"Тынчымды алба" режимин күйгүзүү</translation>
 <translation id="5000922062037820727">Бөгөттөлгөн (сунушталат)</translation>
 <translation id="5005498671520578047">Сырсөздү көчүрүү</translation>
 <translation id="5006218871145547804">Crostini Android колдонмосунун ADB</translation>
@@ -5086,6 +5095,7 @@
 <translation id="6468485451923838994">Ариптер</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> файл</translation>
 <translation id="6469557521904094793">Мобилдик тармакты күйгүзүү</translation>
+<translation id="6470823736074966819">Билдирмелердин үнүн басуу</translation>
 <translation id="6472893788822429178">Башкы бет баскычын көрсөтүү</translation>
 <translation id="6474498546677193336">Бөлүшүү токтотулган жок, анткени колдонмо ушул папканы иштетип жатат. Linux эмки жолу өчүрүлгөндө бул папканы бөлүшүү токтотулат.</translation>
 <translation id="6474884162850599008">Google Drive каттоо эсебин ажыратуу</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 0674a013..1f68cda 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">ແປ <ph name="LANGUAGE" /> ຢູ່ສະເໝີ</translation>
 <translation id="1108600514891325577">ຢຸດ</translation>
 <translation id="1110155001042129815">ລໍ​ຖ້າ</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">ແຖບໃນພື້ນຫຼັງກຳລັງໃຊ້ Bluetooth ຢູ່</translation>
 <translation id="1113892970288677790">ເລືອກໜ້າປົກ ແລະ ຮູບທີ່ຄັດສັນມາ</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -532,6 +533,7 @@
 <translation id="156793199942386351">ມີການມອບໝາຍ '<ph name="CURRENTKEY" />' ໃສ່ຄຳສັ່ງ '<ph name="ACTION" />' ຢູ່ກ່ອນແລ້ວ. ກົດປຸ່ມໃດກໍໄດ້ເພື່ອ <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript Console</translation>
 <translation id="1568323446248056064">ເປີດການຕັ້ງຄ່າອຸປະກອນສະແດງຜົນ</translation>
+<translation id="1570604804919108255">ເຊົາປິດສຽງການແຈ້ງເຕືອນ</translation>
 <translation id="1571738973904005196">ເບິ່ງແຖບ: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (ແຂກ)</translation>
 <translation id="1572266655485775982">ເປີດນຳໃຊ້ Wi-Fi</translation>
@@ -589,6 +591,7 @@
 <translation id="1621485112342885423">ກະຕ່າຂອງທ່ານ</translation>
 <translation id="1621729191093924223">ຄຸນສົມບັດທີ່ຕ້ອງການໃຊ້ໄມໂຄຣໂຟນຈະໃຊ້ບໍ່ໄດ້</translation>
 <translation id="1621831347985899379">ຂໍ້ມູນ <ph name="DEVICE_TYPE" /> ຈະຖືກລຶບ</translation>
+<translation id="1621984899599015181">ຕົວເລືອກສຳລັບການແບ່ງປັນແມ່ນຈັດການໂດຍອົງການຂອງທ່ານ. ບາງລາຍການອາດຖືກເຊື່ອງໄວ້.</translation>
 <translation id="1622054403950683339">ລືມເຄືອຂ່າຍ Wi-Fi</translation>
 <translation id="1623132449929929218">ຮູບພາບບໍ່ສາມາດໃຊ້ໄດ້ໃນຕອນນີ້. ກະລຸນາເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຄືນໃໝ່ເພື່ອເບິ່ງຄໍເລັກຊັນຮູບພື້ນຫຼັງ.</translation>
 <translation id="1623723619460186680">ການຫຼຸດແສງສີຟ້າ</translation>
@@ -834,6 +837,7 @@
 <translation id="1850508293116537636">ໝຸນຕາມເຂັມໂມງ</translation>
 <translation id="1852141627593563189">ຊອກຫາຊອບແວອັນຕະລາຍ</translation>
 <translation id="1852799913675865625">ມີ​ຄວາມ​ຜິດ​ພາດ​ໃນ​ຂະ​ນະ​ທີ່​ພະ​ຍາ​ຍາມ​​ອ່ານ​ໄຟລ​໌​: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">ສືບຕໍ່ຈາກບ່ອນທີ່ທ່ານເຮັດຄ້າງໄວ້. ທ່ານສາມາດຕັ້ງໃຫ້ແອັບກູ້ຄືນມາທຸກເທື່ອໃນຕອນສະຕາດອັບ ຫຼື ປິດການກູ້ຄືນໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="1854180393107901205">ຢຸດ​ການ​ຄາສທ໌</translation>
 <translation id="1855079636134697549">ກ້ອງເປີດຢູ່</translation>
 <translation id="1856715684130786728">ເພີ່ມ​ທີ່ຕັ້ງ...</translation>
@@ -962,6 +966,7 @@
 <translation id="1989113344093894667">ບໍ່ສາມາດຖ່າຍຮູບເນື້ອຫາໄດ້</translation>
 <translation id="1990046457226896323">ດາວໂຫຼດໄຟລ໌ສຽງເວົ້າແລ້ວ</translation>
 <translation id="1990512225220753005">ຢ່າສະແດງທາງລັດໃນໜ້ານີ້</translation>
+<translation id="199191324030140441">ປິດໂໝດຫ້າມລົບກວນແລ້ວ</translation>
 <translation id="1992397118740194946">ບໍ່​ໄດ້ຕັ້ງ​</translation>
 <translation id="1992924914582925289">ລຶບອອກຈາກອຸປະກອນ</translation>
 <translation id="1994173015038366702">URL ​ເວັບ​ໄຊທ໌</translation>
@@ -1003,6 +1008,7 @@
 
 ທ່ານສາມາດຈັດການການຕັ້ງຄ່າບັນຊີນີ້ໄດ້ໂດຍການຕິດຕັ້ງແອັບ Family Link ໃນອຸປະກອນຂອງທ່ານ.  ພວກເຮົາໄດ້ສົ່ງຄຳແນະນຳໃຫ້ທ່ານໃນອີເມວ.</translation>
 <translation id="2040460856718599782">ອຸ້ຍ! ມີບາງອັນຜິດພາດ ເມື່ອພະຍາຍາມຮັບຮອງ. ກະລຸນາກວດເບິ່ງໃບຢັ້ງຢືນການລົງຊື່ເຂົ້າໃຊ້ໃຫ້ດີ ແລະລອງໃໝ່ອີກ.</translation>
+<translation id="2040894699575719559">ບລັອກສະຖານທີ່ແລ້ວ</translation>
 <translation id="2042279886444479655">ໂປຣໄຟລ໌ທີ່ໃຊ້ຢູ່</translation>
 <translation id="2044014337866019681">ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານກຳລັງຢັ້ງຢືນ <ph name="ACCOUNT" /> ເພື່ອປົດລັອກເຊດຊັນ.</translation>
 <translation id="204497730941176055">ຊື່​ແມ່​ແບບໃບຢັ້ງຢືນ Microsoft</translation>
@@ -1489,6 +1495,7 @@
 <translation id="2527167509808613699">ການເຊື່ອມຕໍ່ປະເພດໃດໜຶ່ງ</translation>
 <translation id="2530166226437958497">ການແກ້ໄຂບັນຫາ</translation>
 <translation id="2532589005999780174">ໂໝດສີຕັດກັນສູງ</translation>
+<translation id="2533649878691950253">ເວັບໄຊນີ້ຖືກບລັອກບໍ່ໃຫ້ຮູ້ສະຖານທີ່ແບບລະອຽດຂອງທ່ານເນື່ອງຈາກປົກກະຕິທ່ານບໍ່ອະນຸຍາດສິ່ງນີ້</translation>
 <translation id="253434972992662860">ຢຸດຊົ່ວຄາວ</translation>
 <translation id="253557089021624350">ຈຳນວນ Keepalive</translation>
 <translation id="2535799430745250929">ບໍ່ມີເຄືອຂ່າຍມືຖື</translation>
@@ -1676,6 +1683,7 @@
 <translation id="2738771556149464852">ບໍ່ຫຼັງຈາກ</translation>
 <translation id="2739191690716947896">ແກ້ໄຂບັນຫາ</translation>
 <translation id="2739240477418971307">ປ່ຽນການຕັ້ງຄ່າຄວາມສາມາດເຂົ້າຫາຂອງທ່ານ</translation>
+<translation id="2739965161385757621">ກວດສອບການຕັ້ງຄ່າຂອງຂ້ອຍ</translation>
 <translation id="274029851662193272">ຫຼຸດລົງ</translation>
 <translation id="2740531572673183784">ຕົກລົງ</translation>
 <translation id="2741713322780029189">ເປີດປາຍທາງການກູ້ຄືນ</translation>
@@ -1800,6 +1808,7 @@
 <translation id="2864601841139725659">ຕັ້ງຄ່າຮູບໂປຣໄຟລ໌ຂອງທ່ານ</translation>
 <translation id="2865919525181940183">ພາບໜ້າຈໍຂອງໂປຣແກຣມທີ່ປັດຈຸບັນຢູ່ໃນໜ້າຈໍ</translation>
 <translation id="286674810810214575">ກຳລັງກວດແຫຼ່ງພະລັງງານ...</translation>
+<translation id="2866876751734765554">ກວດສອບຄວາມເປັນສ່ວນຕົວ</translation>
 <translation id="2867768963760577682">ເປີດ​ເປັນ​ແຖບປັກໝຸດແລ້ວ</translation>
 <translation id="2868746137289129307">ສ່ວນ​ຂະ​ຫຍາຍ​ນີ້​ຫຼ້າ​ສະ​ໄໝ ແລະ​ຖືກ​ປິດ​ໃຊ້​ງານ​ຕາມ​ນະ​ໂຍ​ບາຍ​ວິ​ສາ​ຫະ​ກິດ​ແລ້ວ. ມັນ​ອາດ​ຈະ​ຖືກ​ເປີດ​ໃຊ້​ງານ​ອັດ​ຕະ​ໂນ​ມັດ ເມື່ອ​ມີ​ເວີ​ຊັນ​ໃໝ່​ກວ່າ​ໃຫ້.</translation>
 <translation id="2870560284913253234">ເວັບ​ໄຊທ໌</translation>
@@ -2329,6 +2338,7 @@
 <translation id="3446274660183028131">ກະລຸນາເປີດໃຊ້ Parallels Desktop ເພື່ອຕິດຕັ້ງ Windows.</translation>
 <translation id="344630545793878684">ອ່ານ​ຂໍ້​ມູນ​ຂອງ​ທ່ານ​ຢູ່​ເທິງຫຼາຍ​ເວັບ​ໄຊ​ທ໌</translation>
 <translation id="3446650212859500694">ໄຟລ໌ນີ້ມີເນື້ອຫາລະອຽດອ່ອນ</translation>
+<translation id="3446827946208017735">ເຂົ້າໃຈ ແລະ ກວດສອບການຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວທີ່ສຳຄັນທີ່ສຸດໃນບ່ອນດຽວ</translation>
 <translation id="3448086340637592206">ຂໍ້ກຳນົດເພີ່ມເຕີມຂອງ Google Chrome ແລະ Chrome OS</translation>
 <translation id="3448492834076427715">ອັບເດດບັນຊີ</translation>
 <translation id="3449393517661170867">ໜ້າຈໍແຖບໃໝ່</translation>
@@ -3520,7 +3530,6 @@
 <translation id="4733793249294335256">ສະຖານທີ່</translation>
 <translation id="473546211690256853">ບັນຊີນີ້ຖືກຈັດການໂດຍ <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">ລະບົບກໍານົດຕົວລະບຸອຸປະກອນສໍາລັບອຸປະກອນນີ້ບໍ່ສຳເລັດ.</translation>
-<translation id="473581466100273252">ສະຫຼັບຂໍ້ມູນທີ່ປິດຫຼ້າສຸດ</translation>
 <translation id="4736292055110123391">ຊິ້ງບຸກມາກ, ລະຫັດຜ່ານ, ປະຫວັດຂອງທ່ານ ແລະ ອື່ນໆອີກຢູ່ໃນທຸກອຸປະກອນຂອງທ່ານ</translation>
 <translation id="473775607612524610">ອັບເດດ</translation>
 <translation id="473936925429402449">ເລືອກແລ້ວ, ເນື້ອຫາເພີ່ມເຕີມທີ <ph name="CURRENT_ELEMENT" /> ຈາກທັງໝົດ <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3673,7 +3682,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ອິນເຕີເລດ</translation>
 <translation id="4901309472892185668">ເລືອກສະຖານະການທົດລອງສຳລັບການທົດລອງ <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">ນະ​ໂຍ​ບາຍທີ່ດາວໂຫຼດຈາກເຊີບເວີໃຊ້ບໍ່ໄດ້: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">ບໍ່ໄດ້ບັນທຶກປະຫວັດໃນໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ</translation>
 <translation id="4906490889887219338">ຕັ້ງຄ່າ ຫຼື ຈັດການການແບ່ງປັນໄຟລ໌ຜ່ານເຄືອຂ່າຍ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ໄຟລ໌ນີ້ບໍ່ຖືກດາວໂຫລດໂດຍທົ່ວໄປ ແລະ ອາດເປັນອັນຕະລາຍໄດ້.</translation>
 <translation id="4907306957610201395">ປະເພດການອະນຸຍາດ</translation>
@@ -3759,6 +3767,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{ບໍ່ພົບ VM <ph name="VM_TYPE" />}=1{ພົບ 1 VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{ພົບ {NUM_VMS} VM <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ.</translation>
 <translation id="4998430619171209993">ເປີດ</translation>
+<translation id="4999804342505941663">ເປີດໂໝດຫ້າມລົບກວນ</translation>
 <translation id="5000922062037820727">ບ​ລັອກແລ້ວ (ແນະ​ນຳ​ໃຫ້)</translation>
 <translation id="5005498671520578047">ອັດ​ສຳ​ເນົາ​ລະ​ຫັດ​ຜ່ານ</translation>
 <translation id="5006218871145547804">ADB ຂອງແອັບ Android ໃນ Crostini</translation>
@@ -5083,6 +5092,7 @@
 <translation id="6468485451923838994">ຟອນ</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ໄຟລ໌</translation>
 <translation id="6469557521904094793">ເປີດເຄືອຂ່າຍມືຖື</translation>
+<translation id="6470823736074966819">ປິດສຽງການແຈ້ງເຕືອນ</translation>
 <translation id="6472893788822429178">ສະແດງປຸ່ມໜ້າ​ຫຼັກ</translation>
 <translation id="6474498546677193336">ບໍ່ສາມາດເຊົາແບ່ງປັນໄດ້ເພາະວ່າແອັບພລິເຄຊັນກຳລັງໃຊ້ໂຟນເດີນີ້ຢູ່. ລະບົບຈະເຊົາແບ່ງປັນໂຟນເດີເມື່ອປິດ Linux ໃນຄັ້ງຕໍ່ໄປ.</translation>
 <translation id="6474884162850599008">ຕັດ​ເຊື່ອມ​ຕໍ່​ບັນ​ຊີ Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 728342e9..00677f9 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3526,7 +3526,6 @@
 <translation id="4733793249294335256">Vieta</translation>
 <translation id="473546211690256853">Šią paskyrą tvarko <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Sistemai nepavyko nustatyti šio įrenginio identifikatorių.</translation>
-<translation id="473581466100273252">Perjungti į neseniai uždarytus įrašus</translation>
 <translation id="4736292055110123391">Sinchronizuokite žymes, slaptažodžius, istoriją ir daugiau visuose savo įrenginiuose</translation>
 <translation id="473775607612524610">Atnaujinti</translation>
 <translation id="473936925429402449">Pasirinkta, papildomas turinys: <ph name="CURRENT_ELEMENT" /> iš <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3679,7 +3678,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – progresinis</translation>
 <translation id="4901309472892185668">Pasirinkite eksperimento būseną, skirtą eksperimentui „<ph name="EXPERIMENT_NAME" />“.</translation>
 <translation id="49027928311173603">Iš serverio atsisiųsta politika netinkama: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Istorija nėra saugoma inkognito režimu</translation>
 <translation id="4906490889887219338">Nustatykite arba tvarkykite tinklo failų bendrinimą. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Šis failas atsisiunčiamas retai ir gali būti pavojingas.</translation>
 <translation id="4907306957610201395">Leidimų kategorija</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 3b569fc..52541714 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -3509,7 +3509,6 @@
 <translation id="4733793249294335256">Atrašanās vieta</translation>
 <translation id="473546211690256853">Šo kontu pārvalda <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistēmā neizdevās noteikt šīs ierīces identifikatorus.</translation>
-<translation id="473581466100273252">Rādīt/paslēpt nesen aizvērtos vienumus</translation>
 <translation id="4736292055110123391">Sinhronizējiet grāmatzīmes, paroles, vēsturi un citu saturu visās savās ierīcēs</translation>
 <translation id="473775607612524610">Atjaunināt</translation>
 <translation id="473936925429402449">Atlasīts, papildu satura <ph name="CURRENT_ELEMENT" />. elements no <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3662,7 +3661,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz — rindpārlēces izvērse</translation>
 <translation id="4901309472892185668">Atlasiet eksperimenta <ph name="EXPERIMENT_NAME" /> statusu.</translation>
 <translation id="49027928311173603">No servera lejupielādētā politika nav derīga: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Inkognito režīmā vēsture netiek saglabāta.</translation>
 <translation id="4906490889887219338">Iestatiet vai pārvaldiet tīkla failu kopīgošanas ierīces. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Šis fails parasti netiek lejupielādēts un var būt bīstams.</translation>
 <translation id="4907306957610201395">Atļaujas kategorija</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 18b74342..4d9df90 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -3524,7 +3524,6 @@
 <translation id="4733793249294335256">Локација</translation>
 <translation id="473546211690256853">Оваа сметка е управувана од <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Системот не успеа да утврди идентификатори на уред за овој уред.</translation>
-<translation id="473581466100273252">Прикажете/сокријте ги неодамна затворените ставки</translation>
 <translation id="4736292055110123391">Синхронизирајте ги вашите обележувачи, лозинки, историја и друго на сите ваши уреди</translation>
 <translation id="473775607612524610">Ажурирај</translation>
 <translation id="473936925429402449">Избрано, дополнителни содржини под број <ph name="CURRENT_ELEMENT" /> од вкупно <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3677,7 +3676,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - испреплетен приказ</translation>
 <translation id="4901309472892185668">Изберете состојба на експериментот за <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Правилото преземено од серверот е неважечко: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Историјата не се зачувува кога сте во „Инкогнито“</translation>
 <translation id="4906490889887219338">Поставете ги или управувајте со мрежните споделувања. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Датотекава обично не се презема и може да биде опасна.</translation>
 <translation id="4907306957610201395">Категорија на дозвола</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 3a02aa47..118358a 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> എല്ലായ്പ്പോഴും വിവര്‍ത്തനം ചെയ്യുക </translation>
 <translation id="1108600514891325577">&amp;നിറുത്തുക</translation>
 <translation id="1110155001042129815">കാത്തിരിക്കുക</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">പശ്ചാത്തല ടാബ് bluetooth ഉപയോഗിക്കുന്നു</translation>
 <translation id="1113892970288677790">ക്യുറേറ്റ് ചെയ്‌ത കലാസൃഷ്‌ടിയും ചിത്രങ്ങളും തിരഞ്ഞെടുക്കുക</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -530,6 +531,7 @@
 <translation id="156793199942386351">'<ph name="CURRENTKEY" />' മുമ്പേ '<ph name="ACTION" />' എന്ന പ്രവർത്തനത്തിന് അസൈൻ ചെയ്‌തിട്ടുണ്ട്. <ph name="RESPONSE" /> ചെയ്യാൻ ഏതെങ്കിലും കീ അമർത്തുക.</translation>
 <translation id="1567993339577891801">JavaScript കണ്‍‌സോള്‍‌</translation>
 <translation id="1568323446248056064">ഡിസ്‌പ്ലേ ഉപകരണ ക്രമീകരണം തുറക്കുക</translation>
+<translation id="1570604804919108255">അറിയിപ്പുകൾ അൺമ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="1571738973904005196">ടാബ് കാണുക: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (അതിഥി)</translation>
 <translation id="1572266655485775982">Wi-Fi പ്രവർത്തനക്ഷമമാക്കൽ</translation>
@@ -587,6 +589,7 @@
 <translation id="1621485112342885423">നിങ്ങളുടെ കാർട്ടുകൾ</translation>
 <translation id="1621729191093924223">മൈക്രോഫോൺ ആവശ്യമുള്ള ഫീച്ചറുകൾ പ്രവർത്തിക്കില്ല</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> ഡാറ്റ ഇല്ലാതാക്കും</translation>
+<translation id="1621984899599015181">പങ്കിടുന്നതിനുള്ള ഓപ്ഷനുകൾ മാനേജ് ചെയ്യുന്നത് നിങ്ങളുടെ സ്ഥാപനമാണ്. ചില ഇനങ്ങൾ മറച്ചിട്ടുണ്ടാകാം.</translation>
 <translation id="1622054403950683339">വൈഫൈ നെറ്റ്‌വർക്ക് മറക്കുക</translation>
 <translation id="1623132449929929218">ചിത്രങ്ങൾ നിലവിൽ ലഭ്യമല്ല. വാൾപേപ്പർ ശേഖരങ്ങൾ കാണുന്നതിന് ഇന്റർനെറ്റുമായി വീണ്ടും കണക്റ്റ് ചെയ്യുക.</translation>
 <translation id="1623723619460186680">നീല വെളിച്ചം കുറയ്ക്കൽ</translation>
@@ -824,6 +827,7 @@
 <translation id="1850508293116537636">&amp;ഘടികാരദിശയില്‍‌ തിരിക്കുക</translation>
 <translation id="1852141627593563189">ദോഷകരമായ സോഫ്‌റ്റ്‌വയർ കണ്ടെത്തുക</translation>
 <translation id="1852799913675865625">ഫയല്‍ വായിക്കാന്‍ ശ്രമിക്കുന്നതിനിടയില്‍ ഒരു പിശക് സംഭവിച്ചു: <ph name="ERROR_TEXT" /> .</translation>
+<translation id="1854049213067042715">നിങ്ങൾ നിർത്തിയിടത്ത് നിന്ന് തുടരുക. നിങ്ങൾക്ക് ആപ്പുകൾ സ്റ്റാർട്ടപ്പിൽ എല്ലായ്‌പ്പോഴും പുനഃസ്ഥാപിക്കാൻ സജ്ജീകരിക്കാം അല്ലെങ്കിൽ ക്രമീകരണത്തിൽ പുനഃസ്ഥാപിക്കൽ ഓഫാക്കാം.</translation>
 <translation id="1854180393107901205">കാസ്റ്റ് ചെയ്യുന്നത് നിർത്തുക</translation>
 <translation id="1855079636134697549">ക്യാമറ ഓണാണ്</translation>
 <translation id="1856715684130786728">ലൊക്കേഷൻ ചേർക്കുക...</translation>
@@ -952,6 +956,7 @@
 <translation id="1989113344093894667">ഉള്ളടക്കം ക്യാപ്‌ചർ ചെയ്യാനാകില്ല</translation>
 <translation id="1990046457226896323">സംഭാഷണ ഫയലുകൾ ഡൗൺലോഡ് ചെയ്‌തു</translation>
 <translation id="1990512225220753005">ഈ പേജിൽ കുറുക്കുവഴികൾ കാണിക്കരുത്</translation>
+<translation id="199191324030140441">'ശല്യപ്പെടുത്തരുത്' ഓഫാക്കുക</translation>
 <translation id="1992397118740194946">സജ്ജമാക്കിയിട്ടില്ല</translation>
 <translation id="1992924914582925289">ഉപകരണത്തിൽ നിന്ന് നീക്കം ചെയ്യുക</translation>
 <translation id="1994173015038366702">സൈറ്റ് URL</translation>
@@ -993,6 +998,7 @@
 
 നിങ്ങളുടെ ഉപകരണത്തിൽ Family Link ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ ഈ അക്കൗണ്ടിന്റെ ക്രമീകരണം നിങ്ങൾക്ക് മാനേജ് ചെയ്യാം.  നിർദ്ദേശങ്ങൾ നിങ്ങൾക്ക് ഇമെയിലിൽ അയച്ചിട്ടുണ്ട്.</translation>
 <translation id="2040460856718599782">ക്ഷമിക്കണം! നിങ്ങളെ പ്രാമാണീകരിക്കാന്‍ ശ്രമിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു. നിങ്ങളുടെ സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ രണ്ടുതവണ പരിശോധിച്ചതിനുശേഷം വീണ്ടും ശ്രമിക്കുക.</translation>
+<translation id="2040894699575719559">ലൊക്കേഷൻ ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="2042279886444479655">സജീവമായ പ്രൊഫൈലുകൾ</translation>
 <translation id="2044014337866019681">ഈ സെഷൻ അൺലോക്ക് ചെയ്യാൻ, നിങ്ങൾ <ph name="ACCOUNT" /> പരിശോധിച്ചുറപ്പിക്കുന്നുവെന്ന് ഉറപ്പാക്കുക.</translation>
 <translation id="204497730941176055">Microsoft സര്‍‌ട്ടിഫിക്കറ്റ് ടെംപ്ലേറ്റ് നാമം</translation>
@@ -1476,6 +1482,7 @@
 <translation id="2527167509808613699">ഏത് രീതിയിലുള്ള കണക്ഷനും</translation>
 <translation id="2530166226437958497">ട്രബിൾഷൂട്ടിംഗ്</translation>
 <translation id="2532589005999780174">ഉയർന്ന ദൃശ്യതീവ്രത മോഡ്</translation>
+<translation id="2533649878691950253">നിങ്ങൾ സാധാരണയായി അനുവാദം നൽകാത്തതിനാൽ നിങ്ങളുടെ കൃത്യമായ ലൊക്കേഷൻ അറിയുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="253434972992662860">&amp;താല്‍ക്കാലികമായി നിര്‍ത്തുക</translation>
 <translation id="253557089021624350">കണക്ഷൻ നിലനിർത്താനുള്ള ആക്‌റ്റിവിറ്റികളുടെ എണ്ണം</translation>
 <translation id="2535799430745250929">സെല്ലുലാർ നെറ്റ്‌വർക്കൊന്നും നിലവിലില്ല</translation>
@@ -1663,6 +1670,7 @@
 <translation id="2738771556149464852">അതിനുശേഷമല്ല</translation>
 <translation id="2739191690716947896">ഡീബഗ് ചെയ്യുക</translation>
 <translation id="2739240477418971307">നിങ്ങളുടെ ഉപയോഗസഹായി ക്രമീകരണങ്ങൾ മാറ്റുക</translation>
+<translation id="2739965161385757621">എന്റെ ക്രമീകരണം അവലോകനം ചെയ്യുക</translation>
 <translation id="274029851662193272">താഴ്ന്ന് നിൽക്കുന്നത്</translation>
 <translation id="2740531572673183784">ശരി</translation>
 <translation id="2741713322780029189">വീണ്ടെടുക്കൽ ടെർമിനൽ തുറക്കുക</translation>
@@ -1787,6 +1795,7 @@
 <translation id="2864601841139725659">നിങ്ങളുടെ പ്രൊഫൈല്‍ ചിത്രം സജ്ജമാക്കുക</translation>
 <translation id="2865919525181940183">നിലവിൽ സ്ക്രീനിലുള്ള പ്രോഗ്രാമുകളുടെ സ്ക്രീൻ ഷോട്ട്</translation>
 <translation id="286674810810214575">ഊർജ സ്രോതസ്സുകൾ പരിശോധിക്കുന്നു...</translation>
+<translation id="2866876751734765554">സ്വകാര്യതാ അവലോകനം</translation>
 <translation id="2867768963760577682">പിന്‍ ചെയ്‌ത ടാബായി തുറക്കുക</translation>
 <translation id="2868746137289129307">ഈ വിപുലീകരണം എന്റർപ്രൈസ്‌ നയം ഉപയോഗിച്ച് കാലഹരണപ്പെടുത്തുകയും പ്രവർത്തനരഹിതമാക്കുകയും ചെയ്‌തു. പുതിയ പതിപ്പ് ലഭ്യമാകുമ്പോൾ അത് സ്വയമേവ പ്രവർത്തനക്ഷമമായേക്കാം.</translation>
 <translation id="2870560284913253234">സൈറ്റ്</translation>
@@ -2316,6 +2325,7 @@
 <translation id="3446274660183028131">Windows ഇൻസ്‌റ്റാൾ ചെയ്യാൻ Parallels Desktop ലോഞ്ച് ചെയ്യുക.</translation>
 <translation id="344630545793878684">നിരവധി വെബ്‌സൈറ്റുകളിലെ നിങ്ങളുടെ വിവരം വായിക്കുക</translation>
 <translation id="3446650212859500694">ഈ ഫയലിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു</translation>
+<translation id="3446827946208017735">ഏറ്റവും പ്രധാനപ്പെട്ട സ്വകാര്യതാ ക്രമീകരണങ്ങൾ ഒരിടത്ത് നിന്ന് തന്നെ മനസ്സിലാക്കുക, അവലോകനം ചെയ്യുക</translation>
 <translation id="3448086340637592206">Google Chrome, Chrome OS അധിക നിബന്ധനകൾ</translation>
 <translation id="3448492834076427715">അക്കൗണ്ട് അപ്‌ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="3449393517661170867">ടാബ് ചെയ്‌ത പുതിയ വിന്‍ഡോ</translation>
@@ -3505,7 +3515,6 @@
 <translation id="4733793249294335256">ലൊക്കേഷൻ</translation>
 <translation id="473546211690256853"><ph name="DOMAIN" />, ഈ അക്കൗണ്ട് നിയന്ത്രിക്കുന്നു</translation>
 <translation id="4735803855089279419">ഈ ഉപകരണത്തിനായി ഉപകരണ ഐഡന്റിഫയറുകൾ നിർണ്ണയിക്കാൻ സിസ്‌റ്റത്തിനായില്ല.</translation>
-<translation id="473581466100273252">അടുത്തിടെ അടച്ച എൻട്രികൾ ടോഗിൾ ചെയ്യുക</translation>
 <translation id="4736292055110123391">ബുക്ക്‌മാർക്കുകൾ, പാസ്‌വേഡുകൾ, ചരിത്രം എന്നിവയും മറ്റും നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും സമന്വയിപ്പിക്കുക</translation>
 <translation id="473775607612524610">അപ്ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />-ൽ <ph name="CURRENT_ELEMENT" />-ാമത്തെ അധിക ഉള്ളടക്കം തിരഞ്ഞെടുത്തു</translation>
@@ -3658,7 +3667,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - മിശ്രമാക്കിയത്</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> പരീക്ഷണത്തിന്റെ പരീക്ഷണ നില തിരഞ്ഞെടുക്കുക.</translation>
 <translation id="49027928311173603">സെർവറിൽ നിന്നും ഡൗൺലോഡ് ചെയ്‌ത നയം അസാധുവാണ്: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">അദൃശ്യ മോഡിൽ ചരിത്രം സംരക്ഷിച്ചിട്ടില്ല</translation>
 <translation id="4906490889887219338">നെറ്റ്‌വർക്ക് ഫയൽ പങ്കിടലുകൾ സജ്ജീകരിക്കുക അല്ലെങ്കിൽ മാനേജ് ചെയ്യുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">അപകടകരമാകാൻ ഇടയുള്ളതിനാൽ ഈ ഫയൽ സാധാരണ ഡൗൺലോഡ് ചെയ്യാറില്ല.</translation>
 <translation id="4907306957610201395">അനുമതി വിഭാഗം</translation>
@@ -3744,6 +3752,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> VM-കൾ ഒന്നും കണ്ടെത്തിയില്ല}=1{ഒരു <ph name="VM_TYPE" /> VM കണ്ടെത്തി: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> VM-കൾ കണ്ടെത്തി: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">ഇന്റർനെറ്റ് കണക്ഷൻ ഇല്ല.</translation>
 <translation id="4998430619171209993">ഓണാണ്</translation>
+<translation id="4999804342505941663">'ശല്യപ്പെടുത്തരുത്' ഓണാക്കുക</translation>
 <translation id="5000922062037820727">തടഞ്ഞിരിക്കുന്നു (ശുപാർശചെയ്‌തത്)</translation>
 <translation id="5005498671520578047">പാസ്‌വേഡ് പകർത്തുക</translation>
 <translation id="5006218871145547804">Crostini Android ആപ്പ് ADB</translation>
@@ -5070,6 +5079,7 @@
 <translation id="6468485451923838994">ഫോണ്ടുകൾ</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ഫയലുകൾ</translation>
 <translation id="6469557521904094793">സെല്ലുലാർ നെറ്റ്‌വർക്ക് ഓണാക്കുക</translation>
+<translation id="6470823736074966819">അറിയിപ്പുകൾ മ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="6472893788822429178">ഹോം ബട്ടൺ കാണിക്കുക</translation>
 <translation id="6474498546677193336">ഒരു ആപ്പ് ഈ ഫോൾഡർ ഉപയോഗിക്കുന്നതിനാൽ പങ്കിടല്‍ മാറ്റാനായില്ല. Linux അടുത്ത തവണ ഷട്ട് ഡൗൺ ചെയ്യുമ്പോൾ ഫോൾഡർ പങ്കിടുന്നത് മാറ്റും.</translation>
 <translation id="6474884162850599008">Google ഡ്രൈവ് അക്കൗണ്ട് വിച്ഛേദിക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index af20d44..f103119 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -3518,7 +3518,6 @@
 <translation id="4733793249294335256">Байршил</translation>
 <translation id="473546211690256853">Энэ дансыг удирдагч <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Систем энэ төхөөрөмжид тохирох төхөөрөмж тодорхойлогчийг тогтоож чадсангүй.</translation>
-<translation id="473581466100273252">Саяхан хаасан оролтуудыг асаах/унтраах</translation>
 <translation id="4736292055110123391">Бүх төхөөрөмждөө хавчуурга, нууц үг, түүх болон бусад зүйлээ синк хийх</translation>
 <translation id="473775607612524610">Шинэчлэх</translation>
 <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />-с <ph name="CURRENT_ELEMENT" /> нэмэлт контентыг сонгосон</translation>
@@ -3671,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц - сүлжилдсэн</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> туршилтад туршилтын төлөвийг сонгоно уу.</translation>
 <translation id="49027928311173603">Серверээс татсан бодлого хүчин төгөлдөр бус байна: <ph name="VALIDATION_ERROR" /> .</translation>
-<translation id="4905269543817054577">Нууцлалын горимд түүхийг хадгалдаггүй</translation>
 <translation id="4906490889887219338">Сүлжээний файл хуваалцахыг тохируулах эсвэл удирдах. <ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Энэ файлыг ихэвчлэн татдаггүй бөгөөд аюултай байж болзошгүй.</translation>
 <translation id="4907306957610201395">Зөвшөөрлийн ангилал</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 0c081db..4aeed95 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -3516,7 +3516,6 @@
 <translation id="4733793249294335256">स्थान</translation>
 <translation id="473546211690256853">हे खाते <ph name="DOMAIN" /> द्वारे व्यवस्थापित केले आहे</translation>
 <translation id="4735803855089279419">सिस्टमला या डिव्हाइससाठी डिव्हाइस आयडेंटिफायर निर्धारित करता आला नाही.</translation>
-<translation id="473581466100273252">अलीकडे बंद केलेल्या नोंदी टॉगल करा</translation>
 <translation id="4736292055110123391">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड, इतिहास आणि बरेच काही सिंक करा</translation>
 <translation id="473775607612524610">अपडेट करा</translation>
 <translation id="473936925429402449">निवडलेले, <ph name="TOTAL_ELEMENTS" /> पैकी <ph name="CURRENT_ELEMENT" /> अतिरिक्त आशय</translation>
@@ -3669,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - इंटरलेस केलेला</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> प्रयोगासाठी प्रयोगाची स्थिती निवडा.</translation>
 <translation id="49027928311173603">सर्व्हरवरून डाउनलोड केलेले धोरण चुकीचे आहे: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">गुप्त मोडमध्ये इतिहास सेव्ह केला जात नाही</translation>
 <translation id="4906490889887219338">नेटवर्क फाइल शेअर सेट किंवा व्यवस्थापित करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ही फाईल सामान्यपणे डाउनलोड केली नाही आणि कदाचित धोकादायक असू शकते.</translation>
 <translation id="4907306957610201395">परवानगी वर्गवारी</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 87529ba..8025f71 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">Lokasi</translation>
 <translation id="473546211690256853">Akaun ini diuruskan oleh <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Sistem gagal menentukan pengecam peranti untuk peranti ini.</translation>
-<translation id="473581466100273252">Togol Entri yang Ditutup Baru-baru Ini</translation>
 <translation id="4736292055110123391">Segerakkan penanda halaman, kata laluan, sejarah dan pelbagai lagi item anda pada semua peranti anda</translation>
 <translation id="473775607612524610">Kemas kini</translation>
 <translation id="473936925429402449">Dipilih, kandungan tambahan <ph name="CURRENT_ELEMENT" /> daripada <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - berselang-seli</translation>
 <translation id="4901309472892185668">Pilih status percubaan untuk percubaan <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Dasar yang dimuat turun dari pelayan tidak sah: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Sejarah tidak disimpan dalam Inkognito</translation>
 <translation id="4906490889887219338">Sediakan atau urus perkongsian fail rangkaian. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Fail ini tidak lazim dimuat turun dan mungkin berbahaya.</translation>
 <translation id="4907306957610201395">Kategori Kebenaran</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 61e1f4c..023252e 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" />ကို အမြဲတမ်း ဘာသာပြန်ရန်</translation>
 <translation id="1108600514891325577">&amp;ရပ်</translation>
 <translation id="1110155001042129815">စောင့်ရန်</translation>
+<translation id="1111781754511998498">ပရိုဂျက်တာ</translation>
 <translation id="1112420131909513020">နောက်ခံတဘ်သည် ဘလူးတုသ်ကို အသုံးပြုနေသည်</translation>
 <translation id="1113892970288677790">ပြခန်းမှ အနုပညာလက်ရာများနှင့် ပုံများ ရွေးသည်</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -533,6 +534,7 @@
 <translation id="156793199942386351">‘<ph name="CURRENTKEY" />’ ကို ‘<ph name="ACTION" />’ လုပ်ဆောင်ချက်အတွက် သတ်မှတ်ပြီးဖြစ်သည်။ <ph name="RESPONSE" /> အတွက် ကီးတစ်ခုခုကို နှိပ်ပါ။</translation>
 <translation id="1567993339577891801">JavaScript ခလုတ်ခုံ</translation>
 <translation id="1568323446248056064">မျက်နှာပြင်ပြသမှုကိရိယာ ဆက်တင်များကို ဖွင့်ပါ</translation>
+<translation id="1570604804919108255">အကြောင်းကြားချက်များကို ပြန်ဖွင့်ရန်</translation>
 <translation id="1571738973904005196">တဘ်ကို ကြည့်ရန်- <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (ဧည့်သည်)</translation>
 <translation id="1572266655485775982">Wi-Fi ကို ဖွင့်ရန်</translation>
@@ -590,6 +592,7 @@
 <translation id="1621485112342885423">သင့်ဈေးခြင်းတောင်းများ</translation>
 <translation id="1621729191093924223">မိုက်ခရိုဖုန်းလိုအပ်သည့် ဝန်ဆောင်မှုများ အလုပ်လုပ်မည်မဟုတ်ပါ</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> ဒေတာကို ဖျက်ပါမည်</translation>
+<translation id="1621984899599015181">မျှဝေရန်နည်းလမ်းများကို သင်၏အဖွဲ့အစည်းက စီမံခန့်ခွဲထားသည်။ အကြောင်းအရာအချို့ကို ဖျောက်ထားနိုင်သည်။</translation>
 <translation id="1622054403950683339">Wi-Fi ကွန်ရက်ကို မေ့ပစ်ရန်</translation>
 <translation id="1623132449929929218">ပုံများလက်ရှိမရနိုင်ပါ။ နောက်ခံပုံစုစည်းမှုကို ကြည့်ရန် အင်တာနက်သို့ ပြန်လည်ချိတ်ဆက်ပါ။</translation>
 <translation id="1623723619460186680">အပြာရောင်အလင်း လျှော့ချခြင်း</translation>
@@ -835,6 +838,7 @@
 <translation id="1850508293116537636">&amp;နာရီလက်တံအတိုင်း လည်</translation>
 <translation id="1852141627593563189">အန္တရာယ်ဖြစ်စေနိုင်သော ဆော့ဖ်ဝဲများ ရှာပါ</translation>
 <translation id="1852799913675865625">ဖိုင်ကို ဖတ်ရန်ကြိုးစားချိန်တွင် အမှားယွင်း ရှိနေပါသည်၊ <ph name="ERROR_TEXT" />။</translation>
+<translation id="1854049213067042715">သင် ထားခဲ့သည့်နေရာမှ ရှေ့ဆက်နိုင်သည်။ စတင်ချိန်တွင် အက်ပ်များကို အမြဲပြန်ယူရန် သို့မဟုတ် ပြန်ယူခြင်းကို ပိတ်ထားရန် ဆက်တင်များတွင် သတ်မှတ်နိုင်သည်။</translation>
 <translation id="1854180393107901205">ကက်စ်လုပ်နေခြင်း ရပ်မည်</translation>
 <translation id="1855079636134697549">ကင်မရာ ဖွင့်ထားသည်</translation>
 <translation id="1856715684130786728">တည်နေရာ ထည့်ပေးရန်...</translation>
@@ -963,6 +967,7 @@
 <translation id="1989113344093894667">အကြောင်းအရာကို ပုံဖမ်းယူ၍မရပါ</translation>
 <translation id="1990046457226896323">တိုက်ရိုက်စာတန်းဖိုင်များ ဒေါင်းလုဒ်လုပ်ပြီးပြီ</translation>
 <translation id="1990512225220753005">ဖြတ်လမ်းလင့်ခ်များကို ဤစာမျက်နှာတွင် မပြပါနှင့်</translation>
+<translation id="199191324030140441">'မနှောင့်ယှက်ရ' ကို ပိတ်ရန်</translation>
 <translation id="1992397118740194946">မသတ်မှတ်ရသေး</translation>
 <translation id="1992924914582925289">စက်မှ ဖယ်ရှားရန်</translation>
 <translation id="1994173015038366702">ဆိုက် URL</translation>
@@ -1004,6 +1009,7 @@
 
 သင့်စက်ပစ္စည်းတွင် Family Link အက်ပ်ကို ထည့်သွင်းခြင်းဖြင့် ဤအကောင့်၏ဆက်တင်များကို စီမံနိုင်သည်။  ညွှန်ကြားချက်များကို သင့်ထံသို့ အီးမေးလ်နှင့် ပို့ထားပါသည်။</translation>
 <translation id="2040460856718599782">အိုး! သင့်အား စစ်မှန်ကြောင်း သက်သေပြုရန် ကြိုးပန်းစဉ် တစ်စုံတစ်ခု မှားယွင်းခဲ့သည်။ ကျေးဇူးပြု၍ သင်၏ ဝင်ရောက်မှု လုံခြုံရေးအချက်လက်များအား နှစ်ထပ်ပြန်လည်စစ်ဆေး၍ ထပ်မံကြိုးစားပါ။</translation>
+<translation id="2040894699575719559">တည်နေရာကို ပိတ်ပင်ထားသည်</translation>
 <translation id="2042279886444479655">သုံးနေသော ပရိုဖိုင်များ</translation>
 <translation id="2044014337866019681">စက်ရှင်ဖွင့်ရန် <ph name="ACCOUNT" /> ကို စိစစ်နေကြောင်း သေချာပါစေ။</translation>
 <translation id="204497730941176055">Microsoft အသိမှတ်ပြုလက်မှတ် ပုံစံ အမည်</translation>
@@ -1490,6 +1496,7 @@
 <translation id="2527167509808613699">မည်သည့် ချိတ်ဆက်မှု မဆို</translation>
 <translation id="2530166226437958497">ပြဿနာရှာဖွေဖြေရှင်းခြင်း</translation>
 <translation id="2532589005999780174">ဖြူမဲခြားနားချက် များသော မုဒ်</translation>
+<translation id="2533649878691950253">ပုံမှန်အားဖြင့် သင် ခွင့်ပြုလေ့မရှိသောကြောင့် ဤဝဘ်ဆိုက်အား သင့်တည်နေရာအတိအကျကို သိခွင့်မပြုခဲ့ပါ။</translation>
 <translation id="253434972992662860">&amp;ဆိုင်းငံ့</translation>
 <translation id="253557089021624350">Keepalive အရေအတွက်</translation>
 <translation id="2535799430745250929">ဆယ်လူလာကွန်ရက် မရှိပါ</translation>
@@ -1677,6 +1684,7 @@
 <translation id="2738771556149464852">နောက်မှ မဟုတ်ပါ</translation>
 <translation id="2739191690716947896">အမှားရှာပြင်ခြင်း</translation>
 <translation id="2739240477418971307">သင်၏ ရယူသုံးနိုင်မှု ဆက်တင်များကို ပြောင်းလဲရန်</translation>
+<translation id="2739965161385757621">ကျွန်ုပ်၏ဆက်တင်များကို စိစစ်ရန်</translation>
 <translation id="274029851662193272">စာလုံးချိုင့်</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">ပြန်လည်ရယူရေး တာမီနယ်ကို ဖွင့်ရန်</translation>
@@ -1801,6 +1809,7 @@
 <translation id="2864601841139725659">သင်၏ပရိုဖိုင်ပုံ သတ်မှတ်ပါ</translation>
 <translation id="2865919525181940183">ဖန်သားပြင်ပေါ်တွင် လက်ရှိဖွင့်ထားသော ပရိုဂရမ်များ၏ ဖန်သားပြင်ဓာတ်ပုံ</translation>
 <translation id="286674810810214575">ပါဝါအရင်းအမြစ်ကို စစ်ဆေးနေသည်...</translation>
+<translation id="2866876751734765554">ကိုယ်ရေးလုံခြုံမှု စိစစ်ခြင်း</translation>
 <translation id="2867768963760577682">ပင်တွဲထားသည့် တဲပ်အဖြစ် ဖွင့်ရန်</translation>
 <translation id="2868746137289129307">ဤ ပရိုဂရမ်အဆက် ခေတ်နောက်ကျနေပြီး  လုပ်ငန်းမူဝါဒမှလုပ်ဆောင်မှုအားရပ်တန့်ထားပြီဖြစ်သည်။ဗားရှင်းအသစ်ရရှိနိုင်ပါက ၄င်းအား အလိုလျောက်လုပ်ဆောင်လာပါလိမ့်မည်။</translation>
 <translation id="2870560284913253234">ဆိုက်</translation>
@@ -2330,6 +2339,7 @@
 <translation id="3446274660183028131">Windows ထည့်သွင်းရန် Parallels Desktop ကို ဖွင့်ပါ။</translation>
 <translation id="344630545793878684">ဝဘ်ဆိုက် တသီကြီးမှ သင်၏ ဒေတာကို ဖတ်ရန်</translation>
 <translation id="3446650212859500694">ဤဖိုင်တွင် သတိထားရသော အကြောင်းအရာ ပါဝင်သည်</translation>
+<translation id="3446827946208017735">အရေးအကြီးဆုံး ကန့်သတ်ဆက်တင်များကို တစ်နေရာထဲမှာပင် သိရှိနားလည်အောင်လုပ်ပြီး စိစစ်သုံးသပ်လိုက်ပါ</translation>
 <translation id="3448086340637592206">Google Chrome နှင့် Chrome OS နောက်ဆက်တွဲ စည်းမျဉ်းများ</translation>
 <translation id="3448492834076427715">အကောင့်ကို အပ်ဒိတ်လုပ်ရန်</translation>
 <translation id="3449393517661170867">တဘ်ဝင်းဒိုး အသစ်</translation>
@@ -3520,7 +3530,6 @@
 <translation id="4733793249294335256">တည်နေရာ</translation>
 <translation id="473546211690256853">ဒီအကောင့်ကို <ph name="DOMAIN" />မှ စီမံကွပ်ကဲသည်</translation>
 <translation id="4735803855089279419">စနစ်သည် ဤစက်ပစ္စည်းအတွက် စက်ပစ္စည်းသတ်မှတ်မှုစနစ်ကို ရယူ၍မရပါ။</translation>
-<translation id="473581466100273252">လတ်တလော ပိတ်ထားသည့် ထည့်သွင်းမှုများကို ပိတ်ဖွင့်လုပ်နိုင်သည်</translation>
 <translation id="4736292055110123391">သင့်စက်ပစ္စည်းများအားလုံးတွင် သင်၏ ဝဘ်လိပ်စာ၊ စကားဝှက်၊ မှတ်တမ်းနှင့် အခြားအရာများစွာတို့ကို စင့်ခ်လုပ်ပါ</translation>
 <translation id="473775607612524610">အပ်ဒိတ်လုပ်ရန်</translation>
 <translation id="473936925429402449">ရွေးထားသည်၊ <ph name="TOTAL_ELEMENTS" /> ခုအနက် အကြောင်းအရာအပို <ph name="CURRENT_ELEMENT" /></translation>
@@ -3673,7 +3682,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - တစ်ခုနှင့်တစ်ခု ထပ်ထားသည်</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> စမ်းသပ်မှုအတွက် စမ်းသပ်မှုအခြေအနေကို ရွေးပါ။</translation>
 <translation id="49027928311173603">ဆာဗာမှ ဒေါင်းလုပ်လုပ်ထားသည့် ပေါ်လစီသည် မမှန်ကန်ပါ: <ph name="VALIDATION_ERROR" />။</translation>
-<translation id="4905269543817054577">‘ရုပ်ဖျက်မုဒ်’ တွင် မှတ်တမ်းကို မသိမ်းပါ</translation>
 <translation id="4906490889887219338">ကွန်ရက် ဖိုင်မျှဝေမှုများကို စနစ်သတ်မှတ်ရန် သို့မဟုတ် စီမံရန်။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ဤဖိုင်ကို အများအားဖြင့် ဒေါင်းလုဒ်လုပ်လေ့ မရှိပါ။ အန္တရာယ်ရှိနိုင်ပါသည်။</translation>
 <translation id="4907306957610201395">ခွင့်ပြုချက် အမျိုးအစား</translation>
@@ -3759,6 +3767,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> VM မရှိပါ}=1{<ph name="VM_TYPE" /> VM 1 ခု တွေ့သည်-<ph name="VM_NAME_LIST" />}other{<ph name="VM_TYPE" /> VM {NUM_VMS} ခု တွေ့သည်- <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">အင်တာနက် ချိတ်ဆက်မှု မရှိပါ။</translation>
 <translation id="4998430619171209993">ဖွင့်ထားသည်</translation>
+<translation id="4999804342505941663">'မနှောင့်ယှက်ရ' ကို ဖွင့်ရန်</translation>
 <translation id="5000922062037820727">ပိတ်ဆို့ထား၏ (အကြံပြုထား)</translation>
 <translation id="5005498671520578047">စကားဝှက်ကို ကူးယူပါ</translation>
 <translation id="5006218871145547804">Crostini Android အက်ပ် ADB</translation>
@@ -5083,6 +5092,7 @@
 <translation id="6468485451923838994">ဖောင့်များ</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ဖိုင်</translation>
 <translation id="6469557521904094793">ဆယ်လူလာကွန်ရက် ဖွင့်ရန်</translation>
+<translation id="6470823736074966819">အကြောင်းကြားချက်များကို အသံပိတ်ထားရန်</translation>
 <translation id="6472893788822429178">မူလစာမျက်နှာ ခလုတ် ပြရန်</translation>
 <translation id="6474498546677193336">အပလီကေးရှင်းက ဤဖိုင်တွဲကို အသုံးပြုနေသဖြင့် မျှဝေမှု မလုပ်၍မရပါ။ နောင်တွင် Linux ပိတ်လိုက်သည့်အခါ ဖိုင်တွဲကို မျှဝေမှု မလုပ်တော့ပါ။</translation>
 <translation id="6474884162850599008">Google Drive အကောင့်နှင့် ချိတ်ဆက်မှု ဖြတ်တောက်ရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 2f0115a4..f24fbe6 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -3504,7 +3504,6 @@
 <translation id="4733793249294335256">स्थान</translation>
 <translation id="473546211690256853">यो खातालाई <ph name="DOMAIN" /> ले व्यवस्थित गरेको छ</translation>
 <translation id="4735803855089279419">प्रणालीले यो डिभाइसका यान्त्रिक पहिचानकर्ताहरू निर्धारण गर्न सकेन।</translation>
-<translation id="473581466100273252">हालसालै बन्द गरिएका प्रविष्टिहरू टगल गरिऊन्</translation>
 <translation id="4736292055110123391">तपाईंका सबै यन्त्रहरूमा तपाईंका पुस्तक चिन्ह, पासवर्ड, इतिहाससम्बन्धी जानकारी र थप कुराहरू सिंक गर्नुहोस्</translation>
 <translation id="473775607612524610">अपडेट गर्नुहोस्</translation>
 <translation id="473936925429402449">चयन गरियो, <ph name="TOTAL_ELEMENTS" /> वटा थप सामग्रीमध्ये <ph name="CURRENT_ELEMENT" /> औँ सामग्री</translation>
@@ -3657,7 +3656,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> हर्ज - इन्टरलेस गरिएको</translation>
 <translation id="4901309472892185668">परीक्षणको चरणमा रहेको <ph name="EXPERIMENT_NAME" /> नामक सुविधाको स्थिति चयन गर्नुहोस्।</translation>
 <translation id="49027928311173603">सर्भरबाट डाउनलोड गरिएको नीति अवैध छ: <ph name="VALIDATION_ERROR" /></translation>
-<translation id="4905269543817054577">इन्कोग्निटो मोडमा ब्राउज गर्दा इतिहास सेभ गरिँदैन</translation>
 <translation id="4906490889887219338">नेटवर्कको फाइल आदान प्रदान गर्ने कार्य सेटअप वा व्यवस्थापन गर्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">यो फाइल सामान्यत: डाउनलोड गरिँदैन र यो खतरनाक हुन सक्छ।</translation>
 <translation id="4907306957610201395">अनुमतिको कोटी</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index fca2799..3de76a0 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3516,7 +3516,6 @@
 <translation id="4733793249294335256">Locatie</translation>
 <translation id="473546211690256853">Dit account wordt beheerd door <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Het systeem kan de apparaat-ID's voor dit apparaat niet bepalen.</translation>
-<translation id="473581466100273252">Recent gesloten items tonen/verbergen</translation>
 <translation id="4736292055110123391">Je bookmarks, wachtwoorden, geschiedenis en meer synchroniseren op al je apparaten</translation>
 <translation id="473775607612524610">Updaten</translation>
 <translation id="473936925429402449">Geselecteerd, extra content <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3669,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - geïnterlinieerd</translation>
 <translation id="4901309472892185668">Selecteer de experimentstatus voor het experiment <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Het beleid dat van de server is gedownload, is ongeldig: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">De geschiedenis wordt niet opgeslagen in de incognitomodus</translation>
 <translation id="4906490889887219338">Fileshares via netwerk instellen of beheren. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Dit bestand wordt niet vaak gedownload en kan gevaarlijk zijn.</translation>
 <translation id="4907306957610201395">Rechtencategorie</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 9301b3d..60c7d33 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -3514,7 +3514,6 @@
 <translation id="4733793249294335256">Sted</translation>
 <translation id="473546211690256853">Denne kontoen administreres av <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Systemet kunne ikke fastslå enhetsidentifikatorer for denne enheten.</translation>
-<translation id="473581466100273252">Slå av/på nylig lukkede oppføringer</translation>
 <translation id="4736292055110123391">Synkroniser blant annet bokmerker, passord og loggen på alle enhetene dine</translation>
 <translation id="473775607612524610">Oppdater</translation>
 <translation id="473936925429402449">Valgt, ekstra innhold <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3667,7 +3666,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – linjefletting</translation>
 <translation id="4901309472892185668">Velg eksperimenttilstand for <ph name="EXPERIMENT_NAME" />-eksperimentet.</translation>
 <translation id="49027928311173603">Innstillingene som ble lastet ned fra tjeneren er ugyldige: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Loggen lagres ikke i Inkognito</translation>
 <translation id="4906490889887219338">Konfigurer eller administrer delte nettverksressurser. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Denne filen lastes sjelden ned, og den kan være farlig.</translation>
 <translation id="4907306957610201395">Tillatelseskategori</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index b351a6b..abe4463 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -3501,7 +3501,6 @@
 <translation id="4733793249294335256">ଲୋକେସନ୍</translation>
 <translation id="473546211690256853">ଏହି ଆକାଉଣ୍ଟ <ph name="DOMAIN" /> ଦ୍ଵାରା ପରିଚାଳିତ ହେଉଛି</translation>
 <translation id="4735803855089279419">ଏହି ଡିଭାଇସ୍ ପାଇଁ ଡିଭାଇସ୍ ଚିହ୍ନଟକାରୀ ନିର୍ଦ୍ଦିଷ୍ଟ କରିବାରେ ସିଷ୍ଟମ୍ ବିଫଳ ହୋଇଛି।</translation>
-<translation id="473581466100273252">ବର୍ତ୍ତମାନ ବନ୍ଦ କରାଯାଇଥିବା ଏଣ୍ଟ୍ରିଗୁଡ଼ିକୁ ଟୋଗଲ୍ କରନ୍ତୁ</translation>
 <translation id="4736292055110123391">ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସ୍‌ଗୁଡ଼ିକରେ ଆପଣଙ୍କ ବୁକ୍‌ମାର୍କ, ପାସ୍‌ୱର୍ଡ, ଇତିବୃତ୍ତି ଏବଂ ଆହୁରି ଅନେକ କିଛି ସିଙ୍କ୍‌ କରନ୍ତୁ</translation>
 <translation id="473775607612524610">ଅପ୍‍‍ଡେଟ୍</translation>
 <translation id="473936925429402449">ଚୟନ କରାଯାଇଛି, <ph name="TOTAL_ELEMENTS" />ଟିରୁ <ph name="CURRENT_ELEMENT" />ଟି ଅତିରିକ୍ତ ବିଷୟବସ୍ତୁ</translation>
@@ -3654,7 +3653,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ଇଣ୍ଟରଲେସ୍ ହୋଇଛି</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> ପରୀକ୍ଷଣ ପାଇଁ ପରୀକ୍ଷଣର ସ୍ଥିତି ଚୟନ କରନ୍ତୁ।</translation>
 <translation id="49027928311173603">ସର୍ଭର୍‌ରୁ ଡାଉନ୍‌ଲୋଡ୍ ହୋଇଥିବା ନୀତି ଅବୈଧ ଅଟେ: <ph name="VALIDATION_ERROR" />।</translation>
-<translation id="4905269543817054577">ଇନକଗ୍ନିଟୋ ମୋଡରେ ଇତିହାସ ସେଭ୍ ହୁଏ ନାହିଁ</translation>
 <translation id="4906490889887219338">ନେଟ୍‍ୱାର୍କ ଫାଇଲ୍ ସେୟାର୍ ସେଟ୍ ଅପ୍ କରନ୍ତୁ କିମ୍ବା ପରିଚାଳନା କରନ୍ତୁ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ଏହି ଫାଇଲ୍ ସାଧାରଣତଃ ଡାଉନ୍‌ଲୋଡ୍ କରାଯାଏ ନାହିଁ ଏବଂ ଏହା ହୁଏତ ବିପଜ୍ଜନକ ହୋଇଥାଇପାରେ।</translation>
 <translation id="4907306957610201395">ଅନୁମତି ବର୍ଗ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 8b7b0d69..ada6bf1 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -3519,7 +3519,6 @@
 <translation id="4733793249294335256">ਟਿਕਾਣਾ</translation>
 <translation id="473546211690256853">ਇਹ ਖਾਤਾ <ph name="DOMAIN" /> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="4735803855089279419">ਸਿਸਟਮ ਇਸ ਡੀਵਾਈਸ ਲਈ ਡੀਵਾਈਸ ਪਛਾਣਕਰਤਾਵਾਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ।</translation>
-<translation id="473581466100273252">ਹਾਲ ਹੀ ਵਿੱਚ ਬੰਦ ਕੀਤੇ ਇੰਦਰਾਜਾਂ ਨੂੰ ਟੌਗਲ ਕਰੋ</translation>
 <translation id="4736292055110123391">ਆਪਣੇ ਸਾਰੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਆਪਣੇ ਬੁੱਕਮਾਰਕ, ਪਾਸਵਰਡ, ਇਤਿਹਾਸ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਦਾ ਸਮਕਾਲੀਕਰਨ ਕਰੋ</translation>
 <translation id="473775607612524610">ਅੱਪਡੇਟ ਕਰੋ</translation>
 <translation id="473936925429402449">ਚੁਣੀ ਹੋਈ, ਵਾਧੂ ਸਮੱਗਰੀ ਦੇ <ph name="TOTAL_ELEMENTS" /> ਵਿੱਚੋਂ <ph name="CURRENT_ELEMENT" /></translation>
@@ -3672,7 +3671,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ਇੰਟਰਲੇਸਡ</translation>
 <translation id="4901309472892185668">ਪ੍ਰਯੋਗ <ph name="EXPERIMENT_NAME" /> ਲਈ, ਪ੍ਰਯੋਗ ਦੀ ਸਥਿਤੀ ਚੁਣੋ।</translation>
 <translation id="49027928311173603">ਸਰਵਰ ਤੋਂ ਡਾਊਨਲੋਡ ਕੀਤੀ ਨੀਤੀ ਅਵੈਧ ਹੈ: <ph name="VALIDATION_ERROR" />।</translation>
-<translation id="4905269543817054577">ਇਨਕੋਗਨਿਟੋ ਵਿੱਚ ਇਤਿਹਾਸ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ</translation>
 <translation id="4906490889887219338">'ਨੈੱਟਵਰਕ ਫ਼ਾਈਲ ਸਾਂਝਾਕਰਨ' ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ ਜਾਂ ਪ੍ਰਬੰਧਨ ਕਰੋ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ਇਹ ਫ਼ਾਈਲ ਆਮ ਕਰਕੇ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਇਹ ਖਤਰਨਾਕ ਹੋ ਸਕਦੀ ਹੈ।</translation>
 <translation id="4907306957610201395">ਇਜਾਜ਼ਤ ਸ਼੍ਰੇਣੀ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 13c51bc..fd9e7a8 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Zawsze tłumacz z języka: <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Zatrzymaj</translation>
 <translation id="1110155001042129815">Zaczekaj</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">Karta w tle używa Bluetootha</translation>
 <translation id="1113892970288677790">Wybierz wyselekcjonowane obrazy i zdjęcia</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -533,6 +534,7 @@
 <translation id="156793199942386351">Klawisz „<ph name="CURRENTKEY" />” jest już przypisany do czynności „<ph name="ACTION" />”. Naciśnij dowolny klawisz, aby <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Konsola JavaScript</translation>
 <translation id="1568323446248056064">Otwórz ustawienia wyświetlacza</translation>
+<translation id="1570604804919108255">Wyłącz wyciszenie powiadomień</translation>
 <translation id="1571738973904005196">Wyświetl kartę: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gość)</translation>
 <translation id="1572266655485775982">Włączanie Wi-Fi</translation>
@@ -590,6 +592,7 @@
 <translation id="1621485112342885423">Twoje koszyki</translation>
 <translation id="1621729191093924223">Nie będą działać funkcje, które potrzebują mikrofonu</translation>
 <translation id="1621831347985899379">Dane na urządzeniu <ph name="DEVICE_TYPE" /> zostaną usunięte</translation>
+<translation id="1621984899599015181">Opcjami udostępniania zarządza Twoja organizacja. Niektóre elementy mogą być ukryte.</translation>
 <translation id="1622054403950683339">Zapomnij sieć Wi-Fi</translation>
 <translation id="1623132449929929218">Obrazy są obecnie niedostępne. Aby zobaczyć kolekcje tapet, połącz się ponownie z internetem.</translation>
 <translation id="1623723619460186680">Redukcja niebieskiego światła</translation>
@@ -823,6 +826,7 @@
 <translation id="1850508293116537636">Obróć w &amp;prawo</translation>
 <translation id="1852141627593563189">Znajdź szkodliwe oprogramowanie</translation>
 <translation id="1852799913675865625">Wystąpił błąd podczas próby odczytu pliku: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Wracaj do ostatniego miejsca. Możesz tak skonfigurować aplikacje, aby zawsze były przywracane podczas uruchamiania, lub wyłączyć przywracanie w Ustawieniach.</translation>
 <translation id="1854180393107901205">Zatrzymaj przesyłanie</translation>
 <translation id="1855079636134697549">Kamera jest włączona</translation>
 <translation id="1856715684130786728">Dodaj lokalizację...</translation>
@@ -951,6 +955,7 @@
 <translation id="1989113344093894667">Nie można przechwytywać treści</translation>
 <translation id="1990046457226896323">Pliki z mową zostały pobrane</translation>
 <translation id="1990512225220753005">Nie wyświetlaj skrótów na tej stronie</translation>
+<translation id="199191324030140441">Wyłącz tryb Nie przeszkadzać</translation>
 <translation id="1992397118740194946">Nie ustawiono</translation>
 <translation id="1992924914582925289">Usuń z urządzenia</translation>
 <translation id="1994173015038366702">URL strony</translation>
@@ -992,6 +997,7 @@
 
 Możesz zarządzać ustawieniami konta, korzystając z aplikacji Family Link na swoim urządzeniu.  Wysłaliśmy do Ciebie e-maila z instrukcjami.</translation>
 <translation id="2040460856718599782">Ups, wystąpił błąd podczas próby uwierzytelnienia. Sprawdź poprawność danych logowania i spróbuj ponownie.</translation>
+<translation id="2040894699575719559">Lokalizacja zablokowana</translation>
 <translation id="2042279886444479655">Aktywne profile</translation>
 <translation id="2044014337866019681">Aby odblokować sesję, upewnij się, że potwierdzasz własność konta <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Nazwa szablonu certyfikatu firmy Microsoft</translation>
@@ -1475,6 +1481,7 @@
 <translation id="2527167509808613699">Dowolny rodzaj połączenia</translation>
 <translation id="2530166226437958497">Rozwiązywanie problemów</translation>
 <translation id="2532589005999780174">Tryb wysokiego kontrastu</translation>
+<translation id="2533649878691950253">Tej witrynie zablokowaliśmy możliwość sprawdzania Twojej dokładnej lokalizacji, bo zazwyczaj na to nie zezwalasz</translation>
 <translation id="253434972992662860">&amp;Wstrzymaj</translation>
 <translation id="253557089021624350">Liczba elementów wymuszających aktywność</translation>
 <translation id="2535799430745250929">Brak sieci komórkowej</translation>
@@ -1661,6 +1668,7 @@
 <translation id="2738771556149464852">Nie później niż</translation>
 <translation id="2739191690716947896">Debugowanie</translation>
 <translation id="2739240477418971307">Zmiana ustawień ułatwień dostępu</translation>
+<translation id="2739965161385757621">Sprawdź moje ustawienia</translation>
 <translation id="274029851662193272">Obniżony</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Otwórz terminal odzyskiwania</translation>
@@ -1785,6 +1793,7 @@
 <translation id="2864601841139725659">Ustawianie zdjęcia profilowego</translation>
 <translation id="2865919525181940183">Zrzut ekranu z widocznymi na nim teraz programami</translation>
 <translation id="286674810810214575">Sprawdzam źródła zasilania...</translation>
+<translation id="2866876751734765554">Sprawdzanie prywatności</translation>
 <translation id="2867768963760577682">Otwórz jako przypiętą kartę</translation>
 <translation id="2868746137289129307">To rozszerzenie jest nieaktualne i zostało wyłączone zgodnie z polityką firmy. Może zostać włączone automatycznie, gdy dostępna będzie nowa wersja.</translation>
 <translation id="2870560284913253234">Witryna</translation>
@@ -2314,6 +2323,7 @@
 <translation id="3446274660183028131">Włącz aplikację Parallels Desktop, by zainstalować system Windows.</translation>
 <translation id="344630545793878684">Odczyt Twoich danych na kilku stronach internetowych</translation>
 <translation id="3446650212859500694">Ten plik zawiera treści o charakterze kontrowersyjnym</translation>
+<translation id="3446827946208017735">Sprawdzaj najważniejsze ustawienia prywatności w 1 miejscu</translation>
 <translation id="3448086340637592206">Dodatkowe warunki korzystania z Google Chrome i Chrome OS</translation>
 <translation id="3448492834076427715">Aktualizuj konto</translation>
 <translation id="3449393517661170867">Nowe okno z kartami</translation>
@@ -3504,7 +3514,6 @@
 <translation id="4733793249294335256">Lokalizacja</translation>
 <translation id="473546211690256853">To konto jest zarządzane w domenie <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">System nie mógł określić identyfikatorów tego urządzenia.</translation>
-<translation id="473581466100273252">Przełącz ostatnio zamknięte wpisy</translation>
 <translation id="4736292055110123391">Synchronizuj zakładki, hasła, historię i inne dane na wszystkich Twoich urządzeniach</translation>
 <translation id="473775607612524610">Aktualizuj</translation>
 <translation id="473936925429402449">Zaznaczono, dodatkowy element zawartości (<ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" />)</translation>
@@ -3657,7 +3666,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – z przeplotem</translation>
 <translation id="4901309472892185668">Wybierz stan eksperymentu <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Polityka pobrana z serwera jest nieprawidłowa: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">W trybie incognito historia nie jest zapisywana</translation>
 <translation id="4906490889887219338">Skonfiguruj sieciowe udziały plików i zarządzaj nimi. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ten plik nie jest często pobierany i może być niebezpieczny.</translation>
 <translation id="4907306957610201395">Kategoria uprawnień</translation>
@@ -3743,6 +3751,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nie znaleziono maszyn wirtualnych typu <ph name="VM_TYPE" />}=1{Znaleziono 1 maszynę wirtualną typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}few{Znaleziono {NUM_VMS} maszyny wirtualne typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}many{Znaleziono {NUM_VMS} maszyn wirtualnych typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Znaleziono {NUM_VMS} maszyny wirtualnej typu <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Brak połączenia z internetem.</translation>
 <translation id="4998430619171209993">Włączono</translation>
+<translation id="4999804342505941663">Włącz tryb Nie przeszkadzać</translation>
 <translation id="5000922062037820727">Zablokowane (zalecane)</translation>
 <translation id="5005498671520578047">Skopiuj hasło</translation>
 <translation id="5006218871145547804">ADB aplikacji Crostini na Androida</translation>
@@ -5067,6 +5076,7 @@
 <translation id="6468485451923838994">Czcionki</translation>
 <translation id="6468773105221177474">Pliki: <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Włącz sieć komórkową</translation>
+<translation id="6470823736074966819">Ignoruj powiadomienia</translation>
 <translation id="6472893788822429178">Pokaż przycisk strony głównej</translation>
 <translation id="6474498546677193336">Nie udało się cofnąć udostępniania, ponieważ tego folderu używa aplikacja. Folder przestanie być udostępniany po zamknięciu Linuksa.</translation>
 <translation id="6474884162850599008">Odłącz konto na Dysku Google</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 3fb1e0f..8172164 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Sempre traduzir do <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Parar</translation>
 <translation id="1110155001042129815">Aguarde</translation>
+<translation id="1111781754511998498">Projector</translation>
 <translation id="1112420131909513020">A guia em segundo plano está usando o Bluetooth</translation>
 <translation id="1113892970288677790">Escolher obras de arte e imagens selecionadas</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -535,6 +536,7 @@
 <translation id="156793199942386351">A tecla "<ph name="CURRENTKEY" />" já foi atribuída à ação "<ph name="ACTION" />". Pressione qualquer tecla para <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568323446248056064">Abrir configurações de exibição do dispositivo</translation>
+<translation id="1570604804919108255">Ativar som das notificações</translation>
 <translation id="1571738973904005196">Ver guia: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (visitante)</translation>
 <translation id="1572266655485775982">Ativar Wi-Fi</translation>
@@ -592,6 +594,7 @@
 <translation id="1621485112342885423">Seus carrinhos</translation>
 <translation id="1621729191093924223">Recursos que precisam de microfone não funcionarão</translation>
 <translation id="1621831347985899379">Os dados do <ph name="DEVICE_TYPE" /> serão excluídos</translation>
+<translation id="1621984899599015181">As opções de compartilhamento são gerenciadas pela sua organização. Alguns itens podem estar ocultos.</translation>
 <translation id="1622054403950683339">Esquecer rede Wi-Fi</translation>
 <translation id="1623132449929929218">As imagens estão indisponíveis no momento. Reconecte-se à Internet para ver as coleções de plano de fundo.</translation>
 <translation id="1623723619460186680">Redução de luz azul</translation>
@@ -837,6 +840,7 @@
 <translation id="1850508293116537636">Girar no &amp;sentido horário</translation>
 <translation id="1852141627593563189">Encontrar software nocivo</translation>
 <translation id="1852799913675865625">Ocorreu um erro ao tentar ler o arquivo: <ph name="ERROR_TEXT" /></translation>
+<translation id="1854049213067042715">Continue de onde você parou. Nas Configurações, é possível definir ou desativar a restauração automática dos apps na inicialização.</translation>
 <translation id="1854180393107901205">Parar transmissão</translation>
 <translation id="1855079636134697549">A câmera está ativada</translation>
 <translation id="1856715684130786728">Adicionar local...</translation>
@@ -966,6 +970,7 @@
 <translation id="1989113344093894667">Não é possível fazer uma captura do conteúdo</translation>
 <translation id="1990046457226896323">Download de arquivos de fala concluído</translation>
 <translation id="1990512225220753005">Não mostrar atalhos nesta página</translation>
+<translation id="199191324030140441">Desativar o Não perturbe</translation>
 <translation id="1992397118740194946">Não definido</translation>
 <translation id="1992924914582925289">Remover do dispositivo</translation>
 <translation id="1994173015038366702">URL do site</translation>
@@ -1007,6 +1012,7 @@
 
 Para gerenciar as configurações dessa conta, instale o app Family Link no seu dispositivo.  Enviamos instruções para você por e-mail.</translation>
 <translation id="2040460856718599782">Epa! Ocorreu um erro na tentativa de autenticação. Verifique suas credenciais de login e tente novamente.</translation>
+<translation id="2040894699575719559">Acesso ao local bloqueado</translation>
 <translation id="2042279886444479655">Perfis ativos</translation>
 <translation id="2044014337866019681">Você precisa verificar a conta <ph name="ACCOUNT" /> para desbloquear a sessão.</translation>
 <translation id="204497730941176055">Nome do modelo de certificado da Microsoft</translation>
@@ -1493,6 +1499,7 @@
 <translation id="2527167509808613699">Qualquer tipo de conexão</translation>
 <translation id="2530166226437958497">Solução de problemas</translation>
 <translation id="2532589005999780174">Modo de alto contraste</translation>
+<translation id="2533649878691950253">Este site foi impedido de saber seu local exato porque você normalmente não permite esse acesso</translation>
 <translation id="253434972992662860">&amp;Pausar</translation>
 <translation id="253557089021624350">Contagem de manutenção de atividade</translation>
 <translation id="2535799430745250929">Não há nenhuma rede celular</translation>
@@ -1680,6 +1687,7 @@
 <translation id="2738771556149464852">Não depois</translation>
 <translation id="2739191690716947896">Depurar</translation>
 <translation id="2739240477418971307">Modificar suas configurações de acessibilidade</translation>
+<translation id="2739965161385757621">Revisar minhas configurações</translation>
 <translation id="274029851662193272">Baixo relevo</translation>
 <translation id="2740531572673183784">Ok</translation>
 <translation id="2741713322780029189">Abrir terminal de recuperação</translation>
@@ -1804,6 +1812,7 @@
 <translation id="2864601841139725659">Definir a foto do seu perfil</translation>
 <translation id="2865919525181940183">Captura de tela dos programas que estão em exibição</translation>
 <translation id="286674810810214575">Verificando fontes de energia…</translation>
+<translation id="2866876751734765554">Revisão de privacidade</translation>
 <translation id="2867768963760577682">Abrir como guia fixada</translation>
 <translation id="2868746137289129307">Esta extensão está desatualizada e desativada por uma política empresarial. Ela poderá ser ativada automaticamente quando uma versão recente estiver disponível.</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -2334,6 +2343,7 @@
 <translation id="3446274660183028131">Inicie o Parallels Desktop para instalar o Windows.</translation>
 <translation id="344630545793878684">Leia seus dados em uma série de websites</translation>
 <translation id="3446650212859500694">O arquivo tem conteúdo confidencial</translation>
+<translation id="3446827946208017735">Entenda e revise as configurações de privacidade mais importantes em um só lugar</translation>
 <translation id="3448086340637592206">Termos adicionais do Google Chrome e do Chrome OS</translation>
 <translation id="3448492834076427715">Atualizar conta</translation>
 <translation id="3449393517661170867">Nova janela com guias</translation>
@@ -3525,7 +3535,6 @@
 <translation id="4733793249294335256">Local</translation>
 <translation id="473546211690256853">Esta conta é gerenciada por <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Falha do sistema ao determinar os identificadores do dispositivo.</translation>
-<translation id="473581466100273252">Alternar entradas fechadas recentemente</translation>
 <translation id="4736292055110123391">Sincronize favoritos, senhas, histórico e muito mais em todos os seus dispositivos</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="473936925429402449">Selecionado, conteúdo extra <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3678,7 +3687,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelaçado)</translation>
 <translation id="4901309472892185668">Selecione um estado para o experimento <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">A política baixada do servidor é inválida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">O histórico não é salvo na navegação anônima</translation>
 <translation id="4906490889887219338">Configurar ou gerenciar compartilhamentos de arquivos em rede. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Esse arquivo não é transferido com frequência e pode ser perigoso.</translation>
 <translation id="4907306957610201395">Categoria de permissão</translation>
@@ -3764,6 +3772,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nenhuma VM <ph name="VM_TYPE" /> encontrada}=1{1 VM <ph name="VM_TYPE" /> encontrada: <ph name="VM_NAME_LIST" />}one{{NUM_VMS} VM <ph name="VM_TYPE" /> encontrada: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} VMs <ph name="VM_TYPE" /> encontradas: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Sem conexão com a Internet.</translation>
 <translation id="4998430619171209993">Ativado</translation>
+<translation id="4999804342505941663">Ativar o Não perturbe</translation>
 <translation id="5000922062037820727">Bloqueada (recomendado)</translation>
 <translation id="5005498671520578047">Copiar senha</translation>
 <translation id="5006218871145547804">ADB de apps Android no Crostini</translation>
@@ -5089,6 +5098,7 @@
 <translation id="6468485451923838994">Fontes</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> arquivos</translation>
 <translation id="6469557521904094793">Ativar rede celular</translation>
+<translation id="6470823736074966819">Desativar som das notificações</translation>
 <translation id="6472893788822429178">Mostrar botão "Página inicial"</translation>
 <translation id="6474498546677193336">Não foi possível cancelar o compartilhamento porque um aplicativo está usando a pasta. O compartilhamento da pasta será cancelado assim que o Linux for desligado.</translation>
 <translation id="6474884162850599008">Desconectar a conta do Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index e16c2b2b..d51fda52 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Traduzir sempre <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Parar</translation>
 <translation id="1110155001042129815">Esperar</translation>
+<translation id="1111781754511998498">Projetor</translation>
 <translation id="1112420131909513020">O separador em segundo plano está a utilizar o Bluetooth.</translation>
 <translation id="1113892970288677790">Selecione obras de arte e imagens organizadas.</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">A tecla "<ph name="CURRENTKEY" />" já está atribuída à ação "<ph name="ACTION" />". Prima qualquer tecla para <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Consola de JavaScript</translation>
 <translation id="1568323446248056064">Abrir definições do dispositivo de visualização</translation>
+<translation id="1570604804919108255">Reativar o som das notificações</translation>
 <translation id="1571738973904005196">Ver o separador: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (convidado)</translation>
 <translation id="1572266655485775982">Ativar Wi-Fi</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">Os seus carrinhos</translation>
 <translation id="1621729191093924223">As funcionalidades que precisam de um microfone não funcionam</translation>
 <translation id="1621831347985899379">Os dados do <ph name="DEVICE_TYPE" /> serão eliminados</translation>
+<translation id="1621984899599015181">As opções para partilhar são geridas pela sua entidade. Alguns itens podem estar ocultos.</translation>
 <translation id="1622054403950683339">Esquecer rede Wi-Fi</translation>
 <translation id="1623132449929929218">De momento, as imagens não estão disponíveis. Volte a estabelecer ligação à Internet para ver as coleções de imagens de fundo.</translation>
 <translation id="1623723619460186680">Redução da luz azul</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">Rodar para a &amp;direita</translation>
 <translation id="1852141627593563189">Procure software prejudicial</translation>
 <translation id="1852799913675865625">Ocorreu um erro ao tentar ler o ficheiro: <ph name="ERROR_TEXT" /></translation>
+<translation id="1854049213067042715">Continue a partir de onde parou. Pode definir as apps para serem sempre restauradas no arranque ou desativar o restauro nas Definições.</translation>
 <translation id="1854180393107901205">Parar de transmitir</translation>
 <translation id="1855079636134697549">A câmara está ativada.</translation>
 <translation id="1856715684130786728">Adicionar localização...</translation>
@@ -953,6 +957,7 @@
 <translation id="1989113344093894667">Não é possível capturar conteúdo</translation>
 <translation id="1990046457226896323">Ficheiros de voz transferidos.</translation>
 <translation id="1990512225220753005">Não mostre atalhos nesta página</translation>
+<translation id="199191324030140441">Desativar o modo Não incomodar</translation>
 <translation id="1992397118740194946">Não definida</translation>
 <translation id="1992924914582925289">Remover do dispositivo</translation>
 <translation id="1994173015038366702">URL do site</translation>
@@ -994,6 +999,7 @@
 
 Pode gerir as definições desta conta ao instalar a aplicação Family Link no seu dispositivo.  Enviámos-lhe instruções por email.</translation>
 <translation id="2040460856718599782">Ups! Ocorreu um erro ao tentar autenticá-lo. Verifique bem as suas credenciais de início de sessão e tente novamente.</translation>
+<translation id="2040894699575719559">Localização bloqueada</translation>
 <translation id="2042279886444479655">Perfis ativos</translation>
 <translation id="2044014337866019681">Certifique-se de que está a validar a conta <ph name="ACCOUNT" /> para desbloquear a sessão.</translation>
 <translation id="204497730941176055">Nome do modelo de certificado Microsoft</translation>
@@ -1477,6 +1483,7 @@
 <translation id="2527167509808613699">Qualquer tipo de ligação</translation>
 <translation id="2530166226437958497">Resolução de problemas</translation>
 <translation id="2532589005999780174">Modo de alto contraste</translation>
+<translation id="2533649878691950253">Este site foi impedido de saber a sua localização exata porque, normalmente, não concede esta autorização</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="253557089021624350">Contagem keepalive</translation>
 <translation id="2535799430745250929">Não existe nenhuma rede móvel.</translation>
@@ -1664,6 +1671,7 @@
 <translation id="2738771556149464852">Não posterior a</translation>
 <translation id="2739191690716947896">Depurar</translation>
 <translation id="2739240477418971307">Alterar as definições de acessibilidade</translation>
+<translation id="2739965161385757621">Analisar definições</translation>
 <translation id="274029851662193272">Reduzida</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Abrir terminal de recuperação</translation>
@@ -1788,6 +1796,7 @@
 <translation id="2864601841139725659">Definir a sua imagem do perfil</translation>
 <translation id="2865919525181940183">Captura de ecrã dos programas atualmente no ecrã</translation>
 <translation id="286674810810214575">A verificar as fontes alimentação…</translation>
+<translation id="2866876751734765554">Análise da privacidade</translation>
 <translation id="2867768963760577682">Abrir como Separador Fixo</translation>
 <translation id="2868746137289129307">Esta extensão está desatualizada e foi desativada por uma política empresarial; pode ser ativada automaticamente quando estiver disponível uma versão mais recente.</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -2318,6 +2327,7 @@
 <translation id="3446274660183028131">Inicie o Parallels Desktop para instalar o Windows.</translation>
 <translation id="344630545793878684">Ler os seus dados em vários Sites</translation>
 <translation id="3446650212859500694">Este ficheiro tem conteúdo sensível</translation>
+<translation id="3446827946208017735">Compreenda e analise as definições de privacidade mais críticas num único local</translation>
 <translation id="3448086340637592206">Termos Adicionais do Google Chrome e do Chrome OS</translation>
 <translation id="3448492834076427715">Atualizar conta</translation>
 <translation id="3449393517661170867">Nova janela com separadores</translation>
@@ -3508,7 +3518,6 @@
 <translation id="4733793249294335256">Local</translation>
 <translation id="473546211690256853">Esta conta é gerida por <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">O sistema não conseguiu determinar identificadores de dispositivos para este dispositivo.</translation>
-<translation id="473581466100273252">Ativar/desativar entradas fechadas recentemente</translation>
 <translation id="4736292055110123391">Sincronizar os seus marcadores, palavras-passe, histórico e muito mais em todos os seus dispositivos</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="473936925429402449">Selecionado, conteúdo adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3661,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – entrelaçado</translation>
 <translation id="4901309472892185668">Selecione o estado da experiência <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">A política transferida do servidor é inválida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">O histórico não é guardado na Navegação anónima</translation>
 <translation id="4906490889887219338">Configure ou efetue a gestão de partilhas de ficheiros na rede. <ph name="LINK_BEGIN" />Saber mais<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Este ficheiro não é habitualmente transferido e pode ser perigoso.</translation>
 <translation id="4907306957610201395">Categoria de autorizações</translation>
@@ -3747,6 +3755,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nenhuma VM <ph name="VM_TYPE" /> encontrada}=1{1 VM <ph name="VM_TYPE" /> encontrada: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} VMs <ph name="VM_TYPE" /> encontradas: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Sem ligação à Internet.</translation>
 <translation id="4998430619171209993">Ativado</translation>
+<translation id="4999804342505941663">Ativar o modo Não incomodar</translation>
 <translation id="5000922062037820727">Bloqueado (recomendado)</translation>
 <translation id="5005498671520578047">Copiar palavra-passe</translation>
 <translation id="5006218871145547804">ADB de apps Android do Crostini</translation>
@@ -5072,6 +5081,7 @@
 <translation id="6468485451923838994">Tipos de letra</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ficheiros</translation>
 <translation id="6469557521904094793">Ligar rede móvel</translation>
+<translation id="6470823736074966819">Desativar o som das notificações</translation>
 <translation id="6472893788822429178">Mostrar botão Página Inicial</translation>
 <translation id="6474498546677193336">Não foi possível cancelar a partilha porque uma aplicação está a utilizar esta pasta. Será cancelada a partilha da pasta quando o Linux for encerrado.</translation>
 <translation id="6474884162850599008">Desligar a conta do Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 7d43b098..9baf2e6 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -3518,7 +3518,6 @@
 <translation id="4733793249294335256">Locație</translation>
 <translation id="473546211690256853">Acest cont este administrat de <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistemul nu a stabilit identificatorii de dispozitiv pentru acest dispozitiv.</translation>
-<translation id="473581466100273252">Activează / dezactivează intrările închise recent</translation>
 <translation id="4736292055110123391">Sincronizează marcajele, parolele, istoricul și alte date, pe toate dispozitivele</translation>
 <translation id="473775607612524610">Actualizează</translation>
 <translation id="473936925429402449">Selectat, conținutul suplimentar <ph name="CURRENT_ELEMENT" /> din <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3671,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – intercalat</translation>
 <translation id="4901309472892185668">Selectează starea experimentului pentru experimentul <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Politica descărcată de pe server este nevalidă: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Istoricul nu este salvat în modul incognito</translation>
 <translation id="4906490889887219338">Configurează sau gestionează spații comune de stocare în rețea. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Acest fișier nu este descărcat de obicei și ar putea fi periculos.</translation>
 <translation id="4907306957610201395">Categoria de permisiuni</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index fc1be1f8..0c24656 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3508,7 +3508,6 @@
 <translation id="4733793249294335256">Папка</translation>
 <translation id="473546211690256853">Этот аккаунт находится в домене <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Не удалось определить идентификаторы устройства.</translation>
-<translation id="473581466100273252">Показать или скрыть последние закрытые записи</translation>
 <translation id="4736292055110123391">Синхронизируйте закладки, пароли, историю и другие данные на всех ваших устройствах</translation>
 <translation id="473775607612524610">Обновить</translation>
 <translation id="473936925429402449">Выбрано, показан дополнительный контент на карточке <ph name="CURRENT_ELEMENT" /> из <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3661,7 +3660,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц – чересстрочная развертка</translation>
 <translation id="4901309472892185668">Выберите статус для эксперимента "<ph name="EXPERIMENT_NAME" />".</translation>
 <translation id="49027928311173603">Скачанная с сервера политика недействительна: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">История не сохраняется</translation>
 <translation id="4906490889887219338">Настройте общие папки сети. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Этот файл скачивают редко. Возможно, он вредоносный.</translation>
 <translation id="4907306957610201395">Категория разрешения</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 2fc6c85..962ee994 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">සැමවිටම <ph name="LANGUAGE" /> පරිවර්තනය කරන්න</translation>
 <translation id="1108600514891325577">නවත්වන්න</translation>
 <translation id="1110155001042129815">රැඳී සිටින්න</translation>
+<translation id="1111781754511998498">ප්‍රක්ෂේපකය</translation>
 <translation id="1112420131909513020">පසුබිම් පටිත්ත බ්ලූටූත් භාවිතා කරයි</translation>
 <translation id="1113892970288677790">තේරූ කලා නිර්මාණ සහ රූප තෝරන්න</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">'<ph name="CURRENTKEY" />' දැනටමත් '<ph name="ACTION" />' ක්‍රියාව වෙත පවරා ඇත. <ph name="RESPONSE" />ට ඕනෑම යතුරක් ඔබන්න.</translation>
 <translation id="1567993339577891801">JavaScript කොන්සෝලය</translation>
 <translation id="1568323446248056064">සංදර්ශක උපාංග සැකසීම් විවෘත කරන්න</translation>
+<translation id="1570604804919108255">දැනුම්දීම් නිහඬ කිරීම ඉවත් කරන්න</translation>
 <translation id="1571738973904005196">ටැබය බලන්න: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (අමුත්තා)</translation>
 <translation id="1572266655485775982">Wi-Fi සබල කිරීම</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">ඔබගේ සාප්පු කරත්ත</translation>
 <translation id="1621729191093924223">මයික්‍රෆෝනයක් අවශ්‍ය විශේෂාංග ක්‍රියා නොකරනු ඇත</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> දත්ත මකනු ඇත</translation>
+<translation id="1621984899599015181">බෙදා ගැනීම සඳහා වූ විකල්ප ඔබගේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ. සමහර අයිතම සඟවා තිබිය හැකිය.</translation>
 <translation id="1622054403950683339">Wi-Fi ජාලය අමතක කරන්න</translation>
 <translation id="1623132449929929218">පින්තූර දැනට ලබා ගත නොහැක. වෝල්පේපර් එකතු බැලීමට කරණාකර අන්තර්ජාලයට සම්බන්ධ වන්න.</translation>
 <translation id="1623723619460186680">නිල් ආලෝකය අඩු කිරීම</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">දක්ෂිණාවර්ථව කරකවන්න (&amp;c)</translation>
 <translation id="1852141627593563189">හානිකර මෘදුකාංග සොයන්න</translation>
 <translation id="1852799913675865625">මෙම ගොනුව කියවීමේ දෝශයක් ඇතිවිය: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">ඔබ නතර කළ තැන සිට ඉදිරියට යයන්න. ආරම්භයේදී සැම විටම ප්‍රතිසාධනය කිරීමට හෝ සැකසීම් තුළ ප්‍රතිසාධන ක්‍රියාවලිය ක්‍රියාවිරහිත කිරීමට ඔබට යෙදුම් සැකසිය හැකිය.</translation>
 <translation id="1854180393107901205">Cast කිරීම නවත්වන්න</translation>
 <translation id="1855079636134697549">කැමරාව ක්‍රියාත්මකයි</translation>
 <translation id="1856715684130786728">ස්ථානය එක් කරන්න...</translation>
@@ -954,6 +958,7 @@
 <translation id="1989113344093894667">අන්තර්ගතය ග්‍රහණය කළ නොහැකිය</translation>
 <translation id="1990046457226896323">කථන ගොනු බාගන්නා ලදී</translation>
 <translation id="1990512225220753005">මෙම පිටුව මත කෙටිමං නොපෙන්වන්න</translation>
+<translation id="199191324030140441">බාධා නොකිරීම ක්‍රියාවිරහිත කරන්න</translation>
 <translation id="1992397118740194946">සකසා නොමැත</translation>
 <translation id="1992924914582925289">උපාංගයෙන් ඉවත් කරන්න</translation>
 <translation id="1994173015038366702">අඩවි URL</translation>
@@ -995,6 +1000,7 @@
 
 ඔබට ඔබේ උපාංගය මත Family Link යෙදුම ස්ථාපන කිරීමෙන්, මෙම ගිණුමේ සැකසීම් කළමනා කළ හැක.  අපි ඔබට ඉ-තැපෑලකින් උපදෙස් යැවුවෙමු.</translation>
 <translation id="2040460856718599782">අහෝ! ඔබට අවසරදීමේදී ගැටළුවක් ඇති විය. ඔබේ පිවිසුම් තොරතුරු දෙවරක් පිරික්සා නැවත උත්සහ කරන්න.</translation>
+<translation id="2040894699575719559">ස්ථානය අවහිර කර ඇත</translation>
 <translation id="2042279886444479655">සක්‍රිය පැතිකඩවල්</translation>
 <translation id="2044014337866019681">සැසිය අගුලු හැරීමට ඔබ <ph name="ACCOUNT" /> සත්‍යාපනය කරන බවට සහතික කර ගන්න.</translation>
 <translation id="204497730941176055">Microsoft සහතික ආකෘති නාමය</translation>
@@ -1481,6 +1487,7 @@
 <translation id="2527167509808613699">කිසියම් ආකාරයක සම්බන්ධය</translation>
 <translation id="2530166226437958497">දෝෂාවේක්ෂය</translation>
 <translation id="2532589005999780174">අධි අසමානතා ප්‍රකාරය</translation>
+<translation id="2533649878691950253">ඔබ සාමාන්‍යයෙන් මෙයට ඉඩ නොදෙන නිසා ඔබගේ ඉතා නිවැරදි ස්ථානය දැන ගැනීමෙන් මෙම අඩවිය අවහිර කර ඇත</translation>
 <translation id="253434972992662860">විරාමය (&amp;P)</translation>
 <translation id="253557089021624350">Keepalive ගණන</translation>
 <translation id="2535799430745250929">සෙලියුලර් ජාල කිසිවක් නොපවතියි</translation>
@@ -1667,6 +1674,7 @@
 <translation id="2738771556149464852">පසුව නොවේ</translation>
 <translation id="2739191690716947896">නිදොස් කිරීම</translation>
 <translation id="2739240477418971307">ඔබගේ ප්‍රවේශ්‍යතා සැකසුම් වෙනස් කරන්න</translation>
+<translation id="2739965161385757621">මගේ සැකසීම් සමාලෝචනය කරන්න</translation>
 <translation id="274029851662193272">අවපාත කළ</translation>
 <translation id="2740531572673183784">හරි</translation>
 <translation id="2741713322780029189">ප්‍රතිසාධන පර්යන්තය විවෘතයි</translation>
@@ -1791,6 +1799,7 @@
 <translation id="2864601841139725659">ඔබගේ පැතිකඩ පින්තූරය සකසන්න</translation>
 <translation id="2865919525181940183">දැනට තිරයේ ඇති වැඩසටහන්වල තිර රුව</translation>
 <translation id="286674810810214575">බල මූලාශ්‍ර පරීක්‍ෂා කෙරේ...</translation>
+<translation id="2866876751734765554">පෞද්ගලිකත්ව සමාලෝචනය</translation>
 <translation id="2867768963760577682">ඇමිණූ ටැබයක් ලෙස විවෘත කරන්න</translation>
 <translation id="2868746137289129307">මෙම දිගුව පැරණි හා ව්‍යවසාය ප්‍රතිපත්තිය මගින් අක්‍රීය කර ඇත. එය නව සංස්කරණයක් පවතින විට නැවත සක්‍රීය වනු ඇත.</translation>
 <translation id="2870560284913253234">අඩවිය</translation>
@@ -2320,6 +2329,7 @@
 <translation id="3446274660183028131">Windows ස්ථාපනය කිරීමට කරුණාකර Parallels Desktop දියත් කරන්න.</translation>
 <translation id="344630545793878684">වෙබ අඩවි විශාල ගණනක ඔබගේ දත්ත කියවන්න</translation>
 <translation id="3446650212859500694">මෙම ගොනුවේ සංවේදී අන්තර්ගතය ඇත</translation>
+<translation id="3446827946208017735">එක් ස්ථානයක් තුළදී ඉතාම තීරණාත්මක පෞද්ගලිකත්ව සැකසීම් වටහා ගන්න සහ සමාලෝචනය කරන්න</translation>
 <translation id="3448086340637592206">Google Chrome සහ Chrome OS අතිරේක නියම</translation>
 <translation id="3448492834076427715">ගිණුම යාවත්කාලීන කරන්න</translation>
 <translation id="3449393517661170867">නව පටිති කවුළුව</translation>
@@ -3511,7 +3521,6 @@
 <translation id="4733793249294335256">ස්ථානය</translation>
 <translation id="473546211690256853">මෙම ගිනුම පාලනය වන්නේ <ph name="DOMAIN" /> නි</translation>
 <translation id="4735803855089279419">මෙම උපාංගය සඳහා උපාංගයේ හැඳුනුම් තීරණ කිරීමට පද්ධතියට නොහැකි විය.</translation>
-<translation id="473581466100273252">මෑතකදී වැසූ ඇතුළත් කිරීම් ටොගල කරන්න</translation>
 <translation id="4736292055110123391">ඔබේ සියලු උපාංගවල ඔබේ පිටුසන්, මුරපද, ඉතිහාසය සහ තවත් බොහෝ දේ සමමුහුර්ත කරන්න</translation>
 <translation id="473775607612524610">යාවත්කාලීනය</translation>
 <translation id="473936925429402449">තෝරන ලදි, <ph name="TOTAL_ELEMENTS" />කින් <ph name="CURRENT_ELEMENT" /> අමතර අන්තර්ගතය</translation>
@@ -3664,7 +3673,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - එකිනෙකට ගොතන ලද</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> අත්හදා බැලීම සඳහා අත්හදා බැලීමේ තත්ත්වය තෝරන්න.</translation>
 <translation id="49027928311173603">සේවාදායකයෙන් බාගත් ප්‍රතිපත්තිය අවලංගුයි: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">ඉතිහාසය අප්‍රසිද්ධ ප්‍රකාරයේදී සුරකිනු නොලැබේ.</translation>
 <translation id="4906490889887219338">ජාල ගොනු බෙදා ගැනීම් සකසන්න කළමනා කරන්න. <ph name="LINK_BEGIN" />තවත් දැන ගන්න<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">මෙම ගොනුව සුලබව බාගැනීම සිදු නොකරන අතර අනතුරුදායක විය හැක.</translation>
 <translation id="4907306957610201395">අවසර ප්‍රවර්ගය</translation>
@@ -3750,6 +3758,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> VM හමු නොවීය}=1{<ph name="VM_TYPE" /> VM 1ක් හමු විය: <ph name="VM_NAME_LIST" />}one{<ph name="VM_TYPE" /> VM {NUM_VMS}ක් හමු විය: <ph name="VM_NAME_LIST" />}other{<ph name="VM_TYPE" /> VM {NUM_VMS}ක් හමු විය: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">අන්තර්ජාල සබැඳුමක් නැත.</translation>
 <translation id="4998430619171209993">ක්‍රියාත්මකයි</translation>
+<translation id="4999804342505941663">බාධා නොකිරීම ක්‍රියාත්මක කරන්න</translation>
 <translation id="5000922062037820727">අවහිරයි (නිර්දේශිතයි)</translation>
 <translation id="5005498671520578047">මුරපදය පිටපත් කරන්න</translation>
 <translation id="5006218871145547804">Crostini Android යෙදුම් ADB</translation>
@@ -5075,6 +5084,7 @@
 <translation id="6468485451923838994">අකුරු</translation>
 <translation id="6468773105221177474">ගොනු <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">සෙලියුලර් ජාලය සක්‍රීය කරන්න</translation>
+<translation id="6470823736074966819">දැනුම්දීම් නිහඬ කරන්න</translation>
 <translation id="6472893788822429178">මුල්පිටු බොත්තම පෙන්වන්න</translation>
 <translation id="6474498546677193336">යෙදුමක් මෙම ෆෝල්ඩරය භාවිත කරන බැවින් බෙදා නොගත නොහැකි විය. ලිනක්ස් මීළඟ වරට වසා දැමෙන විට ෆෝල්ඩරය බෙදා නොගැනේ.</translation>
 <translation id="6474884162850599008">Google Drive ගිණුම විසන්ධි කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 8e664a7..4c4eec6e 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314">Vždy preložiť nasledujúci jazyk: <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Zastaviť</translation>
 <translation id="1110155001042129815">Čakajte, prosím.</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">Karta na pozadí používa Bluetooth</translation>
 <translation id="1113892970288677790">Vyberte plagáty a obrázky</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -533,6 +534,7 @@
 <translation id="156793199942386351">Kláves <ph name="CURRENTKEY" /> je už pridelený k akcii <ph name="ACTION" />. Ak chcete <ph name="RESPONSE" />, stlačte ľubovoľný kláves.</translation>
 <translation id="1567993339577891801">Konzola JavaScript</translation>
 <translation id="1568323446248056064">Otvoriť nastavenia obrazovky</translation>
+<translation id="1570604804919108255">Zapnúť zvuk upozornení</translation>
 <translation id="1571738973904005196">Zobraziť kartu <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (hosť)</translation>
 <translation id="1572266655485775982">Povolenie Wi‑Fi</translation>
@@ -590,6 +592,7 @@
 <translation id="1621485112342885423">Vaše košíky</translation>
 <translation id="1621729191093924223">Funkcie vyžadujúce mikrofón nebudú fungovať</translation>
 <translation id="1621831347985899379">Údaje zariadenia <ph name="DEVICE_TYPE" /> budú odstránené</translation>
+<translation id="1621984899599015181">Možnosti zdieľania spravuje vaša organizácia. Niektoré položky môžu byť skryté.</translation>
 <translation id="1622054403950683339">Zabudnúť sieť Wi‑Fi</translation>
 <translation id="1623132449929929218">Obrázky sú momentálne nedostupné. Ak chcete zobraziť zbierky tapiet, pripojte sa znova k internetu.</translation>
 <translation id="1623723619460186680">Zníženie intenzity modrého svetla</translation>
@@ -827,6 +830,7 @@
 <translation id="1850508293116537636">Otočiť &amp;v smere hodinových ručičiek</translation>
 <translation id="1852141627593563189">Vyhľadať škodlivý softvér</translation>
 <translation id="1852799913675865625">Pri čítaní súboru sa vyskytla chyba: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Pokračujte, kde ste prestali. V Nastaveniach môžete nastaviť, aby sa aplikácie pri spustení vždy obnovovali, alebo obnovovanie vypnúť.</translation>
 <translation id="1854180393107901205">Zastaviť prenášanie</translation>
 <translation id="1855079636134697549">Kamera je zapnutá</translation>
 <translation id="1856715684130786728">Pridať umiestnenie...</translation>
@@ -955,6 +959,7 @@
 <translation id="1989113344093894667">Obsah nie je možné nasnímať</translation>
 <translation id="1990046457226896323">Súbory s balíkmi reči boli stiahnuté</translation>
 <translation id="1990512225220753005">Nezobrazovať skratky na tejto stránke</translation>
+<translation id="199191324030140441">Vypnúť režim bez vyrušení</translation>
 <translation id="1992397118740194946">Nie je nastavené</translation>
 <translation id="1992924914582925289">Odstrániť zo zariadenia</translation>
 <translation id="1994173015038366702">Webová adresa</translation>
@@ -996,6 +1001,7 @@
 
 Ak chcete spravovať nastavenia tohto účtu, nainštalujte si do zariadenia aplikáciu Family Link.  Pokyny sme vám odoslali e‑mailom.</translation>
 <translation id="2040460856718599782">Hops, pri overovaní vašej totožnosti sa vyskytla chyba. Skontrolujte znova svoje prihlasovacie údaje a skúste to znova.</translation>
+<translation id="2040894699575719559">Poloha je blokovaná</translation>
 <translation id="2042279886444479655">Aktívne profily</translation>
 <translation id="2044014337866019681">Ak chcete túto reláciu odblokovať, overte účet <ph name="ACCOUNT" />.</translation>
 <translation id="204497730941176055">Názov šablóny certifikátu od spoločnosti Microsoft</translation>
@@ -1479,6 +1485,7 @@
 <translation id="2527167509808613699">Ľubovoľný typ pripojenia</translation>
 <translation id="2530166226437958497">Riešenie problémov</translation>
 <translation id="2532589005999780174">Režim s vysokým kontrastom</translation>
+<translation id="2533649878691950253">Vaša presná poloha je pre tento web blokovaná, pretože ju zvyčajne nepovoľujete</translation>
 <translation id="253434972992662860">&amp;Pozastaviť</translation>
 <translation id="253557089021624350">Počet akcií zabraňujúcich ukončeniu</translation>
 <translation id="2535799430745250929">Neexistuje žiadna mobilná sieť</translation>
@@ -1666,6 +1673,7 @@
 <translation id="2738771556149464852">Nie po</translation>
 <translation id="2739191690716947896">Ladiť</translation>
 <translation id="2739240477418971307">Zmeniť nastavenia dostupnosti</translation>
+<translation id="2739965161385757621">Skontrolovať nastavenia</translation>
 <translation id="274029851662193272">Rytina</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Otvoriť terminál obnovenia</translation>
@@ -1790,6 +1798,7 @@
 <translation id="2864601841139725659">Nastavte si profilovú fotku</translation>
 <translation id="2865919525181940183">Snímky programov, ktoré sú momentálne na obrazovke</translation>
 <translation id="286674810810214575">Kontrolujú sa zdroje napájania…</translation>
+<translation id="2866876751734765554">Kontrola ochrany súkromia</translation>
 <translation id="2867768963760577682">Otvoriť ako pevnú kartu</translation>
 <translation id="2868746137289129307">Toto rozšírenie je zastarané a je zakázané podnikovým pravidlom. Možno bude opäť automaticky povolené, keď bude k dispozícii novšia verzia.</translation>
 <translation id="2870560284913253234">Web</translation>
@@ -2319,6 +2328,7 @@
 <translation id="3446274660183028131">Spustite Parallels Desktop a nainštalujte tak Windows.</translation>
 <translation id="344630545793878684">Čítať vaše údaje na viacerých webových stránkach</translation>
 <translation id="3446650212859500694">Tento súbor má citlivý obsah</translation>
+<translation id="3446827946208017735">Porozumejte najdôležitejším nastaveniam ochrany súkromia a skontrolujte ich na jednom mieste</translation>
 <translation id="3448086340637592206">Doplňujúce zmluvné podmienky prehliadača Google Chrome a systému Chrome OS</translation>
 <translation id="3448492834076427715">Aktualizovať účet</translation>
 <translation id="3449393517661170867">Nové okno s kartami</translation>
@@ -3509,7 +3519,6 @@
 <translation id="4733793249294335256">Umiestnenie</translation>
 <translation id="473546211690256853">Tento účet spravuje doména <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Systém nedokázal rozpoznať identifikátory tohto zariadenia.</translation>
-<translation id="473581466100273252">Prepnúť nedávno zavreté záznamy</translation>
 <translation id="4736292055110123391">Synchronizujte svoje záložky, heslá, históriu a ďalší obsah vo všetkých zariadeniach</translation>
 <translation id="473775607612524610">Aktualizovať</translation>
 <translation id="473936925429402449">Vybrané, ďalší obsah, <ph name="CURRENT_ELEMENT" />. prvok z <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3662,7 +3671,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz –prekladané</translation>
 <translation id="4901309472892185668">Vyberte stav experimentu <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Pravidlo stiahnuté zo servera je neplatné: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">V režime inkognito sa história neukladá</translation>
 <translation id="4906490889887219338">Nastaviť alebo spravovať sieťové zdieľané úložiská. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Tento súbor sa bežne nesťahuje a môže byť nebezpečný.</translation>
 <translation id="4907306957610201395">Kategória povolení</translation>
@@ -3748,6 +3756,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Nebol nájdený žiadny virtuálny počítač <ph name="VM_TYPE" />}=1{1 <ph name="VM_TYPE" /> VM found: <ph name="VM_NAME_LIST" />}few{Boli nájdené {NUM_VMS} virtuálne počítače <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}many{{NUM_VMS} <ph name="VM_TYPE" /> VMs found: <ph name="VM_NAME_LIST" />}other{Bolo nájdených {NUM_VMS} virtuálnych počítačov <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Žiadne internetové pripojenie.</translation>
 <translation id="4998430619171209993">Zapnuté</translation>
+<translation id="4999804342505941663">Zapnúť režim bez vyrušení</translation>
 <translation id="5000922062037820727">Blokované (odporúčané)</translation>
 <translation id="5005498671520578047">Kopírovanie hesla</translation>
 <translation id="5006218871145547804">ADB aplikácií pre Android v systéme Crostini</translation>
@@ -5072,6 +5081,7 @@
 <translation id="6468485451923838994">Písma</translation>
 <translation id="6468773105221177474">Počet súborov: <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Zapnúť mobilnú sieť</translation>
+<translation id="6470823736074966819">Vypnúť zvuk upozornení</translation>
 <translation id="6472893788822429178">Zobraziť tlačidlo Domovskej stránky</translation>
 <translation id="6474498546677193336">Zdieľanie sa nepodarilo zrušiť, pretože tento priečinok používa nejaká aplikácia. Jeho zdieľanie bude zrušené po ďalšom vypnutí systému Linux.</translation>
 <translation id="6474884162850599008">Odpojiť účet služby Disk Google</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 8177342..265b25a 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3536,7 +3536,6 @@
 <translation id="4733793249294335256">Lokacija</translation>
 <translation id="473546211690256853">Ta račun upravlja domena <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistemu ni uspelo določiti identifikatorjev naprave za to napravo.</translation>
-<translation id="473581466100273252">Preklopi nedavno zaprte vnose</translation>
 <translation id="4736292055110123391">Sinhronizirajte zaznamke, gesla, zgodovino in druge podatke v vseh vaših napravah</translation>
 <translation id="473775607612524610">Posodobi</translation>
 <translation id="473936925429402449">Izbrano, element dodatne vsebine št. <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3689,7 +3688,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – prepleteno</translation>
 <translation id="4901309472892185668">Izberite stanje preizkusa za preizkus <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Pravilnik, prenesen iz strežnika, ni veljaven: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Zgodovina se v anonimnem načinu ne shranjuje</translation>
 <translation id="4906490889887219338">Nastavitev ali upravljanje omrežnih datotečnih sredstev v skupni rabi. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Datoteka ni pogosto prenesena in je lahko nevarna.</translation>
 <translation id="4907306957610201395">Kategorija dovoljenj</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 3a9ad32..7733cbc 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -3504,7 +3504,6 @@
 <translation id="4733793249294335256">Vendndodhja</translation>
 <translation id="473546211690256853">Kjo llogari menaxhohet nga <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Sistemi nuk arriti të përcaktonte identifikuesit e pajisjeve për këtë pajisje.</translation>
-<translation id="473581466100273252">Aktivizo/çaktivizo regjistrimet e mbyllura së fundi</translation>
 <translation id="4736292055110123391">Sinkronizo faqeshënuesit, fjalëkalimet, historikun tënd etj. në të gjitha pajisjet e tua</translation>
 <translation id="473775607612524610">Përditësoje</translation>
 <translation id="473936925429402449">Zgjedhur, elementi shtesë <ph name="CURRENT_ELEMENT" /> nga <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3657,7 +3656,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - të gërshetuara</translation>
 <translation id="4901309472892185668">Zgjidh gjendjen e eksperimentit për eksperimentin <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Politika e shkarkuar nga serveri është e pavlefshme: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historiku nuk ruhet në "I fshehtë"</translation>
 <translation id="4906490889887219338">Konfiguro ose menaxho ndarjet e skedarëve në rrjet. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ky skedar nuk shkarkohet zakonisht dhe mund të jetë i rrezikshëm.</translation>
 <translation id="4907306957610201395">Kategoria e lejes</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 0418f65..df6a053 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -3516,7 +3516,6 @@
 <translation id="4733793249294335256">Lokacija</translation>
 <translation id="473546211690256853">Ovim nalogom upravlja <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Sistem nije uspeo da odredi identifikatore za ovaj uređaj.</translation>
-<translation id="473581466100273252">Uključi/isključi nedavno zatvorene unose</translation>
 <translation id="4736292055110123391">Sinhronizujte obeleživače, lozinke, istoriju i drugi sadržaj na svim uređajima</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="473936925429402449">Izabrano je, <ph name="CURRENT_ELEMENT" />. element dodatnog sadržaja od <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3669,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – prepleteno</translation>
 <translation id="4901309472892185668">Izaberite stanje za eksperiment <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Smernice preuzete sa servera su nevažeće: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Istorija se ne čuva u režimu bez arhiviranja</translation>
 <translation id="4906490889887219338">Podesite deljenja datoteka na mreži ili upravljajte njima. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ova datoteka se ne preuzima često i može da bude opasna.</translation>
 <translation id="4907306957610201395">Kategorija dozvole</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 13cc2a5..8160694 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -3516,7 +3516,6 @@
 <translation id="4733793249294335256">Локација</translation>
 <translation id="473546211690256853">Овим налогом управља <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Систем није успео да одреди идентификаторе за овај уређај.</translation>
-<translation id="473581466100273252">Укључи/искључи недавно затворене уносе</translation>
 <translation id="4736292055110123391">Синхронизујте обележиваче, лозинке, историју и други садржај на свим уређајима</translation>
 <translation id="473775607612524610">Ажурирај</translation>
 <translation id="473936925429402449">Изабрано је, <ph name="CURRENT_ELEMENT" />. елемент додатног садржаја од <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3669,7 +3668,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – преплетено</translation>
 <translation id="4901309472892185668">Изаберите стање за експеримент <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Смернице преузете са сервера су неважеће: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Историја се не чува у режиму без архивирања</translation>
 <translation id="4906490889887219338">Подесите дељења датотека на мрежи или управљајте њима. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Ова датотека се не преузима често и може да буде опасна.</translation>
 <translation id="4907306957610201395">Категорија дозволе</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index e5e49b2b..7c58ba6 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Översätt alltid <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Stopp</translation>
 <translation id="1110155001042129815">Vänta</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">En flik i bakgrunden använder Bluetooth</translation>
 <translation id="1113892970288677790">Välj handplockade konstverk och foton</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -534,6 +535,7 @@
 <translation id="156793199942386351"><ph name="CURRENTKEY" /> har redan tilldelats åtgärden <ph name="ACTION" />. Tryck på valfri tangent för att <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">JavaScript-konsol</translation>
 <translation id="1568323446248056064">Öppna enhetsinställningarna för skärm</translation>
+<translation id="1570604804919108255">Slå på ljudet för aviseringar</translation>
 <translation id="1571738973904005196">Visa fliken <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gäst)</translation>
 <translation id="1572266655485775982">Aktivera wifi</translation>
@@ -591,6 +593,7 @@
 <translation id="1621485112342885423">Dina kundvagnar</translation>
 <translation id="1621729191093924223">Funktioner som kräver en mikrofon slutar fungera</translation>
 <translation id="1621831347985899379">Data på <ph name="DEVICE_TYPE" /> raderas</translation>
+<translation id="1621984899599015181">Delningsalternativ hanteras av organisationen. Vissa objekt kan vara dolda.</translation>
 <translation id="1622054403950683339">Glöm det här wifi-nätverket</translation>
 <translation id="1623132449929929218">Bilderna är inte tillgängliga för närvarande. Samlingarna med bakgrunder visas när du har återfått internetanslutningen.</translation>
 <translation id="1623723619460186680">Reducering av blått ljust</translation>
@@ -836,6 +839,7 @@
 <translation id="1850508293116537636">Rotera &amp;medurs</translation>
 <translation id="1852141627593563189">Sök efter skadliga program</translation>
 <translation id="1852799913675865625">Ett fel uppstod när följande fil skulle läsas: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Fortsätt där du slutade. Du kan ställa in att appar alltid ska återställas vid start eller inaktivera återställning i inställningarna.</translation>
 <translation id="1854180393107901205">Sluta casta</translation>
 <translation id="1855079636134697549">Kameran har aktiverats</translation>
 <translation id="1856715684130786728">Lägg till plats ...</translation>
@@ -965,6 +969,7 @@
 <translation id="1989113344093894667">Det gick inte att ta en skärmbild/skärminspelning på innehållet</translation>
 <translation id="1990046457226896323">Röstfilerna har laddats ned</translation>
 <translation id="1990512225220753005">Visa inte genvägar på den här sidan</translation>
+<translation id="199191324030140441">Inaktivera Stör ej</translation>
 <translation id="1992397118740194946">Inte angett</translation>
 <translation id="1992924914582925289">Ta bort från enheten</translation>
 <translation id="1994173015038366702">Webbadress</translation>
@@ -1006,6 +1011,7 @@
 
 Du kan hantera inställningarna för det här kontot genom att installera Family Link-appen på din enhet.  Vi har skickat ett e-postmeddelanden med anvisningar till dig.</translation>
 <translation id="2040460856718599782">Hoppsan! Något gick fel när du försökte verifiera dig. Dubbelkolla dina inloggningsuppgifter och försök igen.</translation>
+<translation id="2040894699575719559">Platsen är blockerad</translation>
 <translation id="2042279886444479655">Aktiva profiler</translation>
 <translation id="2044014337866019681">Kontrollera att du verifierar <ph name="ACCOUNT" /> om du vill låsa upp sessionen.</translation>
 <translation id="204497730941176055">Namn på Microsoft-certifikatmall</translation>
@@ -1492,6 +1498,7 @@
 <translation id="2527167509808613699">Ospecificerad anslutning</translation>
 <translation id="2530166226437958497">Felsökning</translation>
 <translation id="2532589005999780174">Högkontrastläge</translation>
+<translation id="2533649878691950253">Webbplatsen blockerades från att registrera din exakta plats eftersom du vanligtvis inte tillåter detta</translation>
 <translation id="253434972992662860">&amp;Paus</translation>
 <translation id="253557089021624350">Antal keepalive</translation>
 <translation id="2535799430745250929">Det finns inget mobilnätverk</translation>
@@ -1679,6 +1686,7 @@
 <translation id="2738771556149464852">Inte efter</translation>
 <translation id="2739191690716947896">Felsökning</translation>
 <translation id="2739240477418971307">Ändra tillgänglighetsinställningarna</translation>
+<translation id="2739965161385757621">Granska mina inställningar</translation>
 <translation id="274029851662193272">Nedsänkt</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Öppna återställningsterminalen</translation>
@@ -1803,6 +1811,7 @@
 <translation id="2864601841139725659">Ange profilbild</translation>
 <translation id="2865919525181940183">Skärmbild av program som visas på skärmen</translation>
 <translation id="286674810810214575">Kontrollerar strömkällor …</translation>
+<translation id="2866876751734765554">Granskning av integritet</translation>
 <translation id="2867768963760577682">Öppna som en fast flik</translation>
 <translation id="2868746137289129307">Tillägget är inaktuellt och inaktiverat av företagspolicyn. Det kan aktiveras automatiskt när en ny version blir tillgänglig.</translation>
 <translation id="2870560284913253234">Webbplats</translation>
@@ -2332,6 +2341,7 @@
 <translation id="3446274660183028131">Starta Parallels Desktop om du vill installera Windows.</translation>
 <translation id="344630545793878684">Läsa din data på ett antal webbplatser</translation>
 <translation id="3446650212859500694">Filen har känsligt innehåll</translation>
+<translation id="3446827946208017735">Förstå och granska de viktigaste integritetsinställningarna från ett ställe</translation>
 <translation id="3448086340637592206">Ytterligare villkor för Google Chrome och Chrome OS</translation>
 <translation id="3448492834076427715">Uppdatera kontot</translation>
 <translation id="3449393517661170867">Nytt fönster med flikar</translation>
@@ -3523,7 +3533,6 @@
 <translation id="4733793249294335256">Plats</translation>
 <translation id="473546211690256853">Detta konto hanteras av <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Det gick inte att fastställa enhets-id för den här enheten.</translation>
-<translation id="473581466100273252">Visa eller dölj nyligen stängda poster</translation>
 <translation id="4736292055110123391">Synkronisera bokmärken, lösenord, historik med mera på alla dina enheter</translation>
 <translation id="473775607612524610">Uppdatera</translation>
 <translation id="473936925429402449">Valt, extrainnehåll <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3685,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – med flätning</translation>
 <translation id="4901309472892185668">Välj experimentstatus för experimentet <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Policyn som laddades ned från servern är ogiltig: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historik sparas inte i inkognitoläge.</translation>
 <translation id="4906490889887219338">Konfigurera eller hantera filresurser i nätverk. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Den här filen brukar inte laddas ned. Den kan vara skadlig.</translation>
 <translation id="4907306957610201395">Behörighetskategori</translation>
@@ -3762,6 +3770,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Ingen virtuell maskin av typen <ph name="VM_TYPE" /> hittades}=1{En virtuell maskin av typen <ph name="VM_TYPE" /> hittades: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} virtuella maskiner av typen <ph name="VM_TYPE" /> hittades: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Ingen internetanslutning</translation>
 <translation id="4998430619171209993">På</translation>
+<translation id="4999804342505941663">Aktivera Stör ej</translation>
 <translation id="5000922062037820727">Blockeras (rekommenderas)</translation>
 <translation id="5005498671520578047">Kopiera lösenord</translation>
 <translation id="5006218871145547804">ADB för Android-appar i Crostini</translation>
@@ -5086,6 +5095,7 @@
 <translation id="6468485451923838994">Teckensnitt</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> filer</translation>
 <translation id="6469557521904094793">Aktivera mobilnätverk</translation>
+<translation id="6470823736074966819">Stäng av ljudet för aviseringar</translation>
 <translation id="6472893788822429178">Visa hemknappen</translation>
 <translation id="6474498546677193336">Det gick inte att sluta dela eftersom ett program använder den här mappen. Mappen delas inte längre när Linux stängs av nästa gång.</translation>
 <translation id="6474884162850599008">Koppla från Google Drive-konto</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index de80a65..4e98f33 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Tafsiri <ph name="LANGUAGE" /> kila wakati</translation>
 <translation id="1108600514891325577">&amp;Acha</translation>
 <translation id="1110155001042129815">Subiri</translation>
+<translation id="1111781754511998498">Projekta</translation>
 <translation id="1112420131909513020">Kichupo kinachofanya kazi chinichini kinatumia Bluetooth</translation>
 <translation id="1113892970288677790">Chagua kazi ya sanaa na picha zilizoratibiwa</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">Tayari '<ph name="CURRENTKEY" />' imekabidhiwa kwenye kitendo cha '<ph name="ACTION" />'. Bonyeza kitufe chochote ili <ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Kidhibiti JavaScript</translation>
 <translation id="1568323446248056064">Fungua mipangilio ya kifaa ya onyesho</translation>
+<translation id="1570604804919108255">Rejesha Sauti ya Arifa</translation>
 <translation id="1571738973904005196">Angalia kichupo: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Mgeni)</translation>
 <translation id="1572266655485775982">Washa Wi-Fi</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">Vikapu vyako</translation>
 <translation id="1621729191093924223">Vipengele vinavyohitaji maikrofoni havitafanya kazi</translation>
 <translation id="1621831347985899379">Data ya <ph name="DEVICE_TYPE" /> itafutwa</translation>
+<translation id="1621984899599015181">Chaguo za kushiriki zinadhibitiwa na shirika lako. Huenda baadhi ya vipengee vimefichwa.</translation>
 <translation id="1622054403950683339">Sahau mtandao wa Wi-Fi</translation>
 <translation id="1623132449929929218">Picha hizi hazipatikani kwa sasa. Tafadhali unganisha tena kwenye intaneti ili uone mikusanyiko ya mandhari.</translation>
 <translation id="1623723619460186680">Upunguzaji wa mwanga wa buluu</translation>
@@ -833,6 +836,7 @@
 <translation id="1850508293116537636">Zungusha kisaa</translation>
 <translation id="1852141627593563189">Pata programu hatari</translation>
 <translation id="1852799913675865625">Kulikuwa na hitilafu wakati wa kujaribu kusoma faili: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Endelea kutoka mahali ulikoachia. Unaweza kuchagua programu zirejeshwe kila wakati kifaa kinapowashwa au uzime kipengele cha kurejesha katika Mipangilio.</translation>
 <translation id="1854180393107901205">Acha kutuma</translation>
 <translation id="1855079636134697549">Kamera imewashwa</translation>
 <translation id="1856715684130786728">Ongeza eneo...</translation>
@@ -961,6 +965,7 @@
 <translation id="1989113344093894667">Huwezi kupiga picha ya maudhui</translation>
 <translation id="1990046457226896323">Faili za matamshi zimepakuliwa</translation>
 <translation id="1990512225220753005">Usionyeshe njia za mkato kwenye ukurasa huu</translation>
+<translation id="199191324030140441">Zima kipengele cha Usinisumbue</translation>
 <translation id="1992397118740194946">Haijawekwa</translation>
 <translation id="1992924914582925289">Ondoa kwenye kifaa</translation>
 <translation id="1994173015038366702">URL ya Tovuti</translation>
@@ -1002,6 +1007,7 @@
 
 Unaweza kudhibiti mipangilio ya akaunti hii kwa kusakinisha programu ya Family Link kwenye kifaa chako.  Tumekutumia maagizo kwenye barua pepe.</translation>
 <translation id="2040460856718599782">Lo! Kuna kitu kimeharibika wakati wa kujaribu kukuthibitisha. Tafadhali angalia tena kitambulisho cha kuingia katika akaunti na ujaribu tena.</translation>
+<translation id="2040894699575719559">Imezuiwa kufikia maelezo ya mahali</translation>
 <translation id="2042279886444479655">Wasifu unaotumika</translation>
 <translation id="2044014337866019681">Tafadhali hakikisha unathibitisha <ph name="ACCOUNT" /> ili uweze kufungua kipindi.</translation>
 <translation id="204497730941176055">Jina la Kiolezo cha Cheti kutoka Microsoft</translation>
@@ -1488,6 +1494,7 @@
 <translation id="2527167509808613699">Aina yoyote ya muunganisho.</translation>
 <translation id="2530166226437958497">Utatuzi</translation>
 <translation id="2532589005999780174">Hali ya juu ya utofautishaji</translation>
+<translation id="2533649878691950253">Tovuti hii imezuiwa isijue eneo mahususi ulipo kwa sababu kwa kawaida huruhusu hali hii</translation>
 <translation id="253434972992662860">&amp;Pumzisha</translation>
 <translation id="253557089021624350">Shughuli zinazotumia kiendelezi</translation>
 <translation id="2535799430745250929">Hakuna mitandao ya simu iliyopo</translation>
@@ -1675,6 +1682,7 @@
 <translation id="2738771556149464852">Sio Baadaye</translation>
 <translation id="2739191690716947896">Tatua</translation>
 <translation id="2739240477418971307">Badilisha mipangilio yako ya ufikiaji</translation>
+<translation id="2739965161385757621">Kagua mipangilio yangu</translation>
 <translation id="274029851662193272">Imepunguzwa</translation>
 <translation id="2740531572673183784">Sawa</translation>
 <translation id="2741713322780029189">Fungua kituo cha kurejesha</translation>
@@ -1799,6 +1807,7 @@
 <translation id="2864601841139725659">Weka picha yako ya wasifu</translation>
 <translation id="2865919525181940183">Picha ya skrini ya programu ambazo zipo kwenye skrini yako kwa sasa.</translation>
 <translation id="286674810810214575">Inakagua vyanzo vya nishati...</translation>
+<translation id="2866876751734765554">Ukaguzi wa faragha</translation>
 <translation id="2867768963760577682">Fungua kama Kichupo Kilichobanwa</translation>
 <translation id="2868746137289129307">Kiendelezi hiki kimekwisha muda na kuzimwa na sera ya biashara. Kinaweza kuwashwa kiotomatiki toleo jipya zaidi likipatikana.</translation>
 <translation id="2870560284913253234">Tovuti</translation>
@@ -2328,6 +2337,7 @@
 <translation id="3446274660183028131">Tafadhali fungua programu ya Parallels Desktop ili usakinishe Windows.</translation>
 <translation id="344630545793878684">Soma data yako kwenye tovuti kadhaa</translation>
 <translation id="3446650212859500694">Faili hii ina maudhui nyeti</translation>
+<translation id="3446827946208017735">Elewa na ukague mipangilio muhimu zaidi ya faragha katika sehemu moja</translation>
 <translation id="3448086340637592206">Sheria na Masharti ya Ziada ya Google Chrome na Mfumo wa Uendeshaji wa Chrome</translation>
 <translation id="3448492834076427715">Sasisha akaunti</translation>
 <translation id="3449393517661170867">Dirisha jipya lenye vichupo</translation>
@@ -3517,7 +3527,6 @@
 <translation id="4733793249294335256">Eneo</translation>
 <translation id="473546211690256853">Akaunti hii inadhibitiwa na <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Mfumo umeshindwa kubaini vitambulishi vya kifaa kwa kifaa hiki.</translation>
-<translation id="473581466100273252">Onyesha au Ufiche Vipengee Ulivyofunga Hivi Majuzi</translation>
 <translation id="4736292055110123391">Sawazisha historia, manenosiri, alamisho na vipengee vingine kwenye vifaa vyako vyote</translation>
 <translation id="473775607612524610">Sasisha</translation>
 <translation id="473936925429402449">Umechagua, maudhui mengine <ph name="CURRENT_ELEMENT" /> kati ya <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3670,7 +3679,6 @@
 <translation id="490051679772058907">Hz <ph name="REFRESH_RATE" /> - imejumuishwa pamoja</translation>
 <translation id="4901309472892185668">Chagua hali ya jaribio la <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Sera iliyopakuliwa kutoka kwenye seva ni batili: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Historia haihifadhiwi katika hali fiche</translation>
 <translation id="4906490889887219338">Dhibiti au uweke mipangilio ya faili za kushiriki katika mtandao. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Faili hii haipakuliwi kwa kawaida na huenda ikawa hatari.</translation>
 <translation id="4907306957610201395">Aina ya Ruhusa</translation>
@@ -3756,6 +3764,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Hakuna mashine pepe za <ph name="VM_TYPE" /> zilizopatikana}=1{Mashine pepe moja ya <ph name="VM_TYPE" /> imepatikana: <ph name="VM_NAME_LIST" />}other{Mashine pepe {NUM_VMS} za <ph name="VM_TYPE" /> zimepatikana: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Hakuna muunganisho wa Intaneti.</translation>
 <translation id="4998430619171209993">Imewashwa</translation>
+<translation id="4999804342505941663">Washa kipengele cha Usinisumbue</translation>
 <translation id="5000922062037820727">Imezuiwa (imependekezwa)</translation>
 <translation id="5005498671520578047">Nakili nenosiri</translation>
 <translation id="5006218871145547804">ADB ya programu ya Android kwenye Crostini</translation>
@@ -5080,6 +5089,7 @@
 <translation id="6468485451923838994">Fonti</translation>
 <translation id="6468773105221177474">Faili <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Washa Mtandao wa Simu</translation>
+<translation id="6470823736074966819">Zima Sauti ya Arifa</translation>
 <translation id="6472893788822429178">Onyesha Kitufe cha Mwanzo</translation>
 <translation id="6474498546677193336">Imeshindwa kughairi kushiriki kwa sababu programu inatumia folda hii. Itaghairi kushiriki folda wakati Linux imefungwa.</translation>
 <translation id="6474884162850599008">Ondoa akaunti ya Hifadhi ya Google</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 0c02fbf..5536db6 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3519,7 +3519,6 @@
 <translation id="4733793249294335256">இருப்பிடம்</translation>
 <translation id="473546211690256853">இந்தக் கணக்கு <ph name="DOMAIN" /> ஆல் நிர்வகிக்கப்படுகிறது</translation>
 <translation id="4735803855089279419">இந்தச் சாதனத்திற்கான சாதன அடையாளங்காட்டிகளை சிஸ்டத்தால் தீர்மானிக்க முடியவில்லை.</translation>
-<translation id="473581466100273252">சமீபத்தில் மூடியவற்றைக் காட்டு</translation>
 <translation id="4736292055110123391">உங்கள் எல்லாச் சாதனங்களிலும் உங்கள் புக்மார்க்குகள், கடவுச்சொற்கள், வரலாறு, மேலும் பலவற்றை ஒத்திசைக்கலாம்</translation>
 <translation id="473775607612524610">புதுப்பி</translation>
 <translation id="473936925429402449">தேர்ந்தெடுக்கப்பட்டது, கூடுதல் உள்ளடக்கம் (<ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" />)</translation>
@@ -3672,7 +3671,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - பிணைக்கப்பட்டுள்ளது</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> பரிசோதனைக்கான பரிசோதனை நிலையைத் தேர்ந்தெடுக்கவும்.</translation>
 <translation id="49027928311173603">சேவையகத்திலிருந்து பதிவிறக்கிய கொள்கை தவறானது: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">மறைநிலைப் பயன்முறையில் தேடல் விவரங்கள் சேமிக்கப்படாது</translation>
 <translation id="4906490889887219338">நெட்வொர்க் கோப்புப் பகிர்வுகளை அமைத்தல் அல்லது நிர்வகித்தல். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">பொதுவாக இந்தக் கோப்புப் பதிவிறக்கப்படுவதில்லை, மேலும் ஆபத்தானதாக இருக்கக்கூடும்.</translation>
 <translation id="4907306957610201395">அனுமதி வகை</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 3c932d0..f1b98b8 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1523,7 +1523,7 @@
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" />కి చదవడానికి మాత్రమే యాక్సెస్ మంజూరు చేయబడింది.</translation>
 <translation id="2575247648642144396">ప్రస్తుత పేజీలో ఎక్స్‌టెన్ష‌న్‌ను అమలు చేయగలిగినప్పుడు ఈ చిహ్నం కనిపిస్తుంది. చిహ్నంపై క్లిక్ చేయడం ద్వారా లేదా <ph name="EXTENSION_SHORTCUT" />ను నొక్కడం ద్వారా ఈ ఎక్స్‌టెన్ష‌న్‌ను ఉపయోగించండి.</translation>
 <translation id="2575441894380764255">అనుచితమైన లేదా తప్పుదారి పట్టించే యాడ్‌లను చూపించడానికి అనుమతి లేదు.</translation>
-<translation id="257779572837908839">సమావేశాల కోసం Chromebox వలె సెటప్ చేయండి</translation>
+<translation id="257779572837908839">మీటింగ్‌ల కోసం Chromebox వలె సెటప్ చేయండి</translation>
 <translation id="2580889980133367162">బహుళ ఫైళ్లను డౌన్‌లోడ్ చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించు</translation>
 <translation id="258095186877893873">ఎక్కువ</translation>
 <translation id="2582253231918033891"><ph name="PRODUCT_NAME" /> <ph name="PRODUCT_VERSION" /> (ప్లాట్‌ఫారమ్ <ph name="PLATFORM_VERSION" />) <ph name="DEVICE_SERIAL_NUMBER" /></translation>
@@ -1800,7 +1800,7 @@
 <translation id="2865919525181940183">ప్రస్తుతం స్క్రీన్‌పై ఉన్న ప్రోగ్రామ్‌ల స్క్రీన్‌షాట్</translation>
 <translation id="286674810810214575">పవర్ మూలాలను తనిఖీ చేస్తోంది...</translation>
 <translation id="2867768963760577682">పిన్ చేసిన ట్యాబ్ లాగా తెరువు</translation>
-<translation id="2868746137289129307">ఈ ఎక్స్‌టెన్షన్ చాలా పాతది, వ్యాపార విధానం కారణంగా నిలిపివేయబడింది. అయితే, కొత్త వెర్షన్ అందుబాటులో ఉన్నప్పుడు ఇది ఆటోమేటిక్‌గా ప్రారంభించబడవచ్చు.</translation>
+<translation id="2868746137289129307">ఈ ఎక్స్‌టెన్షన్ చాలా పాతది, బిజినెస్ విధానం కారణంగా నిలిపివేయబడింది. అయితే, కొత్త వెర్షన్ అందుబాటులో ఉన్నప్పుడు ఇది ఆటోమేటిక్‌గా ప్రారంభించబడవచ్చు.</translation>
 <translation id="2870560284913253234">సైట్</translation>
 <translation id="2870909136778269686">అప్‌డేట్ చేస్తోంది...</translation>
 <translation id="2871813825302180988">ఈ ఖాతా ఈ పరికరంలో ఇప్పటికే ఉపయోగించబడుతోంది.</translation>
@@ -2299,7 +2299,7 @@
 <translation id="3423858849633684918">దయచేసి  <ph name="PRODUCT_NAME" />ని తిరిగి ప్రారంభించండి</translation>
 <translation id="3424969259347320884">ట్యాబ్ క్రాష్ అయిన సమయంలో మీరు ఏం చేస్తున్నారో వివరించండి</translation>
 <translation id="3427092606871434483">అనుమతించు (డిఫాల్ట్)</translation>
-<translation id="3428419049384081277">మీరు సైన్ ఇన్ చేసారు!</translation>
+<translation id="3428419049384081277">మీరు సైన్ ఇన్ చేశారు!</translation>
 <translation id="3428747202529429621">Chromeలో మిమ్మల్ని సురక్షితంగా ఉంచుతుంది, మీరు సైన్ ఇన్ చేసినప్పుడు ఇతర యాప్‌లలో మీ భద్రతను మెరుగుపరచడానికి ఉపయోగించబడవచ్చు</translation>
 <translation id="3429160811076349561">ట్రయల్ ఫీచర్‌లు ఆఫ్ చేయబడి ఉన్నాయి</translation>
 <translation id="3429271624041785769">వెబ్ కంటెంట్ భాషలు</translation>
@@ -2357,7 +2357,7 @@
 <translation id="3474218480460386727">కొత్త పదాలకు 99 అక్షరాలు లేదా తక్కువ ఉపయోగించండి</translation>
 <translation id="3475843873335999118">క్షమించండి, మీ వేలిముద్ర ఇప్పటికీ గుర్తించబడలేదు. దయచేసి మీ పాస్‌వర్డ్‌ను నమోదు చేయండి.</translation>
 <translation id="3475986680293081450">కీలు మ్యాచ్ కాలేదు. <ph name="RESPONSE" /> కోసం ఏదైనా కీని నొక్కండి.</translation>
-<translation id="3476303763173086583">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేసారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="3476303763173086583">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
 <translation id="347670947055184738">అయ్యో! మీ పరికరానికి సంబంధించిన విధానాన్ని పొందడంలో సిస్టమ్ విఫలమైంది.</translation>
 <translation id="347785443197175480">మీ కెమెరా మరియు మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి <ph name="HOST" />ను అనుమతించడాన్ని కొనసాగించండి</translation>
 <translation id="3478813605045578676">ఇన్‌స్టాలేషన్ తర్వాత మాత్రమే ఎన్‌రోల్‌మెంట్ జరుగుతుంది. ఈ పరికరాన్ని మేనేజ్ చేయడానికి, మొదట CloudReadyని ఇన్‌స్టాల్ చేయండి.</translation>
@@ -3044,7 +3044,7 @@
 <translation id="4209464433672152343">ముద్రించడం కోసం పత్రాలను సిద్ధం చేయడానికి అవి <ph name="BEGIN_LINK_HELP" />Googleకు పంపబడతాయి<ph name="END_LINK_HELP" />. <ph name="BEGIN_LINK_DASHBOARD" />Google క్లౌడ్ ప్రింట్‌ డాష్‌బోర్డ్<ph name="END_LINK_DASHBOARD" />లో మీ ప్రింటర్‌లు, ప్రింటర్ చరిత్రను చూడండి. సవరించండి. నిర్వహించండి.</translation>
 <translation id="4210048056321123003">వర్చువల్ మెషిన్‌ను డౌన్‌లోడ్ చేస్తోంది</translation>
 <translation id="421182450098841253"> &amp;బుక్‌మార్క్‌ల బార్‌ను చూపు</translation>
-<translation id="4211851069413100178">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకి ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేసారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="4211851069413100178">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకి ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
 <translation id="42126664696688958">ఎగుమతి చేయి</translation>
 <translation id="42137655013211669">సర్వర్ ఈ వనరుకు యాక్సెస్‌ను నిషేధించింది.</translation>
 <translation id="4217571870635786043">డిక్టేషన్</translation>
@@ -3334,7 +3334,7 @@
 <translation id="4536140153723794651">కుక్కీలను ఉపయోగించే అనుమతి ఎల్లప్పుడూ ఉన్న సైట్‌లు</translation>
 <translation id="4538163005498287211">మీ వాల్‌పేపర్ ఆధారంగా</translation>
 <translation id="4538417792467843292">పదాన్ని తొలగించు</translation>
-<translation id="4538792345715658285">వ్యాపార విధానం ద్వారా ఇన్‌స్టాల్ చేయబడింది.</translation>
+<translation id="4538792345715658285">బిజినెస్ విధానం ద్వారా ఇన్‌స్టాల్ చేయబడింది.</translation>
 <translation id="4541123282641193691">మీ ఖాతాను వెరిఫై చేయడం సాధ్యపడలేదు. దయచేసి మళ్లీ ట్రై చేయండి లేదా మీ Chromebookను రీస్టార్ట్ చేయండి.</translation>
 <translation id="4541662893742891060">ఈ ప్రొఫైల్‌కు కనెక్ట్ చేయడం సాధ్యం కాలేదు. టెక్నికల్ సపోర్ట్ కోసం, దయచేసి మీ క్యారియర్‌ను సంప్రదించండి.</translation>
 <translation id="4541706525461326392">ప్రొఫైల్‌ను తీసివేస్తోంది. దీనికి కొన్ని నిమిషాలు పట్టవచ్చు.</translation>
@@ -3518,7 +3518,6 @@
 <translation id="4733793249294335256">లొకేషన్</translation>
 <translation id="473546211690256853">ఈ ఖాతాను <ph name="DOMAIN" /> మేనేజ్ చేస్తోంది</translation>
 <translation id="4735803855089279419">ఈ పరికర ఐడెంటిఫైయర్‌లను గుర్తించడంలో సిస్టమ్ విఫలమైంది.</translation>
-<translation id="473581466100273252">ఇటీవల మూసివేసిన ఎంట్రీలను టోగుల్ చేయండి</translation>
 <translation id="4736292055110123391">మీ బుక్‌మార్క్‌లు, పాస్‌వర్డ్‌‌లు, చరిత్ర మరియు మరిన్నింటిని మీ అన్ని పరికరాల్లోనూ సింక్ చేయండి</translation>
 <translation id="473775607612524610">అప్‌డేట్‌</translation>
 <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />లో <ph name="CURRENT_ELEMENT" />వ అదనపు కంటెంట్ ఎంచుకోబడింది</translation>
@@ -3671,7 +3670,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ఇంటర్లేస్ చేయబడింది</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> ప్రయోగానికి ప్రయోగ స్థితిని ఎంచుకోండి.</translation>
 <translation id="49027928311173603">సర్వర్ నుండి డౌన్‌లోడ్ చేసిన విధానం చెల్లదు: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">అజ్ఞాత మోడ్‌లో హిస్టరీ సేవ్ అవ్వదు</translation>
 <translation id="4906490889887219338">నెట్‌వర్క్ ఫైల్ షేర్‌లను సెటప్ చేయండి లేదా నిర్వహించండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ఈ ఫైల్ సాధారణ పద్ధతిలో డౌన్‌లోడ్ కాలేదు, ఇది అపాయకరమైనది కావచ్చు.</translation>
 <translation id="4907306957610201395">అనుమతి వర్గం</translation>
@@ -3710,7 +3708,7 @@
 <translation id="4940448324259979830">ఈ ఖాతా <ph name="PROFILE_NAME" /> ద్వారా మేనేజ్ చేయబడుతుంది</translation>
 <translation id="4940845626435830013">డిస్క్ పరిమాణాన్ని రిజర్వ్ చేయండి</translation>
 <translation id="4941074198479265146">మ్యూజిక్‌ను క్రియేట్, ఎడిట్ చేయడం వంటి ఫీచర్‌ల కోసం సాధారణంగా సైట్‌లు MIDI పరికరాలకు కనెక్ట్ అవుతాయి</translation>
-<translation id="4941246025622441835">పరికరాన్ని వ్యాపార నిర్వహణ కోసం నమోదు చేసేటప్పుడు ఈ పరికర అభ్యర్థనను ఉపయోగించండి:</translation>
+<translation id="4941246025622441835">పరికరాన్ని బిజినెస్ నిర్వహణ కోసం నమోదు చేసేటప్పుడు ఈ పరికర అభ్యర్థనను ఉపయోగించండి:</translation>
 <translation id="4941627891654116707">ఫాంట్ పరిమాణం</translation>
 <translation id="494286511941020793">ప్రాక్సీ కన్ఫిగరేషన్ సహాయం</translation>
 <translation id="4943368462779413526">ఫుట్‌బాల్</translation>
@@ -3725,7 +3723,7 @@
 <translation id="496027654926814138"><ph name="FILE_NAME" /> మీ వ్యక్తిగత సమాచారాన్ని దొంగింలించేందుకు దాడులకు పాల్పడే వారిని అనుమతించవచ్చు.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
 <translation id="4961361269522589229">వంటకం ఐడియాలు</translation>
-<translation id="496185450405387901">మీ నిర్వాహకులు ఈ యాప్‌ను ఇన్‌స్టాల్ చేసారు.</translation>
+<translation id="496185450405387901">మీ నిర్వాహకులు ఈ యాప్‌ను ఇన్‌స్టాల్ చేశారు.</translation>
 <translation id="4963789650715167449">ప్రస్తత ట్యాబ్‌ను తీసివేయండి</translation>
 <translation id="4964455510556214366">అమరిక</translation>
 <translation id="496446150016900060">మీ ఫోన్‌తో Wi-Fi నెట్‌వర్క్‌లను సింక్ చేయండి</translation>
@@ -3751,7 +3749,7 @@
 <translation id="4991420928586866460">ఎగువ-అడ్డు వరుస కీలను ఫంక్షన్ కీల వలె పరిగణించు</translation>
 <translation id="499165176004408815">అధిక కాంట్రాస్ట్ మోడ్‌ను ఉపయోగించు</translation>
 <translation id="4992458225095111526">పవర్‌వాష్‌ను నిర్ధారించండి</translation>
-<translation id="4992473555164495036">మీ నిర్వాహకుడు మీకు అందుబాటులో ఉండే ఇన్‌పుట్ పద్ధతులను పరిమితం చేసారు.</translation>
+<translation id="4992473555164495036">మీ నిర్వాహకుడు మీకు అందుబాటులో ఉండే ఇన్‌పుట్ పద్ధతులను పరిమితం చేశారు.</translation>
 <translation id="4994474651455208930">ప్రోటోకాల్స్‌కు డిఫాల్ట్ హ్యాండ్లర్‌లుగా కావడం కోసం అడగటానికి సైట్‌లను అనుమతించండి</translation>
 <translation id="4994754230098574403">సెటప్ చేస్తోంది</translation>
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> వర్చువల్ మెషీన్‌లు ఏవీ కనుగొనబడలేదు}=1{1 <ph name="VM_TYPE" /> వర్చువల్ మెషీన్‌ కనుగొనబడింది: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> వర్చువల్ మెషీన్‌లు కనుగొనబడ్డాయి: <ph name="VM_NAME_LIST" />}}</translation>
@@ -4789,7 +4787,7 @@
 <translation id="6151771661215463137">ఫైల్ ఇప్పటికే మీ డౌన్‌లోడ్ ఫోల్డర్‌లో ఉంది.</translation>
 <translation id="6154240335466762404">అన్ని పోర్ట్‌లను తీసివేయండి</translation>
 <translation id="615436196126345398">ప్రోటోకాల్</translation>
-<translation id="6154697846084421647">ప్రస్తుతం సైన్ ఇన్ చేసారు</translation>
+<translation id="6154697846084421647">ప్రస్తుతం సైన్ ఇన్ చేశారు</translation>
 <translation id="6155141482566063812">బ్యాక్‌గ్రౌండ్ ట్యాబ్ మీ స్క్రీన్‌ను షేర్ చేస్తోంది</translation>
 <translation id="6156323911414505561">బుక్‌మార్క్‌ల బార్‌ను చూపించు</translation>
 <translation id="6156863943908443225">స్క్రిప్ట్ కాష్</translation>
@@ -5307,7 +5305,7 @@
 <translation id="6725206449694821596">ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (IPP)</translation>
 <translation id="6725970970008349185">ప్రతి పేజీకి ప్రదర్శించడానికి అభ్యర్థుల సంఖ్య</translation>
 <translation id="672609503628871915">కొత్తగా ఏమి ఉన్నాయో చూడండి</translation>
-<translation id="67269783048918309">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేసారు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="67269783048918309">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
 <translation id="6727969043791803658">కనెక్ట్ చేయబడింది, <ph name="BATTERY_PERCENTAGE" />% బ్యాటరీ ఉంది</translation>
 <translation id="6732087373923685049">కెమెరా</translation>
 <translation id="6735304988756581115">కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు...</translation>
@@ -5560,7 +5558,7 @@
 <translation id="6995899638241819463">మీరు ఉపయోగించే పాస్‌వర్డ్‌లు, ఏదైనా డేటా ఉల్లంఘనలో బహిర్గతమైతే మిమ్మల్ని హెచ్చరిస్తుంది</translation>
 <translation id="6997642619627518301"><ph name="NAME_PH" /> - కార్యకలాపం లాగ్</translation>
 <translation id="6997707937646349884">మీ పరికరాలలో:</translation>
-<translation id="6998793565256476099">వీడియో సమావేశం కోసం పరికరాన్ని నమోదు చేయండి</translation>
+<translation id="6998793565256476099">వీడియో మీటింగ్‌ కోసం పరికరాన్ని నమోదు చేయండి</translation>
 <translation id="6999956497249459195">కొత్త గ్రూప్</translation>
 <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> కనెక్ట్ చేయబడింది, కానీ కాన్ఫిగర్ చేయాలి</translation>
 <translation id="7000347579424117903">Ctrl, Alt, లేదా Search చేర్చండి</translation>
@@ -5629,7 +5627,7 @@
 <translation id="7063311912041006059">ప్రశ్న యొక్క ప్రదేశంలో <ph name="SPECIAL_SYMBOL" />తో URL</translation>
 <translation id="706342288220489463">సహాయం చేయడానికి మీ Assistantను మీ స్క్రీన్‌పై సమాచారాన్ని ఉపయోగించనివ్వండి</translation>
 <translation id="7064734931812204395">Linux కంటైనర్ కాన్ఫిగర్ అవుతోంది. దీనికి 30 నిమిషాల వరకు పట్టవచ్చు.</translation>
-<translation id="7065223852455347715">వ్యాపార నమోదును నిరోధించే మోడ్‌లో ఈ పరికరం లాక్ చేయబడింది. మీరు పరికరాన్ని నమోదు చేయాలనుకుంటే ముందుగా పరికరాన్ని పునరుద్ధరించాలి.</translation>
+<translation id="7065223852455347715">బిజినెస్ నమోదును నిరోధించే మోడ్‌లో ఈ పరికరం లాక్ చేయబడింది. మీరు పరికరాన్ని నమోదు చేయాలనుకుంటే ముందుగా పరికరాన్ని పునరుద్ధరించాలి.</translation>
 <translation id="7065534935986314333">సిస్టమ్ గురించి</translation>
 <translation id="706626672220389329">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. పేర్కొన్న షేర్ ఇప్పటికే మౌంట్ చేయబడింది.</translation>
 <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />"కి కనెక్ట్ చేయడం విఫలమైంది.</translation>
@@ -6967,7 +6965,7 @@
 <translation id="8499083585497694743">మైక్రోఫోన్‌ను అన్‌మ్యూట్ చేయి</translation>
 <translation id="8502536196501630039">Google Play నుండి యాప్‌లను ఉపయోగించడానికి, మీరు మొదట మీ యాప్‌లను పునరుద్ధరించాలి. ఆ యాప్‌లు కొంత డేటాను కోల్పోయి ఉండవచ్చు.</translation>
 <translation id="8503813439785031346">యూజర్‌పేరు</translation>
-<translation id="850382998924680137">నేడు చూసారు</translation>
+<translation id="850382998924680137">నేడు చూశారు</translation>
 <translation id="8507227974644337342">స్క్రీన్ రిజల్యూషన్</translation>
 <translation id="850875081535031620">హానికరమైన సాఫ్ట్‌వేర్ కనుగొనబడలేదు</translation>
 <translation id="8509177919508253835">సెక్యూరిటీ కీలు రీసెట్ చేసి, పిన్‌లను సృష్టించండి</translation>
@@ -7621,7 +7619,7 @@
 <translation id="917350715406657904"><ph name="APP_NAME" /> కోసం మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు. మీరు రేపు దానిని <ph name="TIME_LIMIT" /> సమయం ఉపయోగించవచ్చు.</translation>
 <translation id="9174401638287877180">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారిని గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
 <translation id="917510707618656279">బ్లూటూత్ పరికరాలను సైట్ యాక్సెస్ చేయాలన్నప్పుడు అనుమతి అడగాలి</translation>
-<translation id="9176476835295860688">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది.  ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేసారు. మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="9176476835295860688">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది.  ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - బ్లూటూత్ పరికరం కనెక్ట్ చేయబడింది</translation>
 <translation id="9179524979050048593">సైన్ ఇన్ స్క్రీన్ యూజర్‌నేమ్</translation>
 <translation id="9180281769944411366">ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. Linux కంటైనర్ ప్రారంభం అవుతోంది.</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 608c746..6393356 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -3506,7 +3506,6 @@
 <translation id="4733793249294335256">ตำแหน่ง</translation>
 <translation id="473546211690256853">บัญชีนี้จัดการโดย <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">ระบบระบุตัวบ่งชี้อุปกรณ์ของอุปกรณ์นี้ไม่สำเร็จ</translation>
-<translation id="473581466100273252">สลับการแสดง/ซ่อนรายการที่เพิ่งปิดไป</translation>
 <translation id="4736292055110123391">ซิงค์บุ๊กมาร์ก รหัสผ่าน ประวัติการเข้าชม และอื่นๆ ในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="473775607612524610">อัปเดต</translation>
 <translation id="473936925429402449">เลือกเนื้อหาเพิ่มเติม <ph name="CURRENT_ELEMENT" /> จาก <ph name="TOTAL_ELEMENTS" /> รายการ</translation>
@@ -3659,7 +3658,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - อินเทอร์เลซ</translation>
 <translation id="4901309472892185668">เลือกสถานะการทดสอบสำหรับการทดสอบ<ph name="EXPERIMENT_NAME" /></translation>
 <translation id="49027928311173603">นโยบายที่ดาวน์โหลดจากเซิร์ฟเวอร์ไม่ถูกต้อง: <ph name="VALIDATION_ERROR" /></translation>
-<translation id="4905269543817054577">ระบบจะไม่บันทึกประวัติการเข้าชมในโหมดไม่ระบุตัวตน</translation>
 <translation id="4906490889887219338">ตั้งค่าหรือจัดการพื้นที่แชร์ไฟล์ของเครือข่าย <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">ไฟล์นี้ไม่ได้มีการดาวน์โหลดเป็นที่แพร่หลายและอาจเป็นอันตราย</translation>
 <translation id="4907306957610201395">หมวดหมู่สิทธิ์</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 336d24c..4d7f79d 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> dilini daima çevir</translation>
 <translation id="1108600514891325577">D&amp;urdur</translation>
 <translation id="1110155001042129815">Bekle</translation>
+<translation id="1111781754511998498">Projektör</translation>
 <translation id="1112420131909513020">Arka plan sekmesi Bluetooth bağlantısını kullanıyor</translation>
 <translation id="1113892970288677790">Seçilmiş sanat eserlerini ve resimleri belirleyin</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -531,6 +532,7 @@
 <translation id="156793199942386351">"<ph name="CURRENTKEY" />" tuşu zaten "<ph name="ACTION" />" işlemine atanmış durumda. <ph name="RESPONSE" /> için herhangi bir tuşa basın.</translation>
 <translation id="1567993339577891801">JavaScript Konsolu</translation>
 <translation id="1568323446248056064">Ekran cihaz ayarlarını aç</translation>
+<translation id="1570604804919108255">Bildirimlerin sesini aç</translation>
 <translation id="1571738973904005196"><ph name="TAB_ORIGIN" /> sekmesini göster</translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Misafir)</translation>
 <translation id="1572266655485775982">Kablosuz bağlantıyı etkinleştir</translation>
@@ -588,6 +590,7 @@
 <translation id="1621485112342885423">Alışveriş sepetleriniz</translation>
 <translation id="1621729191093924223">Mikrofonun kullanılmasını gerektiren özellikler çalışmaz</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> verileri silinecek</translation>
+<translation id="1621984899599015181">Paylaşım seçeneklerini kuruluşunuz yönetir. Bazı ürünler gizlenmiş olabilir.</translation>
 <translation id="1622054403950683339">Kablosuz ağı unut</translation>
 <translation id="1623132449929929218">Görseller şu anda kullanılamıyor. Duvar kağıdı koleksiyonlarını görmek için lütfen yeniden bağlanın.</translation>
 <translation id="1623723619460186680">Mavi ışık azaltma</translation>
@@ -825,6 +828,7 @@
 <translation id="1850508293116537636">Saat &amp;yönünde döndür</translation>
 <translation id="1852141627593563189">Zararlı yazılım bulma</translation>
 <translation id="1852799913675865625">Dosya okunmaya çalışılırken bir hata oluştu: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Kaldığınız yerden devam edin. Ayarlar'dan uygulamaları başlangıçta her zaman geri yüklenecek veya geri yüklemeyi kapatacak şekilde ayarlayabilirsiniz.</translation>
 <translation id="1854180393107901205">Yayını durdur</translation>
 <translation id="1855079636134697549">Kamera açıldı</translation>
 <translation id="1856715684130786728">Konum ekle...</translation>
@@ -953,6 +957,7 @@
 <translation id="1989113344093894667">İçeriğin ekran görüntüsü alınamıyor</translation>
 <translation id="1990046457226896323">Canlı Altyazı dosyaları indirildi</translation>
 <translation id="1990512225220753005">Kısayolları bu sayfada gösterme</translation>
+<translation id="199191324030140441">Rahatsız Etmeyin'i kapat</translation>
 <translation id="1992397118740194946">Ayarlanmadı</translation>
 <translation id="1992924914582925289">Cihazdan kaldır</translation>
 <translation id="1994173015038366702">Site URL'si</translation>
@@ -994,6 +999,7 @@
 
 Cihazınızda Family Link uygulamasını yükleyerek bu hesabın ayarlarını yönetebilirsiniz.  Size talimatları e-postayla gönderdik.</translation>
 <translation id="2040460856718599782">Hata! Kimliğiniz doğrulanmaya çalışılırken bir şeyler ters gitti. Lütfen oturum açma kimlik bilgilerinizi tekrar kontrol edin ve yeniden deneyin.</translation>
+<translation id="2040894699575719559">Konum engellendi</translation>
 <translation id="2042279886444479655">Etkin profiller</translation>
 <translation id="2044014337866019681">Oturumun kilidini açmak için lütfen <ph name="ACCOUNT" /> hesabını doğruladığınızdan emin olun.</translation>
 <translation id="204497730941176055">Microsoft Sertifika Şablonu Adı</translation>
@@ -1476,6 +1482,7 @@
 <translation id="2527167509808613699">Herhangi bir bağlantı türü</translation>
 <translation id="2530166226437958497">Sorun giderme</translation>
 <translation id="2532589005999780174">Yüksek kontrast modu</translation>
+<translation id="2533649878691950253">Genellikle bu izni vermediğiniz için bu sitenin tam konumunuzu öğrenmesi engellendi</translation>
 <translation id="253434972992662860">&amp;Duraklat</translation>
 <translation id="253557089021624350">Canlı tutma sayısı</translation>
 <translation id="2535799430745250929">Hücresel ağ yok</translation>
@@ -1662,6 +1669,7 @@
 <translation id="2738771556149464852">Şundan Sonra Değil:</translation>
 <translation id="2739191690716947896">Hata ayıkla</translation>
 <translation id="2739240477418971307">Erişilebilirlik ayarlarını değiştirme</translation>
+<translation id="2739965161385757621">Ayarlarımı incele</translation>
 <translation id="274029851662193272">Bastırılmış</translation>
 <translation id="2740531572673183784">Tamam</translation>
 <translation id="2741713322780029189">Kurtarma terminalini aç</translation>
@@ -1786,6 +1794,7 @@
 <translation id="2864601841139725659">Profil resminizi ayarlama</translation>
 <translation id="2865919525181940183">Şu anda ekrandaki programların ekran görüntüsü</translation>
 <translation id="286674810810214575">Güç kaynakları kontrol ediliyor...</translation>
+<translation id="2866876751734765554">Gizlilik incelemesi</translation>
 <translation id="2867768963760577682">İğnelenmiş Sekme Olarak Aç</translation>
 <translation id="2868746137289129307">Bu uzantı, eski ve kurumsal politika tarafından devre dışı bırakıldı. Yeni bir sürüm kullanılabilir durumda olduğunda otomatik olarak etkin hale gelebilir.</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -2315,6 +2324,7 @@
 <translation id="3446274660183028131">Windows'u yüklemek için Parallels Desktop'u başlatın.</translation>
 <translation id="344630545793878684">Birden fazla web sitesindeki verilerinize erişme</translation>
 <translation id="3446650212859500694">Bu dosya hassas içeriğe sahip</translation>
+<translation id="3446827946208017735">En kritik gizlilik ayarlarını anlayıp tek bir yerden inceleyin</translation>
 <translation id="3448086340637592206">Google Chrome ve Chrome OS Ek Şartları</translation>
 <translation id="3448492834076427715">Hesabı güncelle</translation>
 <translation id="3449393517661170867">Sekmeli yeni pencere</translation>
@@ -3505,7 +3515,6 @@
 <translation id="4733793249294335256">Konum</translation>
 <translation id="473546211690256853">Bu hesap <ph name="DOMAIN" /> tarafından yönetiliyor.</translation>
 <translation id="4735803855089279419">Sistem, bu cihaz için cihaz tanıtıcılarını belirleyemedi.</translation>
-<translation id="473581466100273252">Son Kapatılan Girişleri Aç/Kapat</translation>
 <translation id="4736292055110123391">Yer işaretleriniz, şifreleriniz, geçmişiniz ve daha fazlasını tüm cihazlarınızda senkronize edin</translation>
 <translation id="473775607612524610">Güncelle</translation>
 <translation id="473936925429402449"><ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /> ekstra içerik seçildi</translation>
@@ -3658,7 +3667,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - birbirine geçmiş</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> denemesi için deneme durumu seçin.</translation>
 <translation id="49027928311173603">Sunucudan indirilen politika geçersiz: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Geçmiş Gizli modda kaydedilmez</translation>
 <translation id="4906490889887219338">Ağ dosya paylaşımlarını kurun veya yönetin. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Bu uygulama çok indirilen bir uygulama değil ve tehlikeli olabilir.</translation>
 <translation id="4907306957610201395">İzin Kategorisi</translation>
@@ -3744,6 +3752,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> sanal makinesi bulunamadı}=1{1 <ph name="VM_TYPE" /> sanal makinesi bulundu: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> sanal makinesi bulundu: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">İnternet bağlantısı yok.</translation>
 <translation id="4998430619171209993">Açık</translation>
+<translation id="4999804342505941663">Rahatsız Etmeyin özelliğini aç</translation>
 <translation id="5000922062037820727">Engellendi (önerilir)</translation>
 <translation id="5005498671520578047">Şifreyi kopyalayın</translation>
 <translation id="5006218871145547804">Crostini Android uygulaması ADB'si</translation>
@@ -5069,6 +5078,7 @@
 <translation id="6468485451923838994">Yazı tipleri</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> Dosya</translation>
 <translation id="6469557521904094793">Hücresel ağı aç</translation>
+<translation id="6470823736074966819">Bildirimleri yoksay</translation>
 <translation id="6472893788822429178">Ana Sayfa düğmesini göster</translation>
 <translation id="6474498546677193336">Bir uygulama bu klasörü kullandığından paylaşım kaldırılamadı. Linux kapatıldığında klasörün paylaşımı kaldırılacak.</translation>
 <translation id="6474884162850599008">Google Drive hesabının bağlantısını kes</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 6e962c4..27706f9 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Завжди перекладати з такої мови: <ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">&amp;Зупинити</translation>
 <translation id="1110155001042129815">Зачекайте</translation>
+<translation id="1111781754511998498">Проектор</translation>
 <translation id="1112420131909513020">Фонова вкладка використовує Bluetooth</translation>
 <translation id="1113892970288677790">Вибрати рекомендовані твори мистецтва й зображення</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -537,6 +538,7 @@
 <translation id="156793199942386351">Клавіші "<ph name="CURRENTKEY" />" уже призначено дію "<ph name="ACTION" />". Щоб <ph name="RESPONSE" />, натисніть будь-яку клавішу.</translation>
 <translation id="1567993339577891801">Консоль JavaScript</translation>
 <translation id="1568323446248056064">Відкрити налаштування дисплея</translation>
+<translation id="1570604804919108255">Увімкнути звук сповіщень</translation>
 <translation id="1571738973904005196">Переглянути вкладку: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (гість)</translation>
 <translation id="1572266655485775982">Увімкнути Wi-Fi</translation>
@@ -594,6 +596,7 @@
 <translation id="1621485112342885423">Ваші кошики</translation>
 <translation id="1621729191093924223">Функції, яким потрібен мікрофон, не працюватимуть</translation>
 <translation id="1621831347985899379">Дані пристрою <ph name="DEVICE_TYPE" /> буде видалено</translation>
+<translation id="1621984899599015181">Параметрами спільного доступу керує адміністратор вашої організації. Деякі елементи може бути приховано.</translation>
 <translation id="1622054403950683339">Забути мережу Wi-Fi</translation>
 <translation id="1623132449929929218">Зображення наразі недоступні. Щоб переглянути колекції фонових малюнків, підключіться до Інтернету знову.</translation>
 <translation id="1623723619460186680">Зменшення блакитного світла</translation>
@@ -839,6 +842,7 @@
 <translation id="1850508293116537636">Повернути &amp;за годинниковою стрілкою</translation>
 <translation id="1852141627593563189">Знайдіть шкідливе програмне забезпечення</translation>
 <translation id="1852799913675865625">Під час спроби читання файлу сталася помилка: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Продовжуйте роботу з місця зупинки. Ви можете вибрати автоматичне відновлення додатків під час запуску або вимкнути цю функцію в налаштуваннях.</translation>
 <translation id="1854180393107901205">Зупинити трансляцію</translation>
 <translation id="1855079636134697549">Камеру ввімкнено</translation>
 <translation id="1856715684130786728">Додати розташування…</translation>
@@ -968,6 +972,7 @@
 <translation id="1989113344093894667">Не вдається записати контент</translation>
 <translation id="1990046457226896323">Файли живих субтитрів завантажено</translation>
 <translation id="1990512225220753005">Не показувати ярлики на цій сторінці</translation>
+<translation id="199191324030140441">Вимкнути режим "Не турбувати"</translation>
 <translation id="1992397118740194946">Не налаштовано</translation>
 <translation id="1992924914582925289">Видалити з пристрою</translation>
 <translation id="1994173015038366702">URL-адреса сайту</translation>
@@ -1009,6 +1014,7 @@
 
 Щоб керувати налаштуваннями облікового запису, можна встановити на пристрої додаток Family Link.  Ми надіслали вказівки в електронному листі.</translation>
 <translation id="2040460856718599782">На жаль, під час спроби автентифікації сталася помилка. Ретельно перевірте свої облікові дані для входу та повторіть спробу.</translation>
+<translation id="2040894699575719559">Доступ до геоданих заблоковано</translation>
 <translation id="2042279886444479655">Активні профілі</translation>
 <translation id="2044014337866019681">Переконайтеся, що підтверджуєте обліковий запис <ph name="ACCOUNT" />, щоб розблокувати цей сеанс.</translation>
 <translation id="204497730941176055">Ім'я шаблону сертифіката Microsoft</translation>
@@ -1495,6 +1501,7 @@
 <translation id="2527167509808613699">Будь-яке з’єднання</translation>
 <translation id="2530166226437958497">Вирішення проблем</translation>
 <translation id="2532589005999780174">Режим високого контрасту</translation>
+<translation id="2533649878691950253">Цьому сайту заблоковано доступ до даних про ваше точне місцезнаходження, оскільки ви зазвичай вибираєте такі налаштування</translation>
 <translation id="253434972992662860">&amp;Пауза</translation>
 <translation id="253557089021624350">Кількість процесів, які використовуються розширеннями</translation>
 <translation id="2535799430745250929">Немає мобільної мережі</translation>
@@ -1682,6 +1689,7 @@
 <translation id="2738771556149464852">Не пізніше</translation>
 <translation id="2739191690716947896">Налагоджувати</translation>
 <translation id="2739240477418971307">Змінювати налаштування доступності</translation>
+<translation id="2739965161385757621">Переглянути налаштування</translation>
 <translation id="274029851662193272">Втиснений текст</translation>
 <translation id="2740531572673183784">OK</translation>
 <translation id="2741713322780029189">Відкрити термінал для відновлення</translation>
@@ -1806,6 +1814,7 @@
 <translation id="2864601841139725659">Налаштуйте зображення профілю</translation>
 <translation id="2865919525181940183">Знімок екрана з відкритими програмами</translation>
 <translation id="286674810810214575">Перевірка джерел живлення…</translation>
+<translation id="2866876751734765554">Перевірка параметрів конфіденційності</translation>
 <translation id="2867768963760577682">Відкрити як закріплену вкладку</translation>
 <translation id="2868746137289129307">Це розширення застаріле; його вимкнено політикою підприємства. Якщо буде доступна нова версія, розширення ввімкнеться автоматично.</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -2335,6 +2344,7 @@
 <translation id="3446274660183028131">Щоб установити Windows, запустіть додаток Parallels Desktop.</translation>
 <translation id="344630545793878684">Переглядати ваші дані на декількох веб-сайтах</translation>
 <translation id="3446650212859500694">Цей файл містить конфіденційний контент</translation>
+<translation id="3446827946208017735">Перевіряйте найважливіші налаштування конфіденційності на одній сторінці</translation>
 <translation id="3448086340637592206">Додаткові умови використання Google Chrome і ОС Chrome</translation>
 <translation id="3448492834076427715">Оновити обліковий запис</translation>
 <translation id="3449393517661170867">Нове вікно з вкладками</translation>
@@ -3526,7 +3536,6 @@
 <translation id="4733793249294335256">Розташування</translation>
 <translation id="473546211690256853">Цим обліковим записом керує домен <ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Системі не вдалося визначити ідентифікатори цього пристрою.</translation>
-<translation id="473581466100273252">Показати або сховати нещодавно закриті записи</translation>
 <translation id="4736292055110123391">Синхронізуйте закладки, паролі, історію й інші дані на всіх своїх пристроях</translation>
 <translation id="473775607612524610">Оновити</translation>
 <translation id="473936925429402449">Вибрано, додатковий контент <ph name="CURRENT_ELEMENT" /> з <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3679,7 +3688,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц – з накладанням</translation>
 <translation id="4901309472892185668">Вибрати статус експерименту "<ph name="EXPERIMENT_NAME" />".</translation>
 <translation id="49027928311173603">Завантажене із сервера правило недійсне: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Історія в анонімному режимі не зберігається</translation>
 <translation id="4906490889887219338">Налаштувати мережеві файлообмінники або керувати ними. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Цей файл рідко завантажують. Він може бути небезпечним.</translation>
 <translation id="4907306957610201395">Категорія дозволу</translation>
@@ -3765,6 +3773,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Віртуальну машину <ph name="VM_TYPE" /> не знайдено}=1{Знайдено 1 віртуальну машину <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}one{Знайдено {NUM_VMS} віртуальну машину <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}few{Знайдено {NUM_VMS} віртуальні машини <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}many{Знайдено {NUM_VMS} віртуальних машин <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Знайдено {NUM_VMS} віртуальної машини <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Немає з’єднання з Інтернетом.</translation>
 <translation id="4998430619171209993">Увімкнено</translation>
+<translation id="4999804342505941663">Увімкнути режим "Не турбувати"</translation>
 <translation id="5000922062037820727">Заблоковано (рекомендується)</translation>
 <translation id="5005498671520578047">Копіювати пароль</translation>
 <translation id="5006218871145547804">ADB в додатках для Android у Crostini</translation>
@@ -5089,6 +5098,7 @@
 <translation id="6468485451923838994">Шрифти</translation>
 <translation id="6468773105221177474">Файлів: <ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Увімкнути мобільну мережу</translation>
+<translation id="6470823736074966819">Вимкнути звук сповіщень</translation>
 <translation id="6472893788822429178">Показати кнопку "Домашня сторінка"</translation>
 <translation id="6474498546677193336">Не вдалося скасувати доступ, оскільки цю папку використовує додаток. Доступ до неї буде скасовано після завершення роботи Linux.</translation>
 <translation id="6474884162850599008">Від’єднати обліковий запис Google Диска</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index a0a637c..085af097 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -3502,7 +3502,6 @@
 <translation id="4733793249294335256">مقام</translation>
 <translation id="473546211690256853">یہ اکاؤنٹ <ph name="DOMAIN" /> کے زیر انتظام ہے۔</translation>
 <translation id="4735803855089279419">سسٹم اس آلہ کیلئے آلہ کے شناخت کنندگان کا تعین کرنے میں ناکام ہوگیا۔</translation>
-<translation id="473581466100273252">حال ہی میں بند کیے گئے اندراجات کو ٹوگل کریں</translation>
 <translation id="4736292055110123391">اپنے سبھی آلات پر اپنے بُک مارکس، پاس ورڈز، سرگزشت اور مزید بہت کچھ کی مطابقت پذیری کریں</translation>
 <translation id="473775607612524610">اپ ڈيٹ کریں</translation>
 <translation id="473936925429402449">منتخب کردہ، <ph name="CURRENT_ELEMENT" /> میں سے اضافی مواد <ph name="TOTAL_ELEMENTS" /></translation>
@@ -3655,7 +3654,6 @@
 <translation id="490051679772058907">‏<ph name="REFRESH_RATE" /> Hz - انٹرلیسڈ</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> تجربے کے لیے تجربے کی حالت منتخب کریں۔</translation>
 <translation id="49027928311173603">سرور سے ڈاؤن لوڈ کردہ پالیسی غلط ہے: <ph name="VALIDATION_ERROR" />۔</translation>
-<translation id="4905269543817054577">سرگزشت پوشیدگی میں محفوظ نہیں ہوتی ہے</translation>
 <translation id="4906490889887219338">نیٹ ورک فائل کے اشتراکات کو سیٹ اپ کریں یا ان کا نظم کریں۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">یہ فائل عام طور پر ڈاؤن لوڈ نہیں کی جاتی ہے اور یہ خطرناک ہو سکتی ہے۔</translation>
 <translation id="4907306957610201395">اجازت کا زمرہ</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index da1399a..050157f3 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -99,6 +99,7 @@
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> tilidan har doim tarjima qilinsin</translation>
 <translation id="1108600514891325577">&amp;To‘xtatish</translation>
 <translation id="1110155001042129815">Kutish</translation>
+<translation id="1111781754511998498">Projektor</translation>
 <translation id="1112420131909513020">Fondagi varaq Bluetooth aloqasidan foydalanmoqda</translation>
 <translation id="1113892970288677790">Ijod namunalari va chiroyli rasmlarni tanlang</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -529,6 +530,7 @@
 <translation id="156793199942386351">“<ph name="CURRENTKEY" />” tugmasi allaqachon “<ph name="ACTION" />” amaliga biriktirilgan. <ph name="RESPONSE" /> uchun istalgan tugmani bosing.</translation>
 <translation id="1567993339577891801">JavaScript konsoli</translation>
 <translation id="1568323446248056064">Ekran sozlamalarini ochish</translation>
+<translation id="1570604804919108255">Bildirishnomalar kelsin</translation>
 <translation id="1571738973904005196">Varaqni ochish: <ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Mehmon)</translation>
 <translation id="1572266655485775982">Wi-Fi’ni yoqish</translation>
@@ -586,6 +588,7 @@
 <translation id="1621485112342885423">Xarid qutilaringiz</translation>
 <translation id="1621729191093924223">Mikrofon ishlatadigan funksiyalar ishlamaydi</translation>
 <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> axborotlari tozalanadi</translation>
+<translation id="1621984899599015181">Tashkilot boshqaruvidagi ulashuv parametrlari Ayrim elementlar yashirilishi mumkin.</translation>
 <translation id="1622054403950683339">Wi-Fi tarmoqni faolsizlantirish</translation>
 <translation id="1623132449929929218">Rasmlar hozircha mavjud emas. Kolleksiyalarni olish uchun internetga qayta ulaning.</translation>
 <translation id="1623723619460186680">Koʻk rangni kamaytirish</translation>
@@ -823,6 +826,7 @@
 <translation id="1850508293116537636">Soat mili yo‘nalishida burish</translation>
 <translation id="1852141627593563189">Zararli dasturlarni topish</translation>
 <translation id="1852799913675865625">Faylni o‘qishda xatolik yuz berdi: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Ishni qolgan joydan davom ettiring. Sozlamalar orqali ilovalarni har doim ishga tushirilayotganda tiklanadigan yoki tiklanmaydigan qilib sozlash mumkin.</translation>
 <translation id="1854180393107901205">Translatsiyani to‘xtatish</translation>
 <translation id="1855079636134697549">Kamera yoqildi</translation>
 <translation id="1856715684130786728">Jild qo‘shish...</translation>
@@ -952,6 +956,7 @@
 <translation id="1989113344093894667">Kontent tasvirga olinmadi</translation>
 <translation id="1990046457226896323">Avtomatik subtitr fayllari yuklab olindi</translation>
 <translation id="1990512225220753005">Bu sahifada chiqmasin</translation>
+<translation id="199191324030140441">Bezovta qilinmasin rejimini faolsizlantirish</translation>
 <translation id="1992397118740194946">O‘rnatilmagan</translation>
 <translation id="1992924914582925289">Qurilmadan olib tashlash</translation>
 <translation id="1994173015038366702">Sayt URL manzili</translation>
@@ -993,6 +998,7 @@
 
 Oʻz qurilmangizda Family Link ilovasini oʻrnatib, bu hisob sozlamalarini boshqarishingiz mumkin.  Koʻrsatmalar email manzilingizga yuborildi.</translation>
 <translation id="2040460856718599782">Haqiqiylik tekshiruvini amalga oshirib bo‘lmadi. Hisob ma’lumotlarini tekshirib, qaytadan urinib ko‘ring.</translation>
+<translation id="2040894699575719559">Joylashuv bloklandi</translation>
 <translation id="2042279886444479655">Faol profillar</translation>
 <translation id="2044014337866019681">Bu seansni qulfdan chiqarish uchun <ph name="ACCOUNT" /> hisobidan kiring.</translation>
 <translation id="204497730941176055">Microsoft sertifikati andozasi nomi</translation>
@@ -1479,6 +1485,7 @@
 <translation id="2527167509808613699">Har qanday ulanishlar</translation>
 <translation id="2530166226437958497">Nosozliklarni tuzatish</translation>
 <translation id="2532589005999780174">Yuqori kontrastli rejim</translation>
+<translation id="2533649878691950253">Bu sayt aniq joylashuvingizni bila olmaydi, chunki odatda siz bunga ruxsat bermaysiz</translation>
 <translation id="253434972992662860">&amp;Vaqtincha to‘xtatish</translation>
 <translation id="253557089021624350">Keepalive ulanishlari soni</translation>
 <translation id="2535799430745250929">Mobil tarmoqlar topilmadi</translation>
@@ -1666,6 +1673,7 @@
 <translation id="2738771556149464852">Bundan kechiktirmasdan</translation>
 <translation id="2739191690716947896">Nosozliklarni ko‘rib chiqish</translation>
 <translation id="2739240477418971307">Maxsus imkoniyatlar sozlamalarini o‘zgartirish</translation>
+<translation id="2739965161385757621">Sozlamalarni koʻrib chiqish</translation>
 <translation id="274029851662193272">Botiq</translation>
 <translation id="2740531572673183784">Ok</translation>
 <translation id="2741713322780029189">Tiklash terminalini ochish</translation>
@@ -1790,6 +1798,7 @@
 <translation id="2864601841139725659">Profilga rasm joylang</translation>
 <translation id="2865919525181940183">Joriy ekrandagi dasturlarning skrinshoti</translation>
 <translation id="286674810810214575">Quvvat manbalari tekshirilmoqda…</translation>
+<translation id="2866876751734765554">Maxfiylik sozlamalarini ochish</translation>
 <translation id="2867768963760577682">Qadalgan tab sifatida ochish</translation>
 <translation id="2868746137289129307">Ushbu kengaytma eskirgan, shuning uchun u korporativ siyosat shartlariga ko‘ra o‘chirib qo‘yildi. Yangi versiyasi chiqishi bilan bu kengaytma avtomatik yoqilishi mumkin.</translation>
 <translation id="2870560284913253234">Sayt</translation>
@@ -2319,6 +2328,7 @@
 <translation id="3446274660183028131">Windowsni oʻrnatish uchun Parallels Desktopni ishga tushiring.</translation>
 <translation id="344630545793878684">Bir nechta saytlardagi ma’lumotlarni ko‘rish</translation>
 <translation id="3446650212859500694">Bu faylda maxfiy kontent bor</translation>
+<translation id="3446827946208017735">Eng muhim maxfiylik sozlamalari bilan tanishing va bir joyda koʻrib chiqing</translation>
 <translation id="3448086340637592206">Google Chrome va Chrome OS qoʻshimcha shartlari</translation>
 <translation id="3448492834076427715">Hisobni yangilash</translation>
 <translation id="3449393517661170867">Varaqlari bor yangi oyna</translation>
@@ -3510,7 +3520,6 @@
 <translation id="4733793249294335256">Jild</translation>
 <translation id="473546211690256853">Bu hisob <ph name="DOMAIN" /> tomonidan boshqariladi</translation>
 <translation id="4735803855089279419">Qurilma identifikatorlari aniqlanmadi.</translation>
-<translation id="473581466100273252">Oxirgi yopilganlar tugmasi</translation>
 <translation id="4736292055110123391">Bukmarklar, tarix va parollaringizni barcha qurilmalaringizda sinxronlang</translation>
 <translation id="473775607612524610">Yangilash</translation>
 <translation id="473936925429402449">Tanlangan, <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /> sonli qoʻshimcha kontent</translation>
@@ -3663,7 +3672,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – maydalangan</translation>
 <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> tajribaviy funksiyasi holatini tanlang.</translation>
 <translation id="49027928311173603">Serverdan yaroqsiz siyosat yuklab olindi: <ph name="VALIDATION_ERROR" /></translation>
-<translation id="4905269543817054577">Inkognito rejimda tarix saqlanmaydi</translation>
 <translation id="4906490889887219338">Tarmoqdagi fayl ulashuvlarini sozlash yoki boshqarish. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Bu faylni yuklab olish tavsiya etilmaydi, chunki u zararli bo‘lishi mumkin.</translation>
 <translation id="4907306957610201395">Ruxsatnomalar turkumi</translation>
@@ -3749,6 +3757,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> virtual mashinalari topilmadi}=1{1 ta <ph name="VM_TYPE" /> VM topildi: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} ta <ph name="VM_TYPE" /> VM topildi: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Internet aloqasi yo‘q.</translation>
 <translation id="4998430619171209993">Yoniq</translation>
+<translation id="4999804342505941663">Bezovta qilinmasin rejimini yoqing</translation>
 <translation id="5000922062037820727">Bloklangan (tavsiya etiladi)</translation>
 <translation id="5005498671520578047">Parolni nusxalash</translation>
 <translation id="5006218871145547804">Crostini tizimida Android ilovalar uchun ADB vositasi</translation>
@@ -5073,6 +5082,7 @@
 <translation id="6468485451923838994">Shriftlar</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ta fayl</translation>
 <translation id="6469557521904094793">Mobil tarmoqni yoqish</translation>
+<translation id="6470823736074966819">Bildirishnomalarni tovushsiz qilish</translation>
 <translation id="6472893788822429178">Bosh sahifa tugmasini ko‘rsatish</translation>
 <translation id="6474498546677193336">Bu jild bandligi sababli umumiy ruxsat bekor qilinmadi. Jildga umumiy ruxsat Linux qayta ishga tushganda bekor qilinadi.</translation>
 <translation id="6474884162850599008">Google Drive hisobini uzib qo‘yish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index ade3345..7c81ff1 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -3523,7 +3523,6 @@
 <translation id="4733793249294335256">Vị trí</translation>
 <translation id="473546211690256853">Tài khoản này do <ph name="DOMAIN" /> quản lý</translation>
 <translation id="4735803855089279419">Hệ thống không xác định được mã nhận dạng thiết bị cho thiết bị này.</translation>
-<translation id="473581466100273252">Ẩn/hiện các mục đã đóng gần đây</translation>
 <translation id="4736292055110123391">Đồng bộ hóa dấu trang, mật khẩu, lịch sử và nhiều nội dung khác trên tất cả các thiết bị của bạn</translation>
 <translation id="473775607612524610">Cập nhật</translation>
 <translation id="473936925429402449">Nội dung bổ sung đã chọn <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /></translation>
@@ -3676,7 +3675,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – đan xen</translation>
 <translation id="4901309472892185668">Chọn trạng thái thử nghiệm cho quá trình thử nghiệm <ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Chính sách được tải xuống từ máy chủ không hợp lệ: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Nhật ký duyệt web không được lưu khi ở chế độ Ẩn danh</translation>
 <translation id="4906490889887219338">Thiết lập hoặc quản lý tính năng chia sẻ tệp trong mạng. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Tệp này thường không được tải xuống và có thể nguy hiểm.</translation>
 <translation id="4907306957610201395">Danh mục quyền</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 06413c0..399cef9 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -3498,7 +3498,6 @@
 <translation id="4733793249294335256">位置</translation>
 <translation id="473546211690256853">此帐号由 <ph name="DOMAIN" /> 管理</translation>
 <translation id="4735803855089279419">系统未能识别此设备的设备标识符。</translation>
-<translation id="473581466100273252">显示/隐藏最近关闭的项</translation>
 <translation id="4736292055110123391">将您的书签、密码、历史记录等信息同步到您的所有设备上</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="473936925429402449">已选择,第 <ph name="CURRENT_ELEMENT" /> 项附加内容,共 <ph name="TOTAL_ELEMENTS" /> 项</translation>
@@ -3651,7 +3650,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> 赫兹 - 隔行扫描</translation>
 <translation id="4901309472892185668">请为实验“<ph name="EXPERIMENT_NAME" />”选择实验状态。</translation>
 <translation id="49027928311173603">从服务器下载的策略无效:<ph name="VALIDATION_ERROR" />。</translation>
-<translation id="4905269543817054577">在无痕模式下,系统不会保存历史记录</translation>
 <translation id="4906490889887219338">设置或管理网络文件共享。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">此文件属于不常下载的内容,可能存在危险。</translation>
 <translation id="4907306957610201395">权限类别</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 793f9b2e..5d7862a 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -3522,7 +3522,6 @@
 <translation id="4733793249294335256">位置</translation>
 <translation id="473546211690256853">這個帳戶是由 <ph name="DOMAIN" /> 負責管理</translation>
 <translation id="4735803855089279419">糟糕!系統無法確定此裝置的裝置識別碼。</translation>
-<translation id="473581466100273252">顯示/隱藏最近關閉的項目</translation>
 <translation id="4736292055110123391">將您的書籤、密碼、記錄等資料同步至所有裝置</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="473936925429402449">已選取,第 <ph name="CURRENT_ELEMENT" /> 個額外內容,共 <ph name="TOTAL_ELEMENTS" /> 個</translation>
@@ -3675,7 +3674,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - 交錯顯示</translation>
 <translation id="4901309472892185668">選取「<ph name="EXPERIMENT_NAME" />」的實驗狀態。</translation>
 <translation id="49027928311173603">從伺服器下載的政策無效:<ph name="VALIDATION_ERROR" />。</translation>
-<translation id="4905269543817054577">在無痕模式下無法儲存記錄</translation>
 <translation id="4906490889887219338">設定或管理網絡檔案共用功能。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">此檔案不常下載,代表此檔案可能不安全。</translation>
 <translation id="4907306957610201395">權限類別</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index d64787a..5f580f9 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -3506,7 +3506,6 @@
 <translation id="4733793249294335256">位置</translation>
 <translation id="473546211690256853">這個帳戶是由 <ph name="DOMAIN" /> 負責管理。</translation>
 <translation id="4735803855089279419">系統無法判別這個裝置的裝置 ID。</translation>
-<translation id="473581466100273252">顯示/隱藏最近關閉的項目</translation>
 <translation id="4736292055110123391">讓你在所有裝置上的書籤、密碼、歷史記錄及其他設定保持同步</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="473936925429402449">已選取 <ph name="TOTAL_ELEMENTS" /> 個額外內容裡的第 <ph name="CURRENT_ELEMENT" /> 個</translation>
@@ -3659,7 +3658,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - 交錯顯示</translation>
 <translation id="4901309472892185668">選取「<ph name="EXPERIMENT_NAME" />」的實驗狀態。</translation>
 <translation id="49027928311173603">從伺服器下載的政策無效:<ph name="VALIDATION_ERROR" />。</translation>
-<translation id="4905269543817054577">在無痕模式下無法儲存歷史記錄</translation>
 <translation id="4906490889887219338">設定或管理網路檔案共用。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">一般使用者不常下載這個檔案,代表這個檔案可能不安全。</translation>
 <translation id="4907306957610201395">權限類別</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index c2442c8c..46035e0 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -101,6 +101,7 @@
 <translation id="1103523840287552314">Humusha njalo i-<ph name="LANGUAGE" /></translation>
 <translation id="1108600514891325577">Misa</translation>
 <translation id="1110155001042129815">Linda</translation>
+<translation id="1111781754511998498">Iphrojektha</translation>
 <translation id="1112420131909513020">Ithebhu engemuva isebenzisa i-bluetooth</translation>
 <translation id="1113892970288677790">Khetha umsebenzi wobuciko nezithombe ezikhethiwe</translation>
 <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
@@ -533,6 +534,7 @@
 <translation id="156793199942386351">I-'<ph name="CURRENTKEY" />' isinikeziwe kakade kusenzo se-'<ph name="ACTION" />'. Cindezela noma yimuphi ukhiye uku-<ph name="RESPONSE" />.</translation>
 <translation id="1567993339577891801">Ikhonsoli ye-JavaScript</translation>
 <translation id="1568323446248056064">Vula izilungiselelo zokubonisa kwedivayisi</translation>
+<translation id="1570604804919108255">Susa ukuthulisa Izaziso</translation>
 <translation id="1571738973904005196">Buka ithebhu ye-<ph name="TAB_ORIGIN" /></translation>
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Isihambeli)</translation>
 <translation id="1572266655485775982">Ukunika amandla i-Wi-Fi</translation>
@@ -590,6 +592,7 @@
 <translation id="1621485112342885423">Amakalishi akho</translation>
 <translation id="1621729191093924223">Izici ezidinga imakrofoni ngeke zisebenze</translation>
 <translation id="1621831347985899379">Idatha ye-<ph name="DEVICE_TYPE" /> izosuswa</translation>
+<translation id="1621984899599015181">Izinketho zokwabelana ziphathwa inhlangano yakho. Kungenzeka ezinye izinto zifihliwe.</translation>
 <translation id="1622054403950683339">Khohlwa inethiwekhi ye-Wi-Fi</translation>
 <translation id="1623132449929929218">Izithombe manje azitholakali. Sicela uphinde uxhumeke ku-inthanethi ukuze ubuke amaqoqo esithombe sangemuva.</translation>
 <translation id="1623723619460186680">Ukuncipha kokukhanya okuluhlaza okwesibhakabhaka</translation>
@@ -835,6 +838,7 @@
 <translation id="1850508293116537636">Phendukisa &amp;njengesikhathi sewashi</translation>
 <translation id="1852141627593563189">Thola isofthiwe eyingozi</translation>
 <translation id="1852799913675865625">Kube nephutha ngenkathi izama ukufunda ifayela: <ph name="ERROR_TEXT" />.</translation>
+<translation id="1854049213067042715">Qhubeka lapho ogcine khona. Ungasetha ama-app ukuthi abuyisele njalo ekuqaliseni noma uvale ukubuyisela Kumasethingi.</translation>
 <translation id="1854180393107901205">Misa ukusakaza</translation>
 <translation id="1855079636134697549">Ikhamera ivuliwe</translation>
 <translation id="1856715684130786728">Engeza indawo...</translation>
@@ -964,6 +968,7 @@
 <translation id="1989113344093894667">Ayikwazi ukuthatha okuqukethwe</translation>
 <translation id="1990046457226896323">Amafayela wenkulumo alandiwe</translation>
 <translation id="1990512225220753005">Ungabonisi izinqamuleli kuleli khasi</translation>
+<translation id="199191324030140441">Vala okuthi Ungaphazamisi</translation>
 <translation id="1992397118740194946">Ayisethiwe</translation>
 <translation id="1992924914582925289">Susa kudivayisi</translation>
 <translation id="1994173015038366702">I-URL yesayithi</translation>
@@ -1005,6 +1010,7 @@
 
 Ungaphatha izilungiselelo zale akhawunti ngokufaka uhlelo lokusebenza lwe-Family Link kudivayisi yakho.  Sikuthumelele imiyalelo ku-imeyili.</translation>
 <translation id="2040460856718599782">Iphutha! Kukhona into engahambanga kahle ngenkathi kuzanywa ukukuqinisekisa. Sicela uhlole kabili ukuqinisekiswa kwakho kokungena ngemvume uphinde uzame futhi.</translation>
+<translation id="2040894699575719559">Indawo ivinjiwe</translation>
 <translation id="2042279886444479655">Amaphrofayela asebenzayo</translation>
 <translation id="2044014337866019681">Sicela uqiniseke ukuthi uqinisekisa i-<ph name="ACCOUNT" /> ukuze uvule iseshini.</translation>
 <translation id="204497730941176055">Igama lesifanekiso lesitifiketi se-Microsoft</translation>
@@ -1491,6 +1497,7 @@
 <translation id="2527167509808613699">Noma iyiphi inhlobo yokuxhumeka</translation>
 <translation id="2530166226437958497">Ukuxazulula inkinga</translation>
 <translation id="2532589005999780174">Imodi yokugqala okuphezulu</translation>
+<translation id="2533649878691950253">Le sayithi livinjelwe ukuthi lazi indawo yakho ngqo ngoba ngokuvamile awukuvumeli lokhu</translation>
 <translation id="253434972992662860">Misa isikhashana</translation>
 <translation id="253557089021624350">Ukubala kwe-Keepalive</translation>
 <translation id="2535799430745250929">Ayikho inethiwekhi yeselula ekhona</translation>
@@ -1678,6 +1685,7 @@
 <translation id="2738771556149464852">Hhayi ngemuva</translation>
 <translation id="2739191690716947896">Lungisa isiphazamisi</translation>
 <translation id="2739240477418971307">Shintsha izilungiselelo zakho zokufinyelela</translation>
+<translation id="2739965161385757621">Buyekeza amasethingi wami</translation>
 <translation id="274029851662193272">Icindezelwe phansi</translation>
 <translation id="2740531572673183784">Ok</translation>
 <translation id="2741713322780029189">Vula itheminali yokubuyisela</translation>
@@ -1802,6 +1810,7 @@
 <translation id="2864601841139725659">Setha isithombe sakho sephrofayela</translation>
 <translation id="2865919525181940183">Isithombe-skrini sezinhlelo manje ezikusikrini</translation>
 <translation id="286674810810214575">Ihlola imithombo yesiphequluli...</translation>
+<translation id="2866876751734765554">Ukubuyekeza kobumfihlo</translation>
 <translation id="2867768963760577682">Vula njengethebhu ephiniwe</translation>
 <translation id="2868746137289129307">Lesi sandiso siphelelwe isikhathi futhi sikhutshazwe inqubomgomo yebhizinisi. Singahle sinikwe amandla ngokuzenzakalelayo uma inguqulo entsha itholakala.</translation>
 <translation id="2870560284913253234">Isayithi</translation>
@@ -2331,6 +2340,7 @@
 <translation id="3446274660183028131">Sicela uqalise i-Parallels Desktop ukuze ufake i-Windows.</translation>
 <translation id="344630545793878684">Funda idatha yakho kumawebhusayithi athile</translation>
 <translation id="3446650212859500694">Leli fayela linokuqukethwe okuzwelayo</translation>
+<translation id="3446827946208017735">Qonda futhi ubuyekeze amasethingi wobumfihlo abucayi kakhulu endaweni eyodwa</translation>
 <translation id="3448086340637592206">I-Google Chrome Nemigomo Yokungezwa ye-Chrome OS</translation>
 <translation id="3448492834076427715">Buyekeza i-akhawunti</translation>
 <translation id="3449393517661170867">Iwindi lethebhu elisha</translation>
@@ -3521,7 +3531,6 @@
 <translation id="4733793249294335256">Indawo</translation>
 <translation id="473546211690256853">Le akhawunti iphethwe yi-<ph name="DOMAIN" /></translation>
 <translation id="4735803855089279419">Isistimu ihlulekile ukunquma izikhombi zedivayisi zale divayisi.</translation>
-<translation id="473581466100273252">Guqula Okufakiwe Okusanda Kuvalwa</translation>
 <translation id="4736292055110123391">Vumelanisa amabhukhimakhi akho, amaphasiwedi, umlando, nokuningi kuwo wonke amadivayisi akho</translation>
 <translation id="473775607612524610">Buyekeza</translation>
 <translation id="473936925429402449">Kukhethiwe, okuqukethwe okwengeziwe okungu-<ph name="CURRENT_ELEMENT" /> kokungu-<ph name="TOTAL_ELEMENTS" /></translation>
@@ -3674,7 +3683,6 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - okuhlanganisiwe</translation>
 <translation id="4901309472892185668">Khetha isimo sokuhlola sohlolo lwe-<ph name="EXPERIMENT_NAME" />.</translation>
 <translation id="49027928311173603">Inqubomgomo elandwe kusuka kuseva ayivumelekile: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4905269543817054577">Umlando awulondolozwanga ku-Incognito</translation>
 <translation id="4906490889887219338">Setha noma phatha ukwabelana kwefayela lenethiwekhi. <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation>
 <translation id="4907161631261076876">Leli fayela alivamile ukulandwa futhi kungenzeka libe ingozi.</translation>
 <translation id="4907306957610201395">Isigaba semvume</translation>
@@ -3760,6 +3768,7 @@
 <translation id="4996851818599058005">{NUM_VMS,plural, =0{Awekho ama-VMs we-<ph name="VM_TYPE" /> atholakele}=1{Kutholakale i-<ph name="VM_TYPE" /> VM eyodwa: <ph name="VM_NAME_LIST" />}one{Kutholakale ama-VMs angu-{NUM_VMS} <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{Kutholakale ama-VMs angu-{NUM_VMS} <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation>
 <translation id="4997086284911172121">Akukho ukuxhumeka kwe-inthanethi.</translation>
 <translation id="4998430619171209993">Vuliwe</translation>
+<translation id="4999804342505941663">Vula ukungaphazamisi</translation>
 <translation id="5000922062037820727">Kuvinjiwe (kunconyiwe)</translation>
 <translation id="5005498671520578047">Kopisha iphasiwedi</translation>
 <translation id="5006218871145547804">I-ADB yohlelo lokusebenza le-Crostini Android</translation>
@@ -5087,6 +5096,7 @@
 <translation id="6468485451923838994">Amafonti</translation>
 <translation id="6468773105221177474">Amafayela angu-<ph name="FILE_COUNT" /></translation>
 <translation id="6469557521904094793">Vula inethiwekhi yeselula</translation>
+<translation id="6470823736074966819">Thulisa izaziso</translation>
 <translation id="6472893788822429178">Bonisa inkinobho yasekhaya</translation>
 <translation id="6474498546677193336">Akukwazanga ukuyeka ukwabelana ngoba uhlelo lokusebenza lusebenzisa le folda. Ifolda ngeke yabelanwe uma i-Linux seyiseduze nokucisha.</translation>
 <translation id="6474884162850599008">Nqamula i-akhawunti ye-Google Drayivu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb
index 07ed2c7..b91e057 100644
--- a/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -87,7 +87,7 @@
 <translation id="2857540653560290388">Chromeను ప్రారంభిస్తోంది...</translation>
 <translation id="2857972467023607093">ఈ ఖాతాతో ఇప్పటికే ఒక Chrome ప్రొఫైల్ ఉంది</translation>
 <translation id="2861074815332034794">Chromeను అప్‌డేట్ చేస్తోంది (<ph name="PROGRESS_PERCENT" />)</translation>
-<translation id="2871893339301912279">మీరు Chromeకు సైన్ ఇన్ చేసారు!</translation>
+<translation id="2871893339301912279">మీరు Chromeకు సైన్ ఇన్ చేశారు!</translation>
 <translation id="2885378588091291677">విధి సంచాలకులు</translation>
 <translation id="2888126860611144412">Chrome పరిచయం</translation>
 <translation id="2926676257163822632">బలహీనమైన పాస్‌వర్డ్‌లను ఊహించడం చాలా సులభం. <ph name="BEGIN_LINK" />మీ కోసం శక్తివంతమైన పాస్‌వర్డ్‌లను క్రియేట్ చేయడం, గుర్తుంచుకోవడం<ph name="END_LINK" /> చేయడానికి Chromeను అనుమతించండి.</translation>
@@ -150,7 +150,7 @@
 <translation id="4480040274068703980">సైన్ ఇన్ చేయడంలో ఎర్రర్ ఏర్పడినందున Chrome OS మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
 <translation id="4521185804071812304">ఆప్షనల్: విశ్లేషణ మరియు వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా Chrome OS ఫీచర్‌లు మరియు పనితీరును మెరుగుపరచడంలో సహాయపడండి.</translation>
 <translation id="4561051373932531560">మీరు Google Chrome వెబ్‌లో ఫోన్ నంబర్ క్లిక్ చేసేలా అవ‌కాశం ఇస్తుంది మరియు Skypeతో కాల్ చేస్తుంది!</translation>
-<translation id="4567424176335768812">మీరు <ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేసారు. ఇప్పుడు మీరు సైన్ ఇన్ చేసిన అన్ని పరికరాల్లో మీ బుక్‌మార్క్‌లు, చరిత్ర మరియు ఇతర సెట్టింగ్‌లను యాక్సెస్ చేయవచ్చు.</translation>
+<translation id="4567424176335768812">మీరు <ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేశారు. ఇప్పుడు మీరు సైన్ ఇన్ చేసిన అన్ని పరికరాల్లో మీ బుక్‌మార్క్‌లు, చరిత్ర మరియు ఇతర సెట్టింగ్‌లను యాక్సెస్ చేయవచ్చు.</translation>
 <translation id="4571503333518166079">Chrome నోటిఫికేషన్ సెట్టింగ్‌లలోకి వెళ్లు</translation>
 <translation id="459622048091363950">ఓసారి Chromeకి యాక్సెస్ లభించాక, ఆపై వెబ్‌సైట్‌లకు ఏమైనా యాక్సెస్‌ కావాలంటే అవి మిమ్మల్ని అడగవచ్చు.</translation>
 <translation id="4600710005438004015">Chromeను తాజా వెర్షన్‌కు అప్‌డేట్ చేయడం సాధ్యం కాలేదు, కాబట్టి మీరు కొత్త ఫీచర్‌లు మరియు భద్రతా పరిష్కారాలను పొందలేరు.</translation>
@@ -241,7 +241,7 @@
 <translation id="7296210096911315575">ముఖ్యమైన వినియోగ, భద్రతా సమాచారం</translation>
 <translation id="7308322188646931570">ఫైళ్లను డౌన్‌లోడ్ చేయడానికి Chromeకు నిల్వ యాక్సెస్ అవసరం</translation>
 <translation id="7339898014177206373">కొత్త విండో</translation>
-<translation id="7398801000654795464">మీరు <ph name="USER_EMAIL_ADDRESS" />గా Chromeకు సైన్ ఇన్ చేసారు. మళ్లీ సైన్ ఇన్ చేయడానికి, దయచేసి ఇదే ఖాతాను ఉపయోగించండి.</translation>
+<translation id="7398801000654795464">మీరు <ph name="USER_EMAIL_ADDRESS" />గా Chromeకు సైన్ ఇన్ చేశారు. మళ్లీ సైన్ ఇన్ చేయడానికి, దయచేసి ఇదే ఖాతాను ఉపయోగించండి.</translation>
 <translation id="7408085963519505752">Chrome OS నిబంధనలు</translation>
 <translation id="7419046106786626209">మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున Chrome OS మీ డేటాను సింక్ చేయ‌లేక‌పోయింది.</translation>
 <translation id="7486227612705979895">అడ్రస్ బార్‌లో మీకు సూచనలు ఇవ్వడానికి, Chrome మీ డ్రైవ్‌ను యాక్సెస్ చేస్తుంది</translation>
@@ -250,7 +250,7 @@
 <translation id="7592736734348559088">మీ ఖాతా సైన్-ఇన్ వివరాల గడువు ముగిసినందున Google Chrome మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
 <translation id="7626032353295482388">Chromeకు స్వాగతం</translation>
 <translation id="7629695634924605473">మీ పాస్‌వర్డ్‌లు ఎప్పుడైనా హ్యాక్ అయితే, Chrome మీకు తెలియచేస్తుంది</translation>
-<translation id="7641148173327520642"><ph name="TARGET_URL_HOSTNAME" />ను యాక్సెస్ చేయడం కోసం <ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరిచే విధంగా Google Chromeను మీ సిస్టమ్ నిర్వాహకుడు కాన్ఫిగర్ చేసారు.</translation>
+<translation id="7641148173327520642"><ph name="TARGET_URL_HOSTNAME" />ను యాక్సెస్ చేయడం కోసం <ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరిచే విధంగా Google Chromeను మీ సిస్టమ్ నిర్వాహకుడు కాన్ఫిగర్ చేశారు.</translation>
 <translation id="7651907282515937834">Chrome ఎంటర్‌ప్రైజ్ లోగో</translation>
 <translation id="7665553140559834626">&amp;Chrome OSను అప్‌డేట్ చేయడానికి రీ-లాంచ్ చేయండి</translation>
 <translation id="7747138024166251722">ఇన్‌స్టాలర్ ఒక తాత్కాలిక డైరక్టరీని సృష్టించలేకపోయింది. సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి దయచేసి ఖాళీ డిస్క్ స్థలం, అనుమతిని తనిఖీ చేయండి.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index a91452b..11249de 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -937,8 +937,8 @@
     "optimization_guide/blink/blink_optimization_guide_inquirer.h",
     "optimization_guide/blink/blink_optimization_guide_web_contents_observer.cc",
     "optimization_guide/blink/blink_optimization_guide_web_contents_observer.h",
-    "optimization_guide/optimization_guide_hints_manager.cc",
-    "optimization_guide/optimization_guide_hints_manager.h",
+    "optimization_guide/chrome_hints_manager.cc",
+    "optimization_guide/chrome_hints_manager.h",
     "optimization_guide/optimization_guide_keyed_service.cc",
     "optimization_guide/optimization_guide_keyed_service.h",
     "optimization_guide/optimization_guide_keyed_service_factory.cc",
@@ -2453,6 +2453,8 @@
     ]
     if (!is_official_build) {
       deps += [
+        "//ash/webui/sample_system_web_app_ui",
+        "//ash/webui/sample_system_web_app_ui/mojom",
         "//chromeos/components/demo_mode_app_ui",
         "//chromeos/components/telemetry_extension_ui",
         "//chromeos/components/telemetry_extension_ui/mojom",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index be2aaf3a..5c0d732 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4108,12 +4108,6 @@
      kOsCrOS,
      SINGLE_VALUE_TYPE(
          ::switches::kEnableExperimentalAccessibilityDictationExtension)},
-    {"enable-experimental-accessibility-dictation-listening",
-     flag_descriptions::kExperimentalAccessibilityDictationListeningName,
-     flag_descriptions::kExperimentalAccessibilityDictationListeningDescription,
-     kOsCrOS,
-     FEATURE_VALUE_TYPE(
-         features::kExperimentalAccessibilityDictationListening)},
     {"enable-experimental-accessibility-dictation-offline",
      flag_descriptions::kExperimentalAccessibilityDictationOfflineName,
      flag_descriptions::kExperimentalAccessibilityDictationOfflineDescription,
@@ -6606,11 +6600,6 @@
      flag_descriptions::kEnableTranslateSubFramesDescription, kOsAll,
      FEATURE_VALUE_TYPE(translate::kTranslateSubFrames)},
 
-    {"service-worker-subresource-filter",
-     flag_descriptions::kServiceWorkerSubresourceFilterName,
-     flag_descriptions::kServiceWorkerSubresourceFilterDescription, kOsAll,
-     FEATURE_VALUE_TYPE(features::kServiceWorkerSubresourceFilter)},
-
     {"conversion-measurement-debug-mode",
      flag_descriptions::kConversionMeasurementDebugModeName,
      flag_descriptions::kConversionMeasurementDebugModeDescription, kOsAll,
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc
index c68f6787..734385e 100644
--- a/chrome/browser/android/autofill_assistant/client_android.cc
+++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -40,6 +40,7 @@
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
 using base::android::AttachCurrentThread;
@@ -206,8 +207,10 @@
     const base::android::JavaParamRef<jobjectArray>& jparameter_names,
     const base::android::JavaParamRef<jobjectArray>& jparameter_values,
     const base::android::JavaParamRef<jobject>& jcallback) {
-  if (!controller_)
-    CreateController(nullptr, absl::nullopt);
+  if (!controller_) {
+    CreateController(ui_controller_android_utils::GetServiceToInject(env, this),
+                     absl::nullopt);
+  }
 
   base::android::ScopedJavaGlobalRef<jobject> scoped_jcallback(env, jcallback);
   controller_->Track(
@@ -367,6 +370,18 @@
                                                    std::move(trigger_context));
 }
 
+void ClientAndroid::ShowFatalError(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& jcaller) {
+  if (!controller_) {
+    return;
+  }
+  controller_->RequireUI();
+  controller_->OnFatalError(
+      l10n_util::GetStringUTF8(IDS_AUTOFILL_ASSISTANT_DEFAULT_ERROR),
+      /*show_feedback_chip = */ false, Metrics::DropOutReason::NO_SCRIPTS);
+}
+
 int ClientAndroid::FindDirectAction(const std::string& action_name) {
   // It's too late to create a controller. This should have been done in
   // FetchWebsiteActions.
diff --git a/chrome/browser/android/autofill_assistant/client_android.h b/chrome/browser/android/autofill_assistant/client_android.h
index 5fae916..9f8df16 100644
--- a/chrome/browser/android/autofill_assistant/client_android.h
+++ b/chrome/browser/android/autofill_assistant/client_android.h
@@ -98,6 +98,9 @@
       const base::android::JavaParamRef<jobjectArray>& jargument_values,
       const base::android::JavaParamRef<jobject>& joverlay_coordinator);
 
+  void ShowFatalError(JNIEnv* env,
+                      const base::android::JavaParamRef<jobject>& jcaller);
+
   // Overrides Client
   void AttachUI() override;
   void DestroyUI() override;
diff --git a/chrome/browser/android/autofill_assistant/starter_android.cc b/chrome/browser/android/autofill_assistant/starter_android.cc
index 06237d6e..5299a6b 100644
--- a/chrome/browser/android/autofill_assistant/starter_android.cc
+++ b/chrome/browser/android/autofill_assistant/starter_android.cc
@@ -9,7 +9,6 @@
 #include "base/android/scoped_java_ref.h"
 #include "base/time/default_tick_clock.h"
 #include "chrome/android/features/autofill_assistant/jni_headers/AssistantDependenciesImpl_jni.h"
-#include "chrome/android/features/autofill_assistant/jni_headers/AutofillAssistantServiceInjector_jni.h"
 #include "chrome/android/features/autofill_assistant/jni_headers_public/Starter_jni.h"
 #include "chrome/browser/android/autofill_assistant/client_android.h"
 #include "chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h"
@@ -72,15 +71,8 @@
 std::unique_ptr<ServiceRequestSender>
 StarterAndroid::GetTriggerScriptRequestSenderToInject() {
   DCHECK(GetFeatureModuleInstalled());
-  jlong jtest_service_request_sender_to_inject =
-      Java_AutofillAssistantServiceInjector_getServiceRequestSenderToInject(
-          base::android::AttachCurrentThread());
-  std::unique_ptr<ServiceRequestSender> test_service_request_sender;
-  if (jtest_service_request_sender_to_inject) {
-    test_service_request_sender.reset(static_cast<ServiceRequestSender*>(
-        reinterpret_cast<void*>(jtest_service_request_sender_to_inject)));
-  }
-  return test_service_request_sender;
+  return ui_controller_android_utils::GetServiceRequestSenderToInject(
+      base::android::AttachCurrentThread());
 }
 
 WebsiteLoginManager* StarterAndroid::GetWebsiteLoginManager() const {
@@ -266,18 +258,10 @@
   DCHECK(client_android);
 
   JNIEnv* env = base::android::AttachCurrentThread();
-  jlong jtest_service_to_inject =
-      Java_AutofillAssistantServiceInjector_getServiceToInject(
-          env, reinterpret_cast<intptr_t>(client_android));
-  std::unique_ptr<Service> test_service = nullptr;
-  if (jtest_service_to_inject) {
-    test_service.reset(static_cast<Service*>(
-        reinterpret_cast<void*>(jtest_service_to_inject)));
-  }
-
   CreateJavaDependenciesIfNecessary();
   client_android->Start(
-      url, std::move(trigger_context), std::move(test_service),
+      url, std::move(trigger_context),
+      ui_controller_android_utils::GetServiceToInject(env, client_android),
       Java_AssistantDependenciesImpl_transferOnboardingOverlayCoordinator(
           env, java_dependencies_),
       trigger_script);
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android_utils.cc b/chrome/browser/android/autofill_assistant/ui_controller_android_utils.cc
index 261c867a..c6553db 100644
--- a/chrome/browser/android/autofill_assistant/ui_controller_android_utils.cc
+++ b/chrome/browser/android/autofill_assistant/ui_controller_android_utils.cc
@@ -14,8 +14,12 @@
 #include "chrome/android/features/autofill_assistant/jni_headers/AssistantDrawable_jni.h"
 #include "chrome/android/features/autofill_assistant/jni_headers/AssistantInfoPopup_jni.h"
 #include "chrome/android/features/autofill_assistant/jni_headers/AssistantValue_jni.h"
+#include "chrome/android/features/autofill_assistant/jni_headers/AutofillAssistantServiceInjector_jni.h"
+#include "chrome/browser/android/autofill_assistant/client_android.h"
 #include "chrome/browser/android/tab_android.h"
 #include "components/autofill_assistant/browser/generic_ui_java_generated_enums.h"
+#include "components/autofill_assistant/browser/service/service.h"
+#include "components/autofill_assistant/browser/service/service_request_sender.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/android/gurl_android.h"
@@ -522,5 +526,31 @@
   return tab_android->IsCustomTab();
 }
 
+std::unique_ptr<Service> GetServiceToInject(JNIEnv* env,
+                                            ClientAndroid* client_android) {
+  jlong jtest_service_to_inject =
+      Java_AutofillAssistantServiceInjector_getServiceToInject(
+          env, reinterpret_cast<intptr_t>(client_android));
+  std::unique_ptr<Service> test_service = nullptr;
+  if (jtest_service_to_inject) {
+    test_service.reset(static_cast<Service*>(
+        reinterpret_cast<void*>(jtest_service_to_inject)));
+  }
+  return test_service;
+}
+
+std::unique_ptr<ServiceRequestSender> GetServiceRequestSenderToInject(
+    JNIEnv* env) {
+  jlong jtest_service_request_sender_to_inject =
+      Java_AutofillAssistantServiceInjector_getServiceRequestSenderToInject(
+          env);
+  std::unique_ptr<ServiceRequestSender> test_service_request_sender;
+  if (jtest_service_request_sender_to_inject) {
+    test_service_request_sender.reset(static_cast<ServiceRequestSender*>(
+        reinterpret_cast<void*>(jtest_service_request_sender_to_inject)));
+  }
+  return test_service_request_sender;
+}
+
 }  // namespace ui_controller_android_utils
 }  // namespace autofill_assistant
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android_utils.h b/chrome/browser/android/autofill_assistant/ui_controller_android_utils.h
index 900eb4d..69004936 100644
--- a/chrome/browser/android/autofill_assistant/ui_controller_android_utils.h
+++ b/chrome/browser/android/autofill_assistant/ui_controller_android_utils.h
@@ -20,6 +20,10 @@
 #include "url/gurl.h"
 
 namespace autofill_assistant {
+class Service;
+class ServiceRequestSender;
+class ClientAndroid;
+
 namespace ui_controller_android_utils {
 
 // Returns a 32-bit Integer representing |color_string| in Java, or null if
@@ -125,6 +129,17 @@
 // |web_contents| is valid and currently owned by a tab.
 bool IsCustomTab(content::WebContents* web_contents);
 
+// Returns the service to inject, if any, for |client_android|. This is used for
+// integration tests, which provide a test service to communicate with.
+std::unique_ptr<Service> GetServiceToInject(JNIEnv* env,
+                                            ClientAndroid* client_android);
+
+// Returns the service request sender to inject, if any. This is used for
+// integration tests which provide a test service request sender to communicate
+// with.
+std::unique_ptr<ServiceRequestSender> GetServiceRequestSenderToInject(
+    JNIEnv* env);
+
 }  // namespace ui_controller_android_utils
 }  //  namespace autofill_assistant
 
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.cc b/chrome/browser/apps/app_service/app_service_proxy_base.cc
index d060053..29f4e82d 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.cc
@@ -205,19 +205,20 @@
 
 void AppServiceProxyBase::LaunchAppWithFiles(
     const std::string& app_id,
-    apps::mojom::LaunchContainer container,
     int32_t event_flags,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::FilePathsPtr file_paths) {
   if (app_service_.is_connected()) {
     app_registry_cache_.ForOneApp(
-        app_id, [this, container, event_flags, launch_source,
+        app_id, [this, event_flags, launch_source,
                  &file_paths](const apps::AppUpdate& update) {
           if (MaybeShowLaunchPreventionDialog(update)) {
             return;
           }
 
-          RecordAppPlatformMetrics(profile_, update, launch_source, container);
+          RecordAppPlatformMetrics(
+              profile_, update, launch_source,
+              apps::mojom::LaunchContainer::kLaunchContainerNone);
 
           // TODO(crbug/1117655): File manager records metrics for apps it
           // launched. So we only record launches from other places. We should
@@ -227,9 +228,9 @@
             RecordAppLaunch(update.AppId(), launch_source);
           }
 
-          app_service_->LaunchAppWithFiles(
-              update.AppType(), update.AppId(), container, event_flags,
-              launch_source, std::move(file_paths));
+          app_service_->LaunchAppWithFiles(update.AppType(), update.AppId(),
+                                           event_flags, launch_source,
+                                           std::move(file_paths));
 
           PerformPostLaunchTasks(launch_source);
         });
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.h b/chrome/browser/apps/app_service/app_service_proxy_base.h
index 995982b..427c6671 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.h
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.h
@@ -100,7 +100,6 @@
   // |launch_source| is the possible app launch sources, e.g. from Shelf, from
   // the search box, etc.
   void LaunchAppWithFiles(const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths);
diff --git a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
index 08b62d03..04757587 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
@@ -253,19 +253,20 @@
 
 void AppServiceProxyLacros::LaunchAppWithFiles(
     const std::string& app_id,
-    apps::mojom::LaunchContainer container,
     int32_t event_flags,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::FilePathsPtr file_paths) {
   if (app_service_.is_connected()) {
     app_registry_cache_.ForOneApp(
-        app_id, [this, container, event_flags, launch_source,
+        app_id, [this, event_flags, launch_source,
                  &file_paths](const apps::AppUpdate& update) {
           if (MaybeShowLaunchPreventionDialog(update)) {
             return;
           }
 
-          RecordAppPlatformMetrics(profile_, update, launch_source, container);
+          RecordAppPlatformMetrics(
+              profile_, update, launch_source,
+              apps::mojom::LaunchContainer::kLaunchContainerNone);
 
           // TODO(crbug/1117655): File manager records metrics for apps it
           // launched. So we only record launches from other places. We should
@@ -275,9 +276,9 @@
             RecordAppLaunch(update.AppId(), launch_source);
           }
 
-          app_service_->LaunchAppWithFiles(
-              update.AppType(), update.AppId(), container, event_flags,
-              launch_source, std::move(file_paths));
+          app_service_->LaunchAppWithFiles(update.AppType(), update.AppId(),
+                                           event_flags, launch_source,
+                                           std::move(file_paths));
         });
   }
 }
diff --git a/chrome/browser/apps/app_service/app_service_proxy_lacros.h b/chrome/browser/apps/app_service/app_service_proxy_lacros.h
index d6fdc52..c93a349 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_lacros.h
+++ b/chrome/browser/apps/app_service/app_service_proxy_lacros.h
@@ -109,7 +109,6 @@
   // |launch_source| is the possible app launch sources, e.g. from Shelf, from
   // the search box, etc.
   void LaunchAppWithFiles(const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths);
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_base.cc b/chrome/browser/apps/app_service/publishers/extension_apps_base.cc
index e597ba77..a504a8bb 100644
--- a/chrome/browser/apps/app_service/publishers/extension_apps_base.cc
+++ b/chrome/browser/apps/app_service/publishers/extension_apps_base.cc
@@ -444,12 +444,15 @@
 
 void ExtensionAppsBase::LaunchAppWithFiles(
     const std::string& app_id,
-    apps::mojom::LaunchContainer container,
     int32_t event_flags,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::FilePathsPtr file_paths) {
+  const auto* extension = MaybeGetExtension(app_id);
   AppLaunchParams params(
-      app_id, container, ui::DispositionFromEventFlags(event_flags),
+      app_id,
+      extensions::GetLaunchContainer(extensions::ExtensionPrefs::Get(profile_),
+                                     extension),
+      ui::DispositionFromEventFlags(event_flags),
       GetAppLaunchSource(launch_source), display::kDefaultDisplayId);
   for (const auto& file_path : file_paths->file_paths) {
     params.launch_files.push_back(file_path);
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_base.h b/chrome/browser/apps/app_service/publishers/extension_apps_base.h
index f94df59f..8d0049f 100644
--- a/chrome/browser/apps/app_service/publishers/extension_apps_base.h
+++ b/chrome/browser/apps/app_service/publishers/extension_apps_base.h
@@ -125,7 +125,6 @@
               apps::mojom::LaunchSource launch_source,
               apps::mojom::WindowInfoPtr window_info) override;
   void LaunchAppWithFiles(const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths) override;
diff --git a/chrome/browser/apps/app_service/subscriber_crosapi.cc b/chrome/browser/apps/app_service/subscriber_crosapi.cc
index 4c75205..c4cef23 100644
--- a/chrome/browser/apps/app_service/subscriber_crosapi.cc
+++ b/chrome/browser/apps/app_service/subscriber_crosapi.cc
@@ -23,6 +23,15 @@
          app_type == apps::mojom::AppType::kStandaloneBrowserExtension;
 }
 
+bool Accepts(const std::vector<apps::mojom::AppPtr>& deltas) {
+  for (const auto& delta : deltas) {
+    if (!Accepts(delta->app_type)) {
+      return false;
+    }
+  }
+  return true;
+}
+
 }  // namespace
 
 namespace apps {
@@ -47,7 +56,7 @@
 void SubscriberCrosapi::OnApps(std::vector<apps::mojom::AppPtr> deltas,
                                apps::mojom::AppType app_type,
                                bool should_notify_initialized) {
-  if (Accepts(app_type) && subscriber_.is_bound()) {
+  if (Accepts(app_type) && Accepts(deltas) && subscriber_.is_bound()) {
     subscriber_->OnApps(apps_util::CloneApps(deltas), app_type,
                         should_notify_initialized);
   }
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc
index 2f84e6e..43c8087 100644
--- a/chrome/browser/apps/platform_apps/app_browsertest.cc
+++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -241,7 +241,7 @@
     launch_files->file_paths.push_back(file_path);
     apps::AppServiceProxyFactory::GetForProfile(browser()->profile())
         ->LaunchAppWithFiles(
-            extension->id(), apps::mojom::LaunchContainer::kLaunchContainerNone,
+            extension->id(),
             apps::GetEventFlags(
                 apps::mojom::LaunchContainer::kLaunchContainerNone,
                 WindowOpenDisposition::NEW_FOREGROUND_TAB,
diff --git a/chrome/browser/ash/accessibility/dictation.cc b/chrome/browser/ash/accessibility/dictation.cc
index 476487b..e8465b0 100644
--- a/chrome/browser/ash/accessibility/dictation.cc
+++ b/chrome/browser/ash/accessibility/dictation.cc
@@ -39,17 +39,9 @@
 namespace {
 
 // Length of timeout to cancel recognition if there's no speech heard.
-static const base::TimeDelta kNetworkNoSpeechTimeout =
-    base::TimeDelta::FromSeconds(5);
-static const base::TimeDelta kDeviceNoSpeechTimeout =
+static const base::TimeDelta kNoSpeechTimeout =
     base::TimeDelta::FromSeconds(10);
 
-// Length of timeout to cancel recognition if no different results are received.
-static const base::TimeDelta kNetworkNoNewSpeechTimeout =
-    base::TimeDelta::FromSeconds(2);
-static const base::TimeDelta kDeviceNoNewSpeechTimeout =
-    base::TimeDelta::FromSeconds(5);
-
 const char kDefaultProfileLocale[] = "en-US";
 
 // Determines the user's language or locale from the system, first trying
@@ -244,9 +236,7 @@
 Dictation::Dictation(Profile* profile)
     : current_state_(SPEECH_RECOGNIZER_OFF),
       composition_(std::make_unique<ui::CompositionText>()),
-      profile_(profile),
-      no_speech_timeout_(kNetworkNoSpeechTimeout),
-      no_new_speech_timeout_(kNetworkNoNewSpeechTimeout) {
+      profile_(profile) {
   if (GetInputContext() && GetInputContext()->GetInputMethod())
     GetInputContext()->GetInputMethod()->AddObserver(this);
 }
@@ -285,8 +275,6 @@
         /*recognition_mode_ime=*/true, /*enable_formatting=*/false);
     base::UmaHistogramBoolean("Accessibility.CrosDictation.UsedOnDeviceSpeech",
                               true);
-    no_speech_timeout_ = kDeviceNoSpeechTimeout;
-    no_new_speech_timeout_ = kDeviceNoNewSpeechTimeout;
     used_on_device_speech_ = true;
   } else {
     speech_recognizer_ = std::make_unique<NetworkSpeechRecognizer>(
@@ -297,11 +285,6 @@
         locale);
     base::UmaHistogramBoolean("Accessibility.CrosDictation.UsedOnDeviceSpeech",
                               false);
-    no_speech_timeout_ =
-        features::IsExperimentalAccessibilityDictationListeningEnabled()
-            ? kDeviceNoSpeechTimeout
-            : kNetworkNoSpeechTimeout;
-    no_new_speech_timeout_ = kNetworkNoNewSpeechTimeout;
     used_on_device_speech_ = false;
   }
   listening_duration_timer_ = base::ElapsedTimer();
@@ -328,13 +311,10 @@
   // Restart the timer when we have a final result. If we receive any new or
   // changed text, restart the timer to give the user more time to speak. (The
   // timer is recording the amount of time since the most recent utterance.)
+  StartSpeechTimeout(kNoSpeechTimeout);
   if (is_final) {
-    StartSpeechTimeout(no_speech_timeout_);
+    CommitCurrentText();
   } else {
-    StartSpeechTimeout(
-        features::IsExperimentalAccessibilityDictationListeningEnabled()
-            ? no_speech_timeout_
-            : no_new_speech_timeout_);
     // If ChromeVox is enabled, we don't want to show intermediate results
     if (AccessibilityManager::Get()->IsSpokenFeedbackEnabled())
       return;
@@ -342,13 +322,6 @@
     ui::IMEInputContextHandlerInterface* input_context = GetInputContext();
     if (input_context)
       input_context->UpdateCompositionText(*composition_, 0, true);
-    return;
-  }
-  if (features::IsExperimentalAccessibilityDictationListeningEnabled()) {
-    CommitCurrentText();
-  } else {
-    // Turn off after finalized speech.
-    DictationOff();
   }
 }
 
@@ -362,7 +335,7 @@
     audio::SoundsManager::Get()->Play(static_cast<int>(Sound::kDictationStart));
     // Start a timeout to ensure if no speech happens we will eventually turn
     // ourselves off.
-    StartSpeechTimeout(no_speech_timeout_);
+    StartSpeechTimeout(kNoSpeechTimeout);
   } else if (new_state == SPEECH_RECOGNIZER_ERROR) {
     DictationOff();
     next_state = SPEECH_RECOGNIZER_OFF;
diff --git a/chrome/browser/ash/accessibility/dictation.h b/chrome/browser/ash/accessibility/dictation.h
index 08a7fb6..cf6dec8 100644
--- a/chrome/browser/ash/accessibility/dictation.h
+++ b/chrome/browser/ash/accessibility/dictation.h
@@ -88,8 +88,6 @@
   Profile* profile_;
 
   base::OneShotTimer speech_timeout_;
-  base::TimeDelta no_speech_timeout_;
-  base::TimeDelta no_new_speech_timeout_;
 
   // Used for metrics.
   bool used_on_device_speech_ = false;
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc
index 18669879..7d14e0f 100644
--- a/chrome/browser/ash/accessibility/dictation_browsertest.cc
+++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -42,8 +42,6 @@
 const char kFinalSpeechResult[] = "hello world";
 const char16_t kFinalSpeechResult16[] = u"hello world";
 const int kNoSpeechTimeoutInSeconds = 10;
-const int kShortNoSpeechTimeoutInSeconds = 5;
-const int kVeryShortNoSpeechTimeoutInSeconds = 2;
 
 PrefService* GetActiveUserPrefs() {
   return ProfileManager::GetActiveUserProfile()->GetPrefs();
@@ -51,16 +49,11 @@
 
 }  // namespace
 
-enum DictationListeningTestVariant {
-  kTestDefaultListening,
-  kTestWithLongerListening
-};
 enum DictationNetworkTestVariant { kNetworkRecognition, kOnDeviceRecognition };
 
-class DictationTest : public InProcessBrowserTest,
-                      public ::testing::WithParamInterface<
-                          std::pair<DictationListeningTestVariant,
-                                    DictationNetworkTestVariant>> {
+class DictationTest
+    : public InProcessBrowserTest,
+      public ::testing::WithParamInterface<DictationNetworkTestVariant> {
  protected:
   DictationTest() {
     input_context_handler_ = std::make_unique<ui::MockIMEInputContextHandler>();
@@ -74,7 +67,7 @@
 
   // InProcessBrowserTest:
   void SetUp() override {
-    if (GetParam().second == kNetworkRecognition) {
+    if (GetParam() == kNetworkRecognition) {
       // Use a fake speech recognition manager so that we don't end up with an
       // error finding the audio input device when running on a headless
       // environment.
@@ -95,14 +88,7 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     std::vector<base::Feature> enabled_features;
     std::vector<base::Feature> disabled_features;
-    if (GetParam().first == kTestWithLongerListening) {
-      enabled_features.push_back(
-          ::features::kExperimentalAccessibilityDictationListening);
-    } else {
-      disabled_features.push_back(
-          ::features::kExperimentalAccessibilityDictationListening);
-    }
-    if (GetParam().second == kOnDeviceRecognition) {
+    if (GetParam() == kOnDeviceRecognition) {
       enabled_features.push_back(
           ::features::kExperimentalAccessibilityDictationOffline);
       enabled_features.push_back(ash::features::kOnDeviceSpeechRecognition);
@@ -120,7 +106,7 @@
     // initializes (which is when the global SodaInstaller gets created).
     // Lastly, do this before Dictation is enabled so that we don't initiate a
     // SODA download when Dictation is enabled.
-    if (GetParam().second == kOnDeviceRecognition) {
+    if (GetParam() == kOnDeviceRecognition) {
       speech::SodaInstaller::GetInstance()->NotifySodaInstalledForTesting();
     }
 
@@ -130,7 +116,7 @@
     GetActiveUserPrefs()->SetBoolean(
         prefs::kDictationAcceleratorDialogHasBeenAccepted, true);
     ash::Shell::Get()->accessibility_controller()->dictation().SetEnabled(true);
-    if (GetParam().second == kOnDeviceRecognition) {
+    if (GetParam() == kOnDeviceRecognition) {
       // Replaces normal CrosSpeechRecognitionService with a fake one.
       CrosSpeechRecognitionServiceFactory::GetInstanceForTest()
           ->SetTestingFactoryAndUse(
@@ -154,7 +140,7 @@
   void EnableChromeVox() { GetManager()->EnableSpokenFeedback(true); }
 
   void SendSpeechResult(const char* result, bool is_final) {
-    if (GetParam().second == kNetworkRecognition) {
+    if (GetParam() == kNetworkRecognition) {
       if (!is_final) {
         // FakeSpeechRecognitionManager can only send final results,
         // so if this isn't final just send to Dictation directly.
@@ -177,7 +163,7 @@
   }
 
   void WaitForRecognitionStarted() {
-    if (GetParam().second == kNetworkRecognition) {
+    if (GetParam() == kNetworkRecognition) {
       // Wait for interaction on UI thread.
       fake_speech_recognition_manager_->WaitForRecognitionStarted();
     } else {
@@ -188,7 +174,7 @@
   }
 
   void WaitForRecognitionEnded() {
-    if (GetParam().second == kNetworkRecognition) {
+    if (GetParam() == kNetworkRecognition) {
       // Wait for interaction on UI thread.
       fake_speech_recognition_manager_->WaitForRecognitionEnded();
     }
@@ -211,22 +197,6 @@
     return &(GetManager()->dictation_->speech_timeout_);
   }
 
-  base::TimeDelta GetNoSpeechTimeout() {
-    if (GetParam().first == kTestDefaultListening) {
-      return base::TimeDelta::FromSeconds(GetParam().second ==
-                                                  kNetworkRecognition
-                                              ? kShortNoSpeechTimeoutInSeconds
-                                              : kNoSpeechTimeoutInSeconds);
-    }
-    return base::TimeDelta::FromSeconds(kNoSpeechTimeoutInSeconds);
-  }
-
-  base::TimeDelta GetNoNewSpeechTimeout() {
-    return base::TimeDelta::FromSeconds(GetParam().second == kNetworkRecognition
-                                            ? kVeryShortNoSpeechTimeoutInSeconds
-                                            : kShortNoSpeechTimeoutInSeconds);
-  }
-
   void ToggleDictation() {
     // We are trying to toggle on if Dictation is currently off.
     bool will_toggle_on = IsDictationOff();
@@ -262,22 +232,10 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-INSTANTIATE_TEST_SUITE_P(
-    TestWithDefaultAndLongerListening,
-    DictationTest,
-    ::testing::Values(
-        std::pair<DictationListeningTestVariant, DictationNetworkTestVariant>(
-            kTestDefaultListening,
-            kNetworkRecognition),
-        std::pair<DictationListeningTestVariant, DictationNetworkTestVariant>(
-            kTestWithLongerListening,
-            kNetworkRecognition),
-        std::pair<DictationListeningTestVariant, DictationNetworkTestVariant>(
-            kTestDefaultListening,
-            kOnDeviceRecognition),
-        std::pair<DictationListeningTestVariant, DictationNetworkTestVariant>(
-            kTestWithLongerListening,
-            kOnDeviceRecognition)));
+INSTANTIATE_TEST_SUITE_P(TestWithNetworkAndDeviceRecognition,
+                         DictationTest,
+                         ::testing::Values(kNetworkRecognition,
+                                           kOnDeviceRecognition));
 
 IN_PROC_BROWSER_TEST_P(DictationTest, RecognitionEnds) {
   ToggleDictation();
@@ -295,14 +253,11 @@
   EXPECT_EQ(1, input_context_handler_->commit_text_call_count());
   EXPECT_EQ(kFinalSpeechResult16, input_context_handler_->last_commit_text());
 
-  if (GetParam().first == kTestDefaultListening) {
-    EXPECT_TRUE(IsDictationOff());
-  } else {
     EXPECT_FALSE(IsDictationOff());
     base::OneShotTimer* timer = GetTimer();
     ASSERT_TRUE(timer);
-    EXPECT_EQ(timer->GetCurrentDelay(), GetNoSpeechTimeout());
-  }
+    EXPECT_EQ(timer->GetCurrentDelay(),
+              base::TimeDelta::FromSeconds(kNoSpeechTimeoutInSeconds));
 }
 
 IN_PROC_BROWSER_TEST_P(DictationTest, RecognitionEndsWithChromeVoxEnabled) {
@@ -330,14 +285,11 @@
   EXPECT_EQ(1, input_context_handler_->commit_text_call_count());
   EXPECT_EQ(kFinalSpeechResult16, input_context_handler_->last_commit_text());
 
-  if (GetParam().first == kTestDefaultListening) {
-    EXPECT_TRUE(IsDictationOff());
-  } else {
     EXPECT_FALSE(IsDictationOff());
     base::OneShotTimer* timer = GetTimer();
     ASSERT_TRUE(timer);
-    EXPECT_EQ(timer->GetCurrentDelay(), GetNoSpeechTimeout());
-  }
+    EXPECT_EQ(timer->GetCurrentDelay(),
+              base::TimeDelta::FromSeconds(kNoSpeechTimeoutInSeconds));
 }
 
 IN_PROC_BROWSER_TEST_P(DictationTest, RecognitionEndsWithNoSpeech) {
@@ -345,7 +297,8 @@
   EXPECT_FALSE(IsDictationOff());
   base::OneShotTimer* timer = GetTimer();
   ASSERT_TRUE(timer);
-  EXPECT_EQ(timer->GetCurrentDelay(), GetNoSpeechTimeout());
+  EXPECT_EQ(timer->GetCurrentDelay(),
+            base::TimeDelta::FromSeconds(kNoSpeechTimeoutInSeconds));
   // Firing the timer, which simluates waiting for some time with no events,
   // should end dictation.
   timer->FireNow();
@@ -358,11 +311,8 @@
   SendSpeechResult(kFirstSpeechResult, false /* is_final */);
   base::OneShotTimer* timer = GetTimer();
   ASSERT_TRUE(timer);
-  // If this is the test with continuous listening, use the normal timeout,
-  // otherwise use the shorter timeout for no new speech.
-  EXPECT_EQ(timer->GetCurrentDelay(), GetParam().first == kTestDefaultListening
-                                          ? GetNoNewSpeechTimeout()
-                                          : GetNoSpeechTimeout());
+  EXPECT_EQ(timer->GetCurrentDelay(),
+            base::TimeDelta::FromSeconds(kNoSpeechTimeoutInSeconds));
   // Firing the timer, which simluates waiting for some time without new speech,
   // should end dictation.
   timer->FireNow();
@@ -434,22 +384,12 @@
   ui::MockIMEInputContextHandler input_context_handler2;
   ui::IMEBridge::Get()->SetInputContextHandler(&input_context_handler2);
 
-  if (GetParam().first == kTestDefaultListening) {
-    // Wait for speech to stop, then turn it on again.
-    WaitForRecognitionEnded();
-    EXPECT_TRUE(IsDictationOff());
-
-    // Turn on dictation and say something else.
-    ToggleDictation();
-  }
-
   SendSpeechResult(kSecondSpeechResult, true /* is final*/);
   // Wait for interim results to be finalized.
   base::RunLoop().RunUntilIdle();
 
-  std::u16string expected = kSecondSpeechResult16;
-  if (GetParam().first != kTestDefaultListening)
-    expected = u" " + expected;
+  std::u16string expected = u" ";
+  expected += kSecondSpeechResult16;
 
   // Speech goes to the new IMEInputContextHandler.
   EXPECT_EQ(expected, input_context_handler2.last_commit_text());
@@ -482,12 +422,6 @@
   base::RunLoop().RunUntilIdle();
 
   EXPECT_EQ(u"Purple", input_context_handler_->last_commit_text());
-  if (GetParam().first == kTestDefaultListening) {
-    // Dictation should turn off.
-    WaitForRecognitionEnded();
-    EXPECT_TRUE(IsDictationOff());
-    return;
-  }
   EXPECT_FALSE(IsDictationOff());
 
   SendSpeechResult("pink", true /* is final */);
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
index 50298c29..63eb3b9 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
@@ -22,13 +22,12 @@
   class Delegate {
    public:
     Delegate() = default;
+    Delegate(const Delegate&) = delete;
+    Delegate& operator=(const Delegate&) = delete;
     virtual void OnAppWindowLaunched() = 0;
 
    protected:
     virtual ~Delegate() = default;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(Delegate);
   };
 
   ArcKioskAppLauncher(content::BrowserContext* context,
diff --git a/chrome/browser/ash/app_mode/kiosk_app_launch_error.h b/chrome/browser/ash/app_mode/kiosk_app_launch_error.h
index 544885a..28599f2 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_launch_error.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_launch_error.h
@@ -57,8 +57,9 @@
   // Records the launch error and cryptohome auth error metric and clears them.
   static void RecordMetricAndClear();
 
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(KioskAppLaunchError);
+  KioskAppLaunchError() = delete;
+  KioskAppLaunchError(const KioskAppLaunchError&) = delete;
+  KioskAppLaunchError& operator=(const KioskAppLaunchError&) = delete;
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.h b/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.h
index 6f3c4a7..6630232 100644
--- a/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.h
+++ b/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.h
@@ -27,8 +27,9 @@
   static void RemoveCryptohomesAndExitIfNeeded(
       const std::vector<AccountId>& account_ids);
 
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(KioskCryptohomeRemover);
+  KioskCryptohomeRemover() = delete;
+  KioskCryptohomeRemover(const KioskCryptohomeRemover&) = delete;
+  KioskCryptohomeRemover& operator=(const KioskCryptohomeRemover&) = delete;
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc b/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
index ce219ef..88bb999 100644
--- a/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
+++ b/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "ash/public/cpp/shelf_model.h"
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
@@ -23,8 +24,9 @@
 #include "chrome/browser/ui/ash/shelf/chrome_shelf_controller.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/web_applications/components/app_registrar_observer.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "components/arc/test/arc_util_test_support.h"
@@ -145,6 +147,13 @@
     return ApkWebAppService::Get(browser()->profile());
   }
 
+  // Sets a callback to be called whenever an app is completely uninstalled and
+  // removed from the Registrar.
+  void set_app_uninstalled_callback(
+      base::RepeatingCallback<void(const web_app::AppId&)> callback) {
+    app_uninstalled_callback_ = callback;
+  }
+
   // web_app::AppRegistrarObserver overrides.
   void OnWebAppInstalled(const web_app::AppId& web_app_id) override {
     installed_web_app_id_ = web_app_id;
@@ -156,6 +165,12 @@
     uninstalled_web_app_id_ = web_app_id;
   }
 
+  void OnWebAppUninstalled(const web_app::AppId& app_id) override {
+    if (app_uninstalled_callback_) {
+      app_uninstalled_callback_.Run(app_id);
+    }
+  }
+
   // ArcAppListPrefs::Observer:
   void OnPackageRemoved(const std::string& package_name,
                         bool uninstalled) override {
@@ -177,6 +192,8 @@
   ArcAppListPrefs* arc_app_list_prefs_ = nullptr;
   web_app::WebAppProvider* provider_ = nullptr;
   std::unique_ptr<arc::FakeAppInstance> app_instance_;
+  base::RepeatingCallback<void(const web_app::AppId&)>
+      app_uninstalled_callback_;
 
   std::string removed_package_;
   web_app::AppId installed_web_app_id_;
@@ -381,6 +398,53 @@
   }
 }
 
+// Test that when an ARC-installed Web App is uninstalled and then reinstalled
+// as a regular web app, it is not treated as ARC-installed.
+IN_PROC_BROWSER_TEST_F(ApkWebAppInstallerBrowserTest,
+                       UninstallAndReinstallAsWebApp) {
+  ApkWebAppService* service = apk_web_app_service();
+  service->SetArcAppListPrefsForTesting(arc_app_list_prefs_);
+
+  // Install the Web App from ARC.
+  web_app::AppId app_id;
+  {
+    base::RunLoop run_loop;
+    service->SetWebAppInstalledCallbackForTesting(base::BindLambdaForTesting(
+        [&](const std::string& package_name, const web_app::AppId& web_app_id) {
+          EXPECT_EQ(web_app_id, installed_web_app_id_);
+          app_id = web_app_id;
+          run_loop.Quit();
+        }));
+
+    app_instance_->SendPackageAdded(GetWebAppPackage(kPackageName, kAppTitle));
+    run_loop.Run();
+  }
+
+  ASSERT_TRUE(service->IsWebAppInstalledFromArc(app_id));
+
+  // Uninstall the Web App from ARC.
+  {
+    base::RunLoop run_loop;
+    // Wait until the app is completely uninstalled.
+    set_app_uninstalled_callback(
+        base::BindLambdaForTesting([&](const web_app::AppId& web_app_id) {
+          EXPECT_EQ(app_id, web_app_id);
+          run_loop.Quit();
+        }));
+
+    app_instance_->SendPackageUninstalled(kPackageName);
+    run_loop.Run();
+  }
+
+  ASSERT_FALSE(service->IsWebAppInstalledFromArc(app_id));
+
+  // Reinstall the Web App through the Browser.
+  web_app::AppId non_arc_app_id = web_app::test::InstallDummyWebApp(
+      browser()->profile(), kAppTitle, GURL(kAppUrl));
+  ASSERT_EQ(app_id, non_arc_app_id);
+  ASSERT_FALSE(service->IsWebAppInstalledFromArc(app_id));
+}
+
 IN_PROC_BROWSER_TEST_F(ApkWebAppInstallerWithShelfControllerBrowserTest,
                        CheckPinStateAfterUpdate) {
   ApkWebAppService* service = apk_web_app_service();
diff --git a/chrome/browser/ash/apps/apk_web_app_service.cc b/chrome/browser/ash/apps/apk_web_app_service.cc
index 79fcef48..3c8ac903 100644
--- a/chrome/browser/ash/apps/apk_web_app_service.cc
+++ b/chrome/browser/ash/apps/apk_web_app_service.cc
@@ -13,11 +13,11 @@
 #include "chrome/browser/ash/apps/apk_web_app_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/shelf/chrome_shelf_controller.h"
-#include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
+#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
@@ -108,8 +108,9 @@
 
 bool ApkWebAppService::IsWebAppInstalledFromArc(
     const web_app::AppId& web_app_id) {
-  return web_app::ExternallyInstalledWebAppPrefs::HasAppIdWithInstallSource(
-      profile_->GetPrefs(), web_app_id, web_app::ExternalInstallSource::kArc);
+  web_app::WebAppRegistrar& registrar = provider_->registrar();
+  const web_app::WebApp* app = registrar.GetAppById(web_app_id);
+  return app ? app->IsWebAppStoreInstalledApp() : false;
 }
 
 absl::optional<std::string> ApkWebAppService::GetPackageNameForWebApp(
diff --git a/chrome/browser/ash/arc/accessibility/ax_tree_source_arc.cc b/chrome/browser/ash/arc/accessibility/ax_tree_source_arc.cc
index ef6da16..bab6d248 100644
--- a/chrome/browser/ash/arc/accessibility/ax_tree_source_arc.cc
+++ b/chrome/browser/ash/arc/accessibility/ax_tree_source_arc.cc
@@ -234,7 +234,6 @@
 
   events.push_back(std::move(event));
 
-  // Force the tree, to update, so unignored fields get updated.
   // On event type of WINDOW_STATE_CHANGED, update the entire tree so that
   // window location is correctly calculated.
   int32_t node_id_to_clear =
@@ -259,12 +258,13 @@
     }
   }
 
+  for (const int32_t update_id : update_ids)
+    current_tree_serializer_->InvalidateSubtree(GetFromId(update_id));
+
   std::vector<ui::AXTreeUpdate> updates;
-  for (const int32_t update_root : update_ids) {
+  for (const int32_t update_id : update_ids) {
     ui::AXTreeUpdate update;
-    update.node_id_to_clear = update_root;
-    current_tree_serializer_->InvalidateSubtree(GetFromId(update_root));
-    if (!current_tree_serializer_->SerializeChanges(GetFromId(update_root),
+    if (!current_tree_serializer_->SerializeChanges(GetFromId(update_id),
                                                     &update)) {
       std::string error_string;
       ui::AXTreeSourceChecker<AccessibilityInfoDataWrapper*> checker(this);
diff --git a/chrome/browser/ash/arc/session/arc_session_manager.cc b/chrome/browser/ash/arc/session/arc_session_manager.cc
index 5bb1885..7a3f7bd 100644
--- a/chrome/browser/ash/arc/session/arc_session_manager.cc
+++ b/chrome/browser/ash/arc/session/arc_session_manager.cc
@@ -1512,6 +1512,9 @@
     GetLocaleAndPreferredLanguages(profile_, &locale, &preferred_languages);
   }
 
+  arc_session_runner_->set_default_device_scale_factor(
+      exo::GetDefaultDeviceScaleFactor());
+
   UpgradeParams params;
 
   const auto* demo_session = ash::DemoSession::Get();
diff --git a/chrome/browser/ash/certificate_provider/pin_dialog_manager.h b/chrome/browser/ash/certificate_provider/pin_dialog_manager.h
index b9cbf48..acfe1f3 100644
--- a/chrome/browser/ash/certificate_provider/pin_dialog_manager.h
+++ b/chrome/browser/ash/certificate_provider/pin_dialog_manager.h
@@ -11,12 +11,12 @@
 #include <utility>
 #include <vector>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h"
 #include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host_popup_impl.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "components/account_id/account_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h b/chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h
index d0c97798..48ba53859 100644
--- a/chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h
+++ b/chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h
@@ -7,8 +7,8 @@
 
 #include <string>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/callback_forward.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "components/account_id/account_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc b/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc
index db76e9d1..9eaba033 100644
--- a/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc
+++ b/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc
@@ -25,12 +25,12 @@
 #include "chrome/browser/extensions/test_extension_system.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_manager.h"
 #include "chrome/browser/web_applications/test/test_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn
index 7f03c2ff..f8cb87c 100644
--- a/chrome/browser/ash/crosapi/BUILD.gn
+++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -67,6 +67,8 @@
     "metrics_reporting_ash.h",
     "native_theme_service_ash.cc",
     "native_theme_service_ash.h",
+    "network_settings_service_ash.cc",
+    "network_settings_service_ash.h",
     "networking_attributes_ash.cc",
     "networking_attributes_ash.h",
     "power_ash.cc",
diff --git a/chrome/browser/ash/crosapi/browser_data_migrator.cc b/chrome/browser/ash/crosapi/browser_data_migrator.cc
index d0e25ea..9262c84 100644
--- a/chrome/browser/ash/crosapi/browser_data_migrator.cc
+++ b/chrome/browser/ash/crosapi/browser_data_migrator.cc
@@ -10,6 +10,7 @@
 #include "ash/constants/ash_switches.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
+#include "base/feature_list.h"
 #include "base/files/file.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
@@ -31,7 +32,6 @@
 #include "components/account_id/account_id.h"
 #include "components/user_manager/user_manager.h"
 #include "components/version_info/version_info.h"
-#include "google_apis/gaia/gaia_auth_util.h"
 
 namespace ash {
 namespace {
@@ -50,6 +50,10 @@
 const char kBrowserDataMigrationForceSkip[] = "force-skip";
 const char kBrowserDataMigrationForceMigration[] = "force-migration";
 
+// Finch flag to enable/disable profile migration.
+const base::Feature kLacrosProfileMigrationSupport{
+    "LacrosProfileMigrationSupport", base::FEATURE_DISABLED_BY_DEFAULT};
+
 void OnRestartRequestResponse(bool result) {
   if (!result) {
     LOG(ERROR) << "SessionManagerClient::RequestBrowserDataMigration failed.";
@@ -104,8 +108,8 @@
     return;
   }
 
-  // Browser data migration is only available for Googlers at the moment.
-  if (!gaia::IsGoogleInternalAccountEmail(account_id.GetUserEmail()))
+  // Unless the finch flag is enabled, skip migration.
+  if (!base::FeatureList::IsEnabled(kLacrosProfileMigrationSupport))
     return;
 
   const std::string user_id_hash = user_context.GetUserIDHash();
diff --git a/chrome/browser/ash/crosapi/browser_util.cc b/chrome/browser/ash/crosapi/browser_util.cc
index 5716a4d4..9b206b9 100644
--- a/chrome/browser/ash/crosapi/browser_util.cc
+++ b/chrome/browser/ash/crosapi/browser_util.cc
@@ -60,6 +60,7 @@
 #include "chromeos/crosapi/mojom/local_printer.mojom.h"
 #include "chromeos/crosapi/mojom/message_center.mojom.h"
 #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h"
+#include "chromeos/crosapi/mojom/network_settings_service.mojom.h"
 #include "chromeos/crosapi/mojom/networking_attributes.mojom.h"
 #include "chromeos/crosapi/mojom/power.mojom.h"
 #include "chromeos/crosapi/mojom/prefs.mojom.h"
@@ -294,6 +295,7 @@
     MakeInterfaceVersionEntry<crosapi::mojom::MetricsReporting>(),
     MakeInterfaceVersionEntry<crosapi::mojom::NativeThemeService>(),
     MakeInterfaceVersionEntry<crosapi::mojom::NetworkingAttributes>(),
+    MakeInterfaceVersionEntry<crosapi::mojom::NetworkSettingsService>(),
     MakeInterfaceVersionEntry<crosapi::mojom::Power>(),
     MakeInterfaceVersionEntry<crosapi::mojom::Prefs>(),
     MakeInterfaceVersionEntry<crosapi::mojom::Remoting>(),
@@ -358,7 +360,7 @@
 }
 
 static_assert(
-    crosapi::mojom::Crosapi::Version_ == 40,
+    crosapi::mojom::Crosapi::Version_ == 41,
     "if you add a new crosapi, please add it to kInterfaceVersionEntries");
 static_assert(!HasDuplicatedUuid(),
               "Each Crosapi Mojom interface should have unique UUID.");
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc
index 59fea43..9c7dbea 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.cc
+++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -35,6 +35,7 @@
 #include "chrome/browser/ash/crosapi/message_center_ash.h"
 #include "chrome/browser/ash/crosapi/metrics_reporting_ash.h"
 #include "chrome/browser/ash/crosapi/native_theme_service_ash.h"
+#include "chrome/browser/ash/crosapi/network_settings_service_ash.h"
 #include "chrome/browser/ash/crosapi/networking_attributes_ash.h"
 #include "chrome/browser/ash/crosapi/power_ash.h"
 #include "chrome/browser/ash/crosapi/prefs_ash.h"
@@ -118,6 +119,8 @@
           g_browser_process->local_state())),
       native_theme_service_ash_(std::make_unique<NativeThemeServiceAsh>()),
       networking_attributes_ash_(std::make_unique<NetworkingAttributesAsh>()),
+      network_settings_service_ash_(
+          std::make_unique<NetworkSettingsServiceAsh>()),
       power_ash_(std::make_unique<PowerAsh>()),
       prefs_ash_(
           std::make_unique<PrefsAsh>(g_browser_process->profile_manager(),
@@ -389,6 +392,11 @@
       apps::WebAppsCrosapiFactory::GetForProfile(profile);
   web_apps->RegisterWebAppsCrosapiHost(std::move(receiver));
 }
+void CrosapiAsh::BindNetworkSettingsService(
+    ::mojo::PendingReceiver<::crosapi::mojom::NetworkSettingsService>
+        receiver) {
+  network_settings_service_ash_->BindReceiver(std::move(receiver));
+}
 
 void CrosapiAsh::BindDriveIntegrationService(
     mojo::PendingReceiver<crosapi::mojom::DriveIntegrationService> receiver) {
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h
index c0f2607..09c382a 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.h
+++ b/chrome/browser/ash/crosapi/crosapi_ash.h
@@ -49,6 +49,7 @@
 class TestControllerAsh;
 class UrlHandlerAsh;
 class VideoCaptureDeviceFactoryAsh;
+class NetworkSettingsServiceAsh;
 
 // Implementation of Crosapi in Ash. It provides a set of APIs that
 // crosapi clients, such as lacros-chrome, can call into.
@@ -153,6 +154,9 @@
       override;
   void BindWebAppPublisher(
       mojo::PendingReceiver<mojom::AppPublisher> receiver) override;
+  void BindNetworkSettingsService(
+      ::mojo::PendingReceiver<::crosapi::mojom::NetworkSettingsService>
+          receiver) override;
 
   BrowserServiceHostAsh* browser_service_host_ash() {
     return browser_service_host_ash_.get();
@@ -205,6 +209,7 @@
   std::unique_ptr<MetricsReportingAsh> metrics_reporting_ash_;
   std::unique_ptr<NativeThemeServiceAsh> native_theme_service_ash_;
   std::unique_ptr<NetworkingAttributesAsh> networking_attributes_ash_;
+  std::unique_ptr<NetworkSettingsServiceAsh> network_settings_service_ash_;
   std::unique_ptr<PowerAsh> power_ash_;
   std::unique_ptr<PrefsAsh> prefs_ash_;
   std::unique_ptr<RemotingAsh> remoting_ash_;
diff --git a/chrome/browser/ash/crosapi/network_settings_service_ash.cc b/chrome/browser/ash/crosapi/network_settings_service_ash.cc
new file mode 100644
index 0000000..78e9310
--- /dev/null
+++ b/chrome/browser/ash/crosapi/network_settings_service_ash.cc
@@ -0,0 +1,25 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/crosapi/network_settings_service_ash.h"
+
+namespace crosapi {
+
+NetworkSettingsServiceAsh::NetworkSettingsServiceAsh() = default;
+
+NetworkSettingsServiceAsh::~NetworkSettingsServiceAsh() = default;
+
+void NetworkSettingsServiceAsh::BindReceiver(
+    mojo::PendingReceiver<mojom::NetworkSettingsService> pending_receiver) {
+  receivers_.Add(this, std::move(pending_receiver));
+}
+
+void NetworkSettingsServiceAsh::AddNetworkSettingsObserver(
+    mojo::PendingRemote<mojom::NetworkSettingsObserver> observer) {
+  mojo::Remote<mojom::NetworkSettingsObserver> remote(std::move(observer));
+  observers_.Add(std::move(remote));
+  // TODO(acostinas, b/192914690): Fire the observer with the initial value.
+}
+
+}  // namespace crosapi
diff --git a/chrome/browser/ash/crosapi/network_settings_service_ash.h b/chrome/browser/ash/crosapi/network_settings_service_ash.h
new file mode 100644
index 0000000..499cde0f
--- /dev/null
+++ b/chrome/browser/ash/crosapi/network_settings_service_ash.h
@@ -0,0 +1,44 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_CROSAPI_NETWORK_SETTINGS_SERVICE_ASH_H_
+#define CHROME_BROWSER_ASH_CROSAPI_NETWORK_SETTINGS_SERVICE_ASH_H_
+
+#include "chromeos/crosapi/mojom/network_settings_service.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/remote_set.h"
+
+namespace crosapi {
+
+// This class is the Ash-Chrome implementation of the NetworkSettingsService
+// interface. This class must only be used from the main thread.
+// It's used to propagate network changes to Lacros-Chrome.
+class NetworkSettingsServiceAsh
+    : public crosapi::mojom::NetworkSettingsService {
+ public:
+  NetworkSettingsServiceAsh();
+  NetworkSettingsServiceAsh(const NetworkSettingsServiceAsh&) = delete;
+  NetworkSettingsServiceAsh& operator=(const NetworkSettingsServiceAsh&) =
+      delete;
+  ~NetworkSettingsServiceAsh() override;
+
+  void BindReceiver(
+      mojo::PendingReceiver<crosapi::mojom::NetworkSettingsService>
+          pending_receiver);
+  // crosapi::mojom::NetworSettingsService:
+  void AddNetworkSettingsObserver(
+      mojo::PendingRemote<mojom::NetworkSettingsObserver> observer) override;
+
+ private:
+  // Support any number of connections.
+  mojo::ReceiverSet<mojom::NetworkSettingsService> receivers_;
+  // Support any number of observers.
+  mojo::RemoteSet<mojom::NetworkSettingsObserver> observers_;
+};
+
+}  // namespace crosapi
+
+#endif  // CHROME_BROWSER_ASH_CROSAPI_NETWORK_SETTINGS_SERVICE_ASH_H_
diff --git a/chrome/browser/ash/file_manager/web_file_tasks.cc b/chrome/browser/ash/file_manager/web_file_tasks.cc
index 88856dc7..63f0307 100644
--- a/chrome/browser/ash/file_manager/web_file_tasks.cc
+++ b/chrome/browser/ash/file_manager/web_file_tasks.cc
@@ -138,17 +138,6 @@
     return;
   }
 
-  apps::mojom::LaunchContainer launch_container =
-      apps::mojom::LaunchContainer::kLaunchContainerWindow;
-
-  // If the app isn't configured to open in a window, it should open as a tab.
-  if (registrar.GetAppUserDisplayMode(task.app_id) !=
-      blink::mojom::DisplayMode::kStandalone) {
-    DCHECK_EQ(registrar.GetAppUserDisplayMode(task.app_id),
-              blink::mojom::DisplayMode::kBrowser);
-    launch_container = apps::mojom::LaunchContainer::kLaunchContainerTab;
-  }
-
   apps::mojom::FilePathsPtr launch_files = apps::mojom::FilePaths::New();
   for (const auto& file_system_url : file_system_urls)
     launch_files->file_paths.push_back(file_system_url.path());
@@ -164,7 +153,7 @@
       apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile));
 
   apps::AppServiceProxyFactory::GetForProfile(profile)->LaunchAppWithFiles(
-      task.app_id, launch_container,
+      task.app_id,
       apps::GetEventFlags(apps::mojom::LaunchContainer::kLaunchContainerTab,
                           WindowOpenDisposition::NEW_FOREGROUND_TAB,
                           /* preferred_containner=*/false),
diff --git a/chrome/browser/ash/full_restore/full_restore_app_launch_handler.cc b/chrome/browser/ash/full_restore/full_restore_app_launch_handler.cc
index 9d0430fc..317a9f6d 100644
--- a/chrome/browser/ash/full_restore/full_restore_app_launch_handler.cc
+++ b/chrome/browser/ash/full_restore/full_restore_app_launch_handler.cc
@@ -108,6 +108,11 @@
 
 void FullRestoreAppLaunchHandler::OnAppTypeInitialized(
     apps::mojom::AppType app_type) {
+  if (app_type == apps::mojom::AppType::kExtension) {
+    are_chrome_apps_initialized_ = true;
+    return;
+  }
+
   if (app_type != apps::mojom::AppType::kWeb)
     return;
 
@@ -146,12 +151,8 @@
   restore_data_ = std::move(restore_data);
   LogRestoreData();
 
-  // FullRestoreAppLaunchHandler could be created multiple times in browser
-  // tests, and used by the desk template. Only when it is created by
-  // FullRestoreService, we need to init FullRestoreService.
-  if (should_init_service_)
-    FullRestoreService::GetForProfile(profile_)->Init();
-
+  // Set profile path before init the restore process to create
+  // FullRestoreSaveHandler to observe restore windows.
   if (ProfileHelper::Get()->GetUserByProfile(profile_) ==
       user_manager::UserManager::Get()->GetPrimaryUser()) {
     ::full_restore::FullRestoreSaveHandler::GetInstance()
@@ -161,9 +162,17 @@
     // active profile path is set when switch users.
     ::full_restore::SetActiveProfilePath(profile_->GetPath());
   }
+
+  // FullRestoreAppLaunchHandler could be created multiple times in browser
+  // tests, and used by the desk template. Only when it is created by
+  // FullRestoreService, we need to init FullRestoreService.
+  if (should_init_service_)
+    FullRestoreService::GetForProfile(profile_)->Init();
 }
 
 void FullRestoreAppLaunchHandler::MaybePostRestore() {
+  MaybeStartSaveTimer();
+
   // If the restore flag `should_restore_` is not true, or reading the restore
   // data hasn't finished, don't restore.
   if (!should_restore_ || !restore_data_)
@@ -192,6 +201,8 @@
   }
 
   LaunchApps();
+
+  MaybeStartSaveTimer();
 }
 
 bool FullRestoreAppLaunchHandler::CanLaunchBrowser() {
@@ -216,6 +227,8 @@
         ::switches::kHideCrashRestoreBubble);
   }
 
+  MaybeStartSaveTimer();
+
   if (!::full_restore::HasBrowser(profile_->GetPath())) {
     // If there is no normal browsers before reboot, call session restore to
     // restore app type browsers only.
@@ -302,6 +315,32 @@
           << ")";
 }
 
+void FullRestoreAppLaunchHandler::MaybeStartSaveTimer() {
+  if (!should_restore_) {
+    // FullRestoreService is responsible to handle all non restore processes.
+    return;
+  }
+
+  if (!restore_data_ || restore_data_->app_id_to_launch_list().empty()) {
+    // If there is no restore data, start the timer.
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
+    return;
+  }
+
+  if (base::Contains(restore_data_->app_id_to_launch_list(),
+                     extension_misc::kChromeAppId)) {
+    // If the browser hasn't been restored yet, Wait for the browser
+    // restoration. LaunchBrowser will call this function again to start the
+    // save timer after restore the browser sessions.
+    return;
+  }
+
+  // If both web apps and chrome apps has finished the initialization, start the
+  // timer.
+  if (are_chrome_apps_initialized_ && are_web_apps_initialized_)
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
+}
+
 ScopedLaunchBrowserForTesting::ScopedLaunchBrowserForTesting() {
   g_launch_browser_for_testing = true;
 }
diff --git a/chrome/browser/ash/full_restore/full_restore_app_launch_handler.h b/chrome/browser/ash/full_restore/full_restore_app_launch_handler.h
index e9f80752..c4965ef 100644
--- a/chrome/browser/ash/full_restore/full_restore_app_launch_handler.h
+++ b/chrome/browser/ash/full_restore/full_restore_app_launch_handler.h
@@ -91,6 +91,9 @@
   // AppLaunchHandler:
   void RecordRestoredAppLaunch(apps::AppTypeName app_type_name) override;
 
+  // If the restore process finish, start the save timer.
+  void MaybeStartSaveTimer();
+
   void LogRestoreData();
 
   bool should_restore_ = false;
@@ -99,6 +102,7 @@
   bool first_run_full_restore_ = false;
 
   bool are_web_apps_initialized_ = false;
+  bool are_chrome_apps_initialized_ = false;
 
   // The time when `should_restore_` has been set to true.
   base::TimeTicks restore_start_time_;
diff --git a/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc b/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc
index 53c065f..19a7f04 100644
--- a/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc
+++ b/chrome/browser/ash/full_restore/full_restore_app_launch_handler_browsertest.cc
@@ -28,9 +28,11 @@
 #include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/full_restore/arc_app_launch_handler.h"
 #include "chrome/browser/ash/full_restore/full_restore_arc_task_handler.h"
+#include "chrome/browser/ash/full_restore/full_restore_prefs.h"
 #include "chrome/browser/ash/full_restore/full_restore_service.h"
 #include "chrome/browser/ash/web_applications/system_web_app_integration_test.h"
 #include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
@@ -74,6 +76,7 @@
 #include "ui/base/window_open_disposition.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/display/types/display_constants.h"
+#include "ui/message_center/public/cpp/notification.h"
 #include "ui/wm/core/window_util.h"
 
 namespace mojo {
@@ -303,6 +306,12 @@
   }
   ~FullRestoreAppLaunchHandlerBrowserTest() override = default;
 
+  void SetUpOnMainThread() override {
+    extensions::PlatformAppBrowserTest::SetUpOnMainThread();
+    display_service_ =
+        std::make_unique<NotificationDisplayServiceTester>(profile());
+  }
+
   void SetShouldRestore(FullRestoreAppLaunchHandler* app_launch_handler) {
     content::RunAllTasksUntilIdle();
     app_launch_handler->SetShouldRestore();
@@ -331,9 +340,11 @@
     return nullptr;
   }
 
-  void WaitForAppLaunchInfoSaved() {
+  void WaitForAppLaunchInfoSaved(bool allow_save = true) {
     ::full_restore::FullRestoreSaveHandler* save_handler =
         ::full_restore::FullRestoreSaveHandler::GetInstance();
+    if (allow_save)
+      save_handler->AllowSave();
     base::OneShotTimer* timer = save_handler->GetTimerForTesting();
     if (timer->IsRunning()) {
       // Simulate timeout, and the launch info is saved.
@@ -360,12 +371,29 @@
         restore_window_id);
   }
 
+  bool HasNotificationFor(const std::string& notification_id) {
+    absl::optional<message_center::Notification> message_center_notification =
+        display_service()->GetNotification(notification_id);
+    return message_center_notification.has_value();
+  }
+
+  void SimulateClick(const std::string& notification_id,
+                     RestoreNotificationButtonIndex action_index) {
+    FullRestoreService::GetForProfile(profile())->Click(
+        static_cast<int>(action_index), absl::nullopt);
+  }
+
+  NotificationDisplayServiceTester* display_service() const {
+    return display_service_.get();
+  }
+
   void ResetRestoreForTesting() { scoped_restore_for_testing_.reset(); }
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
   ui::ScopedAnimationDurationScaleMode faster_animations_;
   std::unique_ptr<ScopedRestoreForTesting> scoped_restore_for_testing_;
+  std::unique_ptr<NotificationDisplayServiceTester> display_service_;
 };
 
 IN_PROC_BROWSER_TEST_F(FullRestoreAppLaunchHandlerBrowserTest,
@@ -566,6 +594,120 @@
   EXPECT_EQ(count + 1, BrowserList::GetInstance()->size());
 }
 
+// Verify the restore data is saved when the restore setting is always and the
+// restore finishes.
+IN_PROC_BROWSER_TEST_F(FullRestoreAppLaunchHandlerBrowserTest,
+                       RestoreAndLaunchBrowserWithAlwaysSetting) {
+  size_t count = BrowserList::GetInstance()->size();
+
+  // Add the chrome browser launch info.
+  ::full_restore::SaveAppLaunchInfo(
+      profile()->GetPath(), std::make_unique<::full_restore::AppLaunchInfo>(
+                                extension_misc::kChromeAppId, kWindowId1));
+
+  auto app_launch_info = std::make_unique<::full_restore::AppLaunchInfo>(
+      extension_misc::kChromeAppId, kWindowId2);
+  app_launch_info->app_type_browser = true;
+  ::full_restore::SaveAppLaunchInfo(profile()->GetPath(),
+                                    std::move(app_launch_info));
+
+  WaitForAppLaunchInfoSaved();
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Set the restore pref setting as 'Always restore'.
+  profile()->GetPrefs()->SetInteger(kRestoreAppsAndPagesPrefName,
+                                    static_cast<int>(RestoreOption::kAlways));
+
+  // Create FullRestoreAppLaunchHandler to simulate the system startup.
+  auto* full_restore_service = FullRestoreService::GetForProfile(profile());
+  full_restore_service->SetAppLaunchHanlderForTesting(
+      std::make_unique<FullRestoreAppLaunchHandler>(
+          profile(), /*should_init_service=*/true));
+  auto* app_launch_handler1 = full_restore_service->app_launch_handler();
+
+  app_launch_handler1->LaunchBrowserWhenReady(/*first_run_full_restore=*/false);
+  content::RunAllTasksUntilIdle();
+
+  // Verify there is new browser launched.
+  EXPECT_EQ(count + 1, BrowserList::GetInstance()->size());
+
+  WaitForAppLaunchInfoSaved(/*allow_save*/ false);
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Create FullRestoreAppLaunchHandler to simulate the system startup again.
+  full_restore_service->SetAppLaunchHanlderForTesting(
+      std::make_unique<FullRestoreAppLaunchHandler>(
+          profile(), /*should_init_service=*/true));
+  auto* app_launch_handler2 = full_restore_service->app_launch_handler();
+
+  app_launch_handler2->LaunchBrowserWhenReady(/*first_run_full_restore=*/false);
+  content::RunAllTasksUntilIdle();
+
+  // Verify there is a new browser launched again.
+  EXPECT_EQ(count + 2, BrowserList::GetInstance()->size());
+}
+
+// Verify the restore data is saved when the restore button is clicked and the
+// restore finishes.
+IN_PROC_BROWSER_TEST_F(FullRestoreAppLaunchHandlerBrowserTest,
+                       RestoreAndLaunchBrowserWithClickRestore) {
+  size_t count = BrowserList::GetInstance()->size();
+
+  // Add the chrome browser launch info.
+  ::full_restore::SaveAppLaunchInfo(
+      profile()->GetPath(), std::make_unique<::full_restore::AppLaunchInfo>(
+                                extension_misc::kChromeAppId, kWindowId1));
+
+  auto app_launch_info = std::make_unique<::full_restore::AppLaunchInfo>(
+      extension_misc::kChromeAppId, kWindowId2);
+  app_launch_info->app_type_browser = true;
+  ::full_restore::SaveAppLaunchInfo(profile()->GetPath(),
+                                    std::move(app_launch_info));
+
+  WaitForAppLaunchInfoSaved();
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Set the restore pref setting as 'Ask every time'.
+  profile()->GetPrefs()->SetInteger(
+      kRestoreAppsAndPagesPrefName,
+      static_cast<int>(RestoreOption::kAskEveryTime));
+
+  // Create FullRestoreAppLaunchHandler to simulate the system startup.
+  auto* full_restore_service = FullRestoreService::GetForProfile(profile());
+  full_restore_service->SetAppLaunchHanlderForTesting(
+      std::make_unique<FullRestoreAppLaunchHandler>(
+          profile(), /*should_init_service=*/true));
+  auto* app_launch_handler1 = full_restore_service->app_launch_handler();
+
+  app_launch_handler1->LaunchBrowserWhenReady(/*first_run_full_restore=*/false);
+  content::RunAllTasksUntilIdle();
+
+  EXPECT_TRUE(HasNotificationFor(kRestoreNotificationId));
+  SimulateClick(kRestoreForCrashNotificationId,
+                RestoreNotificationButtonIndex::kRestore);
+  content::RunAllTasksUntilIdle();
+
+  // Verify there is new browser launched.
+  EXPECT_EQ(count + 1, BrowserList::GetInstance()->size());
+
+  WaitForAppLaunchInfoSaved(/*allow_save*/ false);
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Create FullRestoreAppLaunchHandler to simulate the system startup again.
+  auto app_launch_handler2 =
+      std::make_unique<FullRestoreAppLaunchHandler>(profile());
+
+  app_launch_handler2->LaunchBrowserWhenReady(/*first_run_full_restore=*/false);
+  content::RunAllTasksUntilIdle();
+  SetShouldRestore(app_launch_handler2.get());
+  content::RunAllTasksUntilIdle();
+
+  content::RunAllTasksUntilIdle();
+
+  // Verify there is a new browser launched again.
+  EXPECT_EQ(count + 2, BrowserList::GetInstance()->size());
+}
+
 IN_PROC_BROWSER_TEST_F(FullRestoreAppLaunchHandlerBrowserTest,
                        RestoreAndNoBrowserLaunchInfo) {
   size_t count = BrowserList::GetInstance()->size();
@@ -2262,8 +2404,11 @@
   }
   ~FullRestoreAppLaunchHandlerSystemWebAppsBrowserTest() override = default;
 
-  Browser* LaunchSystemWebApp(const GURL& gurl,
-                              web_app::SystemAppType system_app_type) {
+  Browser* LaunchSystemWebApp(
+      const GURL& gurl,
+      web_app::SystemAppType system_app_type,
+      apps::mojom::LaunchSource launch_source =
+          apps::mojom::LaunchSource::kFromChromeInternal) {
     WaitForTestSystemAppInstall();
 
     auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile());
@@ -2271,8 +2416,7 @@
     navigation_observer.StartWatchingNewWebContents();
 
     proxy->Launch(*GetManager().GetAppIdForSystemApp(system_app_type),
-                  ui::EventFlags::EF_NONE,
-                  apps::mojom::LaunchSource::kFromChromeInternal,
+                  ui::EventFlags::EF_NONE, launch_source,
                   apps::MakeWindowInfo(display::kDefaultDisplayId));
 
     navigation_observer.Wait();
@@ -2280,21 +2424,29 @@
     return BrowserList::GetInstance()->GetLastActive();
   }
 
-  Browser* LaunchSystemWebApp() {
+  Browser* LaunchSystemWebApp(
+      apps::mojom::LaunchSource launch_source =
+          apps::mojom::LaunchSource::kFromChromeInternal) {
     return LaunchSystemWebApp(GURL("chrome://help-app/"),
-                              web_app::SystemAppType::HELP);
+                              web_app::SystemAppType::HELP, launch_source);
   }
 
   // Launches the media system web app. Used when a test needs to use a
   // different system web app.
-  Browser* LaunchMediaSystemWebApp() {
+  Browser* LaunchMediaSystemWebApp(
+      apps::mojom::LaunchSource launch_source =
+          apps::mojom::LaunchSource::kFromChromeInternal) {
     return LaunchSystemWebApp(GURL("chrome://media-app/"),
-                              web_app::SystemAppType::MEDIA);
+                              web_app::SystemAppType::MEDIA, launch_source);
   }
 
-  void WaitForAppLaunchInfoSaved() {
+  void WaitForAppLaunchInfoSaved(bool allow_save = true) {
     ::full_restore::FullRestoreSaveHandler* save_handler =
         ::full_restore::FullRestoreSaveHandler::GetInstance();
+
+    if (allow_save)
+      save_handler->AllowSave();
+
     base::OneShotTimer* timer = save_handler->GetTimerForTesting();
     if (timer->IsRunning()) {
       // Simulate timeout, and the launch info is saved.
@@ -2466,6 +2618,151 @@
   EXPECT_EQ(window_id, restore_window_id);
 }
 
+// Launch the help app. Reboot, no restore. Launch the media app by the system.
+// Reboot, verify the help app can be restored.
+IN_PROC_BROWSER_TEST_P(FullRestoreAppLaunchHandlerSystemWebAppsBrowserTest,
+                       RestartMutiTimesWithLaunchBySystem) {
+  Browser* app_browser1 = LaunchSystemWebApp();
+  ASSERT_TRUE(app_browser1);
+  ASSERT_NE(browser(), app_browser1);
+
+  // Get the window id.
+  aura::Window* window1 = app_browser1->window()->GetNativeWindow();
+  int32_t window_id1 = window1->GetProperty(::full_restore::kWindowIdKey);
+
+  WaitForAppLaunchInfoSaved();
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Close app_browser so that the SWA can be relaunched.
+  web_app::CloseAndWait(app_browser1);
+
+  // Modify the app readiness to uninstall to simulate the app is not installed
+  // during the system startup phase.
+  ModifyAppReadiness(apps::mojom::Readiness::kUninstalledByUser);
+
+  // Create FullRestoreAppLaunchHandler to simulate the system reboot.
+  auto app_launch_handler1 =
+      std::make_unique<FullRestoreAppLaunchHandler>(profile());
+
+  content::RunAllTasksUntilIdle();
+
+  // Verify the app is not restored because the app is not installed.
+  ASSERT_FALSE(GetBrowserForWindowId(window_id1));
+
+  // Launch another app from kFromChromeInternal, so not start the save timer,
+  // to prevent overwriting the full restore file.
+  Browser* app_browser2 = LaunchMediaSystemWebApp();
+  ASSERT_TRUE(app_browser2);
+  aura::Window* window2 = app_browser2->window()->GetNativeWindow();
+  int32_t window_id2 = window2->GetProperty(::full_restore::kWindowIdKey);
+
+  WaitForAppLaunchInfoSaved(/*allow_save=*/false);
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+  app_launch_handler1.reset();
+
+  // Modify the app readiness to kReady to simulate the app is installed.
+  ModifyAppReadiness(apps::mojom::Readiness::kReady);
+
+  // Create FullRestoreAppLaunchHandler to simulate the system reboot again.
+  auto app_launch_handler2 =
+      std::make_unique<FullRestoreAppLaunchHandler>(profile());
+
+  content::RunAllTasksUntilIdle();
+
+  SetShouldRestore(app_launch_handler2.get());
+
+  // Wait for the restoration.
+  content::RunAllTasksUntilIdle();
+
+  ASSERT_FALSE(GetBrowserForWindowId(window_id2));
+
+  // Get the restored browser for the system web app to verify the app is
+  // restored.
+  auto* restore_app_browser = GetBrowserForWindowId(window_id1);
+  ASSERT_TRUE(restore_app_browser);
+
+  // Get the restore window id.
+  window1 = restore_app_browser->window()->GetNativeWindow();
+  int32_t restore_window_id =
+      window1->GetProperty(::full_restore::kRestoreWindowIdKey);
+
+  EXPECT_EQ(window_id1, restore_window_id);
+}
+
+// Launch the help app. Reboot, no restore. Launch the media app by the user.
+// Reboot, verify the media app can be restored.
+IN_PROC_BROWSER_TEST_P(FullRestoreAppLaunchHandlerSystemWebAppsBrowserTest,
+                       RestartMutiTimesWithLaunchByUser) {
+  Browser* app_browser1 = LaunchSystemWebApp();
+  ASSERT_TRUE(app_browser1);
+  ASSERT_NE(browser(), app_browser1);
+
+  // Get the window id.
+  aura::Window* window1 = app_browser1->window()->GetNativeWindow();
+  int32_t window_id1 = window1->GetProperty(::full_restore::kWindowIdKey);
+
+  WaitForAppLaunchInfoSaved();
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  // Close app_browser so that the SWA can be relaunched.
+  web_app::CloseAndWait(app_browser1);
+
+  // Modify the app readiness to uninstall to simulate the app is not installed
+  // during the system startup phase.
+  ModifyAppReadiness(apps::mojom::Readiness::kUninstalledByUser);
+
+  // Create FullRestoreAppLaunchHandler to simulate the system reboot.
+  auto app_launch_handler1 =
+      std::make_unique<FullRestoreAppLaunchHandler>(profile());
+
+  content::RunAllTasksUntilIdle();
+
+  // Verify the app is not restored because the app is not installed.
+  ASSERT_FALSE(GetBrowserForWindowId(window_id1));
+
+  // Launch another app from kFromShelf, so start the save timer,
+  Browser* app_browser2 =
+      LaunchMediaSystemWebApp(apps::mojom::LaunchSource::kFromShelf);
+  ASSERT_TRUE(app_browser2);
+  aura::Window* window2 = app_browser2->window()->GetNativeWindow();
+  int32_t window_id2 = window2->GetProperty(::full_restore::kWindowIdKey);
+
+  WaitForAppLaunchInfoSaved(/*allow_save=*/false);
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+
+  web_app::CloseAndWait(app_browser2);
+
+  app_launch_handler1.reset();
+
+  // Modify the app readiness to kReady to simulate the app is installed.
+  ModifyAppReadiness(apps::mojom::Readiness::kReady);
+
+  // Create FullRestoreAppLaunchHandler to simulate the system reboot again.
+  auto app_launch_handler2 =
+      std::make_unique<FullRestoreAppLaunchHandler>(profile());
+
+  content::RunAllTasksUntilIdle();
+
+  SetShouldRestore(app_launch_handler2.get());
+
+  // Wait for the restoration.
+  content::RunAllTasksUntilIdle();
+
+  ASSERT_FALSE(GetBrowserForWindowId(window_id1));
+
+  // Get the restored browser for the system web app to verify the app is
+  // restored.
+  auto* restore_app_browser = GetBrowserForWindowId(window_id2);
+  ASSERT_TRUE(restore_app_browser);
+
+  // Get the restore window id.
+  window2 = restore_app_browser->window()->GetNativeWindow();
+  int32_t restore_window_id =
+      window2->GetProperty(::full_restore::kRestoreWindowIdKey);
+
+  EXPECT_EQ(window_id2, restore_window_id);
+}
+
 IN_PROC_BROWSER_TEST_P(FullRestoreAppLaunchHandlerSystemWebAppsBrowserTest,
                        WindowProperties) {
   Browser* app_browser = LaunchSystemWebApp();
diff --git a/chrome/browser/ash/full_restore/full_restore_service.cc b/chrome/browser/ash/full_restore/full_restore_service.cc
index 58ca5a5a..cfb57f53 100644
--- a/chrome/browser/ash/full_restore/full_restore_service.cc
+++ b/chrome/browser/ash/full_restore/full_restore_service.cc
@@ -100,6 +100,7 @@
     // release. Restore browsers and web apps by the browser session restore.
     first_run_full_restore_ = true;
     SetDefaultRestorePrefIfNecessary(prefs);
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
     VLOG(1) << "No restore pref! First time to run full restore.";
   }
 }
@@ -130,6 +131,7 @@
   if (!HasRestorePref(prefs) && !HasSessionStartupPref(prefs)) {
     new_user_pref_handler_ =
         std::make_unique<NewUserRestorePrefHandler>(profile_);
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
     return;
   }
 
@@ -144,6 +146,7 @@
       MaybeShowRestoreNotification(kRestoreNotificationId);
       break;
     case RestoreOption::kDoNotRestore:
+      ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
       return;
   }
 }
@@ -155,7 +158,7 @@
   app_launch_handler_->LaunchBrowserWhenReady(first_run_full_restore_);
 }
 
-void FullRestoreService::MaybeCloseNotification() {
+void FullRestoreService::MaybeCloseNotification(bool allow_save) {
   close_notification_ = true;
   VLOG(1) << "The full restore notification is closed.";
 
@@ -163,6 +166,12 @@
     NotificationDisplayService::GetForProfile(profile_)->Close(
         NotificationHandler::Type::TRANSIENT, notification_->id());
   }
+
+  if (allow_save) {
+    // If the user launches an app or clicks the cancel button, start the save
+    // timer.
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
+  }
 }
 
 void FullRestoreService::Close(bool by_user) {
@@ -174,6 +183,13 @@
                               : kCloseNotByUserHistogramSuffix);
   }
   notification_ = nullptr;
+
+  if (by_user) {
+    // If the user closes the notification, start the save timer. If it is not
+    // closed by the user, the restore button might be clicked, then we need to
+    // wait for the restore finish to start the save timer.
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->AllowSave();
+  }
 }
 
 void FullRestoreService::Click(const absl::optional<int>& button_index,
@@ -188,7 +204,10 @@
     RecordRestoreAction(notification_->id(), RestoreAction::kRestore);
     RecordWindowCount(kRestoreHistogramSuffix);
     Restore();
-    MaybeCloseNotification();
+
+    // If the user selects restore, don't start the save timer. Wait for the
+    // restore finish.
+    MaybeCloseNotification(/*allow_save=*/false);
     return;
   }
 
@@ -214,6 +233,11 @@
   ::full_restore::FullRestoreSaveHandler::GetInstance()->SetShutDown();
 }
 
+void FullRestoreService::SetAppLaunchHanlderForTesting(
+    std::unique_ptr<FullRestoreAppLaunchHandler> app_launch_handler) {
+  app_launch_handler_ = std::move(app_launch_handler);
+}
+
 void FullRestoreService::Shutdown() {
   is_shut_down_ = true;
 }
diff --git a/chrome/browser/ash/full_restore/full_restore_service.h b/chrome/browser/ash/full_restore/full_restore_service.h
index e4fabc0..1d859a8 100644
--- a/chrome/browser/ash/full_restore/full_restore_service.h
+++ b/chrome/browser/ash/full_restore/full_restore_service.h
@@ -72,7 +72,7 @@
   // to restore.
   void LaunchBrowserWhenReady();
 
-  void MaybeCloseNotification();
+  void MaybeCloseNotification(bool allow_save = true);
 
   // message_center::NotificationObserver:
   void Close(bool by_user) override;
@@ -88,6 +88,9 @@
     return app_launch_handler_.get();
   }
 
+  void SetAppLaunchHanlderForTesting(
+      std::unique_ptr<FullRestoreAppLaunchHandler> app_launch_handler);
+
  private:
   // KeyedService overrides.
   void Shutdown() override;
diff --git a/chrome/browser/ash/full_restore/full_restore_service_unittest.cc b/chrome/browser/ash/full_restore/full_restore_service_unittest.cc
index 713fcd1..494274eb 100644
--- a/chrome/browser/ash/full_restore/full_restore_service_unittest.cc
+++ b/chrome/browser/ash/full_restore/full_restore_service_unittest.cc
@@ -232,6 +232,10 @@
     CreateRestoreData();
   }
 
+  void TearDown() override {
+    ::full_restore::FullRestoreSaveHandler::GetInstance()->ClearForTesting();
+  }
+
   void CreateRestoreData() {
     // Add app launch infos.
     ::full_restore::SaveAppLaunchInfo(
@@ -241,6 +245,7 @@
     ::full_restore::FullRestoreSaveHandler* save_handler =
         ::full_restore::FullRestoreSaveHandler::GetInstance();
     base::OneShotTimer* timer = save_handler->GetTimerForTesting();
+    save_handler->AllowSave();
 
     // Simulate timeout, and the launch info is saved.
     timer->FireNow();
@@ -250,6 +255,10 @@
     ::full_restore::FullRestoreReadHandler::GetInstance()
         ->profile_path_to_restore_data_.clear();
   }
+
+  bool allow_save() const {
+    return ::full_restore::FullRestoreSaveHandler::GetInstance()->allow_save_;
+  }
 };
 
 // If the system is crash, show the crash notification, and verify the restore
@@ -266,6 +275,7 @@
 
   EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 
   // Verify the set restore notification is not shown.
   VerifyNotification(false /* has_crash_notification */,
@@ -286,6 +296,7 @@
 
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 }
 
 // If the system is crash, show the crash notification, close the notification,
@@ -297,12 +308,13 @@
   VerifyNotification(true /* has_crash_notification */,
                      false /* has_restore_notification */);
 
-  FullRestoreService::MaybeCloseNotification(profile());
+  FullRestoreService::GetForProfile(profile())->MaybeCloseNotification();
   VerifyNotification(false /* has_crash_notification */,
                      false /* has_restore_notification */);
 
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 }
 
 // For an existing user, if re-image, don't show notifications for the first
@@ -322,6 +334,7 @@
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
 
   VerifyNotification(false, false);
+  EXPECT_TRUE(allow_save());
 
   base::CommandLine::ForCurrentProcess()->RemoveSwitch(
       switches::kForceFirstRun);
@@ -537,6 +550,7 @@
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 
   VerifyNotification(false, false);
 
@@ -564,6 +578,7 @@
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 
   // Click the setting button, the restore notification should not be closed.
   VerifyNotification(false /* has_crash_notification */,
@@ -594,6 +609,7 @@
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 
   VerifyNotification(false, false);
 }
@@ -625,6 +641,7 @@
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
   EXPECT_TRUE(::full_restore::CanPerformRestore(account_id()));
+  EXPECT_TRUE(allow_save());
 }
 
 // If the OS restore setting is 'Always', after reboot, don't show any
diff --git a/chrome/browser/ash/hats/hats_config.cc b/chrome/browser/ash/hats/hats_config.cc
index c3e69329..00549ab 100644
--- a/chrome/browser/ash/hats/hats_config.cc
+++ b/chrome/browser/ash/hats/hats_config.cc
@@ -14,29 +14,34 @@
 }  // namespace
 
 HatsConfig::HatsConfig(const base::Feature& feature,
-                       const base::TimeDelta& hatsNewDeviceThreshold,
-                       const char* const hatsIsSelectedPrefName,
-                       const char* const hatsCycleEndTimestampPrefName)
+                       const char* const histogram_name,
+                       const base::TimeDelta& new_device_threshold,
+                       const char* const is_selected_pref_name,
+                       const char* const cycle_end_timestamp_pref_name)
     : feature(feature),
-      hatsNewDeviceThreshold(hatsNewDeviceThreshold),
-      hatsIsSelectedPrefName(hatsIsSelectedPrefName),
-      hatsCycleEndTimestampPrefName(hatsCycleEndTimestampPrefName) {
-  DCHECK(hatsNewDeviceThreshold.InDaysFloored() >= kMinDaysThreshold);
+      histogram_name(histogram_name),
+      new_device_threshold(new_device_threshold),
+      is_selected_pref_name(is_selected_pref_name),
+      cycle_end_timestamp_pref_name(cycle_end_timestamp_pref_name) {
+  DCHECK(new_device_threshold.InDaysFloored() >= kMinDaysThreshold);
 }
 
+// General Survey -- shown after login
 const HatsConfig kHatsGeneralSurvey = {
-    ::features::kHappinessTrackingSystem,  // feature
-    base::TimeDelta::FromDays(7),          // hatsNewDeviceThreshold
-    prefs::kHatsDeviceIsSelected,          // hatsIsSelectedPrefName
-    prefs::kHatsSurveyCycleEndTimestamp,   // hatsCycleEndTimestampPrefName
+    ::features::kHappinessTrackingSystem,         // feature
+    "Browser.ChromeOS.HatsSatisfaction.General",  // histogram_name
+    base::TimeDelta::FromDays(7),                 // new_device_threshold
+    prefs::kHatsDeviceIsSelected,                 // is_selected_pref_name
+    prefs::kHatsSurveyCycleEndTimestamp,  // cycle_end_timestamp_pref_name
 };
 
 // Onboarding Experience Survey -- shown after completing the Onboarding Dialog
 const HatsConfig kHatsOnboardingSurvey = {
-    ::features::kHappinessTrackingSystemOnboarding,  // feature
-    base::TimeDelta::FromMinutes(30),                // hatsNewDeviceThreshold
-    prefs::kHatsOnboardingDeviceIsSelected,          // hatsIsSelectedPrefName
-    prefs::kHatsOnboardingSurveyCycleEndTs,  // hatsCycleEndTimestampPrefName
+    ::features::kHappinessTrackingSystemOnboarding,            // feature
+    "Browser.ChromeOS.HatsSatisfaction.OnboardingExperience",  // histogram_name
+    base::TimeDelta::FromMinutes(30),        // new_device_threshold
+    prefs::kHatsOnboardingDeviceIsSelected,  // is_selected_pref_name
+    prefs::kHatsOnboardingSurveyCycleEndTs,  // cycle_end_timestamp_pref_name
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/hats/hats_config.h b/chrome/browser/ash/hats/hats_config.h
index 1b2ca9a3..9477a2c 100644
--- a/chrome/browser/ash/hats/hats_config.h
+++ b/chrome/browser/ash/hats/hats_config.h
@@ -15,9 +15,10 @@
 
 struct HatsConfig {
   HatsConfig(const base::Feature& feature,
-             const base::TimeDelta& hatsNewDeviceThreshold,
-             const char* const hatsIsSelectedPrefName,
-             const char* const hatsCycleEndTimestampPrefName);
+             const char* const histogram_name,
+             const base::TimeDelta& new_device_threshold,
+             const char* const is_selected_pref_name,
+             const char* const cycle_end_timestamp_pref_name);
   HatsConfig(const HatsConfig&) = delete;
   HatsConfig& operator=(const HatsConfig&) = delete;
 
@@ -25,16 +26,21 @@
   // survey is enabled or not, and its parameters.
   const base::Feature& feature;
 
+  // Histogram name. New entries should be added to
+  // tools/metrics/histograms/metadata/browser/histograms.xml, as a variant of
+  // Browser.ChromeOS.HatsSatisfaction.
+  const char* const histogram_name;
+
   // Minimum amount of time after initial login or oobe after which we can show
   // the HaTS notification.
-  const base::TimeDelta hatsNewDeviceThreshold;
+  const base::TimeDelta new_device_threshold;
 
   // Preference name for a boolean that stores whether we were selected for the
   // current survey cycle.
-  const char* const hatsIsSelectedPrefName;
+  const char* const is_selected_pref_name;
 
   // Preference name for an int64 that stores the current survey cycle end.
-  const char* const hatsCycleEndTimestampPrefName;
+  const char* const cycle_end_timestamp_pref_name;
 };
 
 // CrOS HaTS configs are declared here and defined in hats_config.cc
diff --git a/chrome/browser/ash/hats/hats_dialog.cc b/chrome/browser/ash/hats/hats_dialog.cc
index 6970d78..7046823 100644
--- a/chrome/browser/ash/hats/hats_dialog.cc
+++ b/chrome/browser/ash/hats/hats_dialog.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/containers/flat_map.h"
 #include "base/logging.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
@@ -40,6 +41,17 @@
 const int kDefaultWidth = 384;
 const int kDefaultHeight = 428;
 
+// There are 5 possible choices, from very_dissatisfied to very_satisfied.
+const int kMaxFeedbackScore = 5;
+
+// Possible requested actions from the HTML+JS client.
+// Client is ready to close the page.
+const char kClientActionClose[] = "close";
+// There was an unhandled error and we need to log and close the page.
+const char kClientActionUnhandledError[] = "survey-loading-error";
+// A smiley was selected, so we'd like to track that.
+const char kClientSmileySelected[] = "smiley-selected-";
+
 constexpr char kCrOSHaTSURL[] =
     "https://storage.googleapis.com/chromeos-hats-web-stable/index.html";
 
@@ -117,6 +129,38 @@
 }
 
 // static
+bool HatsDialog::HandleClientTriggeredAction(
+    const std::string& action,
+    const std::string& histogram_name) {
+  DVLOG(1) << "HandleClientTriggeredAction: Received " << action;
+
+  // Page asks to be closed.
+  if (action == kClientActionClose) {
+    return true;
+  }
+  // An unhandled error in our client, log and close.
+  if (base::StartsWith(action, kClientActionUnhandledError)) {
+    LOG(ERROR) << "Error while loading a HaTS Survey " << action;
+    return true;
+  }
+  // A Smiley (score) was selected.
+  if (base::StartsWith(action, kClientSmileySelected)) {
+    int score;
+    if (!base::StringToInt(action.substr(strlen(kClientSmileySelected)),
+                           &score)) {
+      LOG(ERROR) << "Can't parse Survey score";
+      return false;  // It's a client error, but don't close the page.
+    }
+    DVLOG(1) << "Setting UMA Metric for smiley " << score;
+    base::UmaHistogramExactLinear(histogram_name, score, kMaxFeedbackScore + 1);
+    return false;  // Don't close the page.
+  }
+
+  // Future proof - ignore unimplemented commands.
+  return false;
+}
+
+// static
 std::unique_ptr<HatsDialog> HatsDialog::CreateAndShow(
     const HatsConfig& hats_config,
     const base::flat_map<std::string, std::string>& product_specific_data) {
@@ -130,7 +174,8 @@
     user_locale = kDefaultProfileLocale;
 
   std::unique_ptr<HatsDialog> hats_dialog(
-      new HatsDialog(HatsFinchHelper::GetTriggerID(hats_config), profile));
+      new HatsDialog(HatsFinchHelper::GetTriggerID(hats_config), profile,
+                     hats_config.histogram_name));
 
   // Raw pointer is used here since the dialog is owned by the hats
   // notification controller which lives until the end of the user session. The
@@ -154,8 +199,12 @@
   chrome::ShowWebDialog(nullptr, ProfileManager::GetActiveUserProfile(), this);
 }
 
-HatsDialog::HatsDialog(const std::string& trigger_id, Profile* user_profile)
-    : trigger_id_(trigger_id), user_profile_(user_profile) {
+HatsDialog::HatsDialog(const std::string& trigger_id,
+                       Profile* user_profile,
+                       const std::string& histogram_name)
+    : trigger_id_(trigger_id),
+      user_profile_(user_profile),
+      histogram_name_(histogram_name) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   set_can_resize(false);
 }
@@ -188,12 +237,20 @@
   return std::string();
 }
 
-void HatsDialog::OnDialogClosed(const std::string& json_retval) {}
-
 void HatsDialog::OnCloseContents(WebContents* source, bool* out_close_dialog) {
   *out_close_dialog = true;
 }
 
+void HatsDialog::OnDialogClosed(const std::string& json_retval) {}
+
+void HatsDialog::OnLoadingStateChanged(WebContents* source) {
+  const std::string ref = source->GetURL().ref();
+
+  if (HandleClientTriggeredAction(ref, histogram_name_)) {
+    source->ClosePage();
+  }
+}
+
 bool HatsDialog::ShouldShowDialogTitle() const {
   return false;
 }
diff --git a/chrome/browser/ash/hats/hats_dialog.h b/chrome/browser/ash/hats/hats_dialog.h
index 6bda53d..ea71c23 100644
--- a/chrome/browser/ash/hats/hats_dialog.h
+++ b/chrome/browser/ash/hats/hats_dialog.h
@@ -35,10 +35,13 @@
 
  private:
   FRIEND_TEST_ALL_PREFIXES(HatsDialogTest, GetFormattedSiteContext);
+  FRIEND_TEST_ALL_PREFIXES(HatsDialogTest, HandleClientTriggeredAction);
 
   void Show(const std::string& site_context);
 
-  HatsDialog(const std::string& trigger_id, Profile* user_profile);
+  HatsDialog(const std::string& trigger_id,
+             Profile* user_profile,
+             const std::string& histogram_name);
 
   // Must be run on a blocking thread pool.
   // Gathers the browser version info, firmware info and platform info and
@@ -51,6 +54,12 @@
       const std::string& user_locale,
       const base::flat_map<std::string, std::string>& product_specific_data);
 
+  // Based on the supplied |action|, returns true if the client should be
+  // closed. Handling the action could imply logging or incrementing a survey
+  // specific UMA metric (using |histogram_name|).
+  static bool HandleClientTriggeredAction(const std::string& action,
+                                          const std::string& histogram_name);
+
   // ui::WebDialogDelegate implementation.
   ui::ModalType GetDialogModalType() const override;
   std::u16string GetDialogTitle() const override;
@@ -59,9 +68,10 @@
       std::vector<content::WebUIMessageHandler*>* handlers) const override;
   void GetDialogSize(gfx::Size* size) const override;
   std::string GetDialogArgs() const override;
-  void OnDialogClosed(const std::string& json_retval) override;
   void OnCloseContents(content::WebContents* source,
                        bool* out_close_dialog) override;
+  void OnDialogClosed(const std::string& json_retval) override;
+  void OnLoadingStateChanged(content::WebContents* source) override;
   bool ShouldShowDialogTitle() const override;
   bool ShouldShowCloseButton() const override;
   bool HandleContextMenu(content::RenderFrameHost* render_frame_host,
@@ -71,6 +81,7 @@
   const std::string trigger_id_;
   std::string url_;
   Profile* user_profile_;
+  const std::string histogram_name_;
 
   DISALLOW_COPY_AND_ASSIGN(HatsDialog);
 };
diff --git a/chrome/browser/ash/hats/hats_dialog_unittest.cc b/chrome/browser/ash/hats/hats_dialog_unittest.cc
index 46557ea..59a14f0 100644
--- a/chrome/browser/ash/hats/hats_dialog_unittest.cc
+++ b/chrome/browser/ash/hats/hats_dialog_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <string>
 
+#include "base/test/metrics/histogram_tester.h"
+#include "hats_dialog.h"
 #include "net/base/url_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -62,4 +64,27 @@
   EXPECT_NE(std::string::npos, context.find("psdValue2%20%3D%25%5E*%24%23%26"));
 }
 
+TEST(HatsDialogTest, HandleClientTriggeredAction) {
+  // Client asks to close the window
+  EXPECT_TRUE(HatsDialog::HandleClientTriggeredAction("close", "hist-name"));
+  // There was an unhandled error, close the window
+  EXPECT_TRUE(HatsDialog::HandleClientTriggeredAction(
+      "survey-loading-error-12345", "a-suffix"));
+  // Client sent an invalid action, ignore it
+  EXPECT_FALSE(HatsDialog::HandleClientTriggeredAction("Invalid", "hist-name"));
+
+  // Set up the histogram tester
+  base::HistogramTester histogram_tester;
+  std::string histogram("Browser.ChromeOS.HatsSatisfaction.General");
+  histogram_tester.ExpectTotalCount(histogram, 0);
+
+  EXPECT_FALSE(HatsDialog::HandleClientTriggeredAction("smiley-selected-4",
+                                                       "full-histogram-name"));
+
+  // Ensure we logged the right metric
+  // For the example above, it means adding 1 entry in the bucket for score=4
+  std::vector<base::Bucket> expected_buckets{{4, 1}};
+  EXPECT_EQ(histogram_tester.GetAllSamples("full-histogram-name"),
+            expected_buckets);
+}
 }  // namespace ash
diff --git a/chrome/browser/ash/hats/hats_finch_helper.cc b/chrome/browser/ash/hats/hats_finch_helper.cc
index 7253796..b43c39b 100644
--- a/chrome/browser/ash/hats/hats_finch_helper.cc
+++ b/chrome/browser/ash/hats/hats_finch_helper.cc
@@ -44,8 +44,8 @@
   // received.
   // Warning: |reset_hats_| applies to all surveys.
   if (reset_survey_cycle_ || reset_hats_) {
-    profile_->GetPrefs()->ClearPref(hats_config.hatsCycleEndTimestampPrefName);
-    profile_->GetPrefs()->ClearPref(hats_config.hatsIsSelectedPrefName);
+    profile_->GetPrefs()->ClearPref(hats_config.cycle_end_timestamp_pref_name);
+    profile_->GetPrefs()->ClearPref(hats_config.is_selected_pref_name);
     if (reset_hats_)
       profile_->GetPrefs()->ClearPref(prefs::kHatsLastInteractionTimestamp);
     return;
@@ -108,7 +108,7 @@
 
 bool HatsFinchHelper::HasPreviousCycleEnded() {
   int64_t serialized_timestamp = profile_->GetPrefs()->GetInt64(
-      hats_config_.hatsCycleEndTimestampPrefName);
+      hats_config_.cycle_end_timestamp_pref_name);
   base::Time recent_survey_cycle_end_time =
       base::Time::FromInternalValue(serialized_timestamp);
   return recent_survey_cycle_end_time < base::Time::Now();
@@ -130,7 +130,7 @@
   // for the current cycle, then return the stored value of the result.
   if (!HasPreviousCycleEnded()) {
     device_is_selected_for_cycle_ =
-        profile_->GetPrefs()->GetBoolean(hats_config_.hatsIsSelectedPrefName);
+        profile_->GetPrefs()->GetBoolean(hats_config_.is_selected_pref_name);
     return;
   }
 
@@ -142,7 +142,7 @@
   base::Time survey_cycle_end_date = ComputeNextEndDate();
 
   PrefService* pref_service = profile_->GetPrefs();
-  pref_service->SetInt64(hats_config_.hatsCycleEndTimestampPrefName,
+  pref_service->SetInt64(hats_config_.cycle_end_timestamp_pref_name,
                          survey_cycle_end_date.ToInternalValue());
 
   double rand_double = base::RandDouble();
@@ -154,7 +154,7 @@
   // of around 26 characters.
   is_selected = is_selected && (trigger_id_.length() > 15);
 
-  pref_service->SetBoolean(hats_config_.hatsIsSelectedPrefName, is_selected);
+  pref_service->SetBoolean(hats_config_.is_selected_pref_name, is_selected);
   device_is_selected_for_cycle_ = is_selected;
 }
 
diff --git a/chrome/browser/ash/hats/hats_notification_controller.cc b/chrome/browser/ash/hats/hats_notification_controller.cc
index 47f3eea..dfd2cdc 100644
--- a/chrome/browser/ash/hats/hats_notification_controller.cc
+++ b/chrome/browser/ash/hats/hats_notification_controller.cc
@@ -105,7 +105,7 @@
 
   base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
-      base::BindOnce(&IsNewDevice, hats_config.hatsNewDeviceThreshold),
+      base::BindOnce(&IsNewDevice, hats_config.new_device_threshold),
       base::BindOnce(&HatsNotificationController::Initialize,
                      weak_pointer_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/ash/login/screens/terms_of_service_screen.cc b/chrome/browser/ash/login/screens/terms_of_service_screen.cc
index b0bfbbe..abfa37a1 100644
--- a/chrome/browser/ash/login/screens/terms_of_service_screen.cc
+++ b/chrome/browser/ash/login/screens/terms_of_service_screen.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
+#include "chrome/browser/enterprise/util/managed_browser_utils.h"
 #include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
@@ -146,10 +147,12 @@
   // Set the domain name whose Terms of Service are being shown.
   policy::BrowserPolicyConnectorAsh* connector =
       g_browser_process->platform_part()->browser_policy_connector_ash();
-  view_->SetManager(connector->GetEnterpriseDomainManager());
-
   // Show the screen.
-  view_->Show();
+  view_->Show(
+      connector->IsDeviceEnterpriseManaged()
+          ? connector->GetEnterpriseDomainManager()
+          : chrome::enterprise_util::GetDomainFromEmail(
+                ProfileManager::GetActiveUserProfile()->GetProfileUserName()));
 
   // Start downloading the Terms of Service.
   StartDownload();
@@ -259,7 +262,7 @@
     view_->OnLoadSuccess(net::EscapeForHTML(*response_body));
     if (features::IsManagedTermsOfServiceEnabled()) {
       // Update locally saved terms.
-      SaveTos(*response_body);
+      SaveTos(net::EscapeForHTML(*response_body));
     }
   }
 }
diff --git a/chrome/browser/ash/login/session/user_session_initializer.cc b/chrome/browser/ash/login/session/user_session_initializer.cc
index 10f4297..3193c31f2 100644
--- a/chrome/browser/ash/login/session/user_session_initializer.cc
+++ b/chrome/browser/ash/login/session/user_session_initializer.cc
@@ -278,8 +278,10 @@
   }
 }
 
-void UserSessionInitializer::PreStartSession() {
-  NetworkCertLoader::Get()->MarkUserNSSDBWillBeInitialized();
+void UserSessionInitializer::PreStartSession(bool is_primary_session) {
+  if (is_primary_session) {
+    NetworkCertLoader::Get()->MarkUserNSSDBWillBeInitialized();
+  }
 }
 
 void UserSessionInitializer::InitRlzImpl(Profile* profile,
diff --git a/chrome/browser/ash/login/session/user_session_initializer.h b/chrome/browser/ash/login/session/user_session_initializer.h
index d6dc9022..7f34e3e 100644
--- a/chrome/browser/ash/login/session/user_session_initializer.h
+++ b/chrome/browser/ash/login/session/user_session_initializer.h
@@ -46,7 +46,7 @@
   void OnUserSessionStarted(bool is_primary_user) override;
 
   // Called before a session begins loading.
-  void PreStartSession();
+  void PreStartSession(bool is_primary_session);
 
   // Initialize child user profile services that depend on the policy.
   void InitializeChildUserServices(Profile* profile);
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc
index 3bcc27e..4025ae2 100644
--- a/chrome/browser/ash/login/session/user_session_manager.cc
+++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -649,7 +649,7 @@
   start_session_type_ = start_session_type;
 
   VLOG(1) << "Starting user session.";
-  PreStartSession();
+  PreStartSession(start_session_type);
   CreateUserSession(user_context, has_auth_cookies);
 
   if (!has_active_session)
@@ -1146,11 +1146,12 @@
       user_context.GetUserType() == user_manager::USER_TYPE_CHILD);
 }
 
-void UserSessionManager::PreStartSession() {
+void UserSessionManager::PreStartSession(StartSessionType start_session_type) {
   // Switch log file as soon as possible.
   logging::RedirectChromeLogging(*base::CommandLine::ForCurrentProcess());
 
-  UserSessionInitializer::Get()->PreStartSession();
+  UserSessionInitializer::Get()->PreStartSession(start_session_type ==
+                                                 StartSessionType::kPrimary);
 }
 
 void UserSessionManager::StoreUserContextDataBeforeProfileIsCreated() {
diff --git a/chrome/browser/ash/login/session/user_session_manager.h b/chrome/browser/ash/login/session/user_session_manager.h
index e6fd255c..6365ce6 100644
--- a/chrome/browser/ash/login/session/user_session_manager.h
+++ b/chrome/browser/ash/login/session/user_session_manager.h
@@ -404,7 +404,7 @@
 
   void CreateUserSession(const UserContext& user_context,
                          bool has_auth_cookies);
-  void PreStartSession();
+  void PreStartSession(StartSessionType start_session_type);
 
   // Store any useful UserContext data early on when profile has not been
   // created yet and user services were not yet initialized. Can store
diff --git a/chrome/browser/ash/notifications/request_pin_view.cc b/chrome/browser/ash/notifications/request_pin_view.cc
index e808490a..8fa5720 100644
--- a/chrome/browser/ash/notifications/request_pin_view.cc
+++ b/chrome/browser/ash/notifications/request_pin_view.cc
@@ -8,6 +8,7 @@
 
 #include <utility>
 
+#include "ash/components/security_token_pin/error_generator.h"
 #include "base/bind.h"
 #include "base/i18n/number_formatting.h"
 #include "base/strings/string_util.h"
@@ -16,7 +17,6 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/generated_resources.h"
-#include "chromeos/components/security_token_pin/error_generator.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/resource/resource_bundle.h"
diff --git a/chrome/browser/ash/notifications/request_pin_view.h b/chrome/browser/ash/notifications/request_pin_view.h
index 57c53b3..790e15d 100644
--- a/chrome/browser/ash/notifications/request_pin_view.h
+++ b/chrome/browser/ash/notifications/request_pin_view.h
@@ -8,10 +8,10 @@
 #include <memory>
 #include <string>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/views/controls/label.h"
diff --git a/chrome/browser/ash/scanning/scan_service.cc b/chrome/browser/ash/scanning/scan_service.cc
index 1ab74286..56fd176d 100644
--- a/chrome/browser/ash/scanning/scan_service.cc
+++ b/chrome/browser/ash/scanning/scan_service.cc
@@ -539,4 +539,8 @@
   return it->second;
 }
 
+std::vector<std::string> ScanService::GetScannedImagesForTesting() const {
+  return scanned_images_;
+}
+
 }  // namespace ash
diff --git a/chrome/browser/ash/scanning/scan_service.h b/chrome/browser/ash/scanning/scan_service.h
index 9f7252f..b422d113 100644
--- a/chrome/browser/ash/scanning/scan_service.h
+++ b/chrome/browser/ash/scanning/scan_service.h
@@ -79,6 +79,10 @@
   void BindInterface(
       mojo::PendingReceiver<scanning::mojom::ScanService> pending_receiver);
 
+  // Returns |scanned_images_| to verify the correct images are added/removed in
+  // unit tests.
+  std::vector<std::string> GetScannedImagesForTesting() const;
+
  private:
   // KeyedService:
   void Shutdown() override;
diff --git a/chrome/browser/ash/scanning/scan_service_unittest.cc b/chrome/browser/ash/scanning/scan_service_unittest.cc
index 58e8b63f..f6ea690 100644
--- a/chrome/browser/ash/scanning/scan_service_unittest.cc
+++ b/chrome/browser/ash/scanning/scan_service_unittest.cc
@@ -157,11 +157,13 @@
   return file_paths;
 }
 
-// Returns a manually generated PNG image.
-std::string CreatePng() {
+// Returns a manually generated PNG image. |alpha| is used to make unique PNGs.
+std::string CreatePng(const int alpha = 255) {
+  DCHECK(alpha >= 0 && alpha <= 255);
+
   SkBitmap bitmap;
   bitmap.allocN32Pixels(100, 100);
-  bitmap.eraseARGB(255, 0, 255, 0);
+  bitmap.eraseARGB(alpha, 0, 255, 0);
   std::vector<unsigned char> bytes;
   gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &bytes);
   return std::string(bytes.begin(), bytes.end());
@@ -895,23 +897,31 @@
 
   fake_lorgnette_scanner_manager_.SetGetScannerNamesResponse(
       {kFirstTestScannerName});
-  const std::vector<std::string> scan_data = {CreatePng()};
-  fake_lorgnette_scanner_manager_.SetScanResponse(scan_data);
   auto scanners = GetScanners();
   ASSERT_EQ(scanners.size(), 1u);
 
   mojo_ipc::ScanSettings settings = CreateScanSettings(
       scanned_files_mount_->GetRootPath(), mojo_ipc::FileType::kPdf);
 
-  // Scan two pages without completing the scan.
+  const std::string first_scanned_image = CreatePng(/*alpha=*/1);
+  const std::vector<std::string> first_scan_data = {first_scanned_image};
+  fake_lorgnette_scanner_manager_.SetScanResponse(first_scan_data);
   EXPECT_TRUE(StartMultiPageScan(scanners[0]->id, settings.Clone()));
+
+  const std::string second_scanned_image = CreatePng(/*alpha=*/2);
+  const std::vector<std::string> second_scan_data = {second_scanned_image};
+  fake_lorgnette_scanner_manager_.SetScanResponse(second_scan_data);
   EXPECT_TRUE(ScanNextPage(scanners[0]->id, settings.Clone()));
 
   // Delete the first page.
   RemovePage(0);
-
   CompleteMultiPageScan();
 
+  const std::vector<std::string> scanned_images =
+      scan_service_->GetScannedImagesForTesting();
+  EXPECT_EQ(1, scanned_images.size());
+  EXPECT_EQ(second_scanned_image, scanned_images[0]);
+
   // Expect 1 record of the Scanning.NumPagesScanned metric in the 1 pages
   // scanned bucket.
   histogram_tester.ExpectUniqueSample("Scanning.NumPagesScanned", 1, 1);
@@ -926,24 +936,37 @@
 
   fake_lorgnette_scanner_manager_.SetGetScannerNamesResponse(
       {kFirstTestScannerName});
-  const std::vector<std::string> scan_data = {CreatePng()};
-  fake_lorgnette_scanner_manager_.SetScanResponse(scan_data);
   auto scanners = GetScanners();
   ASSERT_EQ(scanners.size(), 1u);
 
   mojo_ipc::ScanSettings settings = CreateScanSettings(
       scanned_files_mount_->GetRootPath(), mojo_ipc::FileType::kPdf);
 
-  // Scan three pages without completing the scan.
+  const std::string first_scanned_image = CreatePng(/*alpha=*/1);
+  const std::vector<std::string> first_scan_data = {first_scanned_image};
+  fake_lorgnette_scanner_manager_.SetScanResponse(first_scan_data);
   EXPECT_TRUE(StartMultiPageScan(scanners[0]->id, settings.Clone()));
+
+  const std::string second_scanned_image = CreatePng(/*alpha=*/2);
+  const std::vector<std::string> second_scan_data = {second_scanned_image};
+  fake_lorgnette_scanner_manager_.SetScanResponse(second_scan_data);
   EXPECT_TRUE(ScanNextPage(scanners[0]->id, settings.Clone()));
+
+  const std::string third_scanned_image = CreatePng(/*alpha=*/3);
+  const std::vector<std::string> third_scan_data = {third_scanned_image};
+  fake_lorgnette_scanner_manager_.SetScanResponse(third_scan_data);
   EXPECT_TRUE(ScanNextPage(scanners[0]->id, settings.Clone()));
 
   // Delete the second page.
   RemovePage(1);
-
   CompleteMultiPageScan();
 
+  const std::vector<std::string> scanned_images =
+      scan_service_->GetScannedImagesForTesting();
+  EXPECT_EQ(2, scanned_images.size());
+  EXPECT_EQ(first_scanned_image, scanned_images[0]);
+  EXPECT_EQ(third_scanned_image, scanned_images[1]);
+
   // Expect 1 record of the Scanning.NumPagesScanned metric in the 2 pages
   // scanned bucket.
   histogram_tester.ExpectUniqueSample("Scanning.NumPagesScanned", 2, 1);
@@ -966,13 +989,16 @@
   mojo_ipc::ScanSettings settings = CreateScanSettings(
       scanned_files_mount_->GetRootPath(), mojo_ipc::FileType::kPdf);
 
-  // Scan four pages without completing the scan.
   EXPECT_TRUE(StartMultiPageScan(scanners[0]->id, settings.Clone()));
 
   // The attempt to delete the only page should do nothing.
   RemovePage(0);
   CompleteMultiPageScan();
 
+  const std::vector<std::string> scanned_images =
+      scan_service_->GetScannedImagesForTesting();
+  EXPECT_EQ(1, scanned_images.size());
+
   // Expect 1 record of the Scanning.NumPagesScanned metric in the 1 page
   // scanned bucket.
   histogram_tester.ExpectUniqueSample("Scanning.NumPagesScanned", 1, 1);
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
index 380d730f..adb09d41 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -1054,7 +1054,10 @@
 // Test that storage doesn't leave any traces on disk.
 IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest,
                        PRE_PRE_StorageRemovedFromDisk) {
-  ASSERT_EQ(0, CheckUserDirectoryForString(kLocalHost, {}));
+  // Checking leveldb content fails in most cases. See
+  // https://crbug.com/1238325.
+  ASSERT_EQ(0, CheckUserDirectoryForString(kLocalHost, {},
+                                           /*check_leveldb_content=*/false));
   ASSERT_EQ(0, GetSiteDataCount());
   ExpectCookieTreeModelCount(0);
 
@@ -1078,18 +1081,10 @@
   // payment handler, content settings, autofill, ...?
 }
 
-// PRE_StorageRemovedFromDisk fails on Chrome OS. http://crbug.com/1035156.
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#define MAYBE_PRE_StorageRemovedFromDisk DISABLED_PRE_StorageRemovedFromDisk
-#define MAYBE_StorageRemovedFromDisk DISABLED_StorageRemovedFromDisk
-#else
-#define MAYBE_PRE_StorageRemovedFromDisk PRE_StorageRemovedFromDisk
-#define MAYBE_StorageRemovedFromDisk StorageRemovedFromDisk
-#endif
 // Restart after creating the data to ensure that everything was written to
 // disk.
 IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest,
-                       MAYBE_PRE_StorageRemovedFromDisk) {
+                       PRE_StorageRemovedFromDisk) {
   EXPECT_EQ(1, GetSiteDataCount());
   // Expect all datatypes from above except SessionStorage and NativeIO.
   // SessionStorage is not supported by the CookieTreeModel yet. NativeIO is
@@ -1105,8 +1100,7 @@
 
 // Check if any data remains after a deletion and a Chrome restart to force
 // all writes to be finished.
-IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest,
-                       MAYBE_StorageRemovedFromDisk) {
+IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, StorageRemovedFromDisk) {
   // Deletions should remove all traces of browsing data from disk
   // but there are a few bugs that need to be fixed.
   // Any addition to this list must have an associated TODO().
@@ -1118,7 +1112,8 @@
     "[0-9]{6}",
 #endif
   };
-  int found = CheckUserDirectoryForString(kLocalHost, ignore_file_patterns);
+  int found = CheckUserDirectoryForString(kLocalHost, ignore_file_patterns,
+                                          /*check_leveldb_content=*/false);
   EXPECT_EQ(0, found) << "A non-ignored file contains the hostname.";
 }
 
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.cc
index 43cb8c43..6a1be27 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.cc
@@ -237,7 +237,8 @@
 
 bool BrowsingDataRemoverBrowserTestBase::CheckUserDirectoryForString(
     const std::string& hostname,
-    const std::vector<std::string>& ignore_file_patterns) {
+    const std::vector<std::string>& ignore_file_patterns,
+    bool check_leveldb_content) {
   base::FilePath user_data_dir =
       g_browser_process->profile_manager()->user_data_dir();
   base::ScopedAllowBlockingForTesting allow_blocking;
@@ -263,7 +264,7 @@
     }
 
     // Check leveldb content.
-    if (path.BaseName().AsUTF8Unsafe() == "CURRENT") {
+    if (check_leveldb_content && path.BaseName().AsUTF8Unsafe() == "CURRENT") {
       // LevelDB instances consist of a folder where most files have variable
       // names that contain a revision number.
       // All leveldb folders have a "CURRENT" file that points to the current
@@ -284,8 +285,8 @@
           }
         }
       } else {
-        // TODO(crbug.com/846297): Some databases are already open and the LOCK
-        // prevents us from accessing them.
+        // TODO(https://crbug.com/1238325): Most databases are already open and
+        // the LOCK prevents us from accessing them.
         LOG(INFO) << "Could not open: " << file << " " << status.ToString();
       }
     }
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.h b/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.h
index 7611150b..b1cfff4 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.h
+++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest_base.h
@@ -49,9 +49,13 @@
   // Searches the user data directory for files that contain |hostname| in the
   // filename or as part of the content. Returns the number of files that
   // do not match any regex in |ignore_file_patterns|.
+  // If |check_leveldb_content| is true, also tries to open LevelDB files and
+  // look for the |hostname| inside them. If LevelDB files are locked and cannot
+  // be opened, they are ignored.
   bool CheckUserDirectoryForString(
       const std::string& hostname,
-      const std::vector<std::string>& ignore_file_patterns);
+      const std::vector<std::string>& ignore_file_patterns,
+      bool check_leveldb_content);
 
   // Returns the cookie tree model for the browser.
   std::unique_ptr<CookiesTreeModel> GetCookiesTreeModel(Browser* browser);
diff --git a/chrome/browser/browsing_data/incognito_browsing_data_browsertest.cc b/chrome/browser/browsing_data/incognito_browsing_data_browsertest.cc
index 4ba9b13..e7dd1aa 100644
--- a/chrome/browser/browsing_data/incognito_browsing_data_browsertest.cc
+++ b/chrome/browser/browsing_data/incognito_browsing_data_browsertest.cc
@@ -538,16 +538,12 @@
     "Cookie",    "LocalStorage", "FileSystem",    "SessionStorage",
     "IndexedDb", "WebSql",       "ServiceWorker", "CacheStorage"};
 
-// https://crbug.com/1236235
-#if defined(OS_CHROMEOS)
-#define MAYBE_StorageDoesntWriteToDisk DISABLED_StorageDoesntWriteToDisk
-#else
-#define MAYBE_StorageDoesntWriteToDisk StorageDoesntWriteToDisk
-#endif
 // Test that storage doesn't leave any traces on disk.
 IN_PROC_BROWSER_TEST_F(IncognitoBrowsingDataBrowserTest,
-                       MAYBE_StorageDoesntWriteToDisk) {
-  ASSERT_EQ(0, CheckUserDirectoryForString(kLocalHost, {}));
+                       StorageDoesntWriteToDisk) {
+  // Checking leveldb content fails in most cases. See https://crbug.com/1238325
+  ASSERT_EQ(0, CheckUserDirectoryForString(kLocalHost, {},
+                                           /*check_leveldb_content=*/false));
   ASSERT_EQ(0, GetSiteDataCount());
   ExpectCookieTreeModelCount(GetBrowser(), 0);
 
@@ -570,7 +566,8 @@
   // TODO(crbug.com/846297): Add more datatypes for testing. E.g. notifications,
   // payment handler, content settings, autofill, ...?
 
-  int found = CheckUserDirectoryForString(kLocalHost, {});
+  int found = CheckUserDirectoryForString(kLocalHost, {},
+                                          /*check_leveldb_content=*/false);
   EXPECT_EQ(0, found) << "A file contains the hostname.";
 
   EXPECT_EQ(0, GetSiteDataCount(GetRegularBrowser()));
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index ddf2bde..6ec5115 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -247,6 +247,8 @@
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OFFICIAL_BUILD)
+#include "ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom.h"
+#include "ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h"
 #include "chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"  // nogncheck crbug.com/1125897
 #include "chromeos/components/telemetry_extension_ui/mojom/probe_service.mojom.h"  // nogncheck crbug.com/1125897
 #include "chromeos/components/telemetry_extension_ui/mojom/system_events_service.mojom.h"  // nogncheck crbug.com/1125897
@@ -937,6 +939,10 @@
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OFFICIAL_BUILD)
+  RegisterWebUIControllerInterfaceBinder<
+      ash::mojom::sample_swa::PageHandlerFactory, ash::SampleSystemWebAppUI>(
+      map);
+
   if (base::FeatureList::IsEnabled(chromeos::features::kTelemetryExtension)) {
     RegisterWebUIControllerInterfaceBinder<
         chromeos::health::mojom::DiagnosticsService,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index c09a8d1d..93aa8c5 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -23,6 +23,7 @@
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
 
   public_deps = [
+    "//ash/components/security_token_pin",
     "//ash/resources/vector_icons",
     "//ash/strings",
     "//chrome:extra_resources",
@@ -34,7 +35,6 @@
     "//chrome/browser/ash/power/ml:user_activity_ukm_logger_helpers",
     "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings",
     "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings",
-    "//chromeos/components/security_token_pin",
     "//chromeos/dbus:cicerone_proto",
     "//chromeos/dbus:concierge_proto",
     "//chromeos/dbus:seneschal_proto",
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
index 7fe950e..d102b46a 100644
--- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
+++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
@@ -15,9 +15,9 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/components/external_install_options.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chromeos/components/multidevice/logging/logging.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
diff --git a/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc b/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc
index 9eaa736b..5ccc94d7 100644
--- a/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc
+++ b/chrome/browser/chromeos/eche_app/eche_app_manager_factory.cc
@@ -67,6 +67,8 @@
                         std::string package_name,
                         absl::optional<int64_t> notification_id) {
   std::string url;
+  // Use hash mark(#) to send params to webui so we don't need to reload the
+  // whole eche window.
   if (notification_id.has_value()) {
     url = "chrome://eche-app/#notification_id=";
     url.append(base::NumberToString(notification_id.value()));
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
index ed22990..38da5d4 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -15,6 +15,8 @@
 #include "ash/public/cpp/tablet_mode.h"
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/files/file.h"
+#include "base/files/file_util.h"
 #include "base/i18n/encoding_detection.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
@@ -22,6 +24,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/thread_pool.h"
 #include "chrome/browser/ash/crostini/crostini_export_import.h"
 #include "chrome/browser/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/crostini/crostini_package_service.h"
@@ -56,7 +59,6 @@
 #include "chrome/common/extensions/api/manifest_types.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/webui_url_constants.h"
-#include "chrome/services/file_util/public/cpp/zip_file_creator.h"
 #include "chromeos/settings/timezone_settings.h"
 #include "components/account_id/account_id.h"
 #include "components/arc/arc_prefs.h"
@@ -270,9 +272,8 @@
   return RespondNow(NoArguments());
 }
 
-// Collection of active ZipFileCreator objects, indexed by ZIP file path.
-using ZipCreators =
-    std::unordered_map<base::FilePath, scoped_refptr<ZipFileCreator>>;
+// Collection of active ZipFileCreator objects, indexed by ZIP operation ID.
+using ZipCreators = std::unordered_map<int, scoped_refptr<ZipFileCreator>>;
 static base::NoDestructor<ZipCreators> zip_creators;
 
 FileManagerPrivateInternalZipSelectionFunction::
@@ -293,9 +294,9 @@
   if (params->parent_url.empty())
     return RespondNow(Error("Empty parent URL"));
 
-  const base::FilePath parent_dir = file_manager::util::GetLocalPathFromURL(
+  src_dir_ = file_manager::util::GetLocalPathFromURL(
       render_frame_host(), profile, GURL(params->parent_url));
-  if (parent_dir.empty())
+  if (src_dir_.empty())
     return RespondNow(
         Error(base::StrCat({"Cannot convert parent URL ",
                             Redact(params->parent_url), " to absolute path"})));
@@ -304,8 +305,7 @@
   if (params->urls.empty())
     return RespondNow(Error("No input files"));
 
-  std::vector<base::FilePath> src_files;
-  src_files.reserve(params->urls.size());
+  src_files_.reserve(params->urls.size());
 
   for (const std::string& url : params->urls) {
     // Convert input URL to absolute path.
@@ -316,99 +316,83 @@
       return RespondNow(Error(base::StrCat(
           {"Cannot convert URL ", Redact(url), " to absolute file path"})));
 
-    // Convert absolute path to relative path under |parent_dir|.
+    // Convert absolute path to relative path under |src_dir_|.
     base::FilePath relative_path;
-    if (!parent_dir.AppendRelativePath(absolute_path, &relative_path))
+    if (!src_dir_.AppendRelativePath(absolute_path, &relative_path))
       return RespondNow(
           Error(base::StrCat({"Input file ", Redact(absolute_path),
-                              " is not in directory ", Redact(parent_dir)})));
+                              " is not in directory ", Redact(src_dir_)})));
 
-    src_files.push_back(std::move(relative_path));
+    src_files_.push_back(std::move(relative_path));
   }
 
   // Convert destination filename to absolute path.
   if (params->dest_name.empty())
     return RespondNow(Error("Empty destination file name"));
 
-  const base::FilePath dest_file = parent_dir.Append(params->dest_name);
+  dest_file_ = src_dir_.Append(params->dest_name);
 
-  VLOG(0) << "Creating ZIP archive " << Redact(dest_file) << " with "
-          << src_files.size() << " items...";
-
-  // Create a ZipFileCreator.
-  scoped_refptr<ZipFileCreator>& creator = (*zip_creators)[dest_file];
-  DCHECK(!creator);
-  creator =
-      base::MakeRefCounted<ZipFileCreator>(parent_dir, src_files, dest_file);
-
-  creator->SetCompletionCallback(
-      base::BindOnce(&FileManagerPrivateInternalZipSelectionFunction::OnZipDone,
-                     this, dest_file));
-
-  // Start the ZipFileCreator.
-  creator->Start(LaunchFileUtilService());
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+      base::BindOnce(
+          &FileManagerPrivateInternalZipSelectionFunction::ComputeSize, this),
+      base::BindOnce(&FileManagerPrivateInternalZipSelectionFunction::ZipItems,
+                     this));
 
   return RespondLater();
 }
 
-void FileManagerPrivateInternalZipSelectionFunction::OnZipDone(
-    const base::FilePath& dest_file) {
-  const ZipCreators::const_iterator it = zip_creators->find(dest_file);
-  DCHECK(it != zip_creators->cend());
-
-  const ZipFileCreator::Result result = it->second->GetResult();
-  DCHECK_NE(result, ZipFileCreator::kInProgress);
-
-  const bool success = result == ZipFileCreator::kSuccess;
-  if (success) {
-    VLOG(0) << "Created ZIP archive " << Redact(dest_file);
-  } else {
-    LOG(ERROR) << "Cannot create ZIP archive " << Redact(dest_file) << ": "
-               << result;
+void FileManagerPrivateInternalZipSelectionFunction::ComputeSize() {
+  VLOG(1) << ">>> Computing total size of " << src_files_.size() << " items...";
+  total_bytes_ = 0;
+  base::File::Info info;
+  for (const base::FilePath& relative_path : src_files_) {
+    const base::FilePath absolute_path = src_dir_.Append(relative_path);
+    if (base::GetFileInfo(absolute_path, &info))
+      total_bytes_ += info.is_directory
+                          ? base::ComputeDirectorySize(absolute_path)
+                          : info.size;
   }
-
-  Respond(OneArgument(base::Value(success)));
-
-  // Remove the matching ZipFileCreator from the list of active ones.
-  zip_creators->erase(it);
+  VLOG(1) << "<<< Total size is " << total_bytes_ << " bytes";
 }
 
-FileManagerPrivateInternalCancelZipFunction::
-    FileManagerPrivateInternalCancelZipFunction() = default;
+void FileManagerPrivateInternalZipSelectionFunction::ZipItems() {
+  // Increment ZIP operation ID.
+  static int last_zip_id = 0;
+  const int zip_id = ++last_zip_id;
 
-FileManagerPrivateInternalCancelZipFunction::
-    ~FileManagerPrivateInternalCancelZipFunction() = default;
+  VLOG(1) << "Creating ZIP archive #" << zip_id << " " << Redact(dest_file_)
+          << " with " << src_files_.size() << " items...";
 
-ExtensionFunction::ResponseAction
-FileManagerPrivateInternalCancelZipFunction::Run() {
-  using extensions::api::file_manager_private_internal::CancelZip::Params;
+  // Create a ZipFileCreator.
+  scoped_refptr<ZipFileCreator>& creator = (*zip_creators)[zip_id];
+  DCHECK(!creator);
+  creator =
+      base::MakeRefCounted<ZipFileCreator>(src_dir_, src_files_, dest_file_);
+
+  // Start the ZipFileCreator.
+  creator->Start(LaunchFileUtilService());
+
+  Respond(TwoArguments(base::Value(zip_id),
+                       base::Value(static_cast<double>(total_bytes_))));
+}
+
+FileManagerPrivateCancelZipFunction::FileManagerPrivateCancelZipFunction() =
+    default;
+
+FileManagerPrivateCancelZipFunction::~FileManagerPrivateCancelZipFunction() =
+    default;
+
+ExtensionFunction::ResponseAction FileManagerPrivateCancelZipFunction::Run() {
+  using extensions::api::file_manager_private::CancelZip::Params;
   const std::unique_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  Profile* const profile = Profile::FromBrowserContext(browser_context());
-
-  // Convert parent directory URL to absolute path.
-  if (params->parent_url.empty())
-    return RespondNow(Error("Empty parent URL"));
-
-  const base::FilePath parent_dir = file_manager::util::GetLocalPathFromURL(
-      render_frame_host(), profile, GURL(params->parent_url));
-  if (parent_dir.empty())
-    return RespondNow(
-        Error(base::StrCat({"Cannot convert parent URL ",
-                            Redact(params->parent_url), " to absolute path"})));
-
-  // Convert destination filename to absolute path.
-  if (params->dest_name.empty())
-    return RespondNow(Error("Empty destination file name"));
-
-  const base::FilePath dest_file = parent_dir.Append(params->dest_name);
-
   // Retrieve matching ZipFileCreator from the collection of active ones.
-  const auto it = zip_creators->find(dest_file);
+  const auto it = zip_creators->find(params->zip_id);
   if (it == zip_creators->end())
-    return RespondNow(Error(base::StrCat(
-        {"No ZIP operation currently running for ", Redact(dest_file)})));
+    return RespondNow(
+        Error(base::StringPrintf("No ZIP operation #%d", params->zip_id)));
 
   ZipFileCreator* const creator = it->second.get();
   DCHECK(creator);
@@ -419,6 +403,67 @@
   return RespondNow(NoArguments());
 }
 
+FileManagerPrivateGetZipProgressFunction::
+    FileManagerPrivateGetZipProgressFunction() = default;
+
+FileManagerPrivateGetZipProgressFunction::
+    ~FileManagerPrivateGetZipProgressFunction() = default;
+
+ExtensionFunction::ResponseValue
+FileManagerPrivateGetZipProgressFunction::ZipProgressValue(
+    const ZipFileCreator::Progress& progress) {
+  if (progress.result != ZipFileCreator::kInProgress) {
+    // ZIP creation operation is finished.
+    if (progress.result == ZipFileCreator::kSuccess) {
+      VLOG(1) << "Created ZIP archive #" << zip_id_;
+    } else {
+      LOG(ERROR) << "Cannot create ZIP archive #" << zip_id_ << ": "
+                 << progress.result;
+    }
+
+    // Remove the matching ZipFileCreator from the list of active ones.
+    const size_t n = zip_creators->erase(zip_id_);
+    DCHECK_LT(0, n);
+  }
+
+  return TwoArguments(base::Value(static_cast<int>(progress.result)),
+                      base::Value(static_cast<double>(progress.bytes)));
+}
+
+ExtensionFunction::ResponseAction
+FileManagerPrivateGetZipProgressFunction::Run() {
+  using extensions::api::file_manager_private::GetZipProgress::Params;
+  const std::unique_ptr<Params> params(Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  zip_id_ = params->zip_id;
+
+  // Retrieve matching ZipFileCreator from the collection of active ones.
+  const auto it = zip_creators->find(zip_id_);
+  if (it == zip_creators->end())
+    return RespondNow(
+        Error(base::StringPrintf("No ZIP operation #%d", zip_id_)));
+
+  creator_ = it->second;
+  DCHECK(creator_);
+
+  // Check if ZipFileCreator is in final state.
+  const ZipFileCreator::Progress progress = creator_->GetProgress();
+  if (progress.result != ZipFileCreator::kInProgress)
+    return RespondNow(ZipProgressValue(progress));
+
+  // Not in final state yet. We'll report progress later.
+  creator_->SetProgressCallback(base::BindOnce(
+      &FileManagerPrivateGetZipProgressFunction::OnProgress, this));
+
+  return RespondLater();
+}
+
+void FileManagerPrivateGetZipProgressFunction::OnProgress() {
+  DCHECK(creator_);
+  Respond(ZipProgressValue(creator_->GetProgress()));
+}
+
 ExtensionFunction::ResponseAction FileManagerPrivateZoomFunction::Run() {
   using extensions::api::file_manager_private::Zoom::Params;
   const std::unique_ptr<Params> params(Params::Create(*args_));
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h
index 67881d4..9c02e5b 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h
@@ -17,6 +17,7 @@
 #include "chrome/browser/ash/file_system_provider/provided_file_system_interface.h"
 #include "chrome/browser/chromeos/extensions/file_manager/logged_extension_function.h"
 #include "chrome/common/extensions/api/file_manager_private.h"
+#include "chrome/services/file_util/public/cpp/zip_file_creator.h"
 #include "google_apis/common/api_error_codes.h"
 #include "storage/browser/file_system/file_system_url.h"
 
@@ -93,33 +94,76 @@
 
   FileManagerPrivateInternalZipSelectionFunction();
 
- protected:
+ private:
   ~FileManagerPrivateInternalZipSelectionFunction() override;
 
   // ExtensionFunction overrides.
   ResponseAction Run() override;
 
-  // Receives the result from ZipFileCreator.
-  void OnZipDone(const base::FilePath& dest_file);
+  // Computes the total number of bytes of all the items to zip.
+  void ComputeSize();
+
+  // Zips the items to zip.
+  void ZipItems();
+
+  // Absolute path of the source directory.
+  base::FilePath src_dir_;
+
+  // Relative paths of the items to zip. These paths are relative to |src_dir_|.
+  std::vector<base::FilePath> src_files_;
+
+  // Absolute path of the ZIP to create.
+  base::FilePath dest_file_;
+
+  // Total number of bytes of all the items to zip.
+  int64_t total_bytes_;
 };
 
 // Implements the chrome.fileManagerPrivate.cancelZip method.
 // Cancels an ongoing ZIP operation.
-class FileManagerPrivateInternalCancelZipFunction
-    : public LoggedExtensionFunction {
+class FileManagerPrivateCancelZipFunction : public LoggedExtensionFunction {
  public:
-  DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.cancelZip",
-                             FILEMANAGERPRIVATEINTERNAL_CANCELZIP)
+  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.cancelZip",
+                             FILEMANAGERPRIVATE_CANCELZIP)
 
-  FileManagerPrivateInternalCancelZipFunction();
+  FileManagerPrivateCancelZipFunction();
 
- protected:
-  ~FileManagerPrivateInternalCancelZipFunction() override;
+ private:
+  ~FileManagerPrivateCancelZipFunction() override;
 
   // ExtensionFunction overrides.
   ResponseAction Run() override;
 };
 
+// Implements the chrome.fileManagerPrivate.getZipProgress method.
+// Gets the progress of an ongoing ZIP operation.
+class FileManagerPrivateGetZipProgressFunction
+    : public LoggedExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getZipProgress",
+                             FILEMANAGERPRIVATE_GETZIPPROGRESS)
+
+  FileManagerPrivateGetZipProgressFunction();
+
+ private:
+  ~FileManagerPrivateGetZipProgressFunction() override;
+
+  // ExtensionFunction overrides.
+  ResponseAction Run() override;
+
+  // Receives the progress from ZipFileCreator.
+  void OnProgress();
+
+  // Creates the response value.
+  ResponseValue ZipProgressValue(const ZipFileCreator::Progress& progress);
+
+  // Current ZIP task ID.
+  int zip_id_ = 0;
+
+  // Matching ZipFileCreator object.
+  scoped_refptr<ZipFileCreator> creator_;
+};
+
 // Implements the chrome.fileManagerPrivate.zoom method.
 // Changes the zoom level of the file manager by modifying the zoom level of the
 // WebContents.
diff --git a/chrome/browser/data_saver/lite_video_browsertest.cc b/chrome/browser/data_saver/lite_video_browsertest.cc
index adfd2ff..01c6e9a0 100644
--- a/chrome/browser/data_saver/lite_video_browsertest.cc
+++ b/chrome/browser/data_saver/lite_video_browsertest.cc
@@ -32,8 +32,10 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
+#include "content/public/test/prerender_test_util.h"
 #include "media/base/media_switches.h"
 #include "media/base/test_data_util.h"
+#include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_source.h"
@@ -160,11 +162,13 @@
     return http_server_.base_url().HostNoBrackets();
   }
 
+ protected:
+  net::EmbeddedTestServer http_server_;
+
  private:
   bool enable_lite_mode_;  // Whether LiteMode is enabled.
   GURL media_url_;
   base::test::ScopedFeatureList scoped_feature_list_;
-  net::EmbeddedTestServer http_server_;
   base::HistogramTester histogram_tester_;
 
   DISALLOW_COPY_AND_ASSIGN(LiteVideoBrowserTest);
@@ -616,4 +620,83 @@
                         data_savings_before_navigation);
 }
 
+class LiteVideoPrerenderBrowserTest : public LiteVideoBrowserTest {
+ public:
+  LiteVideoPrerenderBrowserTest()
+      : LiteVideoBrowserTest(true /*enable_lite_mode*/,
+                             true /*enable_lite_video_feature*/),
+        prerender_helper_(
+            base::BindRepeating(&LiteVideoPrerenderBrowserTest::GetWebContents,
+                                base::Unretained(this))) {}
+  ~LiteVideoPrerenderBrowserTest() override = default;
+  LiteVideoPrerenderBrowserTest(const LiteVideoPrerenderBrowserTest&) = delete;
+
+  LiteVideoPrerenderBrowserTest& operator=(
+      const LiteVideoPrerenderBrowserTest&) = delete;
+
+  void SetUp() override {
+    prerender_helper_.SetUp(&http_server_);
+    LiteVideoBrowserTest::SetUp();
+  }
+
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    LiteVideoBrowserTest::SetUpOnMainThread();
+  }
+
+  content::test::PrerenderTestHelper& prerender_test_helper() {
+    return prerender_helper_;
+  }
+
+  content::WebContents* GetWebContents() {
+    return browser()->tab_strip_model()->GetActiveWebContents();
+  }
+
+ private:
+  content::test::PrerenderTestHelper prerender_helper_;
+};
+
+IN_PROC_BROWSER_TEST_F(LiteVideoPrerenderBrowserTest,
+                       PrerenderingShouldNotAffectMediaBufferUnderflowTest) {
+  ukm::TestAutoSetUkmRecorder ukm_recorder;
+  TestMSEPlayback("bear-vp9.webm", "2700", "500", false);
+
+  // Loads the media page in the prerender and the prerendering shouldn't
+  // affect the existing media buffer underflow test.
+  prerender_test_helper().AddPrerender(media_url());
+
+  RetryForHistogramUntilCountReached(histogram_tester(),
+                                     "Media.VideoHeight.Initial.MSE", 1);
+
+  histogram_tester().ExpectUniqueSample("LiteVideo.HintAgent.HasHint", true, 1);
+  // Verify some responses were throttled and some video stalls were
+  // encountered.
+  EXPECT_GE(1U, histogram_tester()
+                    .GetAllSamples("LiteVideo.URLLoader.ThrottleLatency")
+                    .size());
+  EXPECT_GE(1U, histogram_tester()
+                    .GetAllSamples("LiteVideo.HintsAgent.StopThrottling")
+                    .size());
+  // Close the tab to flush the UKM metrics.
+  browser()->tab_strip_model()->GetActiveWebContents()->Close();
+
+  auto entries =
+      ukm_recorder.GetEntriesByName(ukm::builders::LiteVideo::kEntryName);
+  ASSERT_EQ(1u, entries.size());
+  auto* entry = entries[0];
+  ukm_recorder.ExpectEntrySourceHasUrl(entry, media_url());
+  ukm_recorder.ExpectEntryMetric(
+      entry, ukm::builders::LiteVideo::kThrottlingStartDecisionName,
+      static_cast<int>(lite_video::LiteVideoDecision::kAllowed));
+  // Blocklist reason is unknown due to force overriding the decision logic
+  // for testing.
+  ukm_recorder.ExpectEntryMetric(
+      entry, ukm::builders::LiteVideo::kBlocklistReasonName,
+      static_cast<int>(lite_video::LiteVideoBlocklistReason::kUnknown));
+  ukm_recorder.ExpectEntryMetric(
+      entry, ukm::builders::LiteVideo::kThrottlingResultName,
+      static_cast<int>(
+          lite_video::LiteVideoThrottleResult::kThrottleStoppedOnRebuffer));
+}
+
 }  // namespace
diff --git a/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc b/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc
index e450b85..4116e8c 100644
--- a/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc
+++ b/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc
@@ -11,6 +11,7 @@
 #include <utility>
 #include <vector>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/macros.h"
@@ -21,7 +22,6 @@
 #include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h"
 #include "chrome/common/extensions/api/certificate_provider.h"
 #include "chrome/common/extensions/api/certificate_provider_internal.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "extensions/browser/quota_service.h"
 #include "net/cert/x509_certificate.h"
 #include "net/ssl/ssl_private_key.h"
diff --git a/chrome/browser/extensions/chrome_extension_cookies.cc b/chrome/browser/extensions/chrome_extension_cookies.cc
index 1cd32c2..e8b6b57 100644
--- a/chrome/browser/extensions/chrome_extension_cookies.cc
+++ b/chrome/browser/extensions/chrome_extension_cookies.cc
@@ -116,7 +116,7 @@
   restricted_cookie_managers_.Add(
       std::make_unique<network::RestrictedCookieManager>(
           network::mojom::RestrictedCookieManagerRole::SCRIPT,
-          GetOrCreateCookieStore(), &network_cookie_settings_, origin,
+          GetOrCreateCookieStore(), network_cookie_settings_, origin,
           isolation_info,
           /* null cookies_observer disables logging */
           mojo::NullRemote()),
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index f8df6a9..138d6f0 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1798,11 +1798,6 @@
     "expiry_milestone": 96
   },
   {
-    "name": "enable-experimental-accessibility-dictation-listening",
-    "owners": [ "akihiroota", "katie" ],
-    "expiry_milestone": 93
-  },
-  {
     "name": "enable-experimental-accessibility-dictation-offline",
     "owners": [ "akihiroota", "katie" ],
     "expiry_milestone": 96
@@ -4992,11 +4987,6 @@
     "expiry_milestone": 97
   },
   {
-    "name": "service-worker-subresource-filter",
-    "owners": [ "noahlemen@fb.com", "browsers@fb.com" ],
-    "expiry_milestone": 95
-  },
-  {
     "name": "set-market-url-for-testing",
     "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/omaha/OWNERS" ],
     // This is required by test teams to verify functionality on devices which
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 308bb67..2c9fe41 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2209,12 +2209,6 @@
 const char kSidePanelDragAndDropDescription[] =
     "Enables drag and drop of bookmarks within the side panel.";
 
-const char kServiceWorkerSubresourceFilterName[] =
-    "ServiceWorker subresource filter";
-const char kServiceWorkerSubresourceFilterDescription[] =
-    "Enables an experimental API to specify subresource URLs that bypass "
-    "service workers";
-
 const char kSharedClipboardUIName[] =
     "Enable shared clipboard feature signals to be handled";
 const char kSharedClipboardUIDescription[] =
@@ -4470,12 +4464,6 @@
 const char kExperimentalAccessibilityDictationExtensionDescription[] =
     "Enables the JavaScript dictation extension.";
 
-const char kExperimentalAccessibilityDictationListeningName[] =
-    "Experimental accessibility dictation listening duration and behavior.";
-const char kExperimentalAccessibilityDictationListeningDescription[] =
-    "Enables longer listening with network recognition and listening after "
-    "finalized speech for the accessibility dictation feature.";
-
 const char kExperimentalAccessibilityDictationOfflineName[] =
     "Experimental accessibility dictation offline.";
 const char kExperimentalAccessibilityDictationOfflineDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index bf0ea15b..534cc407 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1261,9 +1261,6 @@
 extern const char kSidePanelDragAndDropName[];
 extern const char kSidePanelDragAndDropDescription[];
 
-extern const char kServiceWorkerSubresourceFilterName[];
-extern const char kServiceWorkerSubresourceFilterDescription[];
-
 extern const char kSharedClipboardUIName[];
 extern const char kSharedClipboardUIDescription[];
 
@@ -2560,9 +2557,6 @@
 extern const char kExperimentalAccessibilityDictationExtensionName[];
 extern const char kExperimentalAccessibilityDictationExtensionDescription[];
 
-extern const char kExperimentalAccessibilityDictationListeningName[];
-extern const char kExperimentalAccessibilityDictationListeningDescription[];
-
 extern const char kExperimentalAccessibilityDictationOfflineName[];
 extern const char kExperimentalAccessibilityDictationOfflineDescription[];
 
diff --git a/chrome/browser/lacros/download_controller_client_lacros.cc b/chrome/browser/lacros/download_controller_client_lacros.cc
index 02c050387..cbad098 100644
--- a/chrome/browser/lacros/download_controller_client_lacros.cc
+++ b/chrome/browser/lacros/download_controller_client_lacros.cc
@@ -54,6 +54,11 @@
   download->total_bytes = item->GetTotalBytes();
   download->has_total_bytes = true;
   download->start_time = item->GetStartTime();
+  download->is_dangerous = item->IsDangerous();
+  download->has_is_dangerous = true;
+  download->is_mixed_content = item->IsMixedContent();
+  download->has_is_mixed_content = true;
+
   return download;
 }
 
diff --git a/chrome/browser/lite_video/lite_video_observer.cc b/chrome/browser/lite_video/lite_video_observer.cc
index 42303b0..f7922ef 100644
--- a/chrome/browser/lite_video/lite_video_observer.cc
+++ b/chrome/browser/lite_video/lite_video_observer.cc
@@ -137,6 +137,9 @@
   if (!render_frame_host)
     return;
 
+  if (!render_frame_host->GetPage().IsPrimary())
+    return;
+
   bool is_mainframe = render_frame_host->GetMainFrame() == render_frame_host;
   if (!is_mainframe &&
       opt_guide_decision ==
@@ -241,9 +244,6 @@
 // Returns the result of a coinflip.
 void LiteVideoObserver::MaybeUpdateCoinflipExperimentState(
     content::NavigationHandle* navigation_handle) {
-  // TODO(https://crbug.com/1218946): With MPArch there may be multiple main
-  // frames. This caller was converted automatically to the primary main frame
-  // to preserve its semantics. Follow up to confirm correctness.
   if (!navigation_handle->IsInPrimaryMainFrame())
     return;
   if (!lite_video::features::IsCoinflipExperimentEnabled())
diff --git a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
index c61eb63..1e42df6 100644
--- a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
@@ -27,6 +27,7 @@
 #include "chrome/installer/util/google_update_settings.h"
 #include "components/metrics/enabled_state_provider.h"
 #include "components/metrics/metrics_state_manager.h"
+#include "components/metrics/structured/recorder.h"
 #include "components/prefs/pref_service.h"
 #include "components/variations/service/variations_service.h"
 #include "components/variations/variations_associated_data.h"
@@ -105,6 +106,16 @@
 void OnCrosMetricsReportingSettingChange() {
   bool enable_metrics = ash::StatsReportingController::Get()->IsEnabled();
   ChangeMetricsReportingState(enable_metrics);
+
+  // TODO(crbug.com/1234538): This call ensures that structured metrics' state
+  // is deleted when the reporting state is disabled. Long-term this should
+  // happen via a call to all MetricsProviders eg. OnClientStateCleared. This is
+  // temporarily called here because it is close to the settings UI, and doesn't
+  // affect the logging in crbug.com/1227585.
+  auto* recorder = metrics::structured::Recorder::GetInstance();
+  if (recorder) {
+    recorder->OnReportingStateChanged(enable_metrics);
+  }
 }
 #endif
 
diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/metrics/metrics_reporting_state.cc
index 0477bbc6..e2c6e366 100644
--- a/chrome/browser/metrics/metrics_reporting_state.cc
+++ b/chrome/browser/metrics/metrics_reporting_state.cc
@@ -13,6 +13,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/installer/util/google_update_settings.h"
 #include "components/crash/core/common/crash_keys.h"
+#include "components/metrics/cloned_install_detector.h"
 #include "components/metrics/entropy_state.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
@@ -118,6 +119,8 @@
     g_browser_process->local_state()->ClearPref(
         metrics::prefs::kMetricsClientID);
     metrics::EntropyState::ClearPrefs(g_browser_process->local_state());
+    metrics::ClonedInstallDetector::ClearClonedInstallInfo(
+        g_browser_process->local_state());
     g_browser_process->local_state()->ClearPref(
         metrics::prefs::kMetricsReportingEnabledTimestamp);
     crash_keys::ClearMetricsClientId();
diff --git a/chrome/browser/optimization_guide/android/android_push_notification_manager_unittest.cc b/chrome/browser/optimization_guide/android/android_push_notification_manager_unittest.cc
index 9bcb865..1f9f9d45 100644
--- a/chrome/browser/optimization_guide/android/android_push_notification_manager_unittest.cc
+++ b/chrome/browser/optimization_guide/android/android_push_notification_manager_unittest.cc
@@ -12,7 +12,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/optimization_guide/android/native_j_unittests_jni_headers/OptimizationGuidePushNotificationTestHelper_jni.h"
 #include "chrome/browser/optimization_guide/android/optimization_guide_bridge.h"
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -177,7 +177,7 @@
 
   OptimizationGuideKeyedService* service() { return service_; }
 
-  OptimizationGuideHintsManager* hints_manager() {
+  optimization_guide::ChromeHintsManager* hints_manager() {
     return service()->GetHintsManager();
   }
 
diff --git a/chrome/browser/optimization_guide/android/optimization_guide_bridge.cc b/chrome/browser/optimization_guide/android/optimization_guide_bridge.cc
index ce6b67ae..4498c8b 100644
--- a/chrome/browser/optimization_guide/android/optimization_guide_bridge.cc
+++ b/chrome/browser/optimization_guide/android/optimization_guide_bridge.cc
@@ -12,7 +12,7 @@
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "chrome/browser/optimization_guide/android/jni_headers/OptimizationGuideBridge_jni.h"
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -244,7 +244,7 @@
   if (!notification.has_hint_key())
     return;
 
-  OptimizationGuideHintsManager* hints_manager =
+  optimization_guide::ChromeHintsManager* hints_manager =
       optimization_guide_keyed_service_->GetHintsManager();
   PushNotificationManager* push_manager =
       hints_manager ? hints_manager->push_notification_manager() : nullptr;
diff --git a/chrome/browser/optimization_guide/android/optimization_guide_bridge_unittest.cc b/chrome/browser/optimization_guide/android/optimization_guide_bridge_unittest.cc
index a203637..7436e18 100644
--- a/chrome/browser/optimization_guide/android/optimization_guide_bridge_unittest.cc
+++ b/chrome/browser/optimization_guide/android/optimization_guide_bridge_unittest.cc
@@ -7,7 +7,7 @@
 #include "base/android/jni_android.h"
 #include "base/test/gmock_callback_support.h"
 #include "chrome/browser/optimization_guide/android/native_j_unittests_jni_headers/OptimizationGuideBridgeNativeUnitTest_jni.h"
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -35,16 +35,18 @@
 namespace optimization_guide {
 namespace android {
 
-class MockOptimizationGuideHintsManager : public OptimizationGuideHintsManager {
+class MockOptimizationGuideHintsManager
+    : public optimization_guide::ChromeHintsManager {
  public:
   MockOptimizationGuideHintsManager(Profile* profile, PrefService* pref_service)
-      : OptimizationGuideHintsManager(profile,
-                                      pref_service,
-                                      /*hint_store=*/nullptr,
-                                      /*top_host_provider=*/nullptr,
-                                      /*tab_url_provider=*/nullptr,
-                                      /*url_loader_factory=*/nullptr,
-                                      content::GetNetworkConnectionTracker()) {}
+      : optimization_guide::ChromeHintsManager(
+            profile,
+            pref_service,
+            /*hint_store=*/nullptr,
+            /*top_host_provider=*/nullptr,
+            /*tab_url_provider=*/nullptr,
+            /*url_loader_factory=*/nullptr,
+            content::GetNetworkConnectionTracker()) {}
   ~MockOptimizationGuideHintsManager() override = default;
   MOCK_METHOD4(CanApplyOptimizationAsync,
                void(const GURL&,
@@ -60,7 +62,7 @@
       : OptimizationGuideKeyedService(browser_context) {}
   ~MockOptimizationGuideKeyedService() override = default;
 
-  MOCK_METHOD0(GetHintsManager, OptimizationGuideHintsManager*());
+  MOCK_METHOD0(GetHintsManager, optimization_guide::ChromeHintsManager*());
   MOCK_METHOD1(
       RegisterOptimizationTypes,
       void(const std::vector<optimization_guide::proto::OptimizationType>&));
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager.cc b/chrome/browser/optimization_guide/chrome_hints_manager.cc
new file mode 100644
index 0000000..63eec4e
--- /dev/null
+++ b/chrome/browser/optimization_guide/chrome_hints_manager.cc
@@ -0,0 +1,136 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
+
+#include "base/memory/scoped_refptr.h"
+#include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
+#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
+#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
+#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/google/core/common/google_util.h"
+#include "components/optimization_guide/core/hint_cache.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
+#include "content/public/browser/browser_thread.h"
+#include "services/network/public/cpp/shared_url_loader_factory.h"
+
+#if defined(OS_ANDROID)
+#include "chrome/browser/optimization_guide/android/android_push_notification_manager.h"
+#endif
+
+namespace {
+
+// Creates the platform specific push notification manager.
+std::unique_ptr<optimization_guide::PushNotificationManager>
+MaybeCreatePushNotificationManager(PrefService* pref_service) {
+#if defined(OS_ANDROID)
+  if (optimization_guide::features::IsPushNotificationsEnabled()) {
+    return std::make_unique<
+        optimization_guide::android::AndroidPushNotificationManager>(
+        pref_service);
+  }
+#endif
+  return nullptr;
+}
+
+// Returns true if we can make a request for hints for |prediction|.
+bool IsAllowedToFetchForNavigationPrediction(
+    const absl::optional<NavigationPredictorKeyedService::Prediction>
+        prediction) {
+  DCHECK(prediction);
+
+  if (prediction->prediction_source() !=
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage) {
+    // We only support predictions from page anchors.
+    return false;
+  }
+  const absl::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 SRP URLs.
+  return google_util::IsGoogleSearchUrl(*source_document_url);
+}
+
+}  // namespace
+
+namespace optimization_guide {
+
+ChromeHintsManager::ChromeHintsManager(
+    Profile* profile,
+    PrefService* pref_service,
+    optimization_guide::OptimizationGuideStore* hint_store,
+    optimization_guide::TopHostProvider* top_host_provider,
+    optimization_guide::TabUrlProvider* tab_url_provider,
+    scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
+    network::NetworkConnectionTracker* network_connection_tracker)
+    : HintsManager(profile->IsOffTheRecord(),
+                   g_browser_process->GetApplicationLocale(),
+                   pref_service,
+                   hint_store,
+                   top_host_provider,
+                   tab_url_provider,
+                   url_loader_factory,
+                   network_connection_tracker,
+                   MaybeCreatePushNotificationManager(pref_service)),
+      profile_(profile) {
+  NavigationPredictorKeyedService* navigation_predictor_service =
+      NavigationPredictorKeyedServiceFactory::GetForProfile(profile);
+  if (navigation_predictor_service)
+    navigation_predictor_service->AddObserver(this);
+}
+
+ChromeHintsManager::~ChromeHintsManager() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+}
+
+void ChromeHintsManager::Shutdown() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  HintsManager::Shutdown();
+
+  NavigationPredictorKeyedService* navigation_predictor_service =
+      NavigationPredictorKeyedServiceFactory::GetForProfile(profile_);
+  if (navigation_predictor_service)
+    navigation_predictor_service->RemoveObserver(this);
+}
+
+void ChromeHintsManager::OnPredictionUpdated(
+    const absl::optional<NavigationPredictorKeyedService::Prediction>
+        prediction) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK(prediction);
+
+  if (!IsAllowedToFetchForNavigationPrediction(prediction))
+    return;
+
+  // Per comments in NavigationPredictorKeyedService::Prediction, this pointer
+  // should be valid while OnPredictionUpdated is on the call stack.
+  content::WebContents* web_contents = prediction->web_contents();
+  DCHECK(web_contents);
+  auto* observer =
+      OptimizationGuideWebContentsObserver::FromWebContents(web_contents);
+  DCHECK(observer);
+
+  std::vector<GURL> urls_to_fetch;
+  for (const auto& url : prediction->sorted_predicted_urls()) {
+    if (!IsAllowedToFetchNavigationHints(url))
+      continue;
+    // Don't prefetch hints for SRP links that point back to Google.
+    if (google_util::IsGoogleSearchUrl(url))
+      continue;
+
+    if (hint_cache()->HasURLKeyedEntryForURL(url))
+      continue;
+
+    urls_to_fetch.push_back(url);
+  }
+  observer->AddURLsToBatchFetchBasedOnPrediction(std::move(urls_to_fetch),
+                                                 web_contents);
+}
+}  // namespace optimization_guide
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager.h b/chrome/browser/optimization_guide/chrome_hints_manager.h
new file mode 100644
index 0000000..e623225
--- /dev/null
+++ b/chrome/browser/optimization_guide/chrome_hints_manager.h
@@ -0,0 +1,44 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_
+#define CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_
+
+#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
+#include "components/optimization_guide/core/hints_manager.h"
+
+class Profile;
+
+namespace optimization_guide {
+
+class ChromeHintsManager : public HintsManager,
+                           public NavigationPredictorKeyedService::Observer {
+ public:
+  ChromeHintsManager(
+      Profile* profile,
+      PrefService* pref_service,
+      optimization_guide::OptimizationGuideStore* hint_store,
+      optimization_guide::TopHostProvider* top_host_provider,
+      optimization_guide::TabUrlProvider* tab_url_provider,
+      scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
+      network::NetworkConnectionTracker* network_connection_tracker);
+
+  ~ChromeHintsManager() override;
+
+  // Unhooks the observer from the navigation predictor service.
+  void Shutdown();
+
+  // NavigationPredictorKeyedService::Observer:
+  void OnPredictionUpdated(
+      const absl::optional<NavigationPredictorKeyedService::Prediction>
+          prediction) override;
+
+ private:
+  // A reference to the profile. Not owned.
+  Profile* profile_ = nullptr;
+};
+
+}  // namespace optimization_guide
+
+#endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
new file mode 100644
index 0000000..08e8a0d
--- /dev/null
+++ b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
@@ -0,0 +1,393 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
+
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
+#include "chrome/browser/optimization_guide/optimization_guide_tab_url_provider.h"
+#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h"
+#include "components/optimization_guide/content/browser/optimization_guide_decider.h"
+#include "components/optimization_guide/core/hints_fetcher.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
+#include "components/optimization_guide/core/optimization_guide_prefs.h"
+#include "components/optimization_guide/core/optimization_guide_store.h"
+#include "components/optimization_guide/core/optimization_guide_switches.h"
+#include "components/optimization_guide/core/proto_database_provider_test_base.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+#include "components/unified_consent/unified_consent_service.h"
+#include "components/variations/scoped_variations_ids_provider.h"
+#include "content/public/test/browser_task_environment.h"
+#include "content/public/test/mock_navigation_handle.h"
+#include "content/public/test/test_web_contents_factory.h"
+#include "services/network/public/cpp/network_connection_tracker.h"
+#include "services/network/public/cpp/shared_url_loader_factory.h"
+#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/test/test_network_connection_tracker.h"
+#include "services/network/test/test_url_loader_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace optimization_guide {
+
+// A mock class implementation of TabUrlProvider.
+class FakeTabUrlProvider : public optimization_guide::TabUrlProvider {
+ public:
+  const std::vector<GURL> GetUrlsOfActiveTabs(
+      const base::TimeDelta& duration_since_last_shown) override {
+    num_urls_called_++;
+    return urls_;
+  }
+
+  void SetUrls(const std::vector<GURL>& urls) { urls_ = urls; }
+
+  int get_num_urls_called() const { return num_urls_called_; }
+
+ private:
+  std::vector<GURL> urls_;
+  int num_urls_called_ = 0;
+};
+
+class ChromeHintsManagerFetchingTest
+    : public optimization_guide::ProtoDatabaseProviderTestBase {
+ public:
+  ChromeHintsManagerFetchingTest() {
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{
+             optimization_guide::features::kRemoteOptimizationGuideFetching,
+             {{"max_concurrent_page_navigation_fetches", "2"}},
+         },
+         {optimization_guide::features::kOptimizationHints,
+          {{"max_host_keyed_hint_cache_size", "1"}}}},
+        {optimization_guide::features::
+             kRemoteOptimizationGuideFetchingAnonymousDataConsent});
+  }
+  ChromeHintsManagerFetchingTest(const ChromeHintsManagerFetchingTest&) =
+      delete;
+  ChromeHintsManagerFetchingTest& operator=(
+      const ChromeHintsManagerFetchingTest&) = delete;
+  ~ChromeHintsManagerFetchingTest() override = default;
+
+  void SetUp() override {
+    optimization_guide::ProtoDatabaseProviderTestBase::SetUp();
+    web_contents_factory_ = std::make_unique<content::TestWebContentsFactory>();
+    CreateHintsManager();
+  }
+
+  void TearDown() override {
+    ResetHintsManager();
+    optimization_guide::ProtoDatabaseProviderTestBase::TearDown();
+  }
+
+  void CreateHintsManager() {
+    if (hints_manager_)
+      ResetHintsManager();
+
+    pref_service_ =
+        std::make_unique<sync_preferences::TestingPrefServiceSyncable>();
+    optimization_guide::prefs::RegisterProfilePrefs(pref_service_->registry());
+    pref_service_->registry()->RegisterBooleanPref(
+        data_reduction_proxy::prefs::kDataSaverEnabled, false);
+    unified_consent::UnifiedConsentService::RegisterPrefs(
+        pref_service_->registry());
+
+    url_loader_factory_ =
+        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
+            &test_url_loader_factory_);
+
+    hint_store_ = std::make_unique<optimization_guide::OptimizationGuideStore>(
+        db_provider_.get(), temp_dir(),
+        task_environment_.GetMainThreadTaskRunner());
+
+    tab_url_provider_ = std::make_unique<FakeTabUrlProvider>();
+
+    hints_manager_ = std::make_unique<ChromeHintsManager>(
+        &testing_profile_, pref_service(), hint_store_.get(),
+        /*top_host_provider=*/nullptr, tab_url_provider_.get(),
+        url_loader_factory_,
+        network::TestNetworkConnectionTracker::GetInstance());
+    hints_manager_->SetClockForTesting(task_environment_.GetMockClock());
+
+    // Run until hint cache is initialized and the ChromeHintsManager is ready
+    // to process hints.
+    RunUntilIdle();
+  }
+
+  void ResetHintsManager() {
+    hints_manager_->Shutdown();
+    hints_manager_.reset();
+    tab_url_provider_.reset();
+    hint_store_.reset();
+    pref_service_.reset();
+    RunUntilIdle();
+  }
+
+  // Creates a navigation handle with the OptimizationGuideWebContentsObserver
+  // attached.
+  std::unique_ptr<content::MockNavigationHandle>
+  CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
+      const GURL& url) {
+    content::WebContents* web_contents =
+        web_contents_factory_->CreateWebContents(&testing_profile_);
+    OptimizationGuideWebContentsObserver::CreateForWebContents(web_contents);
+    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
+        std::make_unique<::testing::NiceMock<content::MockNavigationHandle>>(
+            web_contents);
+    navigation_handle->set_url(url);
+    return navigation_handle;
+  }
+
+  void SetConnectionOnline() {
+    network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+        network::mojom::ConnectionType::CONNECTION_4G);
+  }
+
+  content::WebContents* Navigate(GURL url) {
+    auto navigation_handle =
+        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(url);
+    return navigation_handle->GetWebContents();
+  }
+
+  void FetchHintsUsingWebContentsObserverURLs(
+      content::WebContents* web_contents) {
+    auto* observer =
+        OptimizationGuideWebContentsObserver::FromWebContents(web_contents);
+    observer->FetchHintsUsingManager(hints_manager());
+  }
+
+  ChromeHintsManager* hints_manager() const { return hints_manager_.get(); }
+
+  base::FilePath temp_dir() const { return temp_dir_.GetPath(); }
+
+  PrefService* pref_service() const { return pref_service_.get(); }
+
+  FakeTabUrlProvider* tab_url_provider() const {
+    return tab_url_provider_.get();
+  }
+
+  void RunUntilIdle() { task_environment_.RunUntilIdle(); }
+
+ private:
+  content::BrowserTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  base::test::ScopedFeatureList scoped_feature_list_;
+  variations::ScopedVariationsIdsProvider scoped_variations_ids_provider_{
+      variations::VariationsIdsProvider::Mode::kUseSignedInState};
+  TestingProfile testing_profile_;
+  std::unique_ptr<content::TestWebContentsFactory> web_contents_factory_;
+  std::unique_ptr<optimization_guide::OptimizationGuideStore> hint_store_;
+  std::unique_ptr<FakeTabUrlProvider> tab_url_provider_;
+  std::unique_ptr<ChromeHintsManager> hints_manager_;
+  std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
+  scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
+  network::TestURLLoaderFactory test_url_loader_factory_;
+};
+
+TEST_F(ChromeHintsManagerFetchingTest, HintsFetched_AtSRP_DuplicatesRemoved) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+
+  // Set to online so fetch is activated.
+  SetConnectionOnline();
+
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.emplace_back("https://foo.com/page1.html");
+  sorted_predicted_urls.emplace_back("https://foo.com/page2.html");
+  sorted_predicted_urls.emplace_back("https://foo.com/page3.html");
+  sorted_predicted_urls.emplace_back("https://bar.com/");
+
+  GURL url("https://www.google.com/search?q=a");
+  content::WebContents* web_contents = Navigate(url);
+  NavigationPredictorKeyedService::Prediction prediction(
+      web_contents, url,
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage,
+      sorted_predicted_urls);
+
+  {
+    base::HistogramTester histogram_tester;
+
+    hints_manager()->OnPredictionUpdated(prediction);
+    FetchHintsUsingWebContentsObserverURLs(web_contents);
+
+    // Ensure that we only include 2 hosts in the request. These would be
+    // foo.com and bar.com.
+    histogram_tester.ExpectUniqueSample(
+        "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 2, 1);
+    // Ensure that we include all URLs in the request.
+    histogram_tester.ExpectUniqueSample(
+        "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 4, 1);
+    RunUntilIdle();
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    hints_manager()->OnPredictionUpdated(prediction);
+    FetchHintsUsingWebContentsObserverURLs(web_contents);
+
+    // Ensure that URLs are not re-fetched.
+    histogram_tester.ExpectTotalCount(
+        "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
+  }
+}
+
+TEST_F(ChromeHintsManagerFetchingTest,
+       HintsFetched_AtSRP_NonHTTPOrHTTPSHostsRemoved) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+
+  // Set to online so fetch is activated.
+  SetConnectionOnline();
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.emplace_back("https://foo.com/page1.html");
+  sorted_predicted_urls.emplace_back("file://non-web-bar.com/");
+  sorted_predicted_urls.emplace_back("http://httppage.com/");
+
+  GURL url("https://www.google.com/search?q=a");
+  content::WebContents* web_contents = Navigate(url);
+  NavigationPredictorKeyedService::Prediction prediction(
+      web_contents, url,
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage,
+      sorted_predicted_urls);
+
+  hints_manager()->OnPredictionUpdated(prediction);
+  FetchHintsUsingWebContentsObserverURLs(web_contents);
+  // 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);
+}
+
+TEST_F(ChromeHintsManagerFetchingTest, HintsFetched_AtSRP) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+
+  // Set to online so fetch is activated.
+  SetConnectionOnline();
+
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.emplace_back("https://foo.com/");
+  GURL url("https://www.google.com/search?q=a");
+  content::WebContents* web_contents = Navigate(url);
+  NavigationPredictorKeyedService::Prediction prediction(
+      web_contents, url,
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage,
+      sorted_predicted_urls);
+
+  hints_manager()->OnPredictionUpdated(prediction);
+  FetchHintsUsingWebContentsObserverURLs(web_contents);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 1);
+}
+
+TEST_F(ChromeHintsManagerFetchingTest, HintsFetched_AtSRP_GoogleLinksIgnored) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+
+  // Set to online so fetch is activated.
+  SetConnectionOnline();
+
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.emplace_back("https://foo.com/");
+  sorted_predicted_urls.emplace_back("https://google.com/bar");
+  GURL url("https://www.google.com/search?q=a");
+  content::WebContents* web_contents = Navigate(url);
+  NavigationPredictorKeyedService::Prediction prediction(
+      web_contents, url,
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage,
+      sorted_predicted_urls);
+
+  hints_manager()->OnPredictionUpdated(prediction);
+  FetchHintsUsingWebContentsObserverURLs(web_contents);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 1);
+}
+
+TEST_F(ChromeHintsManagerFetchingTest, HintsFetched_AtNonSRP) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
+  hints_manager()->RegisterOptimizationTypes(
+      {optimization_guide::proto::DEFER_ALL_SCRIPT});
+
+  // Set to online so fetch is activated.
+  SetConnectionOnline();
+  base::HistogramTester histogram_tester;
+  std::vector<GURL> sorted_predicted_urls;
+  sorted_predicted_urls.emplace_back("https://foo.com/");
+  GURL url("https://www.not-google.com/");
+  content::WebContents* web_contents = Navigate(url);
+  NavigationPredictorKeyedService::Prediction prediction(
+      web_contents, url,
+      NavigationPredictorKeyedService::PredictionSource::
+          kAnchorElementsParsedFromWebPage,
+      sorted_predicted_urls);
+
+  hints_manager()->OnPredictionUpdated(prediction);
+  FetchHintsUsingWebContentsObserverURLs(web_contents);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
+}
+
+class ChromeHintsManagerPushEnabledTest
+    : public ChromeHintsManagerFetchingTest {
+ public:
+  ChromeHintsManagerPushEnabledTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        optimization_guide::features::kPushNotifications);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(ChromeHintsManagerPushEnabledTest, PushManagerSetOnAndroid) {
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(hints_manager()->push_notification_manager());
+#else
+  EXPECT_FALSE(hints_manager()->push_notification_manager());
+#endif
+}
+
+class ChromeHintsManagerPushDisabledTest
+    : public ChromeHintsManagerFetchingTest {
+ public:
+  ChromeHintsManagerPushDisabledTest() {
+    scoped_feature_list_.InitAndDisableFeature(
+        optimization_guide::features::kPushNotifications);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(ChromeHintsManagerPushDisabledTest, PushManagerSetOnAndroid) {
+  EXPECT_FALSE(hints_manager()->push_notification_manager());
+}
+
+}  // namespace optimization_guide
diff --git a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc
index 6a93079..ca0d357 100644
--- a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc
+++ b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc
@@ -10,6 +10,8 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/containers/flat_set.h"
+#include "base/files/file_util.h"
+#include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/task/post_task.h"
@@ -23,9 +25,11 @@
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/common/chrome_paths.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h"
+#include "components/google/core/common/google_switches.h"
 #include "components/google/core/common/google_util.h"
 #include "components/metrics/content/subprocess_metrics_provider.h"
 #include "components/optimization_guide/core/hints_component_info.h"
@@ -71,6 +75,8 @@
 
 constexpr char kGoogleHost[] = "www.google.com";
 
+constexpr char kGoogleSearchUrlPath[] = "/search?q=search_results_page.html";
+
 // Modifies |relative_url|:
 // Scheme of the returned URL matches the scheme of the |server|.
 // Host of the returned URL matches kGoogleHost.
@@ -87,6 +93,28 @@
   return base_url.Resolve(relative_url);
 }
 
+// Handles the server request to Google search URL.
+std::unique_ptr<net::test_server::HttpResponse> HandleGoogleSearchUrlRequest(
+    const net::test_server::HttpRequest& request) {
+  if (base::EqualsCaseInsensitiveASCII(request.relative_url,
+                                       kGoogleSearchUrlPath)) {
+    // Serve the SRP file.
+    std::unique_ptr<net::test_server::BasicHttpResponse> response =
+        std::make_unique<net::test_server::BasicHttpResponse>();
+    std::string file_contents;
+    base::FilePath test_data_directory;
+    base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory);
+    if (base::ReadFileToString(test_data_directory.AppendASCII(
+                                   "previews/search_results_page.html"),
+                               &file_contents)) {
+      response->set_content(file_contents);
+      response->set_code(net::HTTP_OK);
+      return std::move(response);
+    }
+  }
+  return nullptr;
+}
+
 }  // namespace
 
 // This test class sets up everything but does not enable any
@@ -114,6 +142,8 @@
   void SetUp() override {
     origin_server_ = std::make_unique<net::EmbeddedTestServer>(
         net::EmbeddedTestServer::TYPE_HTTPS);
+    origin_server_->RegisterRequestHandler(
+        base::BindRepeating(&HandleGoogleSearchUrlRequest));
     origin_server_->ServeFilesFromSourceDirectory("chrome/test/data/previews");
 
     ASSERT_TRUE(origin_server_->Start());
@@ -122,11 +152,7 @@
     ASSERT_TRUE(https_url().SchemeIs(url::kHttpsScheme));
 
     search_results_page_url_ =
-        GetURLWithGoogleHost(origin_server_.get(), "/search_results_page.html");
-    ASSERT_TRUE(search_results_page_url_.is_valid() &&
-                search_results_page_url_.SchemeIs(url::kHttpsScheme) &&
-                google_util::IsGoogleHostname(search_results_page_url_.host(),
-                                              google_util::DISALLOW_SUBDOMAIN));
+        GetURLWithGoogleHost(origin_server_.get(), kGoogleSearchUrlPath);
 
     hints_server_ = std::make_unique<net::EmbeddedTestServer>(
         net::EmbeddedTestServer::TYPE_HTTPS);
@@ -170,6 +196,9 @@
                            "example1.com, example2.com");
 
     cmd->AppendSwitch(optimization_guide::switches::kFetchHintsOverrideTimer);
+
+    // Ignore the port numbers for the Google Search URL check.
+    cmd->AppendSwitch(switches::kIgnoreGooglePortNumbers);
   }
 
   // Creates hint data for the |hint_setup_url|'s so that the fetching of the
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index af4b90ae..e4e52d0f 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -15,7 +15,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/optimization_guide/prediction/prediction_manager.h"
 #include "chrome/browser/profiles/profile.h"
@@ -155,7 +155,7 @@
         prediction_model_and_features_store_.get();
   }
 
-  hints_manager_ = std::make_unique<OptimizationGuideHintsManager>(
+  hints_manager_ = std::make_unique<optimization_guide::ChromeHintsManager>(
       profile, profile->GetPrefs(), hint_store, top_host_provider_.get(),
       tab_url_provider_.get(), url_loader_factory,
       content::GetNetworkConnectionTracker());
@@ -169,7 +169,7 @@
   DeleteOldStorePaths(profile_path);
 }
 
-OptimizationGuideHintsManager*
+optimization_guide::ChromeHintsManager*
 OptimizationGuideKeyedService::GetHintsManager() {
   return hints_manager_.get();
 }
@@ -238,7 +238,7 @@
           optimization_guide::GetStringNameForOptimizationType(
               optimization_type),
       optimization_type_decision);
-  return OptimizationGuideHintsManager::
+  return optimization_guide::ChromeHintsManager::
       GetOptimizationGuideDecisionFromOptimizationTypeDecision(
           optimization_type_decision);
 }
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
index ff910a03..5089c56 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
@@ -25,6 +25,7 @@
 class AndroidPushNotificationManagerJavaTest;
 class OptimizationGuideBridge;
 }  // namespace android
+class ChromeHintsManager;
 class OptimizationGuideStore;
 class PredictionManager;
 class PredictionManagerBrowserTestBase;
@@ -35,7 +36,6 @@
 }  // namespace optimization_guide
 
 class GURL;
-class OptimizationGuideHintsManager;
 class OptimizationGuideNavigationData;
 
 // Keyed service that can be used to get information received from the remote
@@ -107,7 +107,7 @@
   void Initialize();
 
   // Virtualized for testing.
-  virtual OptimizationGuideHintsManager* GetHintsManager();
+  virtual optimization_guide::ChromeHintsManager* GetHintsManager();
 
   optimization_guide::TopHostProvider* GetTopHostProvider() {
     return top_host_provider_.get();
@@ -138,7 +138,7 @@
   std::unique_ptr<optimization_guide::OptimizationGuideStore> hint_store_;
 
   // Manages the storing, loading, and fetching of hints.
-  std::unique_ptr<OptimizationGuideHintsManager> hints_manager_;
+  std::unique_ptr<optimization_guide::ChromeHintsManager> hints_manager_;
 
   // The store of optimization target prediction models and features.
   std::unique_ptr<optimization_guide::OptimizationGuideStore>
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
index ce18d2f..2447285 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
@@ -13,7 +13,7 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/optimization_guide/browser_test_util.h"
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc
index ea1fc4bf..d0a40aa4 100644
--- a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
 
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -162,30 +162,18 @@
   // at onload.
   base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
       FROM_HERE,
-      base::BindOnce(&OptimizationGuideWebContentsObserver::FetchHints,
-                     weak_factory_.GetWeakPtr()),
+      base::BindOnce(
+          &OptimizationGuideWebContentsObserver::FetchHintsUsingManager,
+          weak_factory_.GetWeakPtr(),
+          optimization_guide_keyed_service_->GetHintsManager()),
       optimization_guide::features::GetOnloadDelayForHintsFetching());
 }
 
-void OptimizationGuideWebContentsObserver::FetchHintsUsingManagerForTesting(
-    OptimizationGuideHintsManager* hints_manager) {
+void OptimizationGuideWebContentsObserver::FetchHintsUsingManager(
+    optimization_guide::ChromeHintsManager* hints_manager) {
   DCHECK(hints_manager);
   sent_batched_hints_request_ = true;
-  hints_manager->FetchHintsForPredictions(
-      std::move(hints_target_urls_.vector()));
-  hints_target_urls_.clear();
-}
-
-void OptimizationGuideWebContentsObserver::FetchHints() {
-  if (!optimization_guide_keyed_service_) {
-    return;
-  }
-
-  OptimizationGuideHintsManager* hints_manager =
-      optimization_guide_keyed_service_->GetHintsManager();
-  sent_batched_hints_request_ = true;
-  hints_manager->FetchHintsForPredictions(
-      std::move(hints_target_urls_.vector()));
+  hints_manager->FetchHintsForURLs(std::move(hints_target_urls_.vector()));
   hints_target_urls_.clear();
 }
 
diff --git a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h
index b94b4bb..93565d1 100644
--- a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h
+++ b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h
@@ -20,7 +20,11 @@
 class NavigationHandle;
 }  // namespace content
 
-class OptimizationGuideHintsManager;
+namespace optimization_guide {
+class ChromeHintsManager;
+class ChromeHintsManagerFetchingTest;
+}  // namespace optimization_guide
+
 class OptimizationGuideKeyedService;
 
 // Observes navigation events.
@@ -41,11 +45,9 @@
                                             content::WebContents* web_contents);
 
  private:
-  friend class OptimizationGuideHintsManagerFetchingTest;
-  friend class OptimizationGuideHintsManagerTest;
-
   friend class content::WebContentsUserData<
       OptimizationGuideWebContentsObserver>;
+  friend class optimization_guide::ChromeHintsManagerFetchingTest;
 
   explicit OptimizationGuideWebContentsObserver(
       content::WebContents* web_contents);
@@ -71,13 +73,10 @@
   void DocumentOnLoadCompletedInMainFrame(
       content::RenderFrameHost* render_frame_host) override;
 
-  // Ask OptimizationGuideHintsManager to fetch hints for navigations that were
-  // predicted for the current page load.
-  void FetchHints();
-
-  // For testing.
-  void FetchHintsUsingManagerForTesting(
-      OptimizationGuideHintsManager* hints_manager);
+  // Ask |hints_manager| to fetch hints for navigations that were predicted for
+  // the current page load.
+  void FetchHintsUsingManager(
+      optimization_guide::ChromeHintsManager* hints_manager);
 
   // Notifies |optimization_guide_keyed_service_| that the navigation has
   // finished.
diff --git a/chrome/browser/profiles/host_zoom_map_browsertest.cc b/chrome/browser/profiles/host_zoom_map_browsertest.cc
index d29f47f..a2fff0f5 100644
--- a/chrome/browser/profiles/host_zoom_map_browsertest.cc
+++ b/chrome/browser/profiles/host_zoom_map_browsertest.cc
@@ -321,9 +321,9 @@
 
 // Test four things:
 //  1. Host zoom maps of parent profile and child profile are different.
-//  2. Child host zoom map doesn't inherit zoom level at construction.
+//  2. Child host zoom map inherits zoom level at construction.
 //  3. Change of zoom level doesn't propagate from child to parent.
-//  4. Change of zoom level doesn't propagates from parent to child.
+//  4. Change of zoom level propagates from parent to child.
 IN_PROC_BROWSER_TEST_F(HostZoomMapBrowserTest,
                        OffTheRecordProfileHostZoomMap) {
   // Constants for test case.
@@ -352,9 +352,9 @@
   // Verify.
   EXPECT_NE(parent_zoom_map, child_zoom_map);
 
-  EXPECT_NE(parent_zoom_map->GetZoomLevelForHostAndScheme("http", host),
-            child_zoom_map->GetZoomLevelForHostAndScheme("http", host))
-      << "Child should not inherit from parent.";
+  EXPECT_EQ(parent_zoom_map->GetZoomLevelForHostAndScheme("http", host),
+            child_zoom_map->GetZoomLevelForHostAndScheme("http", host)) <<
+                "Child must inherit from parent.";
 
   child_zoom_map->SetZoomLevelForHost(host, zoom_level_30);
   ASSERT_EQ(
@@ -370,14 +370,14 @@
       parent_zoom_map->GetZoomLevelForHostAndScheme("http", host),
       zoom_level_40);
 
-  EXPECT_NE(parent_zoom_map->GetZoomLevelForHostAndScheme("http", host),
-            child_zoom_map->GetZoomLevelForHostAndScheme("http", host))
-      << "Parent change must not propagate to child.";
+  EXPECT_EQ(parent_zoom_map->GetZoomLevelForHostAndScheme("http", host),
+            child_zoom_map->GetZoomLevelForHostAndScheme("http", host)) <<
+                "Parent change should propagate to child.";
   base::RunLoop().RunUntilIdle();
 }
 
 IN_PROC_BROWSER_TEST_F(HostZoomMapBrowserTest,
-                       ParentDefaultZoomDoesNotPropagatesToIncognitoChild) {
+                       ParentDefaultZoomPropagatesToIncognitoChild) {
   Profile* parent_profile = browser()->profile();
   Profile* child_profile =
       static_cast<ProfileImpl*>(parent_profile)
@@ -396,7 +396,7 @@
 
   parent_profile->GetZoomLevelPrefs()->SetDefaultZoomLevelPref(
       new_default_zoom_level);
-  EXPECT_NE(new_default_zoom_level, child_host_zoom_map->GetDefaultZoomLevel());
+  EXPECT_EQ(new_default_zoom_level, child_host_zoom_map->GetDefaultZoomLevel());
 }
 
 // TODO(1115597): Flaky on linux and cros.
diff --git a/chrome/browser/profiles/incognito_profile_containment_browsertest.cc b/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
index fea9d13..62c318d 100644
--- a/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
+++ b/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
@@ -37,9 +37,15 @@
     "/Default/shared_proto_db", "/Default/Trust Tokens",
     "/GrShaderCache/GPUCache"};
 #if defined(OS_MAC)
-constexpr std::array<const char*, 4> kAllowListPrefixesForMac = {
+constexpr std::array<const char*, 4> kAllowListPrefixesForPlatform = {
     "/Default/data_reduction_proxy_leveldb", "/Default/Preferences",
     "/Default/Shortcuts", "/Default/Visited Links"};
+#elif defined(OS_CHROMEOS)
+constexpr std::array<const char*, 3> kAllowListPrefixesForPlatform = {
+    "/test-user/.variations-list.txt", "/test-user/shared_proto_db",
+    "/test-user/Trust Tokens"};
+#else
+constexpr std::array<const char*, 0> kAllowListPrefixesForPlatform = {};
 #endif
 
 // Structure that keeps data about a snapshotted file.
@@ -153,10 +159,8 @@
   IncognitoProfileContainmentBrowserTest()
       : allow_list_(std::begin(kAllowListPrefixesForAllPlatforms),
                     std::end(kAllowListPrefixesForAllPlatforms)) {
-#if defined(OS_MAC)
-    allow_list_.insert(std::begin(kAllowListPrefixesForMac),
-                       std::end(kAllowListPrefixesForMac));
-#endif
+    allow_list_.insert(std::begin(kAllowListPrefixesForPlatform),
+                       std::end(kAllowListPrefixesForPlatform));
   }
 
   void SetUpOnMainThread() override {
@@ -176,24 +180,10 @@
   std::set<const char*> allow_list_;
 };
 
-// TODO(http://crbug.com/1234755): There is a lot of clutter on Windows (and a
-// bit on CrOS) that need more investigation before enabling this test there.
-#if defined(OS_WIN) || defined(OS_CHROMEOS)
-#define MAYBE_PRE_SimplePageLoadDoesNotModifyProfileFolder \
-  DISABLED_PRE_SimplePageLoadDoesNotModifyProfileFolder
-#define MAYBE_SimplePageLoadDoesNotModifyProfileFolder \
-  DISABLED_SimplePageLoadDoesNotModifyProfileFolder
-#else
-#define MAYBE_PRE_SimplePageLoadDoesNotModifyProfileFolder \
-  PRE_SimplePageLoadDoesNotModifyProfileFolder
-#define MAYBE_SimplePageLoadDoesNotModifyProfileFolder \
-  SimplePageLoadDoesNotModifyProfileFolder
-#endif
-
 // Open a page in a separate session to ensure all files that are created
 // because of the regular profile start up are already created.
 IN_PROC_BROWSER_TEST_F(IncognitoProfileContainmentBrowserTest,
-                       MAYBE_PRE_SimplePageLoadDoesNotModifyProfileFolder) {
+                       PRE_SimplePageLoadDoesNotModifyProfileFolder) {
   ui_test_utils::NavigateToURL(browser(),
                                embedded_test_server()->GetURL("/empty.html"));
 }
@@ -206,7 +196,7 @@
 // so, please add the file to the allow_list at the top and file a bug to follow
 // up.
 IN_PROC_BROWSER_TEST_F(IncognitoProfileContainmentBrowserTest,
-                       MAYBE_SimplePageLoadDoesNotModifyProfileFolder) {
+                       SimplePageLoadDoesNotModifyProfileFolder) {
   // Take a snapshot of regular profile.
   Snapshot before_incognito;
   GetUserDirectorySnapshot(before_incognito, /*compute_file_hashes=*/true);
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index c1eabb87..baef951f 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -4,8 +4,10 @@
 
 #include "chrome/browser/profiles/off_the_record_profile_impl.h"
 
+#include <memory>
 #include <utility>
 
+#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
@@ -110,6 +112,9 @@
 
 using content::BrowserThread;
 using content::DownloadManagerDelegate;
+#if !defined(OS_ANDROID)
+using content::HostZoomMap;
+#endif
 
 namespace {
 
@@ -175,6 +180,10 @@
         IncognitoModePrefs::GetAvailability(profile_->GetPrefs()) !=
             IncognitoModePrefs::DISABLED);
 
+#if !defined(OS_ANDROID)
+  TrackZoomLevelsFromParent();
+#endif
+
 #if BUILDFLAG(ENABLE_PLUGINS)
   ChromePluginServiceFilter::GetInstance()->RegisterProfile(this);
 #endif
@@ -253,6 +262,31 @@
   }
 }
 
+#if !defined(OS_ANDROID)
+void OffTheRecordProfileImpl::TrackZoomLevelsFromParent() {
+  // Here we only want to use zoom levels stored in the main-context's default
+  // storage partition. We're not interested in zoom levels in special
+  // partitions, e.g. those used by WebViewGuests.
+  HostZoomMap* host_zoom_map = HostZoomMap::GetDefaultForBrowserContext(this);
+  HostZoomMap* parent_host_zoom_map =
+      HostZoomMap::GetDefaultForBrowserContext(profile_);
+  host_zoom_map->CopyFrom(parent_host_zoom_map);
+  // Observe parent profile's HostZoomMap changes so they can also be applied
+  // to this profile's HostZoomMap.
+  track_zoom_subscription_ = parent_host_zoom_map->AddZoomLevelChangedCallback(
+      base::BindRepeating(&OffTheRecordProfileImpl::OnParentZoomLevelChanged,
+                          base::Unretained(this)));
+  if (!profile_->GetZoomLevelPrefs())
+    return;
+
+  // Also track changes to the parent profile's default zoom level.
+  parent_default_zoom_level_subscription_ =
+      profile_->GetZoomLevelPrefs()->RegisterDefaultZoomLevelCallback(
+          base::BindRepeating(&OffTheRecordProfileImpl::UpdateDefaultZoomLevel,
+                              base::Unretained(this)));
+}
+#endif  // !defined(OS_ANDROID)
+
 std::string OffTheRecordProfileImpl::GetProfileUserName() const {
   // Incognito profile should not return the username.
   return std::string();
@@ -602,6 +636,38 @@
   return false;
 }
 
+#if !defined(OS_ANDROID)
+void OffTheRecordProfileImpl::OnParentZoomLevelChanged(
+    const HostZoomMap::ZoomLevelChange& change) {
+  HostZoomMap* host_zoom_map = HostZoomMap::GetDefaultForBrowserContext(this);
+  switch (change.mode) {
+    case HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM:
+      return;
+    case HostZoomMap::ZOOM_CHANGED_FOR_HOST:
+      host_zoom_map->SetZoomLevelForHost(change.host, change.zoom_level);
+      return;
+    case HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST:
+      host_zoom_map->SetZoomLevelForHostAndScheme(change.scheme,
+          change.host,
+          change.zoom_level);
+      return;
+    case HostZoomMap::PAGE_SCALE_IS_ONE_CHANGED:
+      return;
+  }
+}
+
+void OffTheRecordProfileImpl::UpdateDefaultZoomLevel() {
+  HostZoomMap* host_zoom_map = HostZoomMap::GetDefaultForBrowserContext(this);
+  double default_zoom_level =
+      profile_->GetZoomLevelPrefs()->GetDefaultZoomLevelPref();
+  host_zoom_map->SetDefaultZoomLevel(default_zoom_level);
+  // HostZoomMap does not trigger zoom notification events when the default
+  // zoom level is set, so we need to do it here.
+  zoom::ZoomEventManager::GetForBrowserContext(this)
+      ->OnDefaultZoomLevelChanged();
+}
+#endif  // !defined(OS_ANDROID)
+
 void OffTheRecordProfileImpl::RecordMainFrameNavigation() {
   main_frame_navigations_++;
 }
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.h b/chrome/browser/profiles/off_the_record_profile_impl.h
index c0b0b41..78a0256 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.h
+++ b/chrome/browser/profiles/off_the_record_profile_impl.h
@@ -17,6 +17,11 @@
 #include "components/domain_reliability/clear_mode.h"
 #include "content/public/browser/content_browser_client.h"
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
+#include "content/public/browser/host_zoom_map.h"
+#endif
+
 namespace sync_preferences {
 class PrefServiceSyncable;
 }
@@ -128,6 +133,18 @@
   bool IsSignedIn() override;
 
  private:
+#if !defined(OS_ANDROID)
+  // Allows a profile to track changes in zoom levels in its parent profile.
+  void TrackZoomLevelsFromParent();
+#endif  // !defined(OS_ANDROID)
+
+#if !defined(OS_ANDROID)
+  // Callback function for tracking parent's zoom level changes.
+  void OnParentZoomLevelChanged(
+      const content::HostZoomMap::ZoomLevelChange& change);
+  void UpdateDefaultZoomLevel();
+#endif  // !defined(OS_ANDROID)
+
   // The real underlying profile.
   Profile* profile_;
   // Prevent |profile_| from being destroyed first.
@@ -137,6 +154,11 @@
 
   std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs_;
 
+#if !defined(OS_ANDROID)
+  base::CallbackListSubscription track_zoom_subscription_;
+  base::CallbackListSubscription parent_default_zoom_level_subscription_;
+#endif  // !defined(OS_ANDROID)
+
   // Time we were started.
   base::Time start_time_;
 
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
index 43484c5..ac47683f 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -39,10 +39,10 @@
 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_render_frame.mojom.h"
diff --git a/chrome/browser/resources/chromeos/login/debug/debug.js b/chrome/browser/resources/chromeos/login/debug/debug.js
index aa431dd..f09a486 100644
--- a/chrome/browser/resources/chromeos/login/debug/debug.js
+++ b/chrome/browser/resources/chromeos/login/debug/debug.js
@@ -837,14 +837,14 @@
         {
           id: 'loading',
           trigger: (screen) => {
-            screen.setManager('TestCompany');
+            screen.onBeforeShow({manager: 'TestCompany'});
             screen.setUIStep('loading');
           },
         },
         {
           id: 'loaded',
           trigger: (screen) => {
-            screen.setManager('TestCompany');
+            screen.onBeforeShow({manager: 'TestCompany'});
             screen.setTermsOfService('TOS BEGIN\nThese are the terms\nTOS END');
           },
         },
diff --git a/chrome/browser/resources/chromeos/login/managed_terms_of_service.js b/chrome/browser/resources/chromeos/login/managed_terms_of_service.js
index b8b85fb..a0febed 100644
--- a/chrome/browser/resources/chromeos/login/managed_terms_of_service.js
+++ b/chrome/browser/resources/chromeos/login/managed_terms_of_service.js
@@ -64,11 +64,20 @@
   },
 
   EXTERNAL_API: [
-    'setManager',
     'setTermsOfServiceLoadError',
     'setTermsOfService',
   ],
 
+  /**
+   * Event handler that is invoked just before the frame is shown.
+   * @param {Object} data contains manager string whose Terms of Service are
+   * being shown.
+   * @suppress {missingProperties} manager property is not defined for data.
+   */
+  onBeforeShow(data) {
+    this.tosManager_ = data.manager;
+  },
+
   /** @override */
   ready() {
     this.initializeLoginScreen('TermsOfServiceScreen', {
@@ -137,15 +146,6 @@
   },
 
   /**
-   * Updates headings on the screen to indicate that the Terms of Service
-   * being shown belong to |manager|.
-   * @param {string} manager The manager whose Terms of Service are being shown.
-   */
-  setManager(manager) {
-    this.tosManager_ = manager;
-  },
-
-  /**
    * Displays an error message on the Terms of Service screen. Called when the
    * download of the Terms of Service has failed.
    */
diff --git a/chrome/browser/resources/new_tab_page/modules/recipes_v2/BUILD.gn b/chrome/browser/resources/new_tab_page/modules/recipes_v2/BUILD.gn
index b297268a..056a98f 100644
--- a/chrome/browser/resources/new_tab_page/modules/recipes_v2/BUILD.gn
+++ b/chrome/browser/resources/new_tab_page/modules/recipes_v2/BUILD.gn
@@ -8,7 +8,9 @@
 js_library("module") {
   deps = [
     "..:module_descriptor",
+    "//chrome/browser/resources/new_tab_page/modules/task_module:task_module_handler_proxy",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/cr_elements/cr_auto_img",
   ]
 }
 
diff --git a/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.html b/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.html
index e69de29..51f8f3c 100644
--- a/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.html
+++ b/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.html
@@ -0,0 +1,39 @@
+<style>
+  :host {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    width: 100%;
+  }
+
+  #recipes {
+    display: flex;
+  }
+
+  .recipe-item {
+    display: flex;
+    flex-direction: column;
+  }
+
+  .secondary-info {
+    display: flex;
+    flex-direction: row;
+  }
+</style>
+<div id="moduleContent">
+  <div id="recipes">
+    <template is="dom-repeat" id="recipesRepeat" items="[[task.taskItems]]">
+      <a class="recipe-item">
+        <img is="cr-auto-img" auto-src="[[item.imageUrl.url]]"
+            draggable="false">
+        </img>
+        <div class="name" title="[[item.name]]">[[item.name]]</div>
+        <div class="secondary-info">
+          <div class="site-name">[[item.siteName]]</div>
+          &nbsp•&nbsp
+          <div class="info">[[item.info]]</div>
+        </div>
+      </a>
+    </template>
+  </div>
+</div>
diff --git a/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.js b/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.js
index 84f4697..8962aaa 100644
--- a/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.js
+++ b/chrome/browser/resources/new_tab_page/modules/recipes_v2/module.js
@@ -7,6 +7,8 @@
 import {loadTimeData} from '../../i18n_setup.js';
 import {ModuleDescriptor} from '../module_descriptor.js';
 
+import {TaskModuleHandlerProxy} from '../task_module/task_module_handler_proxy.js';
+
 class RecipeModuleElement extends PolymerElement {
   static get is() {
     return 'ntp-recipes-module-redesigned';
@@ -15,13 +17,27 @@
   static get template() {
     return html`{__html_template__}`;
   }
+
+  static get properties() {
+    return {
+      /** @type {!taskModule.mojom.Task} */
+      task: Object,
+    };
+  }
 }
 
 customElements.define(RecipeModuleElement.is, RecipeModuleElement);
 
 /** @return {!Promise<?HTMLElement>} */
-async function createModule(taskModuleType) {
+async function createModule() {
+  const {task} =
+      await TaskModuleHandlerProxy.getInstance().handler.getPrimaryTask(
+          taskModule.mojom.TaskModuleType.kRecipe);
+  if (!task) {
+    return null;
+  }
   const element = new RecipeModuleElement();
+  element.task = task;
   return element;
 }
 
@@ -29,4 +45,4 @@
 export const recipeTasksDescriptor = new ModuleDescriptor(
     /*id=*/ 'recipe_tasks',
     /*name=*/ loadTimeData.getString('modulesRecipeTasksSentence'),
-    createModule.bind(null, taskModule.mojom.TaskModuleType.kRecipe));
+    createModule);
diff --git a/chrome/browser/resources/read_later/side_panel/app.html b/chrome/browser/resources/read_later/side_panel/app.html
index fa7ecf17..a686868 100644
--- a/chrome/browser/resources/read_later/side_panel/app.html
+++ b/chrome/browser/resources/read_later/side_panel/app.html
@@ -23,6 +23,8 @@
   cr-tabs {
     --cr-tabs-height: 40px;
     --cr-tabs-font-size: 13px;
+    --cr-tabs-selected-tab-focused-font-weight: auto;
+    --cr-tabs-focus-outline: solid 2px var(--mwb-icon-button-focus-ring-color);
     cursor: default;
     flex: 1;
   }
diff --git a/chrome/browser/resources/read_later/side_panel/bookmark_folder.html b/chrome/browser/resources/read_later/side_panel/bookmark_folder.html
index 2dd8f2b..7e21088d 100644
--- a/chrome/browser/resources/read_later/side_panel/bookmark_folder.html
+++ b/chrome/browser/resources/read_later/side_panel/bookmark_folder.html
@@ -49,6 +49,12 @@
     transform: rotate(0);
   }
 
+  #arrowIcon:focus,
+  #arrowIcon:hover {
+    background: none;
+    box-shadow: none;
+  }
+
   :host-context([dir='rtl']) #arrowIcon:not([open]) {
     transform: rotate(90deg);
   }
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.html b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.html
index af489af..24a0cc4 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.html
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.html
@@ -30,15 +30,14 @@
       </template>
       <div class="list-frame">
         <cr-radio-group id="isSupportedRadioGroup"
-          selected="[[getSelectedRadioButtonName_(app)]]"
+          selected="[[getCurrentPref_(app)]]"
+          on-selected-changed="onSupportedLinkPrefChanged_"
           disabled="[[isInTabMode_(app)]]">
-          <cr-radio-button id="preferred"
-            name="preferred"
-            label="[[getAppNameRadioButtonLabel_(app)]]">
+          <cr-radio-button id="preferred" name="preferred">
+            [[getAppNameRadioButtonLabel_(app)]]
           </cr-radio-button>
-          <cr-radio-button id="browser"
-            name="browser"
-            label="$i18n{appManagementIntentSharingOpenBrowserLabel}">
+          <cr-radio-button id="browser" name="browser">
+            $i18n{appManagementIntentSharingOpenBrowserLabel}
           </cr-radio-button>
         </cr-radio-group>
       </div>
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
index 0340090..b3c3788 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
@@ -27,28 +27,24 @@
     },
   },
 
-  listeners: {
-    click: 'onClick_',
-  },
-
   attached() {
     this.watch('app', state => app_management.util.getSelectedApp(state));
     this.updateFromStore();
   },
 
   /**
-   * @private
    * @param {App} app
    * @return {string} Supported or not for radio buttons.
+   * @private
    */
-  getSelectedRadioButtonName_(app) {
+  getCurrentPref_(app) {
     return app.isPreferredApp ? 'preferred' : 'browser';
   },
 
   /**
-   * @private
    * @param {App} app
    * @returns {boolean}
+   * @private
    */
   shouldShowIntentSettings_(app) {
     return this.appManagementIntentSettingsEnabled_ &&
@@ -66,9 +62,9 @@
   },
 
   /**
-   * @private
    * @param {!App} app
    * @return {boolean}
+   * @private
    */
   isInTabMode_(app) {
     return app.type === AppType.kWeb &&
@@ -76,24 +72,26 @@
   },
 
   /**
-   * @private
    * @param {App} app
    * @return {string} label for app name radio button
+   * @private
    */
   getAppNameTabModeExplanation_(app) {
     return this.i18n(
         'appManagementIntentSharingTabExplanation', String(app.title));
   },
 
-  /** @private */
-  onClick_() {
-    const newState = !this.app.isPreferredApp;
+  /**
+   * @param {!CustomEvent<{value: string}>} event
+   * @private
+   */
+  onSupportedLinkPrefChanged_(event) {
+    const newPref = event.detail.value === 'preferred';
     app_management.BrowserProxy.getInstance().handler.setPreferredApp(
-        this.app.id,
-        newState,
-    );
-    const userAction = newState ? AppManagementUserAction.PreferredAppTurnedOn :
-                                  AppManagementUserAction.PreferredAppTurnedOff;
+        this.app.id, newPref);
+
+    const userAction = newPref ? AppManagementUserAction.PreferredAppTurnedOn :
+                                 AppManagementUserAction.PreferredAppTurnedOff;
     app_management.util.recordAppManagementUserAction(
         this.app.type, userAction);
   }
diff --git a/chrome/browser/resources/settings/settings_page/main_page_mixin.js b/chrome/browser/resources/settings/settings_page/main_page_mixin.js
index be16837..7d7b7a07e 100644
--- a/chrome/browser/resources/settings/settings_page/main_page_mixin.js
+++ b/chrome/browser/resources/settings/settings_page/main_page_mixin.js
@@ -32,8 +32,14 @@
     TOP_LEVEL: 'top-level',
   };
 
+  let guestTopLevelRoute = routes.SEARCH;
+  // <if expr="chromeos">
+  guestTopLevelRoute = routes.PRIVACY;
+  // </if>
+
   /** @type {!Route} */
-  const TOP_LEVEL_EQUIVALENT_ROUTE = routes.PEOPLE;
+  const TOP_LEVEL_EQUIVALENT_ROUTE =
+      loadTimeData.getBoolean('isGuest') ? guestTopLevelRoute : routes.PEOPLE;
 
   /**
    * @param {?Route} route
diff --git a/chrome/browser/resources/signin/dice_web_signin_intercept/dice_web_signin_intercept_app.ts b/chrome/browser/resources/signin/dice_web_signin_intercept/dice_web_signin_intercept_app.ts
index dd5c35e3..103671bf 100644
--- a/chrome/browser/resources/signin/dice_web_signin_intercept/dice_web_signin_intercept_app.ts
+++ b/chrome/browser/resources/signin/dice_web_signin_intercept/dice_web_signin_intercept_app.ts
@@ -65,7 +65,11 @@
         'interception-parameters-changed',
         this.handleParametersChanged_.bind(this));
     this.diceWebSigninInterceptBrowserProxy_.pageLoaded().then(
-        parameters => this.handleParametersChanged_(parameters));
+        parameters => this.onPageLoaded_(parameters));
+  }
+
+  private onPageLoaded_(parameters: InterceptionParameters) {
+    this.handleParametersChanged_(parameters);
     afterNextRender(this, () => {
       // |showGuestOption| is constant during the lifetime of this bubble,
       // therefore it's safe to set the listener only during initialization.
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinator.java
index 27536af..e5e1378 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinator.java
@@ -28,11 +28,11 @@
     private final long mShareStartTime;
     private final LinkToTextCoordinator mLinkToTextCoordinator;
     private final ChromeOptionShareCallback mChromeOptionShareCallback;
-    private final boolean mShouldEnableLinkToTextToggle;
 
     private ShareParams mShareParams;
     private ChromeShareExtras mChromeShareExtras;
     private GURL mUrl;
+    private boolean mShouldEnableLinkToTextToggle;
     private boolean mShouldEnableGenericToggle;
 
     /**
@@ -48,15 +48,11 @@
     ShareSheetLinkToggleCoordinator(ShareParams shareParams, ChromeShareExtras chromeShareExtras,
             long shareStartTime, LinkToTextCoordinator linkToTextCoordinator,
             ChromeOptionShareCallback chromeOptionShareCallback) {
-        setShareParamsAndExtras(shareParams, chromeShareExtras);
         mShareStartTime = shareStartTime;
         mLinkToTextCoordinator = linkToTextCoordinator;
         mChromeOptionShareCallback = chromeOptionShareCallback;
+        setShareParamsAndExtras(shareParams, chromeShareExtras);
 
-        mShouldEnableLinkToTextToggle =
-                (ChromeFeatureList.isEnabled(ChromeFeatureList.PREEMPTIVE_LINK_TO_TEXT_GENERATION)
-                        || ChromeFeatureList.isEnabled(ChromeFeatureList.SHARING_HUB_LINK_TOGGLE))
-                && mLinkToTextCoordinator != null;
         showShareSheet();
     }
 
@@ -67,6 +63,10 @@
         mShareParams = shareParams;
         mChromeShareExtras = chromeShareExtras;
         mUrl = chromeShareExtras.getContentUrl();
+        mShouldEnableLinkToTextToggle =
+                (ChromeFeatureList.isEnabled(ChromeFeatureList.PREEMPTIVE_LINK_TO_TEXT_GENERATION)
+                        || ChromeFeatureList.isEnabled(ChromeFeatureList.SHARING_HUB_LINK_TOGGLE))
+                && mLinkToTextCoordinator != null && chromeShareExtras.isUserHighlightedText();
         mShouldEnableGenericToggle =
                 ChromeFeatureList.isEnabled(ChromeFeatureList.SHARING_HUB_LINK_TOGGLE)
                 && TextUtils.isEmpty(shareParams.getUrl()) && mUrl != null && !mUrl.isEmpty();
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinatorTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinatorTest.java
index 3688c7d..3e3070fb7 100644
--- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinatorTest.java
+++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetLinkToggleCoordinatorTest.java
@@ -138,7 +138,8 @@
     public void getShareParams_linkToText_link() {
         ShareParams shareParams =
                 new ShareParams.Builder(/*window=*/null, /*title=*/"", "").setText("text").build();
-        ChromeShareExtras chromeShareExtras = new ChromeShareExtras.Builder().build();
+        ChromeShareExtras chromeShareExtras =
+                new ChromeShareExtras.Builder().setIsUserHighlightedText(true).build();
         ShareSheetLinkToggleCoordinator shareSheetLinkToggleCoordinator =
                 new ShareSheetLinkToggleCoordinator(shareParams, chromeShareExtras, /*startTime=*/
                         0, mLinkToTextCoordinator, mShareCallback);
diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
index 2e4319cbc..455f38aa 100644
--- a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
+++ b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
@@ -33,22 +33,17 @@
         /**
          * Invoked when the user has signed in to Chrome.
          */
-        void onSignedIn();
+        default void onSignedIn() {}
 
         /**
          * Invoked when the user has signed out of Chrome.
          */
-        void onSignedOut();
-    }
+        default void onSignedOut() {}
 
-    /**
-     * SignInAllowedObservers will be notified once signing-in becomes allowed or disallowed.
-     */
-    interface SignInAllowedObserver {
         /**
          * Invoked once all startup checks are done and signing-in becomes allowed, or disallowed.
          */
-        void onSignInAllowedChanged();
+        default void onSignInAllowedChanged() {}
     }
 
     /**
@@ -130,16 +125,6 @@
     void removeSignInStateObserver(SignInStateObserver observer);
 
     /**
-     * Adds a {@link SignInAllowedObserver}.
-     */
-    void addSignInAllowedObserver(SignInAllowedObserver observer);
-
-    /**
-     * Removes a {@link SignInAllowedObserver}.
-     */
-    void removeSignInAllowedObserver(SignInAllowedObserver observer);
-
-    /**
      * Starts the sign-in flow, and executes the callback when finished.
      *
      * The sign-in flow goes through the following steps:
diff --git a/chrome/browser/speech/network_speech_recognizer.cc b/chrome/browser/speech/network_speech_recognizer.cc
index 238e7c4..c76068a 100644
--- a/chrome/browser/speech/network_speech_recognizer.cc
+++ b/chrome/browser/speech/network_speech_recognizer.cc
@@ -12,7 +12,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "build/chromeos_buildflags.h"
 #include "chrome/browser/speech/speech_recognizer_delegate.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -25,10 +24,6 @@
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "third_party/blink/public/mojom/speech/speech_recognition_error.mojom.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "ui/accessibility/accessibility_features.h"
-#endif
-
 // Invalid speech session.
 static const int kInvalidSessionId = -1;
 
@@ -138,14 +133,11 @@
   if (session_ != kInvalidSessionId)
     StopOnIOThread();
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-  // Don't filter profanities if flag is enabled for experimental listening.
-  // This would match desired OnDeviceSpeechRecognizer behavior.
-  bool filter_profanities =
-      !features::IsExperimentalAccessibilityDictationListeningEnabled();
-#else
-  bool filter_profanities = true;
-#endif
+  // Don't filter profanities. NetworkSpeechRecognizer is currently used by
+  // Dictation which does not want to filter user input. If this needs to be
+  // changed for other clients in the future, whether to filter should be passed
+  // as a parameter to the speech recognizer instead of changed here.
+  bool filter_profanities = false;
   content::SpeechRecognitionSessionConfig config;
   config.language = locale_;
   config.continuous = true;
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 837bea3..c81074b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Skakel af</translation>
 <translation id="1036727731225946849">Voeg tans <ph name="WEBAPK_NAME" /> by …</translation>
 <translation id="1045899828449635435">Vee ook dié data uit?</translation>
-<translation id="1047303875618851375">Chrome kon nie jou inligting verifieer nie</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Nooit gestoor nie</translation>
 <translation id="107147699690128016">As jy die lêeruitbreiding verander, sal die lêer dalk in 'n ander program oopmaak en sal dit potensieel skadelik wees vir jou toestel.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Kan nie daardie wagwoord kry nie. Gaan die spelling na en probeer weer.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Gestuur vanaf <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Kies 'n templaat vir jou gemerkte teks</translation>
-<translation id="1307205233980126133">Jammer, ons kon nie jou eiebewyse bekragtig nie</translation>
 <translation id="1310482092992808703">Groepeer oortjies</translation>
 <translation id="1311657260431405215">Hierdie QR-kode is nie 'n URL nie: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Deling</translation>
 <translation id="2195339740518523951">Kry Chrome se sterkste beskerming</translation>
 <translation id="2200113223741723867">Bestuur deling van gebruikdata</translation>
+<translation id="2218567645332692482">Gradeer navigasie op na HTTPS en waarsku jou voordat werwe gelaai word wat dit nie ondersteun nie</translation>
 <translation id="2227444325776770048">Gaan voort as <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Leë venster</translation>
 <translation id="2239812875700136898">Beheer jou berigte vanaf die "Opsies vir Ontdek"-knoppie</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Veiligheidskontrole</translation>
 <translation id="5556459405103347317">Herlaai</translation>
 <translation id="5561549206367097665">Wag tans vir netwerk …</translation>
+<translation id="5568069709869097550">Kan nie aanmeld nie</translation>
 <translation id="55737423895878184">Ligging en kennisgewings word toegelaat</translation>
 <translation id="5578795271662203820">Deursoek <ph name="SEARCH_ENGINE" /> vir hierdie prent</translation>
 <translation id="5581519193887989363">Jy kan altyd in <ph name="BEGIN_LINK1" />instellings<ph name="END_LINK1" /> kies wat om te sinkroniseer.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">hangende</translation>
 <translation id="8970887620466824814">Iets is fout.</translation>
 <translation id="8972098258593396643">Laai af na verstekvouer?</translation>
+<translation id="8987641763863173640">Bestuur videovoorskou-instellings</translation>
 <translation id="8988028529677883095">Gebruik foon as 'n sekuriteitsleutel</translation>
 <translation id="8993760627012879038">Maak 'n nuwe oortjie in incognitomodus oop</translation>
 <translation id="8996847606757455498">Kies 'n ander verskaffer</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index ca7d5b5..0c0821c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -4,10 +4,10 @@
 <translation id="1016498331642356377">በድምጽዎ በፍጥነት ይፈልጉ። ይህን አቋራጭ ለማርትዕ ነክተው ይያዙ።</translation>
 <translation id="1028699632127661925">ወደ <ph name="DEVICE_NAME" /> በመላክ ላይ...</translation>
 <translation id="103269572468856066">ከእነዚህ ጣቢያዎች እና መተግበሪያዎች የመጣ ውሂብም ይጽዳ?</translation>
+<translation id="1034259925032978114">መስኮት ተከፍቷል</translation>
 <translation id="1036348656032585052">አጥፋ</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" />ን በማከል ላይ...</translation>
 <translation id="1045899828449635435">ከእነዚህ ጣቢያዎች የመጣ ውሂብም ይጽዳ?</translation>
-<translation id="1047303875618851375">Chrome መረጃዎን ማረጋገጥ አልቻለም</translation>
 <translation id="1049743911850919806">ማንነት የማያሳውቅ</translation>
 <translation id="10614374240317010">በጭራሽ አልተቀመጠም</translation>
 <translation id="107147699690128016">የፋይል ቅጥያውን ከቀየሩት ፋይሉ በተለየ መተግበሪያ ሊከፈት ይችላል፣ እና መሣሪያዎን ሊጎዳ ይችላል።</translation>
@@ -55,7 +55,6 @@
 <translation id="1303339473099049190">ይህንን ይለፍ ቃል ማግኘት አይቻልም። የፊደል አጻጻፍዎን ይፈትሹና እንደገና ይሞክሩ።</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ከ<ph name="DEVICE_NAME" /> የተላከ</translation>
 <translation id="130581733275749598">ለድምቀትዎ አንድ ቅንብር ደንብ ይምረጡ</translation>
-<translation id="1307205233980126133">ይቅርታ፣ የእርስዎን የመግቢያ ማስረጃዎችን ማረጋገጥ አልቻልንም</translation>
 <translation id="1310482092992808703">ትሮችን ይሰብስቡ</translation>
 <translation id="1311657260431405215">ይህ የQR ኮድ ዩአርኤል አይደለም፦ <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +186,7 @@
 <translation id="2195339740518523951">የChromeን በጣም ጠንካራ ደህንነት ያግኙ</translation>
 <translation id="2200113223741723867">የአጠቃቀም ውሂብ ማጋራትን ያስተዳድሩ</translation>
 <translation id="2227444325776770048">እንደ <ph name="USER_FULL_NAME" /> ሆነው ይቀጥሉ</translation>
+<translation id="2230777942707397948">ባዶ መስኮት</translation>
 <translation id="2239812875700136898">ከአማራጮች ለምርምር አዝራሩ ሆነው የእርስዎን ዘገባዎች ይቆጣጠሩ</translation>
 <translation id="2259659629660284697">የይለፍ ቃላትን ወደ ውጭ ላክ...</translation>
 <translation id="2276696007612801991">የይለፍ ቃላትዎን ለመፈተሽ ወደ Google መለያዎ ይግቡ</translation>
@@ -338,6 +338,7 @@
 <translation id="314939179385989105">የChrome መነሻ ገጽ</translation>
 <translation id="3157842584138209013">ከተጨማሪ አማራጮች አዝራር ላይ ምን ያህል ውሂብ እንዳስቀመጡ ይመልከቱ</translation>
 <translation id="3166827708714933426">የትር እና የመስኮት አቋራጮች</translation>
+<translation id="316694332262407393">Chrome አስቀድሞ እዚህ በማሄድ ላይ ነው።</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">በቃ ሊያልቅ ነው!</translation>
 <translation id="3207960819495026254">ዕልባት ተደርጎበታል</translation>
@@ -416,6 +417,7 @@
 <translation id="3587596251841506391">ድር ላይ ደህንነትን ለማሻሻል ያግዙ</translation>
 <translation id="3602290021589620013">ቅድመ-ዕይታ</translation>
 <translation id="3616113530831147358">ድምጽ</translation>
+<translation id="3622349720008044802">መስኮቶች ያቀናብሩ</translation>
 <translation id="3631987586758005671">ለ <ph name="DEVICE_NAME" /> በማጋራት ላይ</translation>
 <translation id="3632295766818638029">የይለፍ ቃልን ግለጥ</translation>
 <translation id="363596933471559332">የተከማቹ ምስክርነቶችን በመጠቀም በራስ-ሰር ወደ የድር ጣቢያዎች መለያ ይግቡ። ባህሪው ሲጠፋ ወደ አንድ ድር ጣቢያ ከመግባትዎ በፊት ማረጋገጫ ይጠየቃሉ።</translation>
@@ -431,6 +433,7 @@
 <translation id="3737319253362202215">የትርጉም ቅንብሮች</translation>
 <translation id="3738139272394829648">ለመፈለግ ይንኩ</translation>
 <translation id="3739899004075612870">በ<ph name="PRODUCT_NAME" /> ውስጥ ዕልባት ተቀምጦለታል</translation>
+<translation id="3740525748616366977">የድምፅ ፍለጋ በዚህ መሣሪያ ላይ አይገኝም</translation>
 <translation id="3749259744154402564">የማይደገፍ</translation>
 <translation id="3771001275138982843">ዝማኔውን ማውረድ አልተቻለምም</translation>
 <translation id="3771033907050503522">ማንነት የማያሳውቁ ትሮች</translation>
@@ -439,6 +442,7 @@
 <translation id="3773856050682458546">ስለሚጎበኟቸው ድር ጣቢያዎች እና ስለሚጠቀሙባቸው መተግበሪያዎች መሰረታዊ ውሂብ እና መረጃ</translation>
 <translation id="3775705724665058594">ወደ መሣሪያዎችዎ ይላኩ</translation>
 <translation id="3778956594442850293">ወደ የመነሻ ገጽ ታክሏል</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 ትር}one{# ትሮች}other{# ትሮች}}</translation>
 <translation id="3803784507854318295">በራስ-አጫውትን ያቀናብሩ</translation>
 <translation id="3810838688059735925">ቪዲዮ</translation>
 <translation id="3810973564298564668">አቀናብር</translation>
@@ -459,6 +463,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">ምንም የነቃ የድምጽ ፍለጋ አይገኝም</translation>
 <translation id="395377504920307820">ያለመለያ ተጠቀም</translation>
+<translation id="3958287878205277013">ማንነት የማያሳውቅ የአሰሳ ታሪክን ከመሣሪያዎ ላይ ለማጽዳት ሁሉንም ማንነት የማያሳውቁ ትሮች ይዝጉ።</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome ዝግጁ ሲሆን ገጽዎን ይጭነዋል}one{Chrome ዝግጁ ሲሆን ገጾችዎን ይጭነዋል}other{Chrome ዝግጁ ሲሆን ገጾችዎን ይጭነዋል}}</translation>
 <translation id="3962957115499249330">ይህ አውርድ በWi-Fi ሲጀመር ማሳወቂያ ያያሉ።</translation>
 <translation id="3963007978381181125">የእርስዎ የይለፍ ሐረግ ያለው ሰው ብቻ ነው የእርስዎን የተመሰጠረ ውሂብ ማንበብ የሚችለው። የይለፍ ሐረጉ ወደ Google አይላክም እንዲሁም አይከማችም። የእርስዎን የይለፍ ሐረግ ከረሱት ወይም ይህን ቅንብር መለወጥ ከፈለጉ ማሥመሩን ዳግም ማስጀመር ያስፈልገዎታል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
@@ -544,6 +549,7 @@
 የእርስዎ Google መለያ በ<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ እንደ ፍለጋዎች እና የሌሎች Google አገልግሎቶች እንቅስቃሴ ያሉ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖሩት ይችላል።</translation>
 <translation id="4532845899244822526">አቃፊ ይምረጡ</translation>
 <translation id="4538018662093857852">ቀላል ሁነታን አብራ</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> ትር}one{<ph name="TAB_COUNT_MANY" /> ትሮች፣ <ph name="TAB_COUNT_INCOGNITO" /> ማንነት የማያሳውቅ}other{<ph name="TAB_COUNT_MANY" /> ትሮች፣ <ph name="TAB_COUNT_INCOGNITO" /> ማንነት የማያሳውቅ}}</translation>
 <translation id="4550003330909367850">የይለፍ ቃልዎን ቅጂ እዚህ ለመመልከት በዚህ መሣሪያ ላይ የማያ ገጽ ቁልፍን ያቀናብሩ።</translation>
 <translation id="4554077758708533499">በዩኤስቢ ገመድ ተገናኝቷል</translation>
 <translation id="4557685098773234337">በፍጥነት እዚህ ለመድረስ ይህንን ገጽ ወደ መነሻ ገጽዎ ያክሉ</translation>
@@ -609,6 +615,7 @@
 <translation id="4885273946141277891">የማይደገፍ የChrome አብነቶች ብዛት።</translation>
 <translation id="4908869848243824489">ምርምር በGoogle</translation>
 <translation id="4910889077668685004">የክፍያ መተግበሪያዎች</translation>
+<translation id="4912413785358399818">ትርን ውሰድ</translation>
 <translation id="4913161338056004800">ስታትስቲክስ ዳግም አስጀምር</translation>
 <translation id="4913169188695071480">ማደስ አቁም</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# ገጽ}one{# ገጾች}other{# ገጾች}}</translation>
@@ -634,7 +641,9 @@
 <translation id="5039804452771397117">ፍቀድ</translation>
 <translation id="5054455334322721892">በመለያ ሲገቡ <ph name="BEGIN_LINK1" />ሌሎች የእንቅስቃሴ ዓይነቶች<ph name="END_LINK1" /> በGoogle መለያዎ ውስጥ ሊቀመጡ ይችላሉ። በማንኛውም ጊዜ ሊሰርዟቸው ይችላሉ።</translation>
 <translation id="5061533557687621530">የአየር ሁኔታን ለመፈተሽ ማይክሮፎኑን መታ ያድርጉ እና «What’s the weather today?» ይበሉ</translation>
+<translation id="506254248375231072">ምንም ትሮች የሉም</translation>
 <translation id="5087580092889165836">ካርድ አክል</translation>
+<translation id="5091199029769593641">በቅርቡ አዲስ ትር ሲከፍቱ ከ<ph name="SITE_NAME" /> የመጡ ታሪኮችን ይመለከታሉ። እርስዎ የሚከተሏቸው ጣቢያዎች በGoogle መለያዎ ውስጥ ይቀመጣሉ። በምርምር ቅንብሮች ውስጥ ሊያቀናብሯቸው ይችላሉ።</translation>
 <translation id="5091249083535528968">የተራዘመ የአጠቃቀም ውሂብ</translation>
 <translation id="509429900233858213">ስህተት አጋጥሟል።</translation>
 <translation id="510275257476243843">1 ሰዓት ይቀራል</translation>
@@ -694,6 +703,7 @@
 <translation id="5454166040603940656">ከ<ph name="PROVIDER" /> ጋር</translation>
 <translation id="5456381639095306749">ገጽ አውርድ</translation>
 <translation id="5458366071038729214">የሚከተሏቸውን ጣቢያዎች እዚህ ያገኛሉ</translation>
+<translation id="5468068603361015296">ለማንኛውም <ph name="FILE_NAME" />ን ማውረድ ይፈልጋሉ?</translation>
 <translation id="548278423535722844">በካርታዎች መተግበሪያ ውስጥ ይክፈቱ</translation>
 <translation id="5483197086164197190">Chromeን ያስሱ</translation>
 <translation id="5487521232677179737">ውሂብን አጽዳ</translation>
@@ -708,6 +718,7 @@
 <translation id="5548606607480005320">የደህንነት ፍተሻ</translation>
 <translation id="5556459405103347317">ዳግም ጫን</translation>
 <translation id="5561549206367097665">አውታረ መረብን በመጠበቅ ላይ…</translation>
+<translation id="5568069709869097550">መግባት አልተቻለም</translation>
 <translation id="55737423895878184">አካባቢ እና ማሳወቂያዎች ይፈቀዳሉ</translation>
 <translation id="5578795271662203820">ይህንን ምስል <ph name="SEARCH_ENGINE" /> ላይ ይፈልጉት</translation>
 <translation id="5581519193887989363">በማንኛውም ጊዜ ምን እንደሚያሰምሩ በ<ph name="BEGIN_LINK1" />ቅንብሮች<ph name="END_LINK1" /> ውስጥ መምረጥ ይችላሉ።</translation>
@@ -750,6 +761,7 @@
 <translation id="5810288467834065221">የቅጂ መብት <ph name="YEAR" /> Google LLC. ሁሉም መብቶች በህግ የተጠበቁ ናቸው።</translation>
 <translation id="5810864297166300463">የድር እርዳታ</translation>
 <translation id="5814131985548525293">ለመጀመር እዚህ ይተይቡ ወይም የድምጽ አዶውን መታ ያድርጉ</translation>
+<translation id="5814749351757353073">የሚወዷቸው ጣቢያዎችን በቅርበት ይከታተሉ</translation>
 <translation id="583281660410589416">ያልታወቀ </translation>
 <translation id="5833984609253377421">አገናኝ አጋራ</translation>
 <translation id="5834764604050996579">አንድ QR ኮድ ለመቃኘት Chrome ካሜራዎን እንዲጠቀም ይፍቀዱለት።</translation>
@@ -824,6 +836,7 @@
 
 ለምሳሌ፣ አንዳንድ ድር ጣቢያዎች ሌሎች በጎበኟቸው ድር ጣቢያዎች ላይ ያልተመሠረቱ ማስታወቂያዎችን በማሳየት ለዚህ ጥያቄ ምላሽ ሊሰጡ ይችላሉ። ብዙ ድር ጣቢያዎች አሁንም የአሰሳ ውሂብዎን ይሰበስቡና ይጠቀሙበታል — ለምሳሌ ደህንነትን ለማሻሻል፤ ይዘት፣ ማስታወቂያዎችና ምክሮች በድር ጣቢያዎች ላይ ለማቅረብ፤ እና የሪፖርት አደራረግ ስታቲስቲክስን ለማመንጨት።</translation>
 <translation id="624789221780392884">ማዘመኛ ዝግጁ ነው</translation>
+<translation id="6264376385120300461">ለማንኛውም አውርድ</translation>
 <translation id="6277522088822131679">ገጹን ማተም ላይ ችግር ነበር። እባክዎ እንደገና ይሞክሩ።</translation>
 <translation id="6278428485366576908">ገጽታ</translation>
 <translation id="6292420053234093573">Chromeን በመጠቀምዎ በ<ph name="BEGIN_LINK1" />የGoogle አገልግሎት ውል<ph name="END_LINK1" /> እና <ph name="BEGIN_LINK2" />የGoogle Chrome እና የChrome OS ተጨማሪ አገልግሎት ውል<ph name="END_LINK2" /> ይስማማሉ።</translation>
@@ -881,10 +894,12 @@
 <translation id="6539092367496845964">የሆነ ችግር ተፈጥሯል። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{ከ1 ሰዓት በፊት ተፈትሿል}one{ከ# ሰዓቶች በፊት ተፈትሿል}other{ከ# ሰዓቶች በፊት ተፈትሿል}}</translation>
 <translation id="6545017243486555795">ሁሉንም ውሂብ አጽዳ</translation>
+<translation id="6546511553472444032">ፋይል ጎጂ ሊሆን ይችላል</translation>
 <translation id="6560414384669816528">ከSogou ጋር ይፈልጉ</translation>
 <translation id="656065428026159829">ተጨማሪ ይመልከቱ</translation>
 <translation id="6565959834589222080">Wi-Fi የሚገኝ ሲሆን ስራ ላይ ይውላል</translation>
 <translation id="6566259936974865419">Chrome <ph name="GIGABYTES" /> ጊባ ቆጥቦልዎታል</translation>
+<translation id="6569373978618239158">አዲስ ትር ሲከፍቱ አሁን ከ<ph name="SITE_NAME" /> ታሪኮችን ማየት ይችላሉ። እርስዎ የሚከተሏቸው ጣቢያዎች በGoogle መለያዎ ውስጥ ይቀመጣሉ። በምርምር ቅንብሮች ውስጥ ሊያቀናብሯቸው ይችላሉ።</translation>
 <translation id="6573096386450695060">ሁልጊዜ ፍቀድ</translation>
 <translation id="6573431926118603307">በሌሎች መሣሪያዎችዎ ላይ ባለ Chrome ላይ የከፈቷቸው ትሮች እዚህ ይመጣሉ።</translation>
 <translation id="6583199322650523874">የአሁኑን ገጽ ዕልባት አድርግበት</translation>
@@ -950,6 +965,7 @@
 <translation id="696447261358045621">ከማንነት የማያሳውቅ ሁነታ ይውጡ</translation>
 <translation id="6979737339423435258">የምንጊዜም</translation>
 <translation id="6981982820502123353">ተደራሽነት</translation>
+<translation id="6987047470128880212">ማንነት የማያሳውቅ በዚህ መሣሪያ ላይ አይገኝም</translation>
 <translation id="6989267951144302301">ማውረድ አልተቻለም</translation>
 <translation id="6995899638241819463">የይለፍ ቃላት በውሂብ ደንብ ጥሰት ተጋላጭ ከሆነ ያስጠንቅቅዎት</translation>
 <translation id="7001056293070445572">ይህ ፋይል ትልቅ ነው (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1043,7 @@
 <translation id="7482656565088326534">የቅድመ-እይታ ትር</translation>
 <translation id="7484997419527351112">ምርምር - ጠፍቷል</translation>
 <translation id="7485033510383818941">የምግብ ይዘቱን ለማደስ፣ ገጹን ወደ ታች ይጎትቱ</translation>
+<translation id="749294055653435199">Google ሌንስ በዚህ መሣሪያ ላይ አይገኝም</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (የተዘመነው በ<ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">የተቆጠበው ውሂብ</translation>
 <translation id="7498271377022651285">እባክዎ ይጠብቁ…</translation>
@@ -1128,6 +1145,7 @@
 <translation id="8037801708772278989">አሁን ተፈትሿል</translation>
 <translation id="8040831032425909005">የፈጣን እርምጃ ፍለጋ ምግብር አዶ</translation>
 <translation id="804335162455518893">ኤስዲ ካርድ አልተገኘም</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> ማንነት የማያሳውቅ ትር}one{<ph name="TAB_COUNT_NORMAL" /> ማንነት የማያሳውቁ ትሮች}other{<ph name="TAB_COUNT_NORMAL" /> ማንነት የማያሳውቁ ትሮች}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> ሜባ አለ</translation>
 <translation id="8058746566562539958">በአዲስ የChrome ትር ውስጥ ክፈት</translation>
 <translation id="8063895661287329888">ዕልባት ማከል አልተሳካም።</translation>
@@ -1226,6 +1244,7 @@
 <translation id="8621068256433641644">ስልክ</translation>
 <translation id="8636825310635137004">ትሮችዎን ከሌሎች መሣሪያዎችዎ ለማግኘት ስምረትን ያብሩ።</translation>
 <translation id="8641930654639604085">የአዋቂ ሰው ጣቢያዎችን ለማገድ ሞክር</translation>
+<translation id="864544049772947936">መስኮቶችን (<ph name="INSTANCE_COUNTS" />) ያቀናብሩ</translation>
 <translation id="8655129584991699539">ውሂቡን በChrome ቅንብሮች ውስጥ ማጽዳት ይችላሉ</translation>
 <translation id="8656747343598256512">ወደዚህ ጣቢያ እና Chrome በGoogle መለያዎ ይግቡ። በኋላ ስምረትን ማብራት ይችላሉ።</translation>
 <translation id="8659579665266920523">በChrome እንዴት መፈለግ እንደሚቻል</translation>
@@ -1314,6 +1333,7 @@
 <translation id="9219103736887031265">ምስሎች</translation>
 <translation id="926205370408745186">የChrome እንቅስቃሴዎን ከዲጂታል ብቁ መሆን ያስወግዱ</translation>
 <translation id="927968626442779827">በGoogle Chrome ላይ ቀላል ሁነታን ይጠቀሙ</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" />ን በመከተል ላይ</translation>
 <translation id="932327136139879170">መነሻ</translation>
 <translation id="938850635132480979">ስህተት፦ <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">የይለፍ ሐረግ ያስገቡ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index 52e44a7..7cdd8d4 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
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">إيقاف</translation>
 <translation id="1036727731225946849">جارٍ إضافة <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">محو البيانات هنا أيضًا؟</translation>
-<translation id="1047303875618851375">‏تعذّر على متصفِّح Chrome التحقُّق من معلوماتك.</translation>
 <translation id="1049743911850919806">التصفح المتخفي</translation>
 <translation id="10614374240317010">المواقع التي لن تحفظ كلمات المرور أبدًا</translation>
 <translation id="107147699690128016">في حال تغيير امتداد الملف، قد يفتح الملف في تطبيق مختلف ومن المحتمل أن يشكّل خطورة على جهازك.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">يتعذّر العثور على كلمة المرور هذه. يجب إجراء تدقيق إملائي وإعادة المحاولة.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - تم الإرسال من <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">اختَر نموذجًا للنص المحدَّد.</translation>
-<translation id="1307205233980126133">تعذَّر التحقُّق من صحة بيانات الاعتماد.</translation>
 <translation id="1310482092992808703">جمع علامات التبويب</translation>
 <translation id="1311657260431405215">‏رمز الاستجابة السريعة هذا ليس عنوان URL: <ph name="QRCODEVALUE" />.</translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">المشاركة</translation>
 <translation id="2195339740518523951">‏الحصول على أعلى مستوى من الحماية في متصفِّح Chrome</translation>
 <translation id="2200113223741723867">إدارة مشاركة بيانات الاستخدام</translation>
+<translation id="2218567645332692482">‏ترقية عمليات التنقّل إلى بروتوكول HTTPS وتحذيرك قبل تحميل المواقع الإلكترونية غير المتوافقة</translation>
 <translation id="2227444325776770048">المتابعة باسم <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">نافذة فارغة</translation>
 <translation id="2239812875700136898">يمكنك التحكُّم بقصصك عبر زر "خيارات الاقتراحات".</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">التحقّق من الأمان</translation>
 <translation id="5556459405103347317">إعادة التحميل</translation>
 <translation id="5561549206367097665">في انتظار الشبكة...</translation>
+<translation id="5568069709869097550">تعذّر الدخول</translation>
 <translation id="55737423895878184">مسموح بالإشعارات وتحديد الموقع الجغرافي</translation>
 <translation id="5578795271662203820">البحث في <ph name="SEARCH_ENGINE" /> عن هذه الصورة</translation>
 <translation id="5581519193887989363">يمكنك دائمًا اختيار ما تريد مزامنته في <ph name="BEGIN_LINK1" />الإعدادات<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">في الانتظار</translation>
 <translation id="8970887620466824814">حدث خطأ.</translation>
 <translation id="8972098258593396643">هل تريد التنزيل إلى المجلد التلقائي؟</translation>
+<translation id="8987641763863173640">إدارة إعدادات معاينة الفيديو</translation>
 <translation id="8988028529677883095">استخدام الهاتف كمفتاح أمان</translation>
 <translation id="8993760627012879038">فتح علامة تبويب جديدة في وضع التصفّح المتخفّي</translation>
 <translation id="8996847606757455498">اختيار مقدِّم خدمة آخر</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index 6497d8c..bd0c0fd1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">অফ কৰক</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> যোগ কৰি থকা হৈছে...</translation>
 <translation id="1045899828449635435">এই ছাইটসমূহৰ পৰাও ডেটা মচিবনে?</translation>
-<translation id="1047303875618851375">Chromeএ আপোনাৰ তথ্য সত্যাপন কৰিব নোৱাৰিলে</translation>
 <translation id="1049743911850919806">ইনক’গনিট’</translation>
 <translation id="10614374240317010">কেতিয়াও ছেভ কৰা নহয়</translation>
 <translation id="107147699690128016">আপুনি যদি ফাইল এক্সটেনশ্বন সলনি কৰে ফাইলটো হয়তো বেলেগ এটা এপ্লিকেশ্বনত খুলিব আৰু সেয়া আপোনাৰ ডিভাইচটোৰ বাবে এক সম্ভাব্য বিপদ হ’ব পাৰে।</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">সেই পাছৱর্ডটো বিচাৰিব নোৱাৰি। আপোনাৰ বানান পৰীক্ষা কৰক আৰু পুনৰ চেষ্টা কৰক।</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />ৰ পৰা পঠিওৱা</translation>
 <translation id="130581733275749598">আপোনাৰ হাইলাইটৰ বাবে এটা টেমপ্লে’ট বাছনি কৰক</translation>
-<translation id="1307205233980126133">ক্ষমা কৰিব, আমি আপোনাৰ ক্ৰিডেনশ্বিয়েল সত্যাপন কৰিব নোৱাৰিলোঁ</translation>
 <translation id="1310482092992808703">টেববোৰ একগোট কৰক</translation>
 <translation id="1311657260431405215">এই কিউআৰ ক’ডটো এটা URL নহয়: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">সুৰক্ষা পৰীক্ষা</translation>
 <translation id="5556459405103347317">পুনৰ ল’ড কৰক</translation>
 <translation id="5561549206367097665">নেটৱৰ্কৰ বাবে অপেক্ষাৰত…</translation>
+<translation id="5568069709869097550">ছাইন ইন কৰিব নোৱাৰি</translation>
 <translation id="55737423895878184">অৱস্থান আৰু জাননীক অনুমতি দিয়া হৈছে</translation>
 <translation id="5578795271662203820">এই ছবিৰ বাবে <ph name="SEARCH_ENGINE" />ত সন্ধান কৰক</translation>
 <translation id="5581519193887989363">আপুনি কি ছিংক কৰিব লাগে সেয়া <ph name="BEGIN_LINK1" />ছেটিংসমূহ<ph name="END_LINK1" />-লৈ গৈ যেতিয়াই মন যায় তেতিয়াই সলনি কৰিব পাৰে।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index 2c225cad..eee92e4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Deaktiv edin</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> əlavə edilir...</translation>
 <translation id="1045899828449635435">Bu saytlardan da data silinsin?</translation>
-<translation id="1047303875618851375">Chrome məlumatlarınızı doğrulaya bilmədi</translation>
 <translation id="1049743911850919806">Gizli Rejim</translation>
 <translation id="10614374240317010">Heç vaxt saxlanılmır</translation>
 <translation id="107147699690128016">Fayl artırmasını dəyişsəniz, fayl başqa tətbiqdə açıla bilər və cihaz üçün potensial zərərli ola bilər.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Həmin parolu tapmaq olmur. Yazılışı yoxlayıb, yenidən cəhd edin.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> cihazından göndərilib</translation>
 <translation id="130581733275749598">Vurğulamanız üçün şablon seçin</translation>
-<translation id="1307205233980126133">Üzr istəyirik, giriş məlumatlarınızı doğrulaya bilmədik.</translation>
 <translation id="1310482092992808703">Tabları qruplaşdırın</translation>
 <translation id="1311657260431405215">Bu QR Kodu URL deyil: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Təhlükəsizlik yoxlanışı</translation>
 <translation id="5556459405103347317">Yenidən yükləyin</translation>
 <translation id="5561549206367097665">Şəbəkə gözlənilir…</translation>
+<translation id="5568069709869097550">Daxil ola bilməz</translation>
 <translation id="55737423895878184">Məkan və bildirişlər aktivdir</translation>
 <translation id="5578795271662203820">Bu şəkil üçün <ph name="SEARCH_ENGINE" /> axtarın</translation>
 <translation id="5581519193887989363">Sinxronizasiya seçimlərini <ph name="BEGIN_LINK1" />ayarlarda<ph name="END_LINK1" /> edə bilərsiniz.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index 116e6f17..e2ec2a93 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Выключыць</translation>
 <translation id="1036727731225946849">Дадаецца <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Выдаліць і гэтыя даныя?</translation>
-<translation id="1047303875618851375">Браўзеру Chrome не ўдалося спраўдзіць вашы звесткі</translation>
 <translation id="1049743911850919806">Інкогніта</translation>
 <translation id="10614374240317010">Ніколі не захоўваліся</translation>
 <translation id="107147699690128016">Калі вы зменіце пашырэнне файла, ён можа адкрыцца ў іншай праграме, што можа быць небяспечным для вашай прылады.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Не ўдалося знайсці гэты пароль. Праверце правільнасць напісання і паўтарыце спробу.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – адпраўлена з прылады <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Выберыце шаблон для вылучанага тэксту</translation>
-<translation id="1307205233980126133">Не ўдалося праверыць вашы ўліковыя даныя</translation>
 <translation id="1310482092992808703">Згрупаваць укладкі</translation>
 <translation id="1311657260431405215">Гэты QR-код не з'яўляецца URL-адрасам: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Праверка бяспекі</translation>
 <translation id="5556459405103347317">Перазагрузіць</translation>
 <translation id="5561549206367097665">Чакаецца адказ сеткі…</translation>
+<translation id="5568069709869097550">Не ўдалося ўвайсці ў сістэму</translation>
 <translation id="55737423895878184">Вызначэнне месцазнаходжання і апавяшчэнні дазволены</translation>
 <translation id="5578795271662203820">Шукаць гэты відарыс праз <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">У <ph name="BEGIN_LINK1" />наладах<ph name="END_LINK1" /> заўсёды можна выбраць, што трэба сінхранізаваць.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 092dcb44..c3c5c24 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Изключване</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> се добавя...</translation>
 <translation id="1045899828449635435">Изчиств. и на данните от тези сайтове?</translation>
-<translation id="1047303875618851375">Chrome не можа да потвърди информацията ви</translation>
 <translation id="1049743911850919806">„Инкогнито“</translation>
 <translation id="10614374240317010">Незапазвани никога</translation>
 <translation id="107147699690128016">Ако промените файловото разширение, файлът може да се отвори в друго приложение и потенциално да навреди на устройството ви.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Тази парола не бе намерена. Проверете дали е написана правилно и опитайте отново.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Изпратено от <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Изберете шаблон за открояването</translation>
-<translation id="1307205233980126133">За съжаление, не успяхме да потвърдим идентификационните ви данни</translation>
 <translation id="1310482092992808703">Групиране на раздели</translation>
 <translation id="1311657260431405215">Този QR код не е URL адрес: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Проверка на безопасността</translation>
 <translation id="5556459405103347317">Повторно зареждане</translation>
 <translation id="5561549206367097665">Изчаква се връзка с мрежата…</translation>
+<translation id="5568069709869097550">Не може да се влезе</translation>
 <translation id="55737423895878184">Достъпът до местоположението и известията са разрешени</translation>
 <translation id="5578795271662203820">Търсене на изображението със: <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Винаги можете да изберете какво да се синхронизира от <ph name="BEGIN_LINK1" />настройките<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index 20966f61..5b0ac61 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">বন্ধ করুন</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> যোগ করা হচ্ছে...</translation>
 <translation id="1045899828449635435">এই সাইটগুলির ডেটাও কি মুছে ফলতে চান?</translation>
-<translation id="1047303875618851375">Chrome আপনার তথ্য যাচাই করতে পারেনি</translation>
 <translation id="1049743911850919806">ছদ্মবেশী</translation>
 <translation id="10614374240317010">কখনও সংরক্ষিত হয়নি</translation>
 <translation id="107147699690128016">আপনি ফাইলের এক্সটেনশন পরিবর্তন করলে, সেটি অন্য অ্যাপ্লিকেশনে খুলতে পারে এবং আপনার ডিভাইসে সমস্যার সৃষ্টি করতে পারে।</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">ওই পাসওয়ার্ডটি খুঁজে পাওয়া যায়নি। বানান পরীক্ষা করে আবার চেষ্টা করে দেখুন।</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> থেকে পাঠানো হয়েছে</translation>
 <translation id="130581733275749598">আপনার হাইলাইট করার জন্য একটি টেমপ্লেট বেছে নিন</translation>
-<translation id="1307205233980126133">আপনার ক্রেডেনশিয়াল যাচাই করতে পারিনি</translation>
 <translation id="1310482092992808703">ট্যাবগুলি গ্রুপ করুন</translation>
 <translation id="1311657260431405215">এই QR কোডটি কোনও ইউআরএল নয়: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -710,6 +708,7 @@
 <translation id="5548606607480005320">নিরাপত্তা সংক্রান্ত পরীক্ষা</translation>
 <translation id="5556459405103347317">রিলোড করুন</translation>
 <translation id="5561549206367097665">নেটওয়ার্কের জন্য অপেক্ষা করা হচ্ছে...</translation>
+<translation id="5568069709869097550">প্রবেশ করতে পারছেন না</translation>
 <translation id="55737423895878184">লোকেশন এবং বিজ্ঞপ্তিগুলি অনুমোদিত</translation>
 <translation id="5578795271662203820">এই ইমেজটির জন্য <ph name="SEARCH_ENGINE" /> খুঁজুন</translation>
 <translation id="5581519193887989363"><ph name="BEGIN_LINK1" />সেটিংসে<ph name="END_LINK1" /> কী সিঙ্ক করা হবে তা আপনি সবসময় বেছে নিতে পারেন।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index b6194a0..0f33dc06 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Isključi</translation>
 <translation id="1036727731225946849">Dodavanje stavke <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Obrisati i podatke ovih web lokacija?</translation>
-<translation id="1047303875618851375">Chrome nije mogao potvrditi vaše informacije</translation>
 <translation id="1049743911850919806">Anonimno</translation>
 <translation id="10614374240317010">Nikada nije sačuvano</translation>
 <translation id="107147699690128016">Ako promijenite ekstenziju fajla, moguće je da će se fajl otvoriti u drugoj aplikaciji i potencijalno predstavljati opasnost po vaš uređaj.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Nije moguće pronaći tu lozinku. Provjerite jeste li ispravno napisali i pokušajte ponovo.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Poslano koristeći <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Biranje šablona za istaknutu stavku</translation>
-<translation id="1307205233980126133">Nažalost, nismo uspjeli potvrditi vaše akreditive</translation>
 <translation id="1310482092992808703">Grupiši kartice</translation>
 <translation id="1311657260431405215">Ovaj QR kôd nije URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,7 +185,7 @@
 <translation id="218608176142494674">Dijeljenje</translation>
 <translation id="2195339740518523951">Odaberite maksimalnu sigurnost koju nudi Chrome</translation>
 <translation id="2200113223741723867">Upravljajte dijeljenjem podataka o korištenju</translation>
-<translation id="2218567645332692482">Navigacija se nadograđuje na HTTPS i prikazuje se upozorenje prije učitavanja web-lokacija koje ga ne podržavaju</translation>
+<translation id="2218567645332692482">Nadogradite navigacije na HTTPS i primite upozorenje prije učitavanja web lokacija koje ga ne podržavaju</translation>
 <translation id="2227444325776770048">Nastavite kao <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Prazan prozor</translation>
 <translation id="2239812875700136898">Kontrolirajte priče pomoću dugmeta Opcije za Discover</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Sigurnosna provjera</translation>
 <translation id="5556459405103347317">Učitaj ponovo</translation>
 <translation id="5561549206367097665">Čekanje na mrežu…</translation>
+<translation id="5568069709869097550">Ne možete se prijaviti</translation>
 <translation id="55737423895878184">Lokacija i obavještenja su dozvoljeni</translation>
 <translation id="5578795271662203820">Pretražuj <ph name="SEARCH_ENGINE" /> za ovu sliku</translation>
 <translation id="5581519193887989363">Uvijek možete odabrati šta želite sinhronizirati u <ph name="BEGIN_LINK1" />postavkama<ph name="END_LINK1" />.</translation>
@@ -1296,7 +1295,7 @@
 <translation id="8965591936373831584">na čekanju</translation>
 <translation id="8970887620466824814">Nešto nije uredu.</translation>
 <translation id="8972098258593396643">Želite li preuzeti u zadanu mapu?</translation>
-<translation id="8987641763863173640">Upravljanje postavkama pregleda videozapisa</translation>
+<translation id="8987641763863173640">Upravljajte postavkama pregleda videozapisa</translation>
 <translation id="8988028529677883095">Koristite telefon kao sigurnosni ključ</translation>
 <translation id="8993760627012879038">Otvori novu karticu u anonimnom načinu rada</translation>
 <translation id="8996847606757455498">Odaberite drugog pružaoca</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index b9b3df7..51cbe7f3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desactiva</translation>
 <translation id="1036727731225946849">S'està afegint <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Vols esborrar també les dades d'aquests llocs web?</translation>
-<translation id="1047303875618851375">Chrome no ha pogut verificar la teva informació</translation>
 <translation id="1049743911850919806">Incògnit</translation>
 <translation id="10614374240317010">Contrasenyes que no es desen mai</translation>
 <translation id="107147699690128016">Si canvies l'extensió del fitxer, pot ser que el fitxer s'obri en una altra aplicació i pot arribar a ser perillós per al dispositiu.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">No es troba aquesta contrasenya. Comprova que estigui ben escrita i torna-ho a provar.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: s'ha enviat des del dispositiu <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selecciona una plantilla per al text marcat</translation>
-<translation id="1307205233980126133">No hem pogut validar les teves credencials</translation>
 <translation id="1310482092992808703">Agrupa les pestanyes</translation>
 <translation id="1311657260431405215">Aquest codi QR no és un URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Comprovació de seguretat</translation>
 <translation id="5556459405103347317">Torna a carregar</translation>
 <translation id="5561549206367097665">S'està esperant la xarxa…</translation>
+<translation id="5568069709869097550">No puc accedir</translation>
 <translation id="55737423895878184">Es permeten la ubicació i les notificacions</translation>
 <translation id="5578795271662203820">Cerca aquesta imatge a <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Sempre pots anar a la <ph name="BEGIN_LINK1" />configuració<ph name="END_LINK1" /> per decidir què vols sincronitzar.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index 25ddc97..68637ae 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Vypnout</translation>
 <translation id="1036727731225946849">Přidávání aplikace <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Vymazat data i z těchto webů?</translation>
-<translation id="1047303875618851375">Chrome vaše informace nemohl ověřit</translation>
 <translation id="1049743911850919806">Anonymní režim</translation>
 <translation id="10614374240317010">Nikdy se neukládají</translation>
 <translation id="107147699690128016">Pokud změníte příponu souboru, může se soubor otevřít v jiné aplikaci a potenciálně může být rizikem pro vaše zařízení.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Dané heslo nebylo nalezeno. Zkontrolujte ho a zkuste to znovu.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – odesláno ze zařízení <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Vyberte šablonu zvýraznění</translation>
-<translation id="1307205233980126133">Omlouváme se, identifikační údaje se nepodařilo ověřit</translation>
 <translation id="1310482092992808703">Seskupit karty</translation>
 <translation id="1311657260431405215">Tento QR kód není adresa URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Sdílení</translation>
 <translation id="2195339740518523951">Aktivujte si v Chromu maximální zabezpečení</translation>
 <translation id="2200113223741723867">Správa sdílení údajů o využití</translation>
+<translation id="2218567645332692482">Upgradovat navigaci na HTTPS a před načtením webů, které tento protokol nepodporují, zobrazit upozornění</translation>
 <translation id="2227444325776770048">Pokračovat jako uživatel <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Prázdné okno</translation>
 <translation id="2239812875700136898">Pomocí tlačítka Možnosti funkce Objevit můžete ovládat, jaké příběhy se vám budou zobrazovat</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Bezpečnostní kontrola</translation>
 <translation id="5556459405103347317">Načíst znovu</translation>
 <translation id="5561549206367097665">Čekání na síť…</translation>
+<translation id="5568069709869097550">Nepodařilo se přihlásit</translation>
 <translation id="55737423895878184">Určování polohy a oznámení jsou povoleny</translation>
 <translation id="5578795271662203820">Hledat obrázek pomocí <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Synchronizované položky můžete kdykoliv vybrat v <ph name="BEGIN_LINK1" />nastavení<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">nevyřízeno</translation>
 <translation id="8970887620466824814">Došlo k chybě.</translation>
 <translation id="8972098258593396643">Stáhnout do výchozí složky?</translation>
+<translation id="8987641763863173640">Spravovat nastavení náhledu videa</translation>
 <translation id="8988028529677883095">Používat telefon jako bezpečnostní klíč</translation>
 <translation id="8993760627012879038">Otevřít novou kartu v anonymním režimu</translation>
 <translation id="8996847606757455498">Vybrat jiného poskytovatele</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index fc6495f5..f6ad307 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Deaktiver</translation>
 <translation id="1036727731225946849">Tilføjer <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Vil du rydde data fra disse websites?</translation>
-<translation id="1047303875618851375">Chrome kunne ikke bekræfte dine oplysninger</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Gemmes aldrig</translation>
 <translation id="107147699690128016">Hvis du ændrer filtypen, åbnes filen muligvis i en anden app og kan være skadelig for din enhed.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Adgangskoden blev ikke fundet. Tjek stavningen, og prøv igen.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – sendt fra <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Vælg en skabelon til din fremhævning</translation>
-<translation id="1307205233980126133">Vi kunne ikke bekræfte dine loginoplysninger</translation>
 <translation id="1310482092992808703">Gruppér faner</translation>
 <translation id="1311657260431405215">Denne QR-kode er ikke en webadresse: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Deling</translation>
 <translation id="2195339740518523951">Få Chromes stærkeste beskyttelse</translation>
 <translation id="2200113223741723867">Administrer deling af brugsdata</translation>
+<translation id="2218567645332692482">Opgrader navigation til HTTPS, og få en advarsel, før websites, der ikke understøtter dette, indlæses</translation>
 <translation id="2227444325776770048">Fortsæt som <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Tomt vindue</translation>
 <translation id="2239812875700136898">Administrer dine historier ved hjælp af knappen Indstillinger for Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Sikkerhedstjek</translation>
 <translation id="5556459405103347317">Genindlæs</translation>
 <translation id="5561549206367097665">Venter på netværk…</translation>
+<translation id="5568069709869097550">Kan ikke logge ind</translation>
 <translation id="55737423895878184">Placering og notifikationer er tilladt</translation>
 <translation id="5578795271662203820">Søg efter billedet på <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Du kan altid vælge, hvad der skal synkroniseres, i <ph name="BEGIN_LINK1" />indstillingerne<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">afventer</translation>
 <translation id="8970887620466824814">Noget gik galt.</translation>
 <translation id="8972098258593396643">Vil du downloade til standardmappen?</translation>
+<translation id="8987641763863173640">Administrer indstillinger for forhåndsvisning af video</translation>
 <translation id="8988028529677883095">Brug telefonen som en sikkerhedsnøgle</translation>
 <translation id="8993760627012879038">Åbn en ny fane i inkognitotilstand</translation>
 <translation id="8996847606757455498">Vælg en anden udbyder</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index f2af1f9..3f554d0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -4,10 +4,10 @@
 <translation id="1016498331642356377">Schnelle Sprachsuche verwenden. Zum Ändern Schaltfläche gedrückt halten.</translation>
 <translation id="1028699632127661925">Wird an <ph name="DEVICE_NAME" /> gesendet…</translation>
 <translation id="103269572468856066">Auch Daten dieser Websites &amp; Apps löschen?</translation>
+<translation id="1034259925032978114">Fenster ist geöffnet</translation>
 <translation id="1036348656032585052">Deaktivieren</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> wird hinzugefügt...</translation>
 <translation id="1045899828449635435">Auch Daten dieser Websites löschen?</translation>
-<translation id="1047303875618851375">Chrome konnte Ihre Daten nicht bestätigen</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Nie speichern für…</translation>
 <translation id="107147699690128016">Eine Änderung der Dateiendung kann zum Öffnen der Datei in einer anderen Anwendung führen und Schäden an Ihrem Gerät verursachen.</translation>
@@ -55,7 +55,6 @@
 <translation id="1303339473099049190">Dieses Passwort wurde nicht gefunden. Überprüfen Sie die Schreibweise und versuchen Sie es noch einmal.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: gesendet von <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Vorlage für Markierung auswählen</translation>
-<translation id="1307205233980126133">Ihre Anmeldedaten konnten nicht bestätigt werden</translation>
 <translation id="1310482092992808703">Tabs gruppieren</translation>
 <translation id="1311657260431405215">Dieser QR-Code ist keine URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +186,7 @@
 <translation id="2195339740518523951">Höchste Sicherheit in Chrome erhalten</translation>
 <translation id="2200113223741723867">Freigabe von Nutzungsdaten verwalten</translation>
 <translation id="2227444325776770048">Als <ph name="USER_FULL_NAME" /> fortfahren</translation>
+<translation id="2230777942707397948">Leeres Fenster</translation>
 <translation id="2239812875700136898">Über die Schaltfläche "Optionen für Discover" können Sie festlegen, welche Meldungen Ihnen angezeigt werden</translation>
 <translation id="2259659629660284697">Passwörter exportieren…</translation>
 <translation id="2276696007612801991">Melden Sie sich in Ihrem Google-Konto an, um Ihre Passwörter zu prüfen</translation>
@@ -338,6 +338,7 @@
 <translation id="314939179385989105">Chrome-Startseite</translation>
 <translation id="3157842584138209013">Über die Schaltfläche "Weitere Optionen" können Sie sich ansehen, wie viel Datenvolumen Sie einsparen</translation>
 <translation id="3166827708714933426">Tastenkombinationen für Tabs und Fenster</translation>
+<translation id="316694332262407393">Chrome wird hier bereits ausgeführt.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Fast fertig.</translation>
 <translation id="3207960819495026254">Mit einem Lesezeichen versehen</translation>
@@ -416,6 +417,7 @@
 <translation id="3587596251841506391">Dabei helfen, das Web sicherer zu machen</translation>
 <translation id="3602290021589620013">Vorschau</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Fenster verwalten</translation>
 <translation id="3631987586758005671">Wird mit "<ph name="DEVICE_NAME" />" geteilt</translation>
 <translation id="3632295766818638029">Passwort anzeigen</translation>
 <translation id="363596933471559332">Sie werden mit gespeicherten Anmeldedaten automatisch auf Websites angemeldet. Wenn diese Funktion nicht aktiviert ist, werden Sie jedes Mal aufgefordert, sich manuell auf einer Website anzumelden.</translation>
@@ -431,6 +433,7 @@
 <translation id="3737319253362202215">Übersetzungseinstellungen</translation>
 <translation id="3738139272394829648">Zum Suchen antippen</translation>
 <translation id="3739899004075612870">Als Lesezeichen in <ph name="PRODUCT_NAME" /> gespeichert</translation>
+<translation id="3740525748616366977">Die Sprachsuche ist auf diesem Gerät nicht verfügbar</translation>
 <translation id="3749259744154402564">Nicht unterstützt</translation>
 <translation id="3771001275138982843">Update konnte nicht heruntergeladen werden</translation>
 <translation id="3771033907050503522">Inkognito-Tabs</translation>
@@ -439,6 +442,7 @@
 <translation id="3773856050682458546">Die grundlegenden Daten plus Informationen über die Websites, die Sie besuchen, und die Apps, die Sie nutzen</translation>
 <translation id="3775705724665058594">An meine Geräte senden</translation>
 <translation id="3778956594442850293">Zum Startbildschirm hinzugefügt</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 Tab}other{# Tabs}}</translation>
 <translation id="3803784507854318295">Autoplay verwalten</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Verwalten</translation>
@@ -459,6 +463,7 @@
 <translation id="3934366560681368531">„</translation>
 <translation id="393697183122708255">Keine aktivierte Sprachsuche verfügbar</translation>
 <translation id="395377504920307820">Ohne Konto verwenden</translation>
+<translation id="3958287878205277013">Schließen Sie alle Inkognitotabs, um den Inkognito-Browserverlauf vom Gerät zu löschen</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome lädt Ihre Seite, sobald diese bereit ist}other{Chrome lädt Ihre Seiten, sobald diese bereit sind}}</translation>
 <translation id="3962957115499249330">Sie erhalten eine Benachrichtigung, wenn dieser Download im WLAN gestartet wird.</translation>
 <translation id="3963007978381181125">Die Passphrasenverschlüsselung enthält keine Zahlungsmethoden oder Adressen von Google Pay. Nur Personen mit Ihrer Passphrase können Ihre verschlüsselten Daten lesen. Die Passphrase wird nicht an Google gesendet oder von Google gespeichert. Falls Sie sie vergessen oder diese Einstellung ändern möchten, müssen Sie die Synchronisierung zurücksetzen. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
@@ -544,6 +549,7 @@
 Eventuell finden Sie unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> weitere Formen des Browserverlaufs wie Suchanfragen oder Aktivitäten anderer Google-Dienste für Ihr Google-Konto.</translation>
 <translation id="4532845899244822526">Ordner auswählen</translation>
 <translation id="4538018662093857852">Lite-Modus aktivieren</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> Tab}other{<ph name="TAB_COUNT_MANY" /> Tabs, <ph name="TAB_COUNT_INCOGNITO" /> Inkognitotabs}}</translation>
 <translation id="4550003330909367850">Um Ihr Passwort hier anzeigen zu lassen oder zu kopieren, legen Sie eine Displaysperre für dieses Gerät fest.</translation>
 <translation id="4554077758708533499">Per USB-Kabel verbunden</translation>
 <translation id="4557685098773234337">Fügen Sie diese Seite zum Startbildschirm hinzu, um schneller zurückzukehren</translation>
@@ -609,6 +615,7 @@
 <translation id="4885273946141277891">Nicht unterstützte Anzahl von Chrome-Instanzen</translation>
 <translation id="4908869848243824489">Discover von Google</translation>
 <translation id="4910889077668685004">Zahlungs-Apps</translation>
+<translation id="4912413785358399818">Tab verschieben</translation>
 <translation id="4913161338056004800">Statistiken wieder auf Null setzen</translation>
 <translation id="4913169188695071480">Aktualisierung anhalten</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Seite}other{# Seiten}}</translation>
@@ -634,7 +641,9 @@
 <translation id="5039804452771397117">Zulassen</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Andere Arten von Aktivitäten<ph name="END_LINK1" /> können in Ihrem Google-Konto gespeichert werden, wenn Sie angemeldet sind. Sie können sie jederzeit löschen.</translation>
 <translation id="5061533557687621530">Wenn Sie zum Beispiel den Wetterbericht aufrufen möchten, tippen Sie auf das Mikrofon und sagen Sie „Wie ist das Wetter heute?“.</translation>
+<translation id="506254248375231072">Keine Tabs</translation>
 <translation id="5087580092889165836">Karte hinzufügen</translation>
+<translation id="5091199029769593641">Bald werden Sie beim Öffnen eines neuen Tabs „<ph name="SITE_NAME" />“-Artikel sehen. Websites, denen Sie folgen, werden in Ihrem Google-Konto gespeichert. Sie können sie in den Discover-Einstellungen verwalten.</translation>
 <translation id="5091249083535528968">Erweiterte Nutzungsdaten</translation>
 <translation id="509429900233858213">Ein Fehler ist aufgetreten.</translation>
 <translation id="510275257476243843">1 Stunde übrig</translation>
@@ -694,6 +703,7 @@
 <translation id="5454166040603940656">mit <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Seite herunterladen</translation>
 <translation id="5458366071038729214">Hier erscheinen Websites, denen Sie folgen</translation>
+<translation id="5468068603361015296">Möchten Sie <ph name="FILE_NAME" /> trotzdem herunterladen?</translation>
 <translation id="548278423535722844">In einer Karten-App öffnen</translation>
 <translation id="5483197086164197190">Chrome verwenden</translation>
 <translation id="5487521232677179737">Daten löschen</translation>
@@ -708,6 +718,7 @@
 <translation id="5548606607480005320">Sicherheitscheck</translation>
 <translation id="5556459405103347317">Neu laden</translation>
 <translation id="5561549206367097665">Warten auf Netzwerk…</translation>
+<translation id="5568069709869097550">Anmeldung nicht möglich</translation>
 <translation id="55737423895878184">Standortermittlung und Benachrichtigungen sind erlaubt</translation>
 <translation id="5578795271662203820">In <ph name="SEARCH_ENGINE" /> nach dem Bild suchen</translation>
 <translation id="5581519193887989363">Sie können in den <ph name="BEGIN_LINK1" />Einstellungen<ph name="END_LINK1" /> auswählen, was Sie synchronisieren möchten.</translation>
@@ -750,6 +761,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC Alle Rechte vorbehalten.</translation>
 <translation id="5810864297166300463">Web-Unterstützung</translation>
 <translation id="5814131985548525293">Zum Starten hier Text eingeben oder das Symbol für das Mikrofon antippen</translation>
+<translation id="5814749351757353073">Lieblingswebsites im Blick behalten</translation>
 <translation id="583281660410589416">Unbekannt</translation>
 <translation id="5833984609253377421">Link teilen</translation>
 <translation id="5834764604050996579">Chrome braucht Zugriff auf Ihre Kamera, um QR-Codes zu scannen</translation>
@@ -824,6 +836,7 @@
 
 Einige Websites schalten möglicherweise Werbeanzeigen, deren Auswahl nicht darauf basiert, welche Websites Sie zuvor besucht haben. Viele Websites erfassen weiterhin Ihre Browserdaten und verwenden sie, um beispielsweise die Sicherheit zu verbessern oder Inhalte, Werbeanzeigen und Empfehlungen bereitzustellen und Statistiken für Berichte zu erstellen.</translation>
 <translation id="624789221780392884">Update bereit</translation>
+<translation id="6264376385120300461">Trotzdem herunterladen</translation>
 <translation id="6277522088822131679">Beim Drucken der Seite ist ein Problem aufgetreten. Bitte versuchen Sie es erneut.</translation>
 <translation id="6278428485366576908">Design</translation>
 <translation id="6292420053234093573">Wenn Sie Chrome verwenden, stimmen Sie damit den <ph name="BEGIN_LINK1" />Nutzungsbedingungen von Google<ph name="END_LINK1" /> und den <ph name="BEGIN_LINK2" />zusätzlichen Nutzungsbedingungen für Google Chrome und Chrome OS<ph name="END_LINK2" /> zu.</translation>
@@ -881,10 +894,12 @@
 <translation id="6539092367496845964">Ein Fehler ist aufgetreten. Versuchen Sie es später noch einmal.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Zuletzt geprüft: vor 1 Stunde}other{Zuletzt geprüft: vor # Stunden}}</translation>
 <translation id="6545017243486555795">Alle Daten löschen</translation>
+<translation id="6546511553472444032">Die Datei könnte schädlich sein</translation>
 <translation id="6560414384669816528">Suche mit Sogou</translation>
 <translation id="656065428026159829">Mehr anzeigen</translation>
 <translation id="6565959834589222080">WLAN wird verwendet, wenn es verfügbar ist</translation>
 <translation id="6566259936974865419">Dank Chrome haben Sie <ph name="GIGABYTES" /> GB eingespart</translation>
+<translation id="6569373978618239158">Ab jetzt werden Sie beim Öffnen eines neuen Tabs „<ph name="SITE_NAME" />“-Artikel sehen. Websites, denen Sie folgen, werden in Ihrem Google-Konto gespeichert. Sie können sie in den Discover-Einstellungen verwalten.</translation>
 <translation id="6573096386450695060">Immer zulassen</translation>
 <translation id="6573431926118603307">Hier werden Tabs angezeigt, die Sie auf Ihren anderen Geräten in Chrome geöffnet haben.</translation>
 <translation id="6583199322650523874">Aktuelle Seite als Lesezeichen speichern</translation>
@@ -950,6 +965,7 @@
 <translation id="696447261358045621">Inkognitomodus deaktivieren</translation>
 <translation id="6979737339423435258">Gesamte Zeit</translation>
 <translation id="6981982820502123353">Bedienungshilfen</translation>
+<translation id="6987047470128880212">NFC ist auf diesem Gerät nicht verfügbar</translation>
 <translation id="6989267951144302301">Fehler beim Download</translation>
 <translation id="6995899638241819463">Warnen, wenn Passwörter durch eine Datenpanne preisgegeben werden</translation>
 <translation id="7001056293070445572">Diese Datei ist groß (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1043,7 @@
 <translation id="7482656565088326534">Vorschau-Tab</translation>
 <translation id="7484997419527351112">Discover – aus</translation>
 <translation id="7485033510383818941">Zum Aktualisieren des Feeds Seite nach unten ziehen</translation>
+<translation id="749294055653435199">Google Lens ist auf diesem Gerät nicht verfügbar</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (aktualisiert <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">eingesparte Datenmenge</translation>
 <translation id="7498271377022651285">Bitte warten...</translation>
@@ -1128,6 +1145,7 @@
 <translation id="8037801708772278989">Zuletzt geprüft: gerade eben</translation>
 <translation id="8040831032425909005">Symbol des Widgets für Schnellaktionen und Internetsuchen</translation>
 <translation id="804335162455518893">SD-Karte nicht gefunden</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> Inkognitotab}other{<ph name="TAB_COUNT_NORMAL" /> Inkognitotabs}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB verfügbar</translation>
 <translation id="8058746566562539958">In neuem Chrome-Tab öffnen</translation>
 <translation id="8063895661287329888">Fehler beim Hinzufügen des Lesezeichens.</translation>
@@ -1226,6 +1244,7 @@
 <translation id="8621068256433641644">Smartphone</translation>
 <translation id="8636825310635137004">Aktivieren Sie die Synchronisierung, um Tabs von Ihren anderen Geräten abzurufen.</translation>
 <translation id="8641930654639604085">Versuchen, nicht jugendfreie Websites zu blockieren</translation>
+<translation id="864544049772947936">Fenster verwalten (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Sie können die Daten in den Chrome-Einstellungen löschen</translation>
 <translation id="8656747343598256512">Melden Sie sich bei dieser Website und in Chrome mit Ihrem Google-Konto an. Sie können die Synchronisierung später aktivieren.</translation>
 <translation id="8659579665266920523">Mit Chrome suchen</translation>
@@ -1314,6 +1333,7 @@
 <translation id="9219103736887031265">Bilder</translation>
 <translation id="926205370408745186">Chrome-Aktivitäten aus Digital Wellbeing entfernen</translation>
 <translation id="927968626442779827">Verwenden Sie den Lite-Modus in Google Chrome</translation>
+<translation id="928550791203542716">Sie folgen „<ph name="SITE_NAME" />“</translation>
 <translation id="932327136139879170">Startseite</translation>
 <translation id="938850635132480979">Fehler: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Passphrase eingeben</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
index 8a3211f..3e1e038 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Απενεργοποίηση</translation>
 <translation id="1036727731225946849">Προσθήκη <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Διαγραφή δεδομένων ιστοτόπων επίσης;</translation>
-<translation id="1047303875618851375">Το Chrome δεν ήταν σε θέση να επαληθεύσει τις πληροφορίες σας.</translation>
 <translation id="1049743911850919806">Ανώνυμη περιήγηση</translation>
 <translation id="10614374240317010">Δεν έχει αποθηκευθεί ποτέ</translation>
 <translation id="107147699690128016">Εάν αλλάξετε την επέκταση αρχείου, το αρχείο μπορεί να ανοίξει σε διαφορετική εφαρμογή και να αποτελέσει δυνητικό κίνδυνο για τη συσκευή σας.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Δεν είναι δυνατή η εύρεση αυτού του κωδικού πρόσβασης. Ελέγξτε για τυχόν ορθογραφικά λάθη και δοκιμάστε ξανά.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Στάλθηκε από <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Επιλέξτε ένα πρότυπο για την επισήμανσή σας</translation>
-<translation id="1307205233980126133">Δυστυχώς, δεν ήταν δυνατή η επαλήθευση των διαπιστευτηρίων σας.</translation>
 <translation id="1310482092992808703">Ομαδοποίηση καρτελών</translation>
 <translation id="1311657260431405215">Αυτός ο κωδικός QR δεν είναι URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Κοινοποίηση</translation>
 <translation id="2195339740518523951">Λάβετε την ισχυρότερη ασφάλεια του Chrome</translation>
 <translation id="2200113223741723867">Διαχείριση κοινοποίησης δεδομένων χρήσης</translation>
+<translation id="2218567645332692482">Αναβάθμιση των πλοηγήσεων σε HTTPS και ειδοποίηση πριν από τη φόρτωση ιστοτόπων που δεν το υποστηρίζουν</translation>
 <translation id="2227444325776770048">Συνέχεια ως <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Κενό παράθυρο</translation>
 <translation id="2239812875700136898">Ελέγξτε τις ιστορίες σας από το κουμπί Επιλογές για Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Έλεγχος ασφαλείας</translation>
 <translation id="5556459405103347317">Επαναφόρτωση</translation>
 <translation id="5561549206367097665">Αναμονή για δίκτυο…</translation>
+<translation id="5568069709869097550">Δεν είναι δυνατή η σύνδεση</translation>
 <translation id="55737423895878184">Η Τοποθεσία και οι ειδοποιήσεις επιτρέπονται</translation>
 <translation id="5578795271662203820">Αναζήτηση <ph name="SEARCH_ENGINE" /> για την εικόνα</translation>
 <translation id="5581519193887989363">Μπορείτε πάντα να επιλέξετε τα στοιχεία που θέλετε να συγχρονίσετε στις <ph name="BEGIN_LINK1" />ρυθμίσεις<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">σε εκκρεμότητα</translation>
 <translation id="8970887620466824814">Προέκυψε πρόβλημα.</translation>
 <translation id="8972098258593396643">Λήψη στον προεπιλεγμένο φάκελο;</translation>
+<translation id="8987641763863173640">Διαχείριση ρυθμίσεων προεπισκόπησης βίντεο</translation>
 <translation id="8988028529677883095">Χρήση του τηλεφώνου ως κλειδιού ασφαλείας</translation>
 <translation id="8993760627012879038">Άνοιγμα καρτέλας σε κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="8996847606757455498">Επιλογή άλλου παρόχου</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index 28c6023..4942760f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Turn off</translation>
 <translation id="1036727731225946849">Adding <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Also clear data from these sites?</translation>
-<translation id="1047303875618851375">Chrome couldn’t verify your information</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Never saved</translation>
 <translation id="107147699690128016">If you change the file extension, the file may open in a different application and potentially be a hazard to your device.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Can’t find that password. Check your spelling and try again.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Sent from <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Select a template for your highlight</translation>
-<translation id="1307205233980126133">Sorry, we couldn’t validate your credentials</translation>
 <translation id="1310482092992808703">Group tabs</translation>
 <translation id="1311657260431405215">This QR code is not a URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylised_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Safety check</translation>
 <translation id="5556459405103347317">Reload</translation>
 <translation id="5561549206367097665">Waiting for network…</translation>
+<translation id="5568069709869097550">Can't sign in</translation>
 <translation id="55737423895878184">Location and notifications are allowed</translation>
 <translation id="5578795271662203820">Search <ph name="SEARCH_ENGINE" /> for this image</translation>
 <translation id="5581519193887989363">You can always choose what to sync in <ph name="BEGIN_LINK1" />settings<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index a8433f6c..52f9c70 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desactivar</translation>
 <translation id="1036727731225946849">Agregando <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">¿Borrar estos datos?</translation>
-<translation id="1047303875618851375">Chrome no pudo verificar tu información</translation>
 <translation id="1049743911850919806">Incógnito</translation>
 <translation id="10614374240317010">Nunca guardado</translation>
 <translation id="107147699690128016">Si cambias la extensión de archivo, es posible que el archivo se abra en una app diferente y dañe el dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">No se encontró esa contraseña. Revisa la ortografía y vuelve a intentarlo.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Enviado desde <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Seleccionar una plantilla para el texto destacado</translation>
-<translation id="1307205233980126133">No pudimos validar las credenciales</translation>
 <translation id="1310482092992808703">Agrupar pestañas</translation>
 <translation id="1311657260431405215">Este código QR no es una URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">nota_estilizada_con_contenido_destacado_de_chrome_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Verificación de seguridad</translation>
 <translation id="5556459405103347317">Cargar de nuevo</translation>
 <translation id="5561549206367097665">Esperando red…</translation>
+<translation id="5568069709869097550">No puedo acceder</translation>
 <translation id="55737423895878184">La ubicación y las notificaciones están habilitadas</translation>
 <translation id="5578795271662203820">Buscar esta imagen en <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">En la <ph name="BEGIN_LINK1" />configuración<ph name="END_LINK1" />, puedes elegir los datos para sincronizar en cualquier momento.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index a23be5f..968bc8c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desactivar</translation>
 <translation id="1036727731225946849">Añadiendo <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">¿Borrar también datos de estos sitios?</translation>
-<translation id="1047303875618851375">Chrome no ha podido verificar tu información</translation>
 <translation id="1049743911850919806">Incógnito</translation>
 <translation id="10614374240317010">Contraseñas que nunca se guardan</translation>
 <translation id="107147699690128016">Si cambias la extensión del archivo, el archivo podría abrirse en una aplicación diferente y convertirse en un riesgo potencial para tu dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">No se ha podido encontrar la contraseña. Comprueba que esté bien escrita y vuelve a intentarlo.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Enviado desde <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selecciona una plantilla para tu texto destacado</translation>
-<translation id="1307205233980126133">Lo sentimos, no hemos podido validar tus credenciales</translation>
 <translation id="1310482092992808703">Agrupar pestañas</translation>
 <translation id="1311657260431405215">Este código QR no es una URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Compartir</translation>
 <translation id="2195339740518523951">Obtener la seguridad más potente de Chrome</translation>
 <translation id="2200113223741723867">Gestionar preferencias para compartir datos de uso</translation>
+<translation id="2218567645332692482">Cambia los accesos a páginas al protocolo HTTPS y muestra una advertencia antes de cargar sitios que no sean compatibles con ese protocolo</translation>
 <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Ventana vacía</translation>
 <translation id="2239812875700136898">Controla tus historias con el botón Opciones de Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Comprobación de seguridad</translation>
 <translation id="5556459405103347317">Volver a cargar</translation>
 <translation id="5561549206367097665">Esperando red…</translation>
+<translation id="5568069709869097550">No puedo iniciar sesión</translation>
 <translation id="55737423895878184">Las notificaciones y la ubicación están permitidas</translation>
 <translation id="5578795271662203820">Buscar esta imagen en <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Siempre puedes seleccionar qué contenido quieres sincronizar en los <ph name="BEGIN_LINK1" />ajustes<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">pendiente</translation>
 <translation id="8970887620466824814">Ha ocurrido un error.</translation>
 <translation id="8972098258593396643">¿Quieres descargarlo en la carpeta predeterminada?</translation>
+<translation id="8987641763863173640">Gestionar los ajustes de vista previa de vídeo</translation>
 <translation id="8988028529677883095">Usar teléfono como llave de seguridad</translation>
 <translation id="8993760627012879038">Abre una nueva pestaña en modo de incógnito</translation>
 <translation id="8996847606757455498">Elegir otro proveedor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index d0f1c400..f7f3feb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Lülita välja</translation>
 <translation id="1036727731225946849">APK <ph name="WEBAPK_NAME" /> lisamine …</translation>
 <translation id="1045899828449635435">Kas kustutada ka nende saitide andmed?</translation>
-<translation id="1047303875618851375">Chrome'il ei õnnestunud teie teavet kinnitada</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Ei ole kunagi salvestatud</translation>
 <translation id="107147699690128016">Kui muudate faililaiendit, võib fail avaneda mõnes teises rakenduses ja teie seadmele ohtu kujutada.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Seda parooli ei leita. Kontrollige õigekirja ja proovige uuesti.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – saadetud seadmest <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Valige oma esiletõstu mall</translation>
-<translation id="1307205233980126133">Vabandust, me ei saanud teie mandaate kinnitada</translation>
 <translation id="1310482092992808703">Vahelehtede grupeerimine</translation>
 <translation id="1311657260431405215">See QR-kood ei ole URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Ohutuskontroll</translation>
 <translation id="5556459405103347317">Laadi uuesti</translation>
 <translation id="5561549206367097665">Võrguühenduse ootamine …</translation>
+<translation id="5568069709869097550">Ei saa sisse logida</translation>
 <translation id="55737423895878184">Asukoht ja märguanded on lubatud</translation>
 <translation id="5578795271662203820">Otsi otsingust <ph name="SEARCH_ENGINE" /> kujutist</translation>
 <translation id="5581519193887989363">Jaotises <ph name="BEGIN_LINK1" />Seaded<ph name="END_LINK1" /> saate igal ajal valida, mida sünkroonida.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index b22042e..62bb707 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desaktibatu</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> gehitzen…</translation>
 <translation id="1045899828449635435">Webgune hauetako datuak ere garbitu nahi dituzu?</translation>
-<translation id="1047303875618851375">Chrome-k ezin izan du egiaztatu zure informazioa</translation>
 <translation id="1049743911850919806">Ezkutuko modua</translation>
 <translation id="10614374240317010">Sekula gorde gabeak</translation>
 <translation id="107147699690128016">Fitxategi-luzapena aldatzen baduzu, baliteke fitxategia beste aplikazio batean irekitzea eta zure gailuan kalteak eragitea.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ezin da aurkitu pasahitza. Egiaztatu ondo idatzi duzula eta saiatu berriro.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> gailutik bidalia</translation>
 <translation id="130581733275749598">Hautatu txantiloi bat nabarmendutako zatirako</translation>
-<translation id="1307205233980126133">Ezin izan ditugu baliozkotu kredentzialak</translation>
 <translation id="1310482092992808703">Taldekatu fitxak</translation>
 <translation id="1311657260431405215">QR kode hau ez da URL bat: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Partekatzea</translation>
 <translation id="2195339740518523951">Lortu Chrome-ren segurtasun-neurri sendoenak</translation>
 <translation id="2200113223741723867">Kudeatu erabilera-datuak partekatzeko aukerak</translation>
+<translation id="2218567645332692482">HTTPS ezartzen du protokolo bakar gisa, eta abisuak bidaltzen dizkizu hura onartzen ez duten webguneak kargatu aurretik</translation>
 <translation id="2227444325776770048">Jarraitu <ph name="USER_FULL_NAME" /> gisa</translation>
 <translation id="2230777942707397948">Leihoa hutsik dago</translation>
 <translation id="2239812875700136898">Istorioak kontrolatzeko, sakatu "Discover-en aukerak" botoia</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Segurtasun-egiaztapena</translation>
 <translation id="5556459405103347317">Kargatu berriro</translation>
 <translation id="5561549206367097665">Konektatzeko zain…</translation>
+<translation id="5568069709869097550">Ezin da hasi saioa</translation>
 <translation id="55737423895878184">Kokapena eta jakinarazpenak onartzen dira</translation>
 <translation id="5578795271662203820">Bilatu irudia <ph name="SEARCH_ENGINE" /> bilatzailean</translation>
 <translation id="5581519193887989363">Zer sinkronizatu nahi duzun aukeratzeko, joan <ph name="BEGIN_LINK1" />Ezarpenak<ph name="END_LINK1" /> atalera.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">zain</translation>
 <translation id="8970887620466824814">Arazoren bat izan da.</translation>
 <translation id="8972098258593396643">Karpeta lehenetsira deskargatu nahi duzu?</translation>
+<translation id="8987641763863173640">Kudeatu bideoak aurreikusteko ezarpenak</translation>
 <translation id="8988028529677883095">Erabili telefonoa segurtasun-giltza gisa</translation>
 <translation id="8993760627012879038">Ireki beste fitxa bat ezkutuko moduan</translation>
 <translation id="8996847606757455498">Aukeratu beste hornitzaile bat</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index ab19a3e..58cfce2a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">خاموش کردن</translation>
 <translation id="1036727731225946849">درحال افزودن <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">داده‌های این سایت‌ها نیز پاک شود؟</translation>
-<translation id="1047303875618851375">‏Chrome نتوانست اطلاعاتتان را تأیید کند</translation>
 <translation id="1049743911850919806">ناشناس</translation>
 <translation id="10614374240317010">هرگز ذخیره نمی‌شود</translation>
 <translation id="107147699690128016">اگر پسوند فایل را تغییر دهید، ممکن است فایل در برنامه دیگری باز شود و به‌طور بالقوه برای دستگاه مضر باشد.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">گذرواژه پیدا نشد. املای آن را بررسی و دوباره امتحان کنید.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ارسال‌شده از <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">انتخاب الگو برای برجسته‌سازی</translation>
-<translation id="1307205233980126133">متأسفیم، نتوانستیم اطلاعات کاربری شما را تأیید کنیم</translation>
 <translation id="1310482092992808703">گروه‌بندی برگه‌ها</translation>
 <translation id="1311657260431405215">این رمزینه پاسخ‌سریع یک نشانی وب نیست: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">هم‌رسانی</translation>
 <translation id="2195339740518523951">‏بهره‌مندی از بالاترین سطح امنیت در Chrome</translation>
 <translation id="2200113223741723867">مدیریت هم‌رسانی داده‌های استفاده</translation>
+<translation id="2218567645332692482">‏پیمایش‌ها به HTTPS ارتقا می‌یابد و پیش‌از بار شدن سایت‌هایی که از HTTPS پشتیبانی نمی‌کنند، هشدار دریافت می‌کنید</translation>
 <translation id="2227444325776770048">ادامه دادن به‌عنوان <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">پنجره خالی</translation>
 <translation id="2239812875700136898">کنترل داستان‌ها از دکمه «گزینه‌های یافته‌ها»</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">بررسی ایمنی</translation>
 <translation id="5556459405103347317">تازه‌سازی</translation>
 <translation id="5561549206367097665">در انتظار شبکه…</translation>
+<translation id="5568069709869097550">ورود به سیستم ممکن نیست</translation>
 <translation id="55737423895878184">مکان و اعلان‌ها مجاز هستند</translation>
 <translation id="5578795271662203820">جستجوی <ph name="SEARCH_ENGINE" /> برای این تصویر</translation>
 <translation id="5581519193887989363">هرزمان خواستید می‌توانید مواردی را که می‌خواهید همگام‌سازی شود در <ph name="BEGIN_LINK1" />تنظیمات<ph name="END_LINK1" /> انتخاب کنید.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">در انتظار</translation>
 <translation id="8970887620466824814">مشکلی پیش آمد.</translation>
 <translation id="8972098258593396643">در پوشه پیش‌فرض بارگیری شود؟</translation>
+<translation id="8987641763863173640">مدیریت تنظیمات پیش‌دید ویدیو</translation>
 <translation id="8988028529677883095">استفاده از تلفن به‌عنوان کلید امنیتی</translation>
 <translation id="8993760627012879038">باز کردن برگه جدیدی در حالت ناشناس</translation>
 <translation id="8996847606757455498">انتخاب ارائه‌دهنده دیگر</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index ffc134bb..66c1b052 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Poista käytöstä</translation>
 <translation id="1036727731225946849">Lisätään <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Poistetaanko data?</translation>
-<translation id="1047303875618851375">Chrome ei voinut tarkistaa tietojasi</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Ei tallenneta</translation>
 <translation id="107147699690128016">Jos vaihdat tiedostotunnisteen, tiedosto voi avautua eri sovelluksessa ja mahdollisesti vahingoittaa laitetta.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Tätä salasanaa ei löydy. Tarkista oikeinkirjoitus ja yritä uudelleen.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Lähetetty laitteelta <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Valitse malli korostukselle</translation>
-<translation id="1307205233980126133">Kirjautumistietojasi ei voitu todentaa</translation>
 <translation id="1310482092992808703">Ryhmittele välilehtiä</translation>
 <translation id="1311657260431405215">Tämä QR-koodi ei ole URL-osoite: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Turvatarkistus</translation>
 <translation id="5556459405103347317">Lataa uudelleen</translation>
 <translation id="5561549206367097665">Odotetaan verkkoyhteyttä…</translation>
+<translation id="5568069709869097550">Ei voi kirjautua sisään</translation>
 <translation id="55737423895878184">Sijainti ja ilmoitukset sallitaan</translation>
 <translation id="5578795271662203820">Etsi tätä kuvaa palvelusta <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Voit valita synkronoitavan sisällön <ph name="BEGIN_LINK1" />asetuksissa<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index d95ebcb..1c2c927 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">I-off</translation>
 <translation id="1036727731225946849">Idinaragdag ang <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">I-clear ang data sa mga site?</translation>
-<translation id="1047303875618851375">Hindi ma-verify ng Chrome ang iyong impormasyon</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Hindi kailanman nag-save</translation>
 <translation id="107147699690128016">Kung babaguhin mo ang file extension, puwedeng bumukas ang file sa ibang application at posible itong maging mapanganib sa iyong device.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Hindi mahanap ang password na iyon. Tingnan ang iyong spelling at subukan ulit.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Ipinadala mula sa <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Pumili ng template para sa iyong highlight</translation>
-<translation id="1307205233980126133">Paumanhin, hindi namin ma-validate ang iyong mga kredensyal</translation>
 <translation id="1310482092992808703">Igrupo ang mga tab</translation>
 <translation id="1311657260431405215">Hindi URL ang QR Code na ito: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Pag-check sa kaligtasan</translation>
 <translation id="5556459405103347317">I-reload</translation>
 <translation id="5561549206367097665">Naghihintay ng network…</translation>
+<translation id="5568069709869097550">Hindi makapag-sign in</translation>
 <translation id="55737423895878184">Pinapayagan ang lokasyon at mga notification</translation>
 <translation id="5578795271662203820">Hanapin sa <ph name="SEARCH_ENGINE" /> ang larawan</translation>
 <translation id="5581519193887989363">Mapipili mo kung ano ang isi-sync anumang oras sa <ph name="BEGIN_LINK1" />mga setting<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index f131a6c..4526f23 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Désactiver</translation>
 <translation id="1036727731225946849">Ajout de <ph name="WEBAPK_NAME" /> en cours…</translation>
 <translation id="1045899828449635435">Supprimer aussi les données de ces sites?</translation>
-<translation id="1047303875618851375">Chrome n'a pas pu vérifier vos renseignements</translation>
 <translation id="1049743911850919806">Navigation privée</translation>
 <translation id="10614374240317010">Jamais enregistré</translation>
 <translation id="107147699690128016">Si vous modifiez l'extension du fichier, il peut s'ouvrir dans une application différente et poser un risque pour votre appareil.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ce mot de passe est introuvable. Vérifiez l'orthographe et réessayez.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Envoyé par <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Sélectionnez un modèle pour votre mise en évidence</translation>
-<translation id="1307205233980126133">Désolés, nous n'avons pas pu valider vos authentifiants</translation>
 <translation id="1310482092992808703">Grouper les onglets</translation>
 <translation id="1311657260431405215">Ce code QR ne correspond pas à une URL : <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">mise_en_évidence_stylisée_chrome_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Vérification de sécurité</translation>
 <translation id="5556459405103347317">Actualiser</translation>
 <translation id="5561549206367097665">En attente du réseau…</translation>
+<translation id="5568069709869097550">Impossible de se connecter</translation>
 <translation id="55737423895878184">La position et les notifications sont autorisées</translation>
 <translation id="5578795271662203820">Rechercher cette image avec <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Vous pouvez toujours choisir les éléments à synchroniser dans les <ph name="BEGIN_LINK1" />paramètres<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 09f2b3e..f6bd9d5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Désactiver</translation>
 <translation id="1036727731225946849">Ajout de <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Effacer ces données ?</translation>
-<translation id="1047303875618851375">Chrome n'a pas pu valider vos informations</translation>
 <translation id="1049743911850919806">Navigation privée</translation>
 <translation id="10614374240317010">Jamais enregistrés</translation>
 <translation id="107147699690128016">Si vous modifiez l'extension du fichier, celui-ci pourrait s'ouvrir dans une application différente et potentiellement endommager votre appareil.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ce mot de passe est introuvable. Vérifiez l'orthographe, puis réessayez.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> (envoyé depuis <ph name="DEVICE_NAME" />)</translation>
 <translation id="130581733275749598">Sélectionnez un modèle pour le texte en surbrillance</translation>
-<translation id="1307205233980126133">Désolé, nous n'avons pas pu vérifier vos identifiants</translation>
 <translation id="1310482092992808703">Regrouper les onglets</translation>
 <translation id="1311657260431405215">Ce code QR n'est pas une URL : <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">texte_stylisé_chrome</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Partage</translation>
 <translation id="2195339740518523951">Renforcer la sécurité de Chrome</translation>
 <translation id="2200113223741723867">Gérer le partage des données d'utilisation</translation>
+<translation id="2218567645332692482">Met à niveau les navigations en HTTPS et vous avertit avant de charger les sites qui ne prennent pas en charge ce protocole</translation>
 <translation id="2227444325776770048">Continuer en tant que <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Fenêtre vide</translation>
 <translation id="2239812875700136898">Contrôlez vos articles à l'aide du bouton Options pour Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Contrôle de sécurité</translation>
 <translation id="5556459405103347317">Actualiser</translation>
 <translation id="5561549206367097665">En attente de connexion au réseau…</translation>
+<translation id="5568069709869097550">Impossible de se connecter</translation>
 <translation id="55737423895878184">La localisation et les notifications sont autorisées</translation>
 <translation id="5578795271662203820">Rechercher l'image sur <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Vous avez toujours la possibilité de sélectionner les éléments à synchroniser dans les <ph name="BEGIN_LINK1" />paramètres<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">en attente</translation>
 <translation id="8970887620466824814">Un problème est survenu</translation>
 <translation id="8972098258593396643">Télécharger dans le dossier par défaut ?</translation>
+<translation id="8987641763863173640">Gérez les paramètres de l'aperçu vidéo</translation>
 <translation id="8988028529677883095">Utiliser un téléphone comme clé de sécurité</translation>
 <translation id="8993760627012879038">Ouvrir un nouvel onglet en mode navigation privée</translation>
 <translation id="8996847606757455498">Sélectionner un autre fournisseur</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index 2e170bc..f18fa81 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desactivar</translation>
 <translation id="1036727731225946849">Engadindo <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Queres borrar tamén os datos destes sitios?</translation>
-<translation id="1047303875618851375">Chrome non puido verificar a túa información</translation>
 <translation id="1049743911850919806">Modo de incógnito</translation>
 <translation id="10614374240317010">Contrasinais que non se gardan nunca</translation>
 <translation id="107147699690128016">Se cambias a extensión do ficheiro, é posible que este se abra nunha aplicación diferente e supoña un perigo para o teu dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Non se puido atopar o contrasinal. Comproba a ortografía e téntao de novo.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Contido enviado desde <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Seleccionar modelo para o texto destacado</translation>
-<translation id="1307205233980126133">Vaites! Non puidemos validar as túas credenciais</translation>
 <translation id="1310482092992808703">Agrupar pestanas</translation>
 <translation id="1311657260431405215">Este código QR non é un URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">nota_estilizada_de_chrome_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Revisión de seguranza</translation>
 <translation id="5556459405103347317">Volver cargar</translation>
 <translation id="5561549206367097665">Esperando unha rede…</translation>
+<translation id="5568069709869097550">Non se pode iniciar sesión</translation>
 <translation id="55737423895878184">Permítese consultar a localización e mostrar notificacións</translation>
 <translation id="5578795271662203820">Busca esta imaxe en <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Sempre podes escoller na <ph name="BEGIN_LINK1" />configuración<ph name="END_LINK1" /> o contido que queres sincronizar.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index 2bb12c4..7e3166f5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">બંધ કરો</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ઉમેરી રહ્યાં છીએ…</translation>
 <translation id="1045899828449635435">આ સાઇટમાંથી પણ ડેટા સાફ કરીએ?</translation>
-<translation id="1047303875618851375">Chrome તમારી માહિતી ચકાસી શક્યું નથી</translation>
 <translation id="1049743911850919806">છૂપી</translation>
 <translation id="10614374240317010">ક્યારેય ન સચવાયેલું</translation>
 <translation id="107147699690128016">જો તમે ફાઇલનું એક્સ્ટેંશન બદલશો, તો તે કોઈ અલગ ઍપ્લિકેશનમાં ખુલી શકે છે અને તમારા ડિવાઇસ માટે નુકસાનકારક હોવાનું સંભવિત હોય શકે.</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">તે પાસવર્ડ શોધી શકતા નથી. તમારી જોડણી ચેક કરો અને ફરીથી પ્રયાસ કરો.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> પરથી મોકલેલ</translation>
 <translation id="130581733275749598">તમારી હાઇલાઇટ માટે કોઈ નમૂનો પસંદ કરો</translation>
-<translation id="1307205233980126133">માફ કરશો, અમે તમારી લૉગ ઇન વિગતો કન્ફર્મ કરી શક્યા નથી</translation>
 <translation id="1310482092992808703">ટૅબનું ગ્રૂપ બનાવો</translation>
 <translation id="1311657260431405215">આ QR કોડ કોઈ URL નથી: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">સલામતી માટે તપાસ</translation>
 <translation id="5556459405103347317">ફરીથી લોડ કરો</translation>
 <translation id="5561549206367097665">નેટવર્કની રાહ જોઈ રહ્યાં છે…</translation>
+<translation id="5568069709869097550">સાઇન ઇન કરી શકાતું નથી</translation>
 <translation id="55737423895878184">સ્થાન અને નોટિફિકેશનોની મંજૂરી છે</translation>
 <translation id="5578795271662203820">આ છબી માટે <ph name="SEARCH_ENGINE" /> માં શોધો</translation>
 <translation id="5581519193887989363">શું સિંક કરવું તે હંમેશાં તમે <ph name="BEGIN_LINK1" />સેટિંગ<ph name="END_LINK1" />માં પસંદ કરી શકો છો.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index 2b00b63..294076c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">बंद करें</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> जोड़ा जा रहा है...</translation>
 <translation id="1045899828449635435">इन साइटों से जुड़ा डेटा मिटाना है?</translation>
-<translation id="1047303875618851375">Chrome आपकी जानकारी की पुष्टि नहीं कर सका</translation>
 <translation id="1049743911850919806">गुप्त</translation>
 <translation id="10614374240317010">कभी नहीं सेव किया गया</translation>
 <translation id="107147699690128016">अगर आप फ़ाइल का एक्सटेंशन बदलते हैं, तो हो सकता है कि फ़ाइल अलग ऐप्लिकेशन में खुले. इससे आपके डिवाइस को नुकसान पहुंच सकता है.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">वह पासवर्ड नहीं मिला. अपनी वर्तनी की जांच करें और फिर से कोशिश करें.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> से भेजा गया</translation>
 <translation id="130581733275749598">अपनी हाइलाइट के लिए टेंप्लेट चुनें</translation>
-<translation id="1307205233980126133">माफ़ करें, हम आपके क्रेडेंशियल की पुष्टि नहीं कर सके</translation>
 <translation id="1310482092992808703">टैब को समूह में लगाएं</translation>
 <translation id="1311657260431405215">यह क्यूआर कोड, यूआरएल नहीं है: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">सुरक्षा जांच</translation>
 <translation id="5556459405103347317">फिर लोड करें</translation>
 <translation id="5561549206367097665">नेटवर्क का इंतज़ार किया जा रहा है…</translation>
+<translation id="5568069709869097550">साइन इन नहीं किया जा सकता</translation>
 <translation id="55737423895878184">स्थान और सूचनाओं की अनुमति है</translation>
 <translation id="5578795271662203820">इस इमेज के लिए <ph name="SEARCH_ENGINE" /> पर खोजें</translation>
 <translation id="5581519193887989363">आप जब चाहें तब <ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> में जाकर किसी भी चीज़ को सिंक करने का विकल्प चुन सकते हैं.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index 60e400f..9fa40c7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Isključi</translation>
 <translation id="1036727731225946849">Dodavanje stavke <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Izbrisati i podatke s ovih web-lokacija?</translation>
-<translation id="1047303875618851375">Chrome nije uspio potvrditi vaše podatke</translation>
 <translation id="1049743911850919806">Anonimno</translation>
 <translation id="10614374240317010">Zaporke se nikad ne spremaju</translation>
 <translation id="107147699690128016">Ako promijenite datotečni nastavak, datoteka bi se mogla otvoriti u nekoj drugoj aplikaciji i mogla bi izložiti vaš uređaj opasnosti.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ta zaporka nije pronađena. Provjerite jeste li je točno napisali pa pokušajte ponovno.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – poslano s uređaja <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Odaberite predložak za isticanje</translation>
-<translation id="1307205233980126133">Nažalost nismo uspjeli potvrditi vaše vjerodajnice</translation>
 <translation id="1310482092992808703">Grupiraj kartice</translation>
 <translation id="1311657260431405215">Taj QR kôd nije URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Sigurnosna provjera</translation>
 <translation id="5556459405103347317">Ponovno učitaj</translation>
 <translation id="5561549206367097665">Čekanje na mrežu…</translation>
+<translation id="5568069709869097550">Ne mogu se prijaviti</translation>
 <translation id="55737423895878184">Lokacija i obavijesti su dopuštene</translation>
 <translation id="5578795271662203820">Potraži sliku na usluzi <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Uvijek možete odabrati u <ph name="BEGIN_LINK1" />postavkama<ph name="END_LINK1" /> što će se sinkronizirati.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index aabfeb0e..fcb415e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Kikapcsolás</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> hozzáadása…</translation>
 <translation id="1045899828449635435">Törli az e webhelyekről származó adatokat is?</translation>
-<translation id="1047303875618851375">A Chrome nem tudta ellenőrizni az Ön adatait</translation>
 <translation id="1049743911850919806">Inkognitó mód</translation>
 <translation id="10614374240317010">Az alábbi oldalakról soha ne mentsen jelszavakat</translation>
 <translation id="107147699690128016">Ha módosítja a fájl kiterjesztését, előfordulhat, hogy a fájlt másik alkalmazás nyitja meg, ami veszélyt jelenthet az eszközre.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ez a jelszó nem található. Ellenőrizze, hogy jól írta-e be.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – A(z) <ph name="DEVICE_NAME" /> eszközről</translation>
 <translation id="130581733275749598">Válasszon sablont a kiemeléshez</translation>
-<translation id="1307205233980126133">Sajnos nem sikerült érvényesíteni a hitelesítési adatait</translation>
 <translation id="1310482092992808703">Lapok csoportosítása</translation>
 <translation id="1311657260431405215">Ez a QR-kód nem URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Megosztás</translation>
 <translation id="2195339740518523951">Állítsa be a Chrome legerősebb védelmét</translation>
 <translation id="2200113223741723867">Használati adatok megosztásának kezelése</translation>
+<translation id="2218567645332692482">Minden navigációt HTTPS-re frissít, és figyelmezteti Önt a protokollt nem támogató webhelyek betöltése előtt</translation>
 <translation id="2227444325776770048">Folytatás mint <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Üres ablak</translation>
 <translation id="2239812875700136898">Hírek kezelése „A Discover beállításai” gombbal</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Biztonsági ellenőrzés</translation>
 <translation id="5556459405103347317">Újratöltés</translation>
 <translation id="5561549206367097665">Várakozás a hálózatra…</translation>
+<translation id="5568069709869097550">Nem sikerült a bejelentkezés</translation>
 <translation id="55737423895878184">Helyadatok és értesítések engedélyezve</translation>
 <translation id="5578795271662203820">A kép keresése a(z) <ph name="SEARCH_ENGINE" /> keresővel</translation>
 <translation id="5581519193887989363">A <ph name="BEGIN_LINK1" />beállítások<ph name="END_LINK1" /> között bármikor módosíthatja a szinkronizálni kívánt elemeket.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">függőben</translation>
 <translation id="8970887620466824814">Hiba történt.</translation>
 <translation id="8972098258593396643">Letölti az alapértelmezett mappába?</translation>
+<translation id="8987641763863173640">Videó-előnézeti beállítások kezelése</translation>
 <translation id="8988028529677883095">Telefon használata biztonsági kulcsként</translation>
 <translation id="8993760627012879038">Új lap megnyitása inkognitó módban</translation>
 <translation id="8996847606757455498">Másik szolgáltató választása</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index cd8c1e138..2700618 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Անջատել</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" />-ն ավելացվում է...</translation>
 <translation id="1045899828449635435">Մաքրե՞լ այս տվյալները</translation>
-<translation id="1047303875618851375">Chrome-ին չհաջողվեց հաստատել ձեր տեղեկությունները</translation>
 <translation id="1049743911850919806">Ինկոգնիտո</translation>
 <translation id="10614374240317010">Կայքեր, որոնց համար գաղտնաբառերը երբեք չեն պահվում</translation>
 <translation id="107147699690128016">Եթե փոխեք ընդլայնումը, ֆայլը կարող է բացվել այլ հավելվածով և վնասել ձեր սարքը:</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Չհաջողվեց գտնել այդ գաղտնաբառը։ Ստուգեք ուղղագրությունը և նորից փորձեք։</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Ուղարկվել է <ph name="DEVICE_NAME" />-ից</translation>
 <translation id="130581733275749598">Ընտրեք ձևանմուշ ընդգծված տեքստի համար</translation>
-<translation id="1307205233980126133">Չհաջողվեց ստուգել ձեր տվյալները</translation>
 <translation id="1310482092992808703">Խմբավորել ներդիրները</translation>
 <translation id="1311657260431405215">Այս QR կոդը URL չէ՝ <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Անվտանգության ստուգում</translation>
 <translation id="5556459405103347317">Վերաբեռնել</translation>
 <translation id="5561549206367097665">Ցանցի որոնում…</translation>
+<translation id="5568069709869097550">Չհաջողվեց մուտք գործել</translation>
 <translation id="55737423895878184">Տեղորոշումն ու ծանուցումները թույլատրված են</translation>
 <translation id="5578795271662203820">Որոնել այս պատկերը <ph name="SEARCH_ENGINE" />-ում</translation>
 <translation id="5581519193887989363">Ցանկացած ժամանակ կարող եք անցնել <ph name="BEGIN_LINK1" />կարգավորումներ<ph name="END_LINK1" /> և ընտրել, թե ինչն եք ուզում համաժամացնել:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 24080d4..8df8eaa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Matikan</translation>
 <translation id="1036727731225946849">Menambahkan <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Hapus data dari situs ini juga?</translation>
-<translation id="1047303875618851375">Chrome tidak dapat memverifikasi informasi Anda</translation>
 <translation id="1049743911850919806">Samaran</translation>
 <translation id="10614374240317010">Jangan pernah disimpan</translation>
 <translation id="107147699690128016">Jika ekstensi file diubah, file dapat terbuka di aplikasi lain dan berpotensi membahayakan perangkat Anda.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Tidak dapat menemukan sandi tersebut. Periksa ejaan sandi dan coba lagi.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Dikirim dari <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Pilih template untuk sorotan Anda</translation>
-<translation id="1307205233980126133">Maaf, kami tidak dapat memvalidasi kredensial Anda</translation>
 <translation id="1310482092992808703">Kelompokkan tab</translation>
 <translation id="1311657260431405215">Kode QR ini bukan URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Pemeriksaan keamanan</translation>
 <translation id="5556459405103347317">Muat ulang</translation>
 <translation id="5561549206367097665">Menunggu jaringan…</translation>
+<translation id="5568069709869097550">Tidak dapat sign in</translation>
 <translation id="55737423895878184">Lokasi dan notifikasi diizinkan</translation>
 <translation id="5578795271662203820">Telusuri <ph name="SEARCH_ENGINE" /> untuk gambar ini</translation>
 <translation id="5581519193887989363">Anda dapat memilih konten apa yang akan disinkronkan di <ph name="BEGIN_LINK1" />setelan<ph name="END_LINK1" /> kapan saja.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
index 2b8a988..588d01d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Slökkva</translation>
 <translation id="1036727731225946849">Bætir við <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Hreinsa líka gögn af þessum svæðum?</translation>
-<translation id="1047303875618851375">Chrome gat ekki staðfest upplýsingarnar þínar</translation>
 <translation id="1049743911850919806">Fara huldu höfðu</translation>
 <translation id="10614374240317010">Aldrei vistað</translation>
 <translation id="107147699690128016">Ef þú breytir skráarendingunni gæti skráin opnast í öðru forriti og hugsanlega valdið skaða á tækinu.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Þetta aðgangsorð finnst ekki. Athugaðu stafsetninguna og reyndu aftur.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Sent úr <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Velja sniðmát fyrir áherslumerkingu</translation>
-<translation id="1307205233980126133">Ekki tókst að staðfesta skilríkin þín</translation>
 <translation id="1310482092992808703">Sameina flipa</translation>
 <translation id="1311657260431405215">Þessi QR-kóði er ekki vefslóð: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Deiling</translation>
 <translation id="2195339740518523951">Fá mesta öryggi Chrome</translation>
 <translation id="2200113223741723867">Stjórna deilingu notkunargagna</translation>
+<translation id="2218567645332692482">Uppfæra flettingar í HTTPS og vara þig við áður en vefsvæðum sem ekki styðja það er hlaðið</translation>
 <translation id="2227444325776770048">Halda áfram sem <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Tómur gluggi</translation>
 <translation id="2239812875700136898">Stjórnaðu fréttunum þínum með hnappinum Valkostir fyrir Tillögur</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Öryggisathugun</translation>
 <translation id="5556459405103347317">Endurhlaða</translation>
 <translation id="5561549206367097665">Bíður eftir neti…</translation>
+<translation id="5568069709869097550">Innskráning mistókst</translation>
 <translation id="55737423895878184">Staðsetning og tilkynningar eru leyfðar</translation>
 <translation id="5578795271662203820">Leita að þessari mynd á <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Þú getur alltaf valið hvað á að samstilla í <ph name="BEGIN_LINK1" />stillingunum<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">bíður</translation>
 <translation id="8970887620466824814">Eitthvað fór úrskeiðis.</translation>
 <translation id="8972098258593396643">Hlaða niður í sjálfgefna möppu?</translation>
+<translation id="8987641763863173640">Stjórna stillingum forskoðunar myndskeiða</translation>
 <translation id="8988028529677883095">Nota síma sem öryggislykil</translation>
 <translation id="8993760627012879038">Opna nýjan flipa í huliðsstillingu</translation>
 <translation id="8996847606757455498">Velja aðra veitu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index 0f8f4c0..769a6e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Disattiva</translation>
 <translation id="1036727731225946849">Aggiunta di <ph name="WEBAPK_NAME" /> in corso…</translation>
 <translation id="1045899828449635435">Vuoi cancellare anche i dati di questi siti?</translation>
-<translation id="1047303875618851375">Chrome non ha potuto verificare le tue informazioni</translation>
 <translation id="1049743911850919806">In incognito</translation>
 <translation id="10614374240317010">Mai salvate</translation>
 <translation id="107147699690128016">Se cambi l'estensione del file, il file potrebbe essere aperto in un'altra applicazione e costituire un pericolo per il dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Impossibile trovare quella password. Verifica di averla scritta correttamente e riprova.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Inviato da <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Seleziona un modello per i tuoi contenuti in evidenza</translation>
-<translation id="1307205233980126133">Spiacenti, impossibile convalidare le credenziali</translation>
 <translation id="1310482092992808703">Raggruppa schede</translation>
 <translation id="1311657260431405215">Questo codice QR non corrisponde a un URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Condivisione</translation>
 <translation id="2195339740518523951">Proteggiti con lo strumento di sicurezza più efficace di Chrome</translation>
 <translation id="2200113223741723867">Gestisci la condivisione dei dati sull'utilizzo</translation>
+<translation id="2218567645332692482">Esegue l'upgrade delle navigazioni all'estensione HTTPS e ti avvisa prima di caricare i siti che non la supportano</translation>
 <translation id="2227444325776770048">Continua come <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Finestra vuota</translation>
 <translation id="2239812875700136898">Controlla le notizie utilizzando il pulsante Opzioni per Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Controllo di sicurezza</translation>
 <translation id="5556459405103347317">Ricarica</translation>
 <translation id="5561549206367097665">In attesa della rete…</translation>
+<translation id="5568069709869097550">Non riesco a effettuare l'accesso</translation>
 <translation id="55737423895878184">La geolocalizzazione e le notifiche sono consentite</translation>
 <translation id="5578795271662203820">Cerca questa immagine su <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Puoi scegliere in qualsiasi momento i dati da sincronizzare nelle <ph name="BEGIN_LINK1" />impostazioni<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">in attesa</translation>
 <translation id="8970887620466824814">C'è stato un problema.</translation>
 <translation id="8972098258593396643">Scaricare nella cartella predefinita?</translation>
+<translation id="8987641763863173640">Gestisci le impostazioni di anteprima video</translation>
 <translation id="8988028529677883095">Utilizza il telefono come token di sicurezza</translation>
 <translation id="8993760627012879038">Apri nuova scheda in mod. di navigaz. in incognito</translation>
 <translation id="8996847606757455498">Scegli un altro fornitore</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index c2d136db..5ee5b0d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">כיבוי</translation>
 <translation id="1036727731225946849">הוספת <ph name="WEBAPK_NAME" /> מתבצעת...</translation>
 <translation id="1045899828449635435">למחוק נתונים גם מהאתרים האלה?</translation>
-<translation id="1047303875618851375">‏Chrome לא הצליח לאמת את הפרטים שלך</translation>
 <translation id="1049743911850919806">גלישה פרטית</translation>
 <translation id="10614374240317010">פריטים שאף פעם לא נשמרו</translation>
 <translation id="107147699690128016">שינוי של סיומת הקובץ עשוי לגרום לכך שהקובץ ייפתח באפליקציה אחרת. מצב זה עלול לסכן את המכשיר.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">לא ניתן למצוא את הסיסמה. יש לבדוק את האיות ולנסות שוב.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> — נשלחה מ-<ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">בחירת תבנית להדגשה</translation>
-<translation id="1307205233980126133">מצטערים, לא הצלחנו לאמת את פרטי הכניסה שלך</translation>
 <translation id="1310482092992808703">קיבוץ כרטיסיות</translation>
 <translation id="1311657260431405215">‏קוד ה-QR הזה אינו כתובת URL‏: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">בדיקת אבטחה</translation>
 <translation id="5556459405103347317">טעינה מחדש</translation>
 <translation id="5561549206367097665">בהמתנה לרשת…</translation>
+<translation id="5568069709869097550">אי אפשר להיכנס</translation>
 <translation id="55737423895878184">יש הרשאה לגישה אל המיקום ולהצגת הודעות</translation>
 <translation id="5578795271662203820">חיפוש התמונה הזו ב-<ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">אפשר לבחור מה לסנכרן בכל שלב דרך <ph name="BEGIN_LINK1" />ההגדרות<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index a11f2af..43863400 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">オフにする</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> を追加しています...</translation>
 <translation id="1045899828449635435">これらのサイトのデータも削除しますか?</translation>
-<translation id="1047303875618851375">Chrome でお客様の情報を確認できませんでした</translation>
 <translation id="1049743911850919806">シークレット モード</translation>
 <translation id="10614374240317010">常に保存しない</translation>
 <translation id="107147699690128016">ファイル拡張子を変更すると、ファイルが別のアプリケーションで開かれる可能性があり、場合によってはデバイスに損害が生じます。</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">お探しのパスワードが見つかりません。誤字や脱字がないかご確認のうえ、もう一度お試しください。</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> から送信</translation>
 <translation id="130581733275749598">ハイライト表示のテンプレートを選択します</translation>
-<translation id="1307205233980126133">認証情報を確認できませんでした</translation>
 <translation id="1310482092992808703">タブをグループ化</translation>
 <translation id="1311657260431405215">この QR コードは URL ではありません: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">安全確認</translation>
 <translation id="5556459405103347317">再読み込み</translation>
 <translation id="5561549206367097665">ネットワーク接続を待機しています…</translation>
+<translation id="5568069709869097550">ログインできない</translation>
 <translation id="55737423895878184">位置情報の使用と通知の送信が許可されています</translation>
 <translation id="5578795271662203820">この画像を <ph name="SEARCH_ENGINE" /> で検索</translation>
 <translation id="5581519193887989363">同期する項目はいつでも [<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />] で選択できます。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
index 0ae0a952..bd1e502 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">გამორთვა</translation>
 <translation id="1036727731225946849">მიმდინარეობს <ph name="WEBAPK_NAME" />-ის დამატება...</translation>
 <translation id="1045899828449635435">ამ საიტების მონაცემთა გასუფთავებაც გსურთ?</translation>
-<translation id="1047303875618851375">Chrome-მა ვერ დაადასტურა თქვენი ინფორმაცია</translation>
 <translation id="1049743911850919806">ინკოგნიტო</translation>
 <translation id="10614374240317010">არასოდეს შენახული</translation>
 <translation id="107147699690128016">ფაილის გაფართოების შეცვლის შემთხვევაში, ფაილი შეიძლება გაიხსნას სხვა აპლიკაციაში და პოტენციურად შეუქმნას საფრთხე თქვენს მოწყობილობას.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">ეს პაროლი ვერ მოიძებნა. შეამოწმეთ მართლწერა და ცადეთ ხელახლა.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> — გამოგზავნილია <ph name="DEVICE_NAME" />-დან</translation>
 <translation id="130581733275749598">აირჩიეთ შაბლონი მონიშნულისთვის</translation>
-<translation id="1307205233980126133">სამწუხაროდ, თქვენი ავტორიზაციის მონაცემები ვერ დადასტურდა</translation>
 <translation id="1310482092992808703">ჩანართების დაჯგუფება</translation>
 <translation id="1311657260431405215">ეს QR კოდი არ არის URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">უსაფრთხოების შემოწმება</translation>
 <translation id="5556459405103347317">ხელახლა ჩატვირთვა</translation>
 <translation id="5561549206367097665">ქსელის კავშირის მოლოდინში…</translation>
+<translation id="5568069709869097550">სისტემაში შესვლა ვერ მოხერხდა</translation>
 <translation id="55737423895878184">მდებარეობა და შეტყობინებები დაშვებულია</translation>
 <translation id="5578795271662203820">ამ გამოსახულების ძიება <ph name="SEARCH_ENGINE" />-ში</translation>
 <translation id="5581519193887989363"><ph name="BEGIN_LINK1" />პარამეტრებიდან<ph name="END_LINK1" /> ნებისმიერ დროს შეგიძლიათ აირჩიოთ, რისი სინქრონიზაცია გსურთ.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
index 3262b22..d6d9c4c6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Өшіру</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> енгізілуде…</translation>
 <translation id="1045899828449635435">Деректер өшірілсін бе?</translation>
-<translation id="1047303875618851375">Chrome сіздің ақпаратыңызды растай алмады.</translation>
 <translation id="1049743911850919806">Инкогнито</translation>
 <translation id="10614374240317010">Ешқашан сақталмайды</translation>
 <translation id="107147699690128016">Файл кеңейтімін өзгертсеңіз, файл басқа қолданбада ашылып, құрылғыны зақымдауы мүмкін.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ондай құпия сөзді табу мүмкін емес. Дұрыс жазылғанын тексеріп, қайта іздеп көріңіз.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – <ph name="DEVICE_NAME" /> құрылғысынан жіберілген.</translation>
 <translation id="130581733275749598">Бөлектеу үшін үлгіні таңдаңыз.</translation>
-<translation id="1307205233980126133">Өкінішке орай, тіркелу деректері тексерілмеді.</translation>
 <translation id="1310482092992808703">Қойындыларды топтау</translation>
 <translation id="1311657260431405215">Бұл QR коды URL мекенжайы емес: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Қауіпсіздік шарасы</translation>
 <translation id="5556459405103347317">Қайта жүктеу</translation>
 <translation id="5561549206367097665">Желімен байланыс күтілуде…</translation>
+<translation id="5568069709869097550">Кіру мүмкін емес</translation>
 <translation id="55737423895878184">Орынды анықтау қызметіне және хабарландыруларға рұқсат етілген</translation>
 <translation id="5578795271662203820">Бұл кескін үшін <ph name="SEARCH_ENGINE" /> іздеу</translation>
 <translation id="5581519193887989363">Синхрондалатын мазмұндарды <ph name="BEGIN_LINK1" />Параметрлер<ph name="END_LINK1" /> бөлімінде кез келген уақытта таңдай аласыз.</translation>
@@ -762,7 +761,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Барлық құқықтары қорғалған.</translation>
 <translation id="5810864297166300463">Интернетті пайдалану кезінде көмек алу</translation>
 <translation id="5814131985548525293">Бастау үшін осы жерге жазыңыз немесе микрофон белгішесін түртіңіз.</translation>
-<translation id="5814749351757353073">Өзіңізге ұнайтын сайттарды қадағалап жүріңіз</translation>
+<translation id="5814749351757353073">Өзіңізге ұнайтын сайттарды бақылап жүріңіз</translation>
 <translation id="583281660410589416">Белгісіз</translation>
 <translation id="5833984609253377421">Сілтемені бөлісу</translation>
 <translation id="5834764604050996579">QR кодын сканерлеу үшін Chrome-ға камера пайдалану рұқсатын беріңіз.</translation>
@@ -1334,7 +1333,7 @@
 <translation id="9219103736887031265">Кескіндер</translation>
 <translation id="926205370408745186">Digital Wellbeing функциясынан Chrome браузерін пайдалану деректерін өшіру</translation>
 <translation id="927968626442779827">Google Chrome браузерінде Lite режимін пайдаланыңыз.</translation>
-<translation id="928550791203542716"><ph name="SITE_NAME" /> сайтына жазылғансыз</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" /> сайтына жазылғансыз.</translation>
 <translation id="932327136139879170">Негізгі бет</translation>
 <translation id="938850635132480979">Қате: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Құпия фразаны енгізу</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index 318a4d8..58a8f1b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">បិទ</translation>
 <translation id="1036727731225946849">កំពុងបញ្ចូល <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">សម្អាតទិន្នន័យពីគេហទំព័រទាំងនេះផងដែរឬ?</translation>
-<translation id="1047303875618851375">Chrome មិនអាច​ផ្ទៀងផ្ទាត់​ព័ត៌មាន​របស់អ្នក​បានទេ</translation>
 <translation id="1049743911850919806">អនាមិក</translation>
 <translation id="10614374240317010">មិនដែលបានរក្សាទុក</translation>
 <translation id="107147699690128016">ប្រសិនបើអ្នក​ប្ដូរកន្ទុយ​ឯកសារ ឯកសារនេះ​អាចបើកនៅក្នុងកម្មវិធី​ផ្សេង និងអាចបង្កគ្រោះថ្នាក់ដល់​ឧបករណ៍​របស់អ្នក។</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">រកមិនឃើញពាក្យសម្ងាត់ទេ។ សូមពិនិត្យ​មើល​អក្ខរាវិរុទ្ធ​ រួចព្យាយាម​ម្ដង​ទៀត។</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />៖ បាន​ផ្ញើពី <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">ជ្រើសរើស​ទម្រង់គំរូ​សម្រាប់​ការរំលេច​របស់អ្នក</translation>
-<translation id="1307205233980126133">សូម​អភ័យទោស យើង​មិនអាចបញ្ជាក់ភាពត្រឹមត្រូវនៃ​ព័ត៌មានផ្ទៀងផ្ទាត់​របស់អ្នកបានទេ</translation>
 <translation id="1310482092992808703">ដាក់ផ្ទាំងជាក្រុម</translation>
 <translation id="1311657260431405215">កូដ QR នេះ​មិនមែនជា URL ទេ៖ <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">ការពិនិត្យ​សុវត្ថិភាព</translation>
 <translation id="5556459405103347317">ដំណើរការឡើងវិញ</translation>
 <translation id="5561549206367097665">កំពុង​រង់​ចាំ​បណ្ដាញ​…</translation>
+<translation id="5568069709869097550">មិនអាចចូលបានទេ</translation>
 <translation id="55737423895878184">ទីតាំង និង​ការជូន​ដំណឹង​ត្រូវ​បាន​អនុញ្ញាត</translation>
 <translation id="5578795271662203820">ស្វែងរក <ph name="SEARCH_ENGINE" /> សម្រាប់រូបភាពនេះ</translation>
 <translation id="5581519193887989363">អ្នកអាចជ្រើសរើស​អ្វីដែលត្រូវធ្វើសមកាលកម្ម​នៅក្នុង<ph name="BEGIN_LINK1" />ការកំណត់<ph name="END_LINK1" />បានជានិច្ច។</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index 05d0ab0..fe724a5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">ಆಫ್ ಮಾಡು</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ಅನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="1045899828449635435">ಈ ಸೈಟ್‌ನ ಡೇಟಾ ತೆರವುಗೊಳಿಸಬೇಕೇ?</translation>
-<translation id="1047303875618851375">Chrome ಗೆ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="1049743911850919806">ಅದೃಶ್ಯ</translation>
 <translation id="10614374240317010">ಉಳಿಸಿಯೇ ಇಲ್ಲ</translation>
 <translation id="107147699690128016">ಫೈಲ್ ವಿಸ್ತರಣೆಯನ್ನು ಬದಲಾಯಿಸಿದರೆ, ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಫೈಲ್‌ ಅನ್ನು ತೆರೆಯಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಹಾನಿಗೊಳಿಸಬಹುದು.</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">ಆ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಬರೆದಿರುವುದು ಸರಿ ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> ಸಾಧನದಿಂದ ಕಳುಹಿಸಲಾಗಿದೆ</translation>
 <translation id="130581733275749598">ನಿಮ್ಮ ಹೈಲೈಟ್‌ಗಾಗಿ ಟೆಂಪ್ಲೇಟ್‌‌ ಆಯ್ಕೆಮಾಡಿ</translation>
-<translation id="1307205233980126133">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ರುಜುವಾತುಗಳನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="1310482092992808703">ಟ್ಯಾಬ್‌ ಗುಂಪುಗೂಡಿಸಿ</translation>
 <translation id="1311657260431405215">ಈ QR ಕೋಡ್ URL ಅಲ್ಲ: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -707,6 +705,7 @@
 <translation id="5548606607480005320">ಸುರಕ್ಷತೆಯ ಪರಿಶೀಲನೆ</translation>
 <translation id="5556459405103347317">ಮರುಲೋಡ್‌</translation>
 <translation id="5561549206367097665">ನೆಟ್‌ವರ್ಕ್‌ಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ…</translation>
+<translation id="5568069709869097550">ಸೈನ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="55737423895878184">ಸ್ಥಳ ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation>
 <translation id="5578795271662203820">ಈ ಚಿತ್ರಕ್ಕಾಗಿ <ph name="SEARCH_ENGINE" /> ನಲ್ಲಿ ಹುಡುಕಾಡಿ</translation>
 <translation id="5581519193887989363">ನೀವು ಏನನ್ನು ಸಿಂಕ್ ಮಾಡಬೇಕು ಎಂಬುದನ್ನು <ph name="BEGIN_LINK1" />ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK1" /> ಯಾವಾಗ ಬೇಕಾದರೂ ಆರಿಸಿಕೊಳ್ಳಬಹುದು.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index 7eb6b4c5..3427876 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">사용 중지</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> 추가 중...</translation>
 <translation id="1045899828449635435">아래 사이트의 데이터도 삭제하시겠습니까?</translation>
-<translation id="1047303875618851375">Chrome에서 정보를 확인할 수 없습니다.</translation>
 <translation id="1049743911850919806">시크릿</translation>
 <translation id="10614374240317010">저장하지 않음</translation>
 <translation id="107147699690128016">파일 확장자를 변경하면 파일이 다른 애플리케이션에서 열리고 기기가 위험에 노출될 수도 있습니다.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">비밀번호를 찾을 수 없습니다. 철자를 확인하고 다시 시도해 주세요.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />에서 전송</translation>
 <translation id="130581733275749598">강조표시에 사용할 템플릿 선택</translation>
-<translation id="1307205233980126133">죄송합니다. 사용자 인증 정보의 유효성을 검사할 수 없습니다.</translation>
 <translation id="1310482092992808703">탭 그룹화</translation>
 <translation id="1311657260431405215">이 QR 코드(<ph name="QRCODEVALUE" />)는 URL이 아닙니다.</translation>
 <translation id="1316212908214730110">Chrome_스타일_지정된_하이라이트_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">안전 확인</translation>
 <translation id="5556459405103347317">새로고침</translation>
 <translation id="5561549206367097665">네트워크 대기 중…</translation>
+<translation id="5568069709869097550">로그인할 수 없음</translation>
 <translation id="55737423895878184">위치 및 알림이 허용되었습니다</translation>
 <translation id="5578795271662203820"><ph name="SEARCH_ENGINE" />에서 이 이미지 검색</translation>
 <translation id="5581519193887989363">언제든지 <ph name="BEGIN_LINK1" />설정<ph name="END_LINK1" />에서 동기화할 항목을 선택할 수 있습니다.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
index f2219fb..4bfb0b4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Өчүрүү</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> кошулууда…</translation>
 <translation id="1045899828449635435">Маалымат бул сайттардан да өчүрүлсүнбү?</translation>
-<translation id="1047303875618851375">Chrome маалыматыңызды текшере алган жок</translation>
 <translation id="1049743911850919806">Жашыруун</translation>
 <translation id="10614374240317010">Эч качан сакталбайт</translation>
 <translation id="107147699690128016">Файлдын кеңейтүүсүн өзгөртсөңүз, ал башка колдонмодо ачылып, түзмөгүңүзгө зыян келтириши мүмкүн.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ал сырсөз табылган жок. Анын туура терилгенин текшерип, кайталап көрүңүз.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – <ph name="DEVICE_NAME" /> түзмөгүнөн жөнөтүлдү</translation>
 <translation id="130581733275749598">Кызыктуу көз ирмемдер үчүн үлгү тандаңыз</translation>
-<translation id="1307205233980126133">Кечиресиз, эсептик дайындар ырасталган жок</translation>
 <translation id="1310482092992808703">Өтмөктөрдү топтоо</translation>
 <translation id="1311657260431405215">Бул QR коду URL эмес: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Бөлүшүү</translation>
 <translation id="2195339740518523951">Chrome'дун эң күчтүү коопсуздук тутумун колдонуңуз</translation>
 <translation id="2200113223741723867">Колдонуу статистикасын бөлүшүүнү башкаруу</translation>
+<translation id="2218567645332692482">Өтүү аракеттери HTTPS'ке чейин жаңыртылып, алар колдоого алынбаган сайттарды жүктөөдөн мурда эскертилет</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> катары улантуу</translation>
 <translation id="2230777942707397948">Бош терезе</translation>
 <translation id="2239812875700136898">Сунуштардын параметрлери баскычынан окуяларыңызды башкарыңыз</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Коопсуздукту текшерүү</translation>
 <translation id="5556459405103347317">Кайра жүктөө</translation>
 <translation id="5561549206367097665">Тармак күтүлүүдө…</translation>
+<translation id="5568069709869097550">Аккаунтка кирбей жатат</translation>
 <translation id="55737423895878184">Жайгашкан жерди аныктоого жана эскертмелерге уруксат берилди</translation>
 <translation id="5578795271662203820"><ph name="SEARCH_ENGINE" /> бул сүрөттү издөө</translation>
 <translation id="5581519193887989363">Эмнени шайкештирүү керек экенин <ph name="BEGIN_LINK1" />жөндөөлөрдөн<ph name="END_LINK1" /> ар дайым тандай аласыз.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">күтүүдө</translation>
 <translation id="8970887620466824814">Бир жерден ката кетти.</translation>
 <translation id="8972098258593396643">Демейки папкага жүктөлүп алынсынбы?</translation>
+<translation id="8987641763863173640">Видеону алдын ала көрүү жөндөөлөрүн башкарасыз</translation>
 <translation id="8988028529677883095">Телефонду Коопсуздук ачкычы катары колдонуу</translation>
 <translation id="8993760627012879038">Жаңы өтмөктү жашыруун режимде ачуу</translation>
 <translation id="8996847606757455498">Башка провайдерди тандоо</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 0a29572..c53591c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">ປິດ</translation>
 <translation id="1036727731225946849">ກຳລັງເພີ່ມ <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">ລຶບຂໍ້ມູນອອກຈາກເວັບໄຊເຫຼົ່ານີ້ນຳບໍ?</translation>
-<translation id="1047303875618851375">Chrome ບໍ່ສາມາດຢັ້ງຢືນຂໍ້ມູນຂອງທ່ານໄດ້</translation>
 <translation id="1049743911850919806">ບໍ່​ເຜີຍ​ຕົວຕົນ</translation>
 <translation id="10614374240317010">ຢ່າ​ບັນທຶກ</translation>
 <translation id="107147699690128016">ຖ້າທ່ານປ່ຽນແປງນາມສະກຸນໄຟລ໌, ໄຟລ໌ອາດຈະເປີດໃນແອັບພລິເຄຊັນອື່ນ ແລະ ເປັນໄປໄດ້ວ່າອາດຈະເປັນອັນຕະລາຍຕໍ່ກັບອຸປະກອນຂອງທ່ານ.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">ບໍ່ສາມາດຊອກເຫັນລະຫັດຜ່ານນັ້ນ. ກະລຸນາກວດການສະກົດຄຳຂອງທ່ານ ແລ້ວລອງໃໝ່.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ສົ່ງມາຈາກ <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">ເລືອກແມ່ແບບສຳລັບໄຮໄລ້ຂອງທ່ານ</translation>
-<translation id="1307205233980126133">ຂໍອະໄພ, ພວກເຮົາບໍ່ສາມາດຮັບຮອງຄວາມຖືກຕ້ອງຂອງຂໍ້ມູນປະຈຳຕົວຂອງທ່ານໄດ້</translation>
 <translation id="1310482092992808703">ຈັດກຸ່ມແຖບ</translation>
 <translation id="1311657260431405215">ລະຫັດ QR ນີ້ບໍ່ແມ່ນ URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">ການແບ່ງປັນ</translation>
 <translation id="2195339740518523951">ຮັບຄວາມປອດໄພທີ່ແຂງແກ່ນທີ່ສຸດຂອງ Chrome</translation>
 <translation id="2200113223741723867">ຈັດການການແບ່ງປັນຂໍ້ມູນການນຳໃຊ້</translation>
+<translation id="2218567645332692482">ອັບເກຣດການນຳທາງເປັນ HTTPS ແລະ ເຕືອນທ່ານກ່ອນການໂຫຼດເວັບໄຊທີ່ບໍ່ຮອງຮັບມັນ</translation>
 <translation id="2227444325776770048">ສືບຕໍ່ໃຊ້ໃນຊື່ <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">ໜ້າຈໍຫວ່າງເປົ່າ</translation>
 <translation id="2239812875700136898">ຄວບຄຸມເລື່ອງລາວຂອງທ່ານຈາກປຸ່ມຕົວເລືອກສຳລັບ Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">ການກວດສອບຄວາມປອດໄພ</translation>
 <translation id="5556459405103347317">ໂຫຼດຄືນໃໝ່</translation>
 <translation id="5561549206367097665">ກຳລັງລໍຖ້າເຄືອຂ່າຍ...</translation>
+<translation id="5568069709869097550">ບໍ່ສາມາດເຂົ້າສູ່ລະບົບໄດ້</translation>
 <translation id="55737423895878184">ອະນຸຍາດການແຈ້ງເຕືອນ ແລະ ສະຖານທີ່</translation>
 <translation id="5578795271662203820">ຄົ້ນ​ຫາ <ph name="SEARCH_ENGINE" /> ​ຮູບ​ນີ້</translation>
 <translation id="5581519193887989363">ທ່ານສາມາດເລືອກສິ່ງທີ່ຈະຊິ້ງຂໍ້ມູນໄດ້ໃນ <ph name="BEGIN_LINK1" />ການຕັ້ງຄ່າ<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">ຄ້າງຢູ່</translation>
 <translation id="8970887620466824814">ມີບາງຢ່າງຜິດພາດ.</translation>
 <translation id="8972098258593396643">ດາວໂຫຼດໃສ່ໂຟນເດີເລີ່ມຕົ້ນບໍ?</translation>
+<translation id="8987641763863173640">ຈັດການການຕັ້ງຄ່າຕົວຢ່າງວິດີໂອ</translation>
 <translation id="8988028529677883095">ໃຊ້ໂທລະສັບເປັນກະແຈຄວາມປອດໄພ</translation>
 <translation id="8993760627012879038">ເປີດແຖບໃໝ່ໃນໂໝດ Incognito</translation>
 <translation id="8996847606757455498">ເລືອກຜູ້ໃຫ້ບໍລິການອື່ນ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index ee10a13..dd0b01d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Išjungti</translation>
 <translation id="1036727731225946849">Pridedamas APK „<ph name="WEBAPK_NAME" />“...</translation>
 <translation id="1045899828449635435">Taip pat išvalyti duomenis iš šių svetainių?</translation>
-<translation id="1047303875618851375">„Chrome“ nepavyko patvirtinti jūsų informacijos</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Niekada neišsaugota</translation>
 <translation id="107147699690128016">Jei pakeisite failo plėtinį, failas gali būti atidaromas naudojant kitą programą ir galimai pakenkti įrenginiui.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Nepavyko rasti šio slaptažodžio. Patikrinkite rašybą ir bandykite dar kartą.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – išsiųsta iš „<ph name="DEVICE_NAME" />“</translation>
 <translation id="130581733275749598">Pasirinkite paryškinimo šabloną</translation>
-<translation id="1307205233980126133">Deja, nepavyko patvirtinti jūsų prisijungimo duomenų</translation>
 <translation id="1310482092992808703">Grupuoti skirtukus</translation>
 <translation id="1311657260431405215">Šis QR kodas nėra URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Saugos patikra</translation>
 <translation id="5556459405103347317">Įkelti iš naujo</translation>
 <translation id="5561549206367097665">Laukiama tinklo…</translation>
+<translation id="5568069709869097550">Nepavyksta prisijungti</translation>
 <translation id="55737423895878184">Vieta ir pranešimai leidžiami</translation>
 <translation id="5578795271662203820">Ieškoti „<ph name="SEARCH_ENGINE" />“ šio vaizdo</translation>
 <translation id="5581519193887989363">Bet kada galite pasirinkti, ką norite sinchronizuoti, skiltyje <ph name="BEGIN_LINK1" />„Nustatymai“<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
index c5558b9..648c0d0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Izslēgt</translation>
 <translation id="1036727731225946849">Tiek pievienots <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Vai dzēst arī šo vietņu datus?</translation>
-<translation id="1047303875618851375">Pārlūkā Chrome nevarēja verificēt jūsu informāciju</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Netiek saglabātas</translation>
 <translation id="107147699690128016">Ja mainīsiet faila paplašinājumu, fails var tikt atvērts citā lietojumprogrammā un potenciāli apdraudēt jūsu ierīci.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Nevar atrast meklēto paroli. Pārbaudiet pareizrakstību un mēģiniet vēlreiz.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> — nosūtīts no ierīces <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Atlasiet veidni izceltajam tekstam</translation>
-<translation id="1307205233980126133">Diemžēl nevarēja apstiprināt jūsu akreditācijas datus.</translation>
 <translation id="1310482092992808703">Grupēt cilnes</translation>
 <translation id="1311657260431405215">Šis ātrās atbildes kods nav URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Drošības pārbaude</translation>
 <translation id="5556459405103347317">Pārlādēt</translation>
 <translation id="5561549206367097665">Tiek gaidīts savienojums ar tīklu…</translation>
+<translation id="5568069709869097550">Nevarat pieteikties</translation>
 <translation id="55737423895878184">Atrašanās vietas noteikšana un paziņojumi ir atļauti.</translation>
 <translation id="5578795271662203820">Meklēt šo attēlu ar <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Jūs jebkurā laikā <ph name="BEGIN_LINK1" />iestatījumos<ph name="END_LINK1" /> varat izvēlēties, ko sinhronizēt.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 3dec7e4..7bb0e79 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Исклучи</translation>
 <translation id="1036727731225946849">Се додава <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Да се избришат податоците и од сајтовиве?</translation>
-<translation id="1047303875618851375">Chrome не може да ги потврди вашите податоци</translation>
 <translation id="1049743911850919806">Инкогнито</translation>
 <translation id="10614374240317010">Никогаш не е зачувано</translation>
 <translation id="107147699690128016">Ако ја промените наставката на датотеката, таа може да се отвори во друга апликација и да стане потенцијална опасност за вашиот уред.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Лозинката не може да се најде. Проверете дали ја внесувате правилно и обидете се повторно.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Испратено од <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Изберете шаблон за клучните точки</translation>
-<translation id="1307205233980126133">За жал, не можевме да ги потврдиме вашите акредитиви</translation>
 <translation id="1310482092992808703">Групирај картички</translation>
 <translation id="1311657260431405215">Овој QR-код не е URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Безбедносна проверка</translation>
 <translation id="5556459405103347317">Повторно вчитај</translation>
 <translation id="5561549206367097665">Се чека мрежа…</translation>
+<translation id="5568069709869097550">Не може да се најавите</translation>
 <translation id="55737423895878184">Локацијата и известувањата се дозволени</translation>
 <translation id="5578795271662203820">Пребарај во <ph name="SEARCH_ENGINE" /> за сликава</translation>
 <translation id="5581519193887989363">Секогаш може да изберете што да синхронизирате во <ph name="BEGIN_LINK1" />Поставки<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
index 059b0f8..f05b73b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">ഓഫാക്കുക</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ചേർക്കുന്നു...</translation>
 <translation id="1045899828449635435">ഇവയിലെ ഡാറ്റയും മായ്ക്കണോ?</translation>
-<translation id="1047303875618851375">Chrome-ന് നിങ്ങളുടെ വിവരങ്ങൾ പരിശോധിച്ചുറപ്പിക്കാനായില്ല</translation>
 <translation id="1049743911850919806">ആള്‍‌മാറാട്ടം</translation>
 <translation id="10614374240317010">ഒരിക്കലും സംരക്ഷിച്ചില്ല</translation>
 <translation id="107147699690128016">ഫയൽ എക്സ്റ്റൻഷൻ മാറ്റിയാൽ, ഫയൽ വ്യത്യസ്ത ആപ്പിൽ തുറന്നേക്കാം, ഒപ്പം അത് നിങ്ങളുടെ ഉപകരണത്തിന് ദോഷകരമാവാൻ സാധ്യതയുണ്ട്.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">പാസ്‌വേഡ് കണ്ടെത്താനായില്ല. അക്ഷരത്തെറ്റ് പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />-ൽ നിന്ന് അയച്ചത്</translation>
 <translation id="130581733275749598">നിങ്ങളുടെ ഹെെലെെറ്റിനുള്ള ടെംപ്ലേറ്റ് തിരഞ്ഞെടുക്കുക</translation>
-<translation id="1307205233980126133">ക്ഷമിക്കണം, നിങ്ങളുടെ ക്രെഡൻഷ്യലുകൾ സാധൂകരിക്കാൻ ഞങ്ങൾക്കായില്ല</translation>
 <translation id="1310482092992808703">ടാബുകൾ ഗ്രൂപ്പ് ചെയ്യൂ</translation>
 <translation id="1311657260431405215">ഈ QR കോഡ് ഒരു URL അല്ല: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">പങ്കിടൽ</translation>
 <translation id="2195339740518523951">Chrome-ന്റെ ഏറ്റവും ശക്‌തമായ സുരക്ഷ നേടുക</translation>
 <translation id="2200113223741723867">ഉപയോഗ ഡാറ്റ പങ്കിടൽ മാനേജ് ചെയ്യുക</translation>
+<translation id="2218567645332692482">നാവിഗേഷനുകൾ HTTPS-ലേക്ക് അപ്ഗ്രേഡ് ചെയ്യുക, അതിനെ പിന്തുണയ്ക്കാത്ത സൈറ്റുകൾ ലോഡ് ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങൾക്ക് മുന്നറിയിപ്പ് ലഭിക്കും</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> എന്ന പേരിൽ തുടരുക</translation>
 <translation id="2230777942707397948">ശൂന്യമായ വിൻഡോ</translation>
 <translation id="2239812875700136898">'Discover-നുള്ള ഓപ്‌ഷനുകൾ' ബട്ടൺ അമർത്തി നിങ്ങളുടെ സ്‌റ്റോറികൾ നിയന്ത്രിക്കുക</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">സുരക്ഷാ പരിശോധന</translation>
 <translation id="5556459405103347317">വീണ്ടും ലോഡ് ചെയ്യുക</translation>
 <translation id="5561549206367097665">നെറ്റ്‌വർക്കിനായി കാത്തിരിക്കുന്നു...</translation>
+<translation id="5568069709869097550">സൈൻ ഇൻ ചെയ്യാനായില്ല</translation>
 <translation id="55737423895878184">ലൊക്കേഷനും അറിയിപ്പുകളും അനുവദിച്ചിരിക്കുന്നു</translation>
 <translation id="5578795271662203820">ഈ ചിത്രത്തിനായി <ph name="SEARCH_ENGINE" />-ൽ തിരയുക</translation>
 <translation id="5581519193887989363">എന്തൊക്കെ സമന്വയിക്കണമെന്നത് <ph name="BEGIN_LINK1" />ക്രമീകരണത്തിൽ<ph name="END_LINK1" /> നിങ്ങൾക്ക് എപ്പോഴും തിരഞ്ഞെടുക്കാം.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">തീർച്ചപ്പെടുത്താത്തവ</translation>
 <translation id="8970887620466824814">എന്തോ കുഴപ്പമുണ്ടായി.</translation>
 <translation id="8972098258593396643">ഡിഫോൾട്ട് ഫോൾഡറിലേക്ക് ഡൗൺലോഡ് ചെയ്യണോ?</translation>
+<translation id="8987641763863173640">വീഡിയോ പ്രിവ്യു ക്രമീകരണം മാനേജ് ചെയ്യുക</translation>
 <translation id="8988028529677883095">സുരക്ഷാ കീയായി ഫോൺ ഉപയോഗിക്കുക</translation>
 <translation id="8993760627012879038">അദൃശ്യ മോഡിൽ പുതിയൊരു വിൻഡോ തുറക്കുക</translation>
 <translation id="8996847606757455498">മറ്റൊരു ദാതാവിനെ തിരഞ്ഞെടുക്കുക</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
index 51d2d0e..56ea9a1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Унтраа</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" />-г нэмж байна...</translation>
 <translation id="1045899828449635435">Эдгээр сайтаас мөн өгөгдөл арилгах уу?</translation>
-<translation id="1047303875618851375">Chrome мэдээллийг тань баталгаажуулж чадсангүй</translation>
 <translation id="1049743911850919806">Нууцлал</translation>
 <translation id="10614374240317010">Огт хадгалагдаагүй байна</translation>
 <translation id="107147699690128016">Хэрэв та файлын өргөтгөлийг өөрчилбөл файлыг өөр хэрэглээний программ дээр нээж болох бөгөөд таны төхөөрөмжид аюултай байж болзошгүй.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Тийм нууц үг олж чадсангүй. Үсгийн алдаагаа шалгаад дахин оролдоно уу.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />-с илгээсэн</translation>
 <translation id="130581733275749598">Тодруулгадаа загвар сонгоно уу</translation>
-<translation id="1307205233980126133">Уучлаарай, бид таны мандат үнэмлэхийг баталж чадсангүй</translation>
 <translation id="1310482092992808703">Бүлэг таб</translation>
 <translation id="1311657260431405215">Энэ QR код бол URL биш: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -719,6 +717,7 @@
 <translation id="5548606607480005320">Аюулгүй байдлын шалгалт</translation>
 <translation id="5556459405103347317">Дахин ачаал</translation>
 <translation id="5561549206367097665">Сүлжээг хүлээж байна...</translation>
+<translation id="5568069709869097550">Нэвтрэх боломжгүй</translation>
 <translation id="55737423895878184">Байршил болон мэдэгдлийг зөвшөөрсөн</translation>
 <translation id="5578795271662203820">Энэ зургийг <ph name="SEARCH_ENGINE" />-ээс хайна уу</translation>
 <translation id="5581519193887989363">Та синк хийх зүйлээ хүссэн үедээ <ph name="BEGIN_LINK1" />тохиргооноос<ph name="END_LINK1" /> сонгож болно.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index 320049a..668ba2c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">बंद करा</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> जोडत आहे…</translation>
 <translation id="1045899828449635435">डेटासुद्धा साफ करायचा?</translation>
-<translation id="1047303875618851375">Chrome ला तुमच्या माहितीची पडताळणी करता आली नाही</translation>
 <translation id="1049743911850919806">गुप्त</translation>
 <translation id="10614374240317010">कधीही सेव्ह न केलेले</translation>
 <translation id="107147699690128016">तुम्ही फाइल एक्स्टेंशन बदलल्यास, फाइल कदाचित दुसऱ्या ॲप्लिकेशनमध्ये उघडू शकते आणि यामुळे तुमच्या डिव्हाइसला संभाव्य धोका असू शकतो.</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">तो पासवर्ड सापडत नाही. तुमचे शब्दलेखन तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> वरून पाठवले</translation>
 <translation id="130581733275749598">तुमच्या हायलाइटसाठी टेम्पलेट निवडा</translation>
-<translation id="1307205233980126133">सॉरी, आम्हाला तुमची क्रेडेंशियल पडताळता आली नाहीत</translation>
 <translation id="1310482092992808703">टॅबची गटामध्ये विभागणी करा</translation>
 <translation id="1311657260431405215">हा QR कोड म्हणजे URL नाही: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">सुरक्षा तपासणी</translation>
 <translation id="5556459405103347317">रीलोड करा</translation>
 <translation id="5561549206367097665">नेटवर्कची वाट पाहत आहे…</translation>
+<translation id="5568069709869097550">साइन इन करणे शक्य नाही</translation>
 <translation id="55737423895878184">स्‍थान आणि सूचनांना अनुमती आहे</translation>
 <translation id="5578795271662203820">या इमेजसाठी <ph name="SEARCH_ENGINE" /> शोधा</translation>
 <translation id="5581519193887989363">तुम्ही काय सिंक करायचे हे <ph name="BEGIN_LINK1" />सेटिंग्ज<ph name="END_LINK1" /> मध्ये कधीही निवडू शकता.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index aac16f5..1a8fe90 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Matikan</translation>
 <translation id="1036727731225946849">Menambahkan <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Kosongkan data?</translation>
-<translation id="1047303875618851375">Chrome tidak dapat mengesahkan maklumat anda</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Tidak pernah disimpan</translation>
 <translation id="107147699690128016">Jika anda menukar sambungan fail, fail itu mungkin akan dibuka dalam aplikasi lain dan berkemungkinan mendatangkan bahaya kepada peranti anda.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Tidak menemukan kata laluan itu. Semak ejaan anda dan cuba lagi.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Dihantar daripada <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Pilih templat untuk serlahan anda</translation>
-<translation id="1307205233980126133">Maaf, kami tidak dapat mengesahkan bukti kelayakan anda</translation>
 <translation id="1310482092992808703">Himpunkan tab.</translation>
 <translation id="1311657260431405215">Kod QR ini bukan URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">serlahan_digayakan_chrome_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Semakan keselamatan</translation>
 <translation id="5556459405103347317">Muat Semula</translation>
 <translation id="5561549206367097665">Menunggu rangkaian…</translation>
+<translation id="5568069709869097550">Tidak boleh log masuk</translation>
 <translation id="55737423895878184">Lokasi dan pemberitahuan dibenarkan</translation>
 <translation id="5578795271662203820">Cari imej ini di <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Anda boleh memilih item yang hendak disegerakkan dalam <ph name="BEGIN_LINK1" />tetapan<ph name="END_LINK1" /> pada bila-bila masa.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 2f229085..1372225 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">ပိတ်ရန်</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ကို ထည့်နေသည်...</translation>
 <translation id="1045899828449635435">ဒေတာများ ရှင်းထုတ်မလား။</translation>
-<translation id="1047303875618851375">Chrome က သင့်အချက်အလက်ကို မစိစစ်နိုင်ခဲ့ပါ</translation>
 <translation id="1049743911850919806">ရုပ်ဖျက်</translation>
 <translation id="10614374240317010">ဘယ်တော့မှ မသိမ်းဆည်းရန်</translation>
 <translation id="107147699690128016">ဖိုင်နောက်ဆက်တွဲကို ပြောင်းပါက ဖိုင်သည် အခြားအပလီကေးရှင်းတွင် ပွင့်သွားပြီး သင့်စက်အတွက် အန္တရာယ်ရှိနိုင်သည်။</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">ထိုစကားဝှက်ကို ရှာမတွေ့ပါ။ စာလုံးပေါင်းစစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> မှ ပို့ထားသည်</translation>
 <translation id="130581733275749598">သင်၏အထူးဖော်ပြုမှုအတွက် နမူနာ ပုံစံရွေးပါ</translation>
-<translation id="1307205233980126133">ဝမ်းနည်းပါသည်၊ သင့်အထောက်အထားများကို ကျွန်ုပ်တို့ အတည်ပြု၍မရပါ</translation>
 <translation id="1310482092992808703">တဘ်များကို အုပ်စုဖွဲ့ရန်</translation>
 <translation id="1311657260431405215">ဤ 'QR ကုဒ်' သည် URL မဟုတ်ပါ- <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">မျှဝေခြင်း</translation>
 <translation id="2195339740518523951">Chrome ၏ အခိုင်မာဆုံးလုံခြုံရေးကို ရယူခြင်း</translation>
 <translation id="2200113223741723867">သုံးစွဲမှုဒေတာ မျှဝေခြင်းကို စီမံရန်</translation>
+<translation id="2218567645332692482">HTTPS သို့ သွားရောက်မှုများကို အဆင့်မြှင့်ပြီး ၎င်းကို မပံ့ပိုးသောဝဘ်ဆိုက်များ မဖွင့်မီ သင့်အား သတိပေးသည်</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> အဖြစ် ရှေ့ဆက်ရန်</translation>
 <translation id="2230777942707397948">ဝင်းဒိုးအလွတ်</translation>
 <translation id="2239812875700136898">သင့်သတင်းဆောင်းပါးများကို 'Discover အတွက် ရွေးစရာများ' ခလုတ်မှ ထိန်းချုပ်ပါ</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">လုံခြုံရေး စစ်ဆေးမှု</translation>
 <translation id="5556459405103347317">ပြန်တင်ရန်</translation>
 <translation id="5561549206367097665">ကွန်ရက်ကို စောင့်နေသည်…</translation>
+<translation id="5568069709869097550">လက်မှတ်ထိုးဝင်၍ မရပါ။</translation>
 <translation id="55737423895878184">တည်နေရာနှင့် အကြောင်းကြားချက်များကို ခွင့်ပြုထားပါသည်</translation>
 <translation id="5578795271662203820"><ph name="SEARCH_ENGINE" /> က ဒီပုံအတွက် ရှာဖွေနေ</translation>
 <translation id="5581519193887989363">စင့်ခ်လုပ်မည့်အရာကို <ph name="BEGIN_LINK1" />ဆက်တင်များ<ph name="END_LINK1" />တွင် အချိန်မရွေး ရွေးချယ်နိုင်သည်။</translation>
@@ -1294,6 +1294,7 @@
 <translation id="8965591936373831584">ဆိုင်းငံ့ထားသည်</translation>
 <translation id="8970887620466824814">တစ်ခုခု မှားသွားပါသည်။</translation>
 <translation id="8972098258593396643">မူရင်းဖိုင်တွဲသို့ ဒေါင်းလုဒ်လုပ်လိုပါသလား။</translation>
+<translation id="8987641763863173640">ဗီဒီယိုအစမ်းကြည့်ရှုခြင်း ဆက်တင်များကို စီမံရန်</translation>
 <translation id="8988028529677883095">လုံခြုံရေးကီးအဖြစ် ဖုန်းကို အသုံးပြုရန်</translation>
 <translation id="8993760627012879038">တဘ်အသစ်ကို ရုပ်ဖျက်မုဒ်တွင် ဖွင့်ရန်</translation>
 <translation id="8996847606757455498">ဝန်ဆောင်မှုပေးသူ နောက်တစ်ခု ရွေးရန်</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index 8b126a529..5513330 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">निस्कृय पार्नुहोस्</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> थप्दै...</translation>
 <translation id="1045899828449635435">यी साइटहरूको डेटा पनि मेटाउने हो?</translation>
-<translation id="1047303875618851375">Chrome ले तपाईंको जानकारी पुष्टि गर्न सकेन</translation>
 <translation id="1049743911850919806">इन्कोग्निटो</translation>
 <translation id="10614374240317010">कहिले पनि बचत नगर्नुहोस्</translation>
 <translation id="107147699690128016">तपाईंले फाइलको एक्स्टेन्सन परिवर्तन गर्नुभयो भने यो फाइल कुनै अर्को एपमा खुल्न सक्छ जुन तपाईंको डिभाइसका लागि हानिकारक पनि हुन सक्छ।</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">उक्त पासवर्ड फेला पार्न सकिएन। आफ्नो हिज्जेको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> बाट पठाइएको</translation>
 <translation id="130581733275749598">आफूले हाइलाइट गरेको पाठका लागि टेम्प्लेट चयन गर्नुहोस्</translation>
-<translation id="1307205233980126133">माफ गर्नुहोस्, हामीले तपाईंका युजरनेम, पासवर्ड आदि पुष्टि गर्न सकेनौँ</translation>
 <translation id="1310482092992808703">ट्याबहरू समूहबद्ध गर्नुहोस्</translation>
 <translation id="1311657260431405215">यो QR कोड कुनै URL होइन: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -719,6 +717,7 @@
 <translation id="5548606607480005320">सुरक्षा जाँच</translation>
 <translation id="5556459405103347317">पुन: लोड गर्नुहोस्</translation>
 <translation id="5561549206367097665">नेटवर्कको प्रतीक्षा गर्दै…</translation>
+<translation id="5568069709869097550">साइन इन गर्न सक्दैन</translation>
 <translation id="55737423895878184">यस कार्यका लागि लोकेसन सर्भिस तथा सूचनाहरूलाई अनुमति छ</translation>
 <translation id="5578795271662203820">यस छविको लागि <ph name="SEARCH_ENGINE" /> खोज्नुहोस्</translation>
 <translation id="5581519193887989363">तपाईं जुनसुकै बेला <ph name="BEGIN_LINK1" />सेटिङहरू<ph name="END_LINK1" /> मा गई सिंक गर्ने कुरा छनौट गर्न सक्नुहुन्छ।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index b7633e98..5915f3d3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Uitzetten</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> toevoegen...</translation>
 <translation id="1045899828449635435">Ook gegevens van deze sites wissen?</translation>
-<translation id="1047303875618851375">Chrome kan je gegevens niet verifiëren</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Nooit opgeslagen</translation>
 <translation id="107147699690128016">Als je de bestandsextensie wijzigt, wordt het bestand mogelijk in een andere app geopend. Daardoor kan het een gevaar vormen voor je apparaat.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Kan dat wachtwoord niet vinden. Check de spelling en probeer het opnieuw.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: verzonden vanaf <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selecteer een template voor je markering</translation>
-<translation id="1307205233980126133">We kunnen je inloggegevens niet valideren</translation>
 <translation id="1310482092992808703">Tabbladen groeperen</translation>
 <translation id="1311657260431405215">Deze QR-code is geen URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Veiligheidscheck</translation>
 <translation id="5556459405103347317">Opnieuw laden</translation>
 <translation id="5561549206367097665">Wachten op netwerk…</translation>
+<translation id="5568069709869097550">Kan niet aanmelden</translation>
 <translation id="55737423895878184">Locatie en meldingen zijn toegestaan</translation>
 <translation id="5578795271662203820">Zoeken op <ph name="SEARCH_ENGINE" /> naar afbeelding</translation>
 <translation id="5581519193887989363">Je kunt altijd in de <ph name="BEGIN_LINK1" />instellingen<ph name="END_LINK1" /> bepalen wat je wilt synchroniseren.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index b1424ff..3f111ac 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Slå av</translation>
 <translation id="1036727731225946849">Legger til <ph name="WEBAPK_NAME" /> …</translation>
 <translation id="1045899828449635435">Vil du også slette data fra disse nettstedene?</translation>
-<translation id="1047303875618851375">Chrome kunne ikke verifisere informasjonen din</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Aldri lagret</translation>
 <translation id="107147699690128016">Hvis du endrer filetternavnet, kan filen bli åpnet i et annet program og muligens utgjøre en fare for enheten.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Finner ikke det passordet. Kontrollér stavemåten, og prøv på nytt.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – sendt fra <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Velg en mal for markeringen</translation>
-<translation id="1307205233980126133">Beklager, men vi kunne ikke validere legitimasjonen din</translation>
 <translation id="1310482092992808703">Gruppér faner</translation>
 <translation id="1311657260431405215">Denne QR-koden er ikke noen nettadresse: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Sikkerhetssjekk</translation>
 <translation id="5556459405103347317">Last inn på nytt</translation>
 <translation id="5561549206367097665">Venter på nettverket …</translation>
+<translation id="5568069709869097550">Kan ikke logge på</translation>
 <translation id="55737423895878184">Posisjon og varsler er tillatt</translation>
 <translation id="5578795271662203820">Søk etter dette bildet i <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Du kan når som helst velge hva du vil synkronisere, i <ph name="BEGIN_LINK1" />innstillingene<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index 15a7ee4..3b71fd2a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ଯୋଗ କରାଯାଉଛି...</translation>
 <translation id="1045899828449635435">ଏଇ ସାଇଟ ଡାଟା ବି କାଢ଼ିବେ?</translation>
-<translation id="1047303875618851375">Chrome ଆପଣଙ୍କ ସୂଚନା ଯାଞ୍ଚ କରିପାରିଲା ନାହିଁ</translation>
 <translation id="1049743911850919806">ଇନ୍‌କଗ୍ନିଟୋ</translation>
 <translation id="10614374240317010">ଆଦୌ ସେଭ୍‍ କରାଯାଇନାହିଁ</translation>
 <translation id="107147699690128016">ଯଦି ଆପଣ ଫାଇଲ୍‍ର ଏକ୍ସଟେନ୍‍ସନ୍ ବଦଳାନ୍ତି, ତେବେ ଫାଇଲ୍‍ଟି ଏକ ଭିନ୍ନ ଆପ୍ଲିକେସନ୍‍‍ରେ ଖୋଲିପାରେ ଏବଂ ଆପଣଙ୍କର ଡିଭାଇସ୍ ପାଇଁ ଏକ ସମ୍ଭାବ୍ୟ ବିପଦ ହୋଇପାରେ।</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">ସେହି ପାସୱାର୍ଡ ମିଳୁନାହିଁ। ଆପଣଙ୍କର ବନାନ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="1303507811548703290"><ph name="DEVICE_NAME" />ରୁ <ph name="DOMAIN" /> - ପଠାଯାଇଛି</translation>
 <translation id="130581733275749598">ଆପଣଙ୍କ ହାଇଲାଇଟ୍ ପାଇଁ ଏକ ଟେମ୍ପଲେଟ୍ ଚୟନ କରନ୍ତୁ</translation>
-<translation id="1307205233980126133">ଦୁଃଖିତ, ଆମେ ଆପଣଙ୍କ କ୍ରେଡେନସିଆଲଗୁଡ଼ିକୁ ବୈଧ କରିପାରିଲୁ ନାହିଁ</translation>
 <translation id="1310482092992808703">ଗୋଷ୍ଠୀ ଟାବ୍‌ଗୁଡ଼ିକ</translation>
 <translation id="1311657260431405215">ଏହି QR କୋଡ୍ ଗୋଟିଏ URL ନୁହେଁ: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">ସୁରକ୍ଷା ଯାଞ୍ଚ</translation>
 <translation id="5556459405103347317">ପୁନଃ ଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="5561549206367097665">ନେଟ୍‌ୱର୍କ ପାଇଁ ଅପେକ୍ଷାରତ…</translation>
+<translation id="5568069709869097550">ସାଇନ୍ ଇନ୍ କରିପାରିବ ନାହିଁ</translation>
 <translation id="55737423895878184">ଲୋକେସନ୍ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="5578795271662203820">ଏହି ଛବି ପାଇଁ <ph name="SEARCH_ENGINE" /> ସନ୍ଧାନ କରନ୍ତୁ</translation>
 <translation id="5581519193887989363"><ph name="BEGIN_LINK1" />ସେଟିଂସ୍<ph name="END_LINK1" />ରେ କ’ଣ ସିଙ୍କ୍ କରିବାକୁ ହେବ ତାହା ଆପଣ ସର୍ବଦା ବାଛି ପାରିବେ।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index 79ab094a..2b9e9d4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">ਬੰਦ ਕਰੋ</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation>
 <translation id="1045899828449635435">ਇਹਨਾਂ ਸਾਈਟਾਂ ਤੋਂ ਵੀ ਡਾਟਾ ਕਲੀਅਰ ਕਰਨਾ ਹੈ?</translation>
-<translation id="1047303875618851375">Chrome ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰ ਸਕਿਆ</translation>
 <translation id="1049743911850919806">ਗੁਮਨਾਮ</translation>
 <translation id="10614374240317010">ਕਦੇ ਵੀ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ</translation>
 <translation id="107147699690128016">ਜੇ ਤੁਸੀਂ ਫ਼ਾਈਲ ਐਕਸਟੈਂਸ਼ਨ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਫ਼ਾਈਲ ਸ਼ਾਇਦ ਕਿਸੇ ਵੱਖਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਖੁੱਲ੍ਹੇ ਅਤੇ ਸੰਭਾਵੀ ਤੌਰ 'ਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਨੁਕਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">ਇਹ ਪਾਸਵਰਡ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਆਪਣੇ ਸ਼ਬਦ-ਜੋੜਾਂ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> ਵੱਲੋਂ ਭੇਜੀ ਗਈ</translation>
 <translation id="130581733275749598">ਆਪਣੀ ਹਾਈਲਾਈਟ ਲਈ ਕੋਈ ਟੈਮਪਲੇਟ ਚੁਣੋ</translation>
-<translation id="1307205233980126133">ਮਾਫ਼ ਕਰਨਾ, ਅਸੀਂ ਤੁਹਾਡੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲਾਂ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਕਰ ਸਕੇ</translation>
 <translation id="1310482092992808703">ਟੈਬਾਂ ਦਾ ਗਰੁੱਪ ਬਣਾਓ</translation>
 <translation id="1311657260431405215">ਇਹ QR Code ਕੋਈ URL ਨਹੀਂ ਹੈ: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">ਸੁਰੱਖਿਆ ਜਾਂਚ</translation>
 <translation id="5556459405103347317">ਰੀਲੋਡ ਕਰੋ</translation>
 <translation id="5561549206367097665">ਨੈੱਟਵਰਕ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…</translation>
+<translation id="5568069709869097550">ਸਾਈਨ-ਇਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation>
 <translation id="55737423895878184">ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਅਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਇਆ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="5578795271662203820">ਇਸ ਚਿੱਤਰ ਲਈ <ph name="SEARCH_ENGINE" /> ਖੋਜੋ</translation>
 <translation id="5581519193887989363">ਤੁਸੀਂ <ph name="BEGIN_LINK1" />ਸੈਟਿੰਗਾਂ<ph name="END_LINK1" /> ਵਿੱਚ ਹਮੇਸ਼ਾਂ ਇਹ ਚੁਣ ਸਕਦੇ ਹੋ ਕਿ ਕਿਸਦਾ ਸਮਕਾਲੀਕਰਨ ਕਰਨਾ ਹੈ।</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index 76f2fba..18c57cf 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Wyłącz</translation>
 <translation id="1036727731225946849">Dodaję aplikację <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Wyczyścić też dane z tych stron?</translation>
-<translation id="1047303875618851375">Przeglądarce Chrome nie udało się zweryfikować Twoich danych</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Nigdy nie zapisane</translation>
 <translation id="107147699690128016">Jeśli zmienisz rozszerzenie pliku, będzie mogła go otworzyć inna aplikacja, co może nie być bezpieczne dla Twojego urządzenia.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Nie udało się znaleźć tego hasła. Sprawdź pisownię i spróbuj jeszcze raz.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – wysłane z: <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Wybierz szablon notatki</translation>
-<translation id="1307205233980126133">Nie udało się zweryfikować Twoich danych logowania</translation>
 <translation id="1310482092992808703">Grupuj karty</translation>
 <translation id="1311657260431405215">Ten kod QR nie jest adresem URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Udostępnianie</translation>
 <translation id="2195339740518523951">Korzystaj z najlepszych zabezpieczeń Chrome</translation>
 <translation id="2200113223741723867">Zarządzanie udostępnianiem danych o korzystaniu</translation>
+<translation id="2218567645332692482">Uaktualnij elementy nawigacyjne do protokołu HTTPS i wyświetlaj ostrzeżenia przed wczytaniem stron, które go nie obsługują</translation>
 <translation id="2227444325776770048">Kontynuuj jako <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Puste okno</translation>
 <translation id="2239812875700136898">Zarządzaj wyświetlanymi wiadomościami za pomocą opcji przycisku Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Kontrola zabezpieczeń</translation>
 <translation id="5556459405103347317">Odśwież</translation>
 <translation id="5561549206367097665">Czekam na sieć…</translation>
+<translation id="5568069709869097550">Nie można się zalogować</translation>
 <translation id="55737423895878184">Lokalizacja i powiadomienia są włączone</translation>
 <translation id="5578795271662203820">Szukaj tej grafiki w <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">W <ph name="BEGIN_LINK1" />ustawieniach<ph name="END_LINK1" /> możesz wybrać, co chcesz synchronizować.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">Oczekiwanie</translation>
 <translation id="8970887620466824814">Coś poszło nie tak.</translation>
 <translation id="8972098258593396643">Czy pobrać do folderu domyślnego?</translation>
+<translation id="8987641763863173640">Zarządzaj ustawieniami podglądu wideo</translation>
 <translation id="8988028529677883095">Używaj telefonu jako klucza bezpieczeństwa</translation>
 <translation id="8993760627012879038">Otwórz nową kartę w trybie incognito</translation>
 <translation id="8996847606757455498">Wybierz innego dostawcę</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index d939f738..f1910b8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desativar</translation>
 <translation id="1036727731225946849">Adicionando <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Limpar também dados desses sites?</translation>
-<translation id="1047303875618851375">Não foi possível verificar suas informações no Chrome</translation>
 <translation id="1049743911850919806">Modo anônimo</translation>
 <translation id="10614374240317010">Nunca salvas</translation>
 <translation id="107147699690128016">Se você mudar a extensão do arquivo, ele poderá ser aberto em um aplicativo diferente e colocar em risco seu dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Não foi possível encontrar essa senha. Verifique a ortografia e tente novamente.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: enviado de <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selecione um modelo para seu destaque</translation>
-<translation id="1307205233980126133">Não foi possível validar suas credenciais</translation>
 <translation id="1310482092992808703">Agrupar guias</translation>
 <translation id="1311657260431405215">Este código QR não é um URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">destaque_estilizado_do_chrome</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Compartilhamento</translation>
 <translation id="2195339740518523951">Usar o nível mais alto de segurança do Chrome</translation>
 <translation id="2200113223741723867">Gerenciar o compartilhamento de dados de uso</translation>
+<translation id="2218567645332692482">Fazer upgrade das navegações para HTTPS e enviar um aviso antes de carregar sites que não são compatíveis com esse protocolo</translation>
 <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Janela vazia</translation>
 <translation id="2239812875700136898">Controle suas matérias com o botão "Opções do Discover"</translation>
@@ -721,6 +720,7 @@
 <translation id="5548606607480005320">Confirmação de segurança</translation>
 <translation id="5556459405103347317">Recarregar</translation>
 <translation id="5561549206367097665">Aguardando a rede…</translation>
+<translation id="5568069709869097550">Não consigo acessar</translation>
 <translation id="55737423895878184">A localização e as notificações são permitidas</translation>
 <translation id="5578795271662203820">Pesquisar imagem no <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Nas <ph name="BEGIN_LINK1" />configurações<ph name="END_LINK1" />, é possível escolher a qualquer momento o que é sincronizado.</translation>
@@ -1296,6 +1296,7 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Algo deu errado.</translation>
 <translation id="8972098258593396643">Fazer o download para a pasta padrão?</translation>
+<translation id="8987641763863173640">Gerenciar configurações de prévia de vídeos</translation>
 <translation id="8988028529677883095">Usar o smartphone como chave de segurança</translation>
 <translation id="8993760627012879038">Abrir uma nova guia no modo de navegação anônima</translation>
 <translation id="8996847606757455498">Escolha outro provedor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index ff26de73..d5682d2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Desativar</translation>
 <translation id="1036727731225946849">A adicionar <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Limpar também dados destes sites?</translation>
-<translation id="1047303875618851375">O Chrome não conseguiu validar as suas informações.</translation>
 <translation id="1049743911850919806">Navegação anónima</translation>
 <translation id="10614374240317010">Nunca guardadas</translation>
 <translation id="107147699690128016">Se alterar a extensão do ficheiro, este pode ser aberto numa aplicação diferente e representar um risco para o seu dispositivo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Não é possível encontrar essa palavra-passe. Verifique a ortografia e tente novamente.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Enviado de <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selecione um modelo para o seu destaque</translation>
-<translation id="1307205233980126133">Lamentamos, mas não foi possível validar as suas credenciais.</translation>
 <translation id="1310482092992808703">Agrupar separadores</translation>
 <translation id="1311657260431405215">Este código QR não é um URL: <ph name="QRCODEVALUE" />.</translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Partilha</translation>
 <translation id="2195339740518523951">Obtenha a segurança mais avançada do Chrome</translation>
 <translation id="2200113223741723867">Efetue a gestão da partilha dos dados de utilização</translation>
+<translation id="2218567645332692482">Atualizar as navegações para HTTPS e avisar antes de carregar sites que não o suportam</translation>
 <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Janela vazia</translation>
 <translation id="2239812875700136898">Controle as notícias a partir do botão Opções para o Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Verificação de segurança</translation>
 <translation id="5556459405103347317">Recarregar</translation>
 <translation id="5561549206367097665">A aguardar pela rede...</translation>
+<translation id="5568069709869097550">Não é possível iniciar sessão</translation>
 <translation id="55737423895878184">A localização e as notificações são permitidas.</translation>
 <translation id="5578795271662203820">Pesquisar a imagem no <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Pode escolher o que pretende sincronizar nas <ph name="BEGIN_LINK1" />definições<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Ocorreu um erro.</translation>
 <translation id="8972098258593396643">Pretende transferir para a pasta predefinida?</translation>
+<translation id="8987641763863173640">Faça a gestão das definições de pré-visualização de vídeo</translation>
 <translation id="8988028529677883095">Utilizar o telemóvel como chave de segurança</translation>
 <translation id="8993760627012879038">Abrir novo separador no modo de navegação anónima</translation>
 <translation id="8996847606757455498">Escolher outro fornecedor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index 563226e..e583633 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Dezactivează</translation>
 <translation id="1036727731225946849">Se adaugă <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Ștergi și datele de la aceste site-uri?</translation>
-<translation id="1047303875618851375">Chrome nu a putut verifica informațiile</translation>
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="10614374240317010">Nu se salvează niciodată</translation>
 <translation id="107147699690128016">Dacă modifici extensia de fișier, fișierul poate să se deschidă în altă aplicație și să dăuneze dispozitivului.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Parola nu a fost găsită. Verifică dacă ai scris-o corect și încearcă din nou.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Trimis de la <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Selectează un șablon pentru evidențiere</translation>
-<translation id="1307205233980126133">Nu ți-am putut valida datele de conectare</translation>
 <translation id="1310482092992808703">Grupează file</translation>
 <translation id="1311657260431405215">Acest cod QR nu este o adresă URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">evidențiere_stilizată_chrome</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Verificare de siguranță</translation>
 <translation id="5556459405103347317">Reîncarcă</translation>
 <translation id="5561549206367097665">Se așteaptă rețeaua…</translation>
+<translation id="5568069709869097550">Nu se poate conecta</translation>
 <translation id="55737423895878184">Locația și notificările sunt permise</translation>
 <translation id="5578795271662203820">Caută imaginea cu <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Poți să alegi oricând ce să sincronizezi în <ph name="BEGIN_LINK1" />setări<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index 091f11cd..9a59135 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Отключить</translation>
 <translation id="1036727731225946849">Добавление файла "<ph name="WEBAPK_NAME" />"…</translation>
 <translation id="1045899828449635435">Удалить эти данные?</translation>
-<translation id="1047303875618851375">Браузеру Chrome не удалось проверить ваши данные.</translation>
 <translation id="1049743911850919806">Инкогнито</translation>
 <translation id="10614374240317010">Сайты, пароли для которых не сохраняются</translation>
 <translation id="107147699690128016">Если вы сделаете это, файл может открыться в другом приложении и нанести вред устройству.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Пароль не найден. Убедитесь, что он указан правильно, и повторите попытку.</translation>
 <translation id="1303507811548703290">Домен: <ph name="DOMAIN" />. Отправлено с устройства "<ph name="DEVICE_NAME" />".</translation>
 <translation id="130581733275749598">Выберите шаблон для выделенного текста</translation>
-<translation id="1307205233980126133">Не удалось проверить ваши учетные данные.</translation>
 <translation id="1310482092992808703">Сгруппировать вкладки</translation>
 <translation id="1311657260431405215">В этом QR-коде нет URL: <ph name="QRCODEVALUE" />.</translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Проверка безопасности</translation>
 <translation id="5556459405103347317">Перезагрузить</translation>
 <translation id="5561549206367097665">Поиск сети…</translation>
+<translation id="5568069709869097550">Не удается войти</translation>
 <translation id="55737423895878184">Может определять местоположение и отправлять уведомления</translation>
 <translation id="5578795271662203820">Найти это изображение в <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Вы всегда можете выбрать, что синхронизировать, в <ph name="BEGIN_LINK1" />настройках<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index 8bc8bef..9dfd2a4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">ක්‍රියා විරහිතය</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> එක් කරමින්...</translation>
 <translation id="1045899828449635435">මෙම අඩවිවලින් ද දත්ත හිස් කරන්න ද?</translation>
-<translation id="1047303875618851375">Chrome හට ඔබගේ තොරතුරු සත්‍යාපනය කළ නොහැකි විය</translation>
 <translation id="1049743911850919806">අප්‍රකට</translation>
 <translation id="10614374240317010">කිසිවිටෙක සුරැක නැත</translation>
 <translation id="107147699690128016">ඔබ ගොනු දිගුව වෙනස් කරන්නේ නම්, ගොනුව වෙනත් යෙදුමක විවෘත වීමටත් ඔබේ උපාංගයට හානියක් වීමටත් ඉඩ ඇත.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">එම මුරපදය සොයාගත නොහැක. ඔබේ අක්‍ෂර වින්‍යාසය පරීක්‍ෂා කර නැවත උත්සාහ කරන්න.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> වෙතින් යවන ලදි</translation>
 <translation id="130581733275749598">ඔබගේ උද්දීපනය සඳහා අච්චුවක් තෝරන්න</translation>
-<translation id="1307205233980126133">කනගාටුයි, අපට ඔබේ අක්තපත්‍ර වලංගු කළ නොහැකි විය</translation>
 <translation id="1310482092992808703">පටිති සමූහ කරන්න</translation>
 <translation id="1311657260431405215">මෙම QR කේතය URL එකක් නොවේ: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">බෙදා ගැනීම</translation>
 <translation id="2195339740518523951">Chrome හි ප්‍රබලම ආරක්ෂාව ලබා ගන්න</translation>
 <translation id="2200113223741723867">භාවිත දත්ත බෙදා ගැනීම කළමනාකරණය කරන්න</translation>
+<translation id="2218567645332692482">HTTPS වෙත සංචාලන උත්ශ්‍රේණි කර එයට සහාය නොදක්වන අඩවි පූරණය කිරීමට පෙර ඔබට අනතුරු අඟවන්න</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ලෙස දිගටම කර ගෙන යන්න</translation>
 <translation id="2230777942707397948">හිස් කවුළුව</translation>
 <translation id="2239812875700136898">Discover සඳහා විකල්ප බොත්තමෙන් ඔබේ කතා පාලන කරන්න</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">ආරක්‍ෂක පරීක්‍ෂාව</translation>
 <translation id="5556459405103347317">නැවත</translation>
 <translation id="5561549206367097665">ජාලය සඳහා රැඳෙමින්…</translation>
+<translation id="5568069709869097550">පුරනය විය නොහැක</translation>
 <translation id="55737423895878184">ස්ථානය සහ දැනුම්දීම්වලට ඉඩ දේ</translation>
 <translation id="5578795271662203820">මෙම රූපය සඳහා <ph name="SEARCH_ENGINE" /> සොයන්න</translation>
 <translation id="5581519193887989363">ඔබට සැමවිට <ph name="BEGIN_LINK1" />සැකසීම්<ph name="END_LINK1" /> තුළ සමමුහු කළ යුතු දෙය තෝරා ගත හැක.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">අපේක්‍ෂිත</translation>
 <translation id="8970887620466824814">යම් දෙයක් වැරදිණි</translation>
 <translation id="8972098258593396643">පෙරනිමි ෆෝල්ඩරයට බාන්නද?</translation>
+<translation id="8987641763863173640">වීඩියෝ පෙරදසුන් සැකසීම් කළමනාකරණය කරන්න</translation>
 <translation id="8988028529677883095">දුරකථනය ආරක්‍ෂක යතුරක් ලෙස භාවිත කරන්න</translation>
 <translation id="8993760627012879038">අප්‍රකට ප්‍රකාරය තුළ නව ටැබයක් විවෘත කරන්න</translation>
 <translation id="8996847606757455498">වෙනත් සැපයුම්කරුවකු තෝරන්න</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index d1c7588..d09d256 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Vypnúť</translation>
 <translation id="1036727731225946849">Pridáva sa <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Chcete vymazať dáta aj z týchto webov?</translation>
-<translation id="1047303875618851375">Chromu sa nepodarilo vaše informácie overiť</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Nikdy neukladať</translation>
 <translation id="107147699690128016">Ak zmeníte príponu súboru, súbor sa môže otvoriť v inej aplikácii a potenciálne ohroziť vaše zariadenie.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Dané heslo sa nepodarilo nájsť. Skontrolujte pravopis a skúste to znova.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – odoslané zo zariadenia <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Vyberte šablónu pre príslušný fakt</translation>
-<translation id="1307205233980126133">Ľutujeme, ale vaše prihlasovacie údaje sa nám nepodarilo overiť</translation>
 <translation id="1310482092992808703">Zoskupiť karty</translation>
 <translation id="1311657260431405215">Tento QR kód nie je webová adresa: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Zdieľanie</translation>
 <translation id="2195339740518523951">Získajte najsilnejšie zabezpečenie Chromu</translation>
 <translation id="2200113223741723867">Správa zdieľania údajov o používaní</translation>
+<translation id="2218567645332692482">Inovujte navigácie na protokol HTTPS a dostávajte upozornenia pred načítaním webov, ktoré ho nepodporujú</translation>
 <translation id="2227444325776770048">Pokračovať ako <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Prázdne okno</translation>
 <translation id="2239812875700136898">Ovládajte svoje príbehy po stlačení tlačidla Možnosti kanála Objaviť</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Kontrola bezpečnosti</translation>
 <translation id="5556459405103347317">Znova načítať</translation>
 <translation id="5561549206367097665">Čaká sa na sieť…</translation>
+<translation id="5568069709869097550">Nedá sa prihlásiť</translation>
 <translation id="55737423895878184">Poloha a upozornenia sú povolené</translation>
 <translation id="5578795271662203820">Hľadať obrázok v službe <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Položky, ktoré chcete synchronizovať, môžete vybrať v <ph name="BEGIN_LINK1" />nastaveniach<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">nespracované</translation>
 <translation id="8970887620466824814">Vyskytol sa problém.</translation>
 <translation id="8972098258593396643">Stiahnuť do predvoleného priečinka?</translation>
+<translation id="8987641763863173640">Spravujte nastavenia ukážok videa</translation>
 <translation id="8988028529677883095">Používať telefón ako bezpečnostný kľúč</translation>
 <translation id="8993760627012879038">Otvorenie novej karty v režime inkognito</translation>
 <translation id="8996847606757455498">Vybrať iného poskytovateľa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index 8c83ce7..791026e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Izklop</translation>
 <translation id="1036727731225946849">Dodajanje <ph name="WEBAPK_NAME" /> ...</translation>
 <translation id="1045899828449635435">Želite tudi izbrisati podatke s teh mest?</translation>
-<translation id="1047303875618851375">Chrome ni mogel preveriti vaših podatkov</translation>
 <translation id="1049743911850919806">Anonimni način</translation>
 <translation id="10614374240317010">Nikoli shranjeno</translation>
 <translation id="107147699690128016">Če spremenite pripono datoteke, se lahko datoteka odpre v drugem programu in je lahko morebitno škodljiva za vašo napravo.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Tega gesla ni mogoče najti. Preverite črkovanje in poskusite znova.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – poslano iz naprave <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Izberite predlogo za označitev</translation>
-<translation id="1307205233980126133">Poverilnic žal ni bilo mogoče preveriti</translation>
 <translation id="1310482092992808703">Združi zavihke</translation>
 <translation id="1311657260431405215">Ta koda QR ni URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Varnostno preverjanje</translation>
 <translation id="5556459405103347317">Znova naloži</translation>
 <translation id="5561549206367097665">Čakanje na omrežje …</translation>
+<translation id="5568069709869097550">Vpis ni mogoč</translation>
 <translation id="55737423895878184">Lokacija in obvestila so dovoljeni</translation>
 <translation id="5578795271662203820">Za iskanje te slike uporabi <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">V <ph name="BEGIN_LINK1" />nastavitvah<ph name="END_LINK1" /> lahko kadar koli izberete, kaj želite sinhronizirati.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index 1a6f8fd..ed2aec6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Çaktivizo</translation>
 <translation id="1036727731225946849">Po shton <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Të pastrohen edhe të dhënat nga këto sajte?</translation>
-<translation id="1047303875618851375">Chrome nuk mund ta verifikonte informacionin tënd</translation>
 <translation id="1049743911850919806">I fshehtë</translation>
 <translation id="10614374240317010">Nuk u ruaj asnjëherë</translation>
 <translation id="107147699690128016">Nëse e ndryshon prapashtesën e skedarit, skedari mund të hapet në një aplikacion tjetër dhe mund të jetë një rrezik për pajisjen tënde.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ai fjalëkalim nuk mund të gjendet. Kontrollo drejtshkrimin dhe provo përsëri.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Dërguar nga <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Zgjidh një shabllon për theksimin</translation>
-<translation id="1307205233980126133">Na vjen keq, por nuk mund t'i verifikonim kredencialet e tua</translation>
 <translation id="1310482092992808703">Grupo skedat</translation>
 <translation id="1311657260431405215">Ky kod QR nuk është URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Kontrolli i sigurisë</translation>
 <translation id="5556459405103347317">Ringarko</translation>
 <translation id="5561549206367097665">Në pritje të rrjetit…</translation>
+<translation id="5568069709869097550">Nuk mund të identifkohet</translation>
 <translation id="55737423895878184">Vendndodhja dhe njoftimet janë të lejuara</translation>
 <translation id="5578795271662203820">Kërko në <ph name="SEARCH_ENGINE" /> për këtë imazh</translation>
 <translation id="5581519193887989363">Mund të zgjedhësh gjithmonë se çfarë do të sinkronizosh te <ph name="BEGIN_LINK1" />cilësimet<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index ddb0336..729557aa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Isključi</translation>
 <translation id="1036727731225946849">Dodaje se <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Želite da obrišete podatke i za njih?</translation>
-<translation id="1047303875618851375">Chrome nije uspeo da potvrdi podatke</translation>
 <translation id="1049743911850919806">Bez arhiviranja</translation>
 <translation id="10614374240317010">Nikada se ne čuva</translation>
 <translation id="107147699690128016">Ako promenite ekstenziju datoteke, ona može da se otvori u drugoj aplikaciji i da bude opasna po uređaj.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Ne možemo da pronađemo tu lozinku. Proverite kako ste je napisali i probajte ponovo.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – poslato je sa uređaja <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Izaberite šablon za istaknutu stavku</translation>
-<translation id="1307205233980126133">Žao nam je, nismo uspeli da proverimo akreditive</translation>
 <translation id="1310482092992808703">Grupiši kartice</translation>
 <translation id="1311657260431405215">Ovaj QR kôd nije URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Bezbednosna provera</translation>
 <translation id="5556459405103347317">Učitaj ponovo</translation>
 <translation id="5561549206367097665">Čeka se mreža...</translation>
+<translation id="5568069709869097550">Ne mogu da se prijavim</translation>
 <translation id="55737423895878184">Lokacija i obaveštenja su dozvoljeni</translation>
 <translation id="5578795271662203820">Potraži ovu sliku na <ph name="SEARCH_ENGINE" />-u</translation>
 <translation id="5581519193887989363">Uvek možete da odaberete šta ćete sinhronizovati u <ph name="BEGIN_LINK1" />podešavanjima<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 66c4fdf..dceae67 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Искључи</translation>
 <translation id="1036727731225946849">Додаје се <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Желите да обришете податке и за њих?</translation>
-<translation id="1047303875618851375">Chrome није успео да потврди податке</translation>
 <translation id="1049743911850919806">Без архивирања</translation>
 <translation id="10614374240317010">Никада се не чува</translation>
 <translation id="107147699690128016">Ако промените екстензију датотеке, она може да се отвори у другој апликацији и да буде опасна по уређај.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Не можемо да пронађемо ту лозинку. Проверите како сте је написали и пробајте поново.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – послато је са уређаја <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Изаберите шаблон за истакнуту ставку</translation>
-<translation id="1307205233980126133">Жао нам је, нисмо успели да проверимо акредитиве</translation>
 <translation id="1310482092992808703">Групиши картице</translation>
 <translation id="1311657260431405215">Овај QR кôд није URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -721,6 +719,7 @@
 <translation id="5548606607480005320">Безбедносна провера</translation>
 <translation id="5556459405103347317">Учитај поново</translation>
 <translation id="5561549206367097665">Чека се мрежа...</translation>
+<translation id="5568069709869097550">Не могу да се пријавим</translation>
 <translation id="55737423895878184">Локација и обавештења су дозвољени</translation>
 <translation id="5578795271662203820">Потражи ову слику на <ph name="SEARCH_ENGINE" />-у</translation>
 <translation id="5581519193887989363">Увек можете да одаберете шта ћете синхронизовати у <ph name="BEGIN_LINK1" />подешавањима<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index a143b200..083ed62 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Inaktivera</translation>
 <translation id="1036727731225946849">Lägger till <ph name="WEBAPK_NAME" /> …</translation>
 <translation id="1045899828449635435">Vill du även rensa data?</translation>
-<translation id="1047303875618851375">Det gick inte att verifiera uppgifterna</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Aldrig sparad</translation>
 <translation id="107147699690128016">Om du ändrar filnamnstillägget kanske filen öppnas i ett annat program vilket kan utgöra en fara för enheten.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Det gick inte att hitta lösenordet. Kontrollera stavningen och försök igen.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Skickades från <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Välj en mall för markeringen</translation>
-<translation id="1307205233980126133">Vi kunde tyvärr inte validera dina användaruppgifter</translation>
 <translation id="1310482092992808703">Gruppera flikar</translation>
 <translation id="1311657260431405215">QR-koden är inte en webbadress: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Delar</translation>
 <translation id="2195339740518523951">Få det bästa skyddet i Chrome</translation>
 <translation id="2200113223741723867">Hantera delning av data om användning</translation>
+<translation id="2218567645332692482">Uppgradera anslutningar till HTTPS och visa en varning innan webbplatser som saknar stöd för HTTPS läses in</translation>
 <translation id="2227444325776770048">Fortsätt som <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Tomt fönster</translation>
 <translation id="2239812875700136898">Du kan styra artiklarna med knappen Alternativ för Förslag</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Säkerhetskontroll</translation>
 <translation id="5556459405103347317">Hämta igen</translation>
 <translation id="5561549206367097665">Väntar på nätverket …</translation>
+<translation id="5568069709869097550">Kan inte logga in</translation>
 <translation id="55737423895878184">Plats och aviseringar tillåts</translation>
 <translation id="5578795271662203820">Sök på <ph name="SEARCH_ENGINE" /> efter denna bild</translation>
 <translation id="5581519193887989363">Du kan alltid välja vad som ska synkroniseras i <ph name="BEGIN_LINK1" />inställningarna<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">väntar</translation>
 <translation id="8970887620466824814">Något gick fel.</translation>
 <translation id="8972098258593396643">Vill du ladda ned till standardmappen?</translation>
+<translation id="8987641763863173640">Hantera inställningar för förhandsgranskning av video</translation>
 <translation id="8988028529677883095">Använd telefonen som säkerhetsnyckel</translation>
 <translation id="8993760627012879038">Öppna en ny flik i inkognitoläge</translation>
 <translation id="8996847606757455498">Välj en annan leverantör</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index 24f12e58..5396c57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Zima</translation>
 <translation id="1036727731225946849">Inaongeza <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Utafuta data kwenye tovuti hizi?</translation>
-<translation id="1047303875618851375">Chrome imeshindwa kuthibitisha maelezo yako</translation>
 <translation id="1049743911850919806">Kichupo fiche</translation>
 <translation id="10614374240317010">Haijahifadhiwa kamwe</translation>
 <translation id="107147699690128016">Ukibadilisha kiendelezi cha faili, faili inaweza kufunguka katika programu tofauti na huenda ikawa hatari kwa kifaa chako.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Imeshindwa kupata nenosiri hilo. Angalia maendelezo yako kisha ujaribu tena.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Imetumwa kutoka <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Chagua kiolezo cha maandishi uliyoyaangazia</translation>
-<translation id="1307205233980126133">Samahani, tumeshindwa kuthibitisha kitambulisho chako</translation>
 <translation id="1310482092992808703">Weka vichupo pamoja</translation>
 <translation id="1311657260431405215">Msimbo huu wa QR si URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Inashiriki</translation>
 <translation id="2195339740518523951">Pata usalama thabiti zaidi kutoka Chrome</translation>
 <translation id="2200113223741723867">Dhibiti mipangilio ya kushiriki data ya matumizi</translation>
+<translation id="2218567645332692482">Husasisha usogezaji uwe HTTPS na hukuonya kabla ya kupakia tovuti ambazo haziwezi kutumia mfumo huo</translation>
 <translation id="2227444325776770048">Endelea ukitumia <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Dirisha tupu</translation>
 <translation id="2239812875700136898">Dhibiti taarifa zako kutoka kwenye kitufe cha Chaguo za Dokezo</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Angalizo la usalama</translation>
 <translation id="5556459405103347317">Pakia upya</translation>
 <translation id="5561549206367097665">Inasubiri intaneti…</translation>
+<translation id="5568069709869097550">Siwezi kuingia</translation>
 <translation id="55737423895878184">Vipengele vya mahali na arifa vinaruhusiwa</translation>
 <translation id="5578795271662203820">Tafuta picha hii kwenye <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Unaweza kuchagua utakachosawazisha wakati wowote katika <ph name="BEGIN_LINK1" />mipangilio<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">inasubiri</translation>
 <translation id="8970887620466824814">Hitilafu imetokea.</translation>
 <translation id="8972098258593396643">Ungependa kupakua kwenye folda chaguomsingi?</translation>
+<translation id="8987641763863173640">Dhibiti Mipangilio ya Kukagua Video</translation>
 <translation id="8988028529677883095">Tumia simu kama ufunguo wa usalama</translation>
 <translation id="8993760627012879038">Fungua kichupo kipya katika Hali fiche</translation>
 <translation id="8996847606757455498">Chagua mtoa huduma mwingine</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index 2b346f03..fff393e9b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">முடக்கு</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" />ஐச் சேர்க்கிறது...</translation>
 <translation id="1045899828449635435">இந்தத் தளங்களில் இருந்தும் தரவை அழிக்க வேண்டுமா?</translation>
-<translation id="1047303875618851375">Chromeமால் உங்கள் தகவல்களைச் சரிபார்க்க முடியவில்லை</translation>
 <translation id="1049743911850919806">மறைநிலை</translation>
 <translation id="10614374240317010">எப்போதும் சேமிக்காதவை</translation>
 <translation id="107147699690128016">கோப்பு நீட்டிப்பை மாற்றினால் இந்தக் கோப்பு வேறொரு ஆப்ஸில் திறக்கக்கூடும், இது உங்கள் சாதனத்திற்குத் தீங்கிழைக்கக்கூடும்.</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">கடவுச்சொல்லைக் கண்டறிய முடியவில்லை. எழுத்துப்பிழையைச் சரிபார்த்து மீண்டும் முயலவும்.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> சாதனத்திலிருந்து அனுப்பப்பட்டது</translation>
 <translation id="130581733275749598">ஹைலைட் செய்வதற்கான டெம்ப்ளேட்டைத் தேர்ந்தெடுங்கள்</translation>
-<translation id="1307205233980126133">உங்கள் அனுமதிச் சான்றுகளைச் சரிபார்க்க முடியவில்லை</translation>
 <translation id="1310482092992808703">தாவல்களைக் குழுவாக்கு</translation>
 <translation id="1311657260431405215">இந்த QR குறியீடு URL இல்லை: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">பாதுகாப்புச் சரிபார்ப்பு</translation>
 <translation id="5556459405103347317">மீண்டும் ஏற்று</translation>
 <translation id="5561549206367097665">நெட்வொர்க்கிற்காகக் காத்திருக்கிறது…</translation>
+<translation id="5568069709869097550">உள்நுழைய முடியவில்லை</translation>
 <translation id="55737423895878184">இருப்பிடமும் அறிவிப்புகளும் அனுமதிக்கப்படுகின்றன</translation>
 <translation id="5578795271662203820">இந்தப் படத்திற்கு <ph name="SEARCH_ENGINE" /> இல் தேடவும்</translation>
 <translation id="5581519193887989363">எவற்றை ஒத்திசைக்க வேண்டும் என்பதை <ph name="BEGIN_LINK1" />அமைப்புகளில்<ph name="END_LINK1" /> எப்போது வேண்டுமானாலும் தேர்வுசெய்யலாம்.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index 9c9c790..a474598 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">ఆఫ్ చేయి</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" />ని జోడిస్తోంది...</translation>
 <translation id="1045899828449635435">ఈ సైట్‌ల డేటా కూడా తొలగించాలా?</translation>
-<translation id="1047303875618851375">Chrome మీ సమాచారాన్ని వెరిఫై చేయలేకపోయింది</translation>
 <translation id="1049743911850919806">అజ్ఞాత మోడ్</translation>
 <translation id="10614374240317010">ఎప్పటికి సేవ్ చెయ్యబడవు</translation>
 <translation id="107147699690128016">మీరు ఫైల్ ఎక్స్‌టెన్షన్‌ను మార్చితే, ఫైల్ వేరే అప్లికేషన్‌లో తెరవబడవచ్చు. అది మీ పరికరానికి హానికరంగా పరిణమించే అవకాశం ఉంటుంది.</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">ఆ పాస్‌వర్డ్‌ను కనుగొనడం సాధ్యపడలేదు. మీ స్పెల్లింగ్ సరిచూసుకుని, ఆపై మళ్లీ ట్రై చేయండి.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - దీనిని పంపిన పరికరం <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">మీ హైలైట్ కోసం ఒక టెంప్లేట్‌ను ఎంచుకోండి</translation>
-<translation id="1307205233980126133">క్షమించండి, మేము మీ ఆధారాలను వాలిడేట్ చేయలేకపోయాము</translation>
 <translation id="1310482092992808703">ట్యాబ్‌లను గుంపుగా చేయి</translation>
 <translation id="1311657260431405215">ఈ QR కోడ్ URL కాదు: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -273,7 +271,7 @@
 <translation id="2744248271121720757">తక్షణమే వెతకడానికి లేదా సంబంధిత చర్యలను చూడటానికి ఒక పదాన్ని నొక్కండి</translation>
 <translation id="2760989362628427051">మీ పరికరంలో ముదురు రంగు థీమ్ లేదా బ్యాటరీ సేవర్ ఆన్‌లో ఉన్నప్పుడు, ముదురు రంగు థీమ్‌ను ఆన్ చేయండి</translation>
 <translation id="2762000892062317888">ఇప్పుడే</translation>
-<translation id="276969039800130567"><ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేసారు.</translation>
+<translation id="276969039800130567"><ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేశారు.</translation>
 <translation id="2776236159752647997">గోప్యత, భద్రత అలాగే డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్‌ల కోసం, <ph name="BEGIN_LINK" />Google సర్వీస్‌ల<ph name="END_LINK" />ను చూడండి</translation>
 <translation id="2777555524387840389"><ph name="SECONDS" /> సెకన్లు మిగిలి ఉంది</translation>
 <translation id="2779651927720337254">విఫలమైంది</translation>
@@ -527,7 +525,7 @@
 <translation id="4427306783828095590">ఫిషింగ్, అలాగే మాల్‌వేర్‌ను బ్లాక్ చేయడానికి మెరుగుపరచిన రక్షణ మరింత చేయగలదు</translation>
 <translation id="4450672886426705087">Google నుండి ఫలితాలను సెర్చ్ చేయండి.</translation>
 <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ట్యాబ్‌ను మూసివేయండి</translation>
-<translation id="4452548195519783679"><ph name="FOLDER_NAME" />కి బుక్‌మార్క్ చేసారు</translation>
+<translation id="4452548195519783679"><ph name="FOLDER_NAME" />కి బుక్‌మార్క్ చేశారు</translation>
 <translation id="4472118726404937099">మీ అన్ని పరికరాలలో సమకాలీకరణ చేయాలన్నా లేదా మీ అభిరుచికి అనుగుణంగా సెట్ చేయాలన్నా, సైన్ ఇన్ చేసి సమకాలీకరణ ఎంపికను ఆన్ చేయాలి</translation>
 <translation id="447252321002412580">Chrome ఫీచర్‌లు మరియు పనితీరును మెరుగుపరచడంలో సహాయపడండి</translation>
 <translation id="4479972344484327217">Chromeలో <ph name="MODULE" /> ఇన్‌స్టాల్ చేయబడుతోంది…</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">భద్రతా చెక్-అప్</translation>
 <translation id="5556459405103347317">మళ్లీ లోడ్ చేయి</translation>
 <translation id="5561549206367097665">నెట్‌వర్క్ కోసం వేచి ఉంది…</translation>
+<translation id="5568069709869097550">సైన్ ఇన్ చేయడం సాధ్యపడలేదు</translation>
 <translation id="55737423895878184">స్థానం మరియు నోటిఫికేషన్‌లు అనుమతించబడతాయి</translation>
 <translation id="5578795271662203820">ఈ చిత్రం కోసం <ph name="SEARCH_ENGINE" />లో వెతకండి</translation>
 <translation id="5581519193887989363">మీరు ఎప్పుడైనా <ph name="BEGIN_LINK1" />సెట్టింగ్‌ల<ph name="END_LINK1" /> ద్వారా వేటిని సింక్ చేయాలో ఎంచుకోవచ్చు.</translation>
@@ -1051,7 +1050,7 @@
 <translation id="7596558890252710462">ఆపరేటింగ్ సిస్టమ్</translation>
 <translation id="7605594153474022051">సమకాలీకరణ పని చేయడం లేదు</translation>
 <translation id="7606077192958116810">లైట్ మోడ్ ఆన్ చేయబడింది. సెట్టింగ్‌లలో దీనిని నిర్వహించండి.</translation>
-<translation id="7612619742409846846">Googleకి ఇలా సైన్ ఇన్ చేసారు</translation>
+<translation id="7612619742409846846">Googleకి ఇలా సైన్ ఇన్ చేశారు</translation>
 <translation id="7619072057915878432">నెట్‌వర్క్ వైఫల్యాల కారణంగా <ph name="FILE_NAME" /> డౌన్‌లోడ్ విఫలమైంది.</translation>
 <translation id="7626032353295482388">Chromeకు స్వాగతం</translation>
 <translation id="7630202231528827509">ప్రొవైడర్ URL</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index 9466f39..b3ac10e9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">ปิด</translation>
 <translation id="1036727731225946849">กำลังเพิ่ม <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">ล้างข้อมูลเว็บไซต์เหล่านี้ด้วยไหม</translation>
-<translation id="1047303875618851375">Chrome ยืนยันข้อมูลของคุณไม่ได้</translation>
 <translation id="1049743911850919806">โหมดไม่ระบุตัวตน</translation>
 <translation id="10614374240317010">ไม่เคยบันทึก</translation>
 <translation id="107147699690128016">หากคุณเปลี่ยนนามสกุลไฟล์ ไฟล์นั้นอาจเปิดในแอปพลิเคชันอื่นและเป็นอันตรายต่ออุปกรณ์ของคุณ</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">ไม่พบรหัสผ่านดังกล่าว โปรดตรวจสอบการสะกดแล้วลองอีกครั้ง</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ส่งจาก <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">เลือกเทมเพลตสำหรับไฮไลต์</translation>
-<translation id="1307205233980126133">ขออภัย เราตรวจสอบข้อมูลเข้าสู่ระบบไม่ได้</translation>
 <translation id="1310482092992808703">จัดกลุ่มแท็บ</translation>
 <translation id="1311657260431405215">คิวอาร์โค้ดนี้ไม่ใช่ URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">การตรวจสอบความปลอดภัย</translation>
 <translation id="5556459405103347317">โหลดใหม่</translation>
 <translation id="5561549206367097665">กำลังรอเครือข่าย…</translation>
+<translation id="5568069709869097550">ไม่สามารถลงชื่อเข้าใช้</translation>
 <translation id="55737423895878184">อนุญาตให้ใช้ตำแหน่งและแสดงการแจ้งเตือน</translation>
 <translation id="5578795271662203820">ค้นหาภาพนี้ใน <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">คุณเลือกสิ่งที่ต้องการซิงค์ได้เสมอใน<ph name="BEGIN_LINK1" />การตั้งค่า<ph name="END_LINK1" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index afdc71e9..3700322 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Kapat</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> ekleniyor...</translation>
 <translation id="1045899828449635435">Ayrıca veriler bu sitelerden de silinsin mi?</translation>
-<translation id="1047303875618851375">Chrome, bilgilerinizi doğrulayamadı</translation>
 <translation id="1049743911850919806">Gizli mod</translation>
 <translation id="10614374240317010">Hiç kaydedilmeyecekler</translation>
 <translation id="107147699690128016">Dosya uzantısını değiştirirseniz dosya farklı bir uygulamada açılabilir ve cihazınız için tehlikeli olabilir.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Şifre bulunamıyor. Adresi doğru yazıp yazmadığınızı kontrol edip tekrar deneyin.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> cihazından gönderildi</translation>
 <translation id="130581733275749598">Vurgulamanız için bir şablon seçin</translation>
-<translation id="1307205233980126133">Maalesef kimlik bilgilerinizi doğrulayamadık</translation>
 <translation id="1310482092992808703">Sekmeleri grupla</translation>
 <translation id="1311657260431405215">Bu QR kodu bir URL değil: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Paylaşım</translation>
 <translation id="2195339740518523951">Chrome’un en güçlü güvenlik özelliklerinden faydalanın</translation>
 <translation id="2200113223741723867">Kullanım verileri paylaşımını yönetin</translation>
+<translation id="2218567645332692482">Gezinmeleri HTTPS'ye yükseltip bu uzantıyı desteklemeyen siteleri yüklemeden önce sizi uyarır</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> olarak devam edin</translation>
 <translation id="2230777942707397948">Boş pencere</translation>
 <translation id="2239812875700136898">Haberlerinizi, Keşfet için Seçenekler düğmesinden kontrol edin</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Güvenlik kontrolü</translation>
 <translation id="5556459405103347317">Yeniden Yükle</translation>
 <translation id="5561549206367097665">Ağ bekleniyor…</translation>
+<translation id="5568069709869097550">Oturum açılamıyor</translation>
 <translation id="55737423895878184">Konum ve bildirimlere izin veriliyor</translation>
 <translation id="5578795271662203820">Bu resmi, <ph name="SEARCH_ENGINE" /> üzerinde ara</translation>
 <translation id="5581519193887989363">Neyin senkronize edileceğini istediğiniz zaman <ph name="BEGIN_LINK1" />ayarlardan<ph name="END_LINK1" /> seçebilirsiniz.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">beklemede</translation>
 <translation id="8970887620466824814">Bir hata oluştu.</translation>
 <translation id="8972098258593396643">Varsayılan klasöre indirilsin mi?</translation>
+<translation id="8987641763863173640">Video Önizleme Ayarlarını Yönetin</translation>
 <translation id="8988028529677883095">Telefonu güvenlik anahtarı olarak kullan</translation>
 <translation id="8993760627012879038">Gizli modda yeni bir sekme açar</translation>
 <translation id="8996847606757455498">Başka bir sağlayıcı seçin:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
index eb7d858d..e3731fbb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Вимкнути</translation>
 <translation id="1036727731225946849">Додається <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Видалити дані з цих сайтів?</translation>
-<translation id="1047303875618851375">Веб-переглядачу Chrome не вдалося підтвердити ваші дані</translation>
 <translation id="1049743911850919806">Анонімний перегляд</translation>
 <translation id="10614374240317010">Ніколи не зберігалося</translation>
 <translation id="107147699690128016">Якщо ви зміните розширення файлу, він може відкритися в іншому додатку або зашкодити пристрою.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Не вдалося знайти такий пароль. Перевірте правильність написання та повторіть спробу.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Надіслано з пристрою "<ph name="DEVICE_NAME" />"</translation>
 <translation id="130581733275749598">Виберіть шаблон для виділеного тексту</translation>
-<translation id="1307205233980126133">На жаль, нам не вдалося перевірити ваші облікові дані</translation>
 <translation id="1310482092992808703">Згрупувати вкладки</translation>
 <translation id="1311657260431405215">Цей QR-код (<ph name="QRCODEVALUE" />) не є URL-адресою</translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Спільний доступ</translation>
 <translation id="2195339740518523951">Найвищий рівень безпеки в Chrome</translation>
 <translation id="2200113223741723867">Керувати доступом до даних про використання</translation>
+<translation id="2218567645332692482">Трафік переходить на HTTPS, а ви отримуєте сповіщення перед завантаженням сайтів, які не підтримують цей протокол</translation>
 <translation id="2227444325776770048">Продовжити як <ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Порожнє вікно</translation>
 <translation id="2239812875700136898">Контролюйте новини за допомогою кнопки "Налаштування рекомендацій"</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Перевірка безпеки</translation>
 <translation id="5556459405103347317">Перезавантажити</translation>
 <translation id="5561549206367097665">Очікується мережа…</translation>
+<translation id="5568069709869097550">Не вдалося ввійти</translation>
 <translation id="55737423895878184">Геодані та сповіщення дозволено</translation>
 <translation id="5578795271662203820">Шукати зображення в <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Ви можете будь-коли вибрати дані для синхронізації в <ph name="BEGIN_LINK1" />налаштуваннях<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">очікується</translation>
 <translation id="8970887620466824814">Сталася помилка.</translation>
 <translation id="8972098258593396643">Завантажити в папку за умовчанням?</translation>
+<translation id="8987641763863173640">Керуйте налаштуваннями попереднього перегляду відео</translation>
 <translation id="8988028529677883095">Використовувати телефон як ключ безпеки</translation>
 <translation id="8993760627012879038">Відкрити нове вікно в режимі анонімного перегляду</translation>
 <translation id="8996847606757455498">Вибрати іншого постачальника</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
index 7418aa1..598a7957 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">آف کریں</translation>
 <translation id="1036727731225946849">شامل ہو رہا ہے <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">ان سائٹس سے ڈیٹا بھی صاف کریں؟</translation>
-<translation id="1047303875618851375">‏Chrome آپ کی معلومات کی تصدیق نہیں کرسکا</translation>
 <translation id="1049743911850919806">پوشیدگی</translation>
 <translation id="10614374240317010">کبھی بھی محفوظ نہیں کیا ہوا</translation>
 <translation id="107147699690128016">اگر آپ فائل ایکسٹینشن تبدیل کرتے ہیں تو فائل مختلف ایپلیکیشن میں کھل سکتی ہے اور ممکنہ طور پر آپ کے آلہ کے لیے نقصان دہ ہو سکتی ہے۔</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">وہ پاس ورڈ تلاش نہیں کیا جا سکا۔ اپنے ہجے چیک کریں اور دوبارہ کوشش کریں۔</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> سے ارسال کردہ</translation>
 <translation id="130581733275749598">آپ کی ہائی لائٹ کیلئے تمثیل منتخب کریں</translation>
-<translation id="1307205233980126133">معذرت، ہم آپ کی اسناد کی توثیق نہیں کر سکے</translation>
 <translation id="1310482092992808703">گروپ ٹیبز</translation>
 <translation id="1311657260431405215">‏یہ QR کوڈ URL نہیں ہے: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">‎chrome_stylized_highlight_‎</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">سیفٹی چیک</translation>
 <translation id="5556459405103347317">دوبارہ لوڈ کریں</translation>
 <translation id="5561549206367097665">نیٹ ورک کا منتظر…</translation>
+<translation id="5568069709869097550">سائن نہیں کیا جا سکتا ہے</translation>
 <translation id="55737423895878184">مقام اور اطلاعات کی اجازت ہے</translation>
 <translation id="5578795271662203820">اس تصویر کیلئے <ph name="SEARCH_ENGINE" /> تلاش کریں</translation>
 <translation id="5581519193887989363">آپ <ph name="BEGIN_LINK1" />ترتیبات<ph name="END_LINK1" /> میں کسی بھی وقت اس بات کا انتخاب کر سکتے ہیں کہ کس چیز کی مطابقت پذیری کرنی ہے۔</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index 33fa851..9b3a77d57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">O‘chirib qo‘yish</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> qo‘shilmoqda...</translation>
 <translation id="1045899828449635435">Bu saytlardagi maʼlumotlar ham tozalansinmi?</translation>
-<translation id="1047303875618851375">Chrome axborotlaringizni tekshira olmadi</translation>
 <translation id="1049743911850919806">Inkognito</translation>
 <translation id="10614374240317010">Parollar saqlanmaydigan saytlar</translation>
 <translation id="107147699690128016">Agar fayl kengaytmasi oʻzgartirilsa, fayl boshqa ilovada ochilishi va qurilmaga zarar yetkazishi mumkin.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Bu parol topilmadi. Xatosiz kiritilganini tekshiring va qayta urining.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> orqali <ph name="DEVICE_NAME" /> qurilmasidan yuborildi</translation>
 <translation id="130581733275749598">Belgilov uchun andoza tanlang</translation>
-<translation id="1307205233980126133">Uzr, login va parolingizni tekshira olmadik</translation>
 <translation id="1310482092992808703">Varaqlarni guruhlash</translation>
 <translation id="1311657260431405215">QR kod URL manzil emas: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Ulashish</translation>
 <translation id="2195339740518523951">Chrome brauzerining kuchli xavfsizligidan foydalaning</translation>
 <translation id="2200113223741723867">Foydalanish statistikasi yuborilishini boshqarish</translation>
+<translation id="2218567645332692482">Barcha sahifalar HTTPS orqali ochilsin va saytlarni yuklashdan oldin ularning protokolga mosligi haqida ogohlantirilsin</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> sifatida davom etish</translation>
 <translation id="2230777942707397948">Boʻsh oyna</translation>
 <translation id="2239812875700136898">Parametrlar orqali Discover yangiliklarini boshqarish tugmasi</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Xavfsizlik tekshiruvi</translation>
 <translation id="5556459405103347317">Qayta yuklash</translation>
 <translation id="5561549206367097665">Tarmoq kutilmoqda...</translation>
+<translation id="5568069709869097550">Kirish amalga oshmadi</translation>
 <translation id="55737423895878184">Joylashuv xizmati va bildirishnomalarga ruxsat berildi</translation>
 <translation id="5578795271662203820">Bu rasmni <ph name="SEARCH_ENGINE" />‘dan qidirish</translation>
 <translation id="5581519193887989363">Nimani sinxronlashni istalgan vaqtda <ph name="BEGIN_LINK1" />sozlamalar<ph name="END_LINK1" /> orqali tanlash mumkin.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">kutilmoqda</translation>
 <translation id="8970887620466824814">Xatolik yuz berdi.</translation>
 <translation id="8972098258593396643">Yuklanma standart jildga saqlansinmi?</translation>
+<translation id="8987641763863173640">Video bilan tanishish sozlamalarini boshqarish</translation>
 <translation id="8988028529677883095">Telefonni elektron kalit sifatida ishlatish</translation>
 <translation id="8993760627012879038">Yangi varaqni inkognito rejimida ochish</translation>
 <translation id="8996847606757455498">Boshqa provayderni tanlang</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
index 63a0a32..6b51e28e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Tắt</translation>
 <translation id="1036727731225946849">Đang thêm <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Đồng thời xóa dữ liệu khỏi các trang web này?</translation>
-<translation id="1047303875618851375">Chrome không thể xác minh thông tin của bạn</translation>
 <translation id="1049743911850919806">Ẩn danh</translation>
 <translation id="10614374240317010">Không bao giờ lưu</translation>
 <translation id="107147699690128016">Nếu bạn thay đổi đuôi tệp, thì tệp có thể mở trong một ứng dụng khác và tiềm ẩn nguy cơ đối với thiết bị.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Không tìm thấy mật khẩu đó. Hãy kiểm tra chính tả rồi thử lại.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Gửi từ <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Hãy chọn một mẫu cho nội dung nổi bật của bạn</translation>
-<translation id="1307205233980126133">Rất tiếc, chúng tôi không thể xác thực thông tin đăng nhập của bạn</translation>
 <translation id="1310482092992808703">Nhóm các thẻ</translation>
 <translation id="1311657260431405215">Mã QR này không phải là URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">nội_dung_nổi_bật_được_cách_điệu_trên_chrome_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">Kiểm tra an toàn</translation>
 <translation id="5556459405103347317">Tải lại</translation>
 <translation id="5561549206367097665">Đang chờ mạng…</translation>
+<translation id="5568069709869097550">Không thể đăng nhập</translation>
 <translation id="55737423895878184">Cho phép vị trí và thông báo</translation>
 <translation id="5578795271662203820">Tìm ảnh này trên <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5581519193887989363">Bạn luôn có thể chọn nội dung muốn đồng bộ hóa trong phần <ph name="BEGIN_LINK1" />cài đặt<ph name="END_LINK1" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index 270e74a2..ac7c168a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -7,7 +7,6 @@
 <translation id="1036348656032585052">关闭</translation>
 <translation id="1036727731225946849">正在添加<ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">一并清除来自这些网站的数据?</translation>
-<translation id="1047303875618851375">Chrome 无法验证您的信息</translation>
 <translation id="1049743911850919806">无痕</translation>
 <translation id="10614374240317010">一律不保存</translation>
 <translation id="107147699690128016">如果您更改文件扩展名,此文件可能会在另一应用中打开并对您的设备造成危害。</translation>
@@ -55,7 +54,6 @@
 <translation id="1303339473099049190">找不到该密码。请检查拼写,然后重试。</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - 发送者:<ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">为突出显示的内容选择一个模板</translation>
-<translation id="1307205233980126133">抱歉,我们无法验证您的凭据</translation>
 <translation id="1310482092992808703">组合标签页</translation>
 <translation id="1311657260431405215">此二维码不是网址:<ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -708,6 +706,7 @@
 <translation id="5548606607480005320">安全检查</translation>
 <translation id="5556459405103347317">重新加载</translation>
 <translation id="5561549206367097665">正在等待连接到网络…</translation>
+<translation id="5568069709869097550">无法登录</translation>
 <translation id="55737423895878184">允许使用位置信息以及显示通知</translation>
 <translation id="5578795271662203820">在<ph name="SEARCH_ENGINE" />中搜索此图片</translation>
 <translation id="5581519193887989363">您始终可在<ph name="BEGIN_LINK1" />设置<ph name="END_LINK1" />中选择要同步的内容。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index 67bdbfc7..20aaa4b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">停用</translation>
 <translation id="1036727731225946849">正在新增「<ph name="WEBAPK_NAME" />」…</translation>
 <translation id="1045899828449635435">要一併清除這些網站的資料嗎?</translation>
-<translation id="1047303875618851375">Chrome 無法驗證您的資料</translation>
 <translation id="1049743911850919806">無痕模式</translation>
 <translation id="10614374240317010">永不儲存</translation>
 <translation id="107147699690128016">如果變更副檔名,此檔案可能會在其他應用程式中開啟,並可能對裝置造成損害。</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">找不到該密碼。請檢查您輸入的內容,然後再試一次。</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - 來自 <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">選取突顯內容的範本</translation>
-<translation id="1307205233980126133">很抱歉,我們無法驗證您的憑證</translation>
 <translation id="1310482092992808703">將分頁加入群組</translation>
 <translation id="1311657260431405215">此二維條碼不是網址:<ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">安全檢查</translation>
 <translation id="5556459405103347317">重新載入</translation>
 <translation id="5561549206367097665">正在等待網絡連線…</translation>
+<translation id="5568069709869097550">無法登入</translation>
 <translation id="55737423895878184">允許分享位置資訊和顯示通知</translation>
 <translation id="5578795271662203820">透過 <ph name="SEARCH_ENGINE" /> 搜尋這張圖片</translation>
 <translation id="5581519193887989363">您隨時可在<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />中選擇要同步的資料。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
index 5d42e08..d614c3b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">關閉</translation>
 <translation id="1036727731225946849">正在新增「<ph name="WEBAPK_NAME" />」...</translation>
 <translation id="1045899828449635435">要一併清除這些網站中的資料嗎?</translation>
-<translation id="1047303875618851375">Chrome 無法驗證你的資訊</translation>
 <translation id="1049743911850919806">無痕模式</translation>
 <translation id="10614374240317010">一律不儲存</translation>
 <translation id="107147699690128016">如果變更副檔名,這個檔案可能會在其他應用程式中開啟,並可能對裝置造成損害。</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">找不到指定密碼。請檢查你輸入的內容,然後再試一次。</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - 來自 <ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">選取醒目顯示文字的範本</translation>
-<translation id="1307205233980126133">很抱歉,我們無法驗證你的憑證</translation>
 <translation id="1310482092992808703">將分頁加入群組</translation>
 <translation id="1311657260431405215">這個 QR 圖碼不是網址:<ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -720,6 +718,7 @@
 <translation id="5548606607480005320">安全檢查</translation>
 <translation id="5556459405103347317">重新載入</translation>
 <translation id="5561549206367097665">正在等待網路連線…</translation>
+<translation id="5568069709869097550">無法登入</translation>
 <translation id="55737423895878184">允許分享位置資訊和顯示通知</translation>
 <translation id="5578795271662203820">透過 <ph name="SEARCH_ENGINE" /> 搜尋這張圖片</translation>
 <translation id="5581519193887989363">你隨時可以在<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />中選擇要同步處理的資料。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
index 12588ea..d0533ac 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -8,7 +8,6 @@
 <translation id="1036348656032585052">Vala</translation>
 <translation id="1036727731225946849">Ingeza i-<ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Usula nedatha evela kula masayithi?</translation>
-<translation id="1047303875618851375">I-Chrome ayikwazanga ukuqinisekisa imininingwane yakho</translation>
 <translation id="1049743911850919806">I-Incognito</translation>
 <translation id="10614374240317010">Ayikaze yalondolozwa</translation>
 <translation id="107147699690128016">Uma ushintsha isandiso sefayela, ifayela kungenzeka livulwe ngezinhlelo zokusebenza ezihlukile kanye nokungaba nobungozi kudivayisi yakho.</translation>
@@ -56,7 +55,6 @@
 <translation id="1303339473099049190">Akuyitholi leyo phasiwedi. Hlola isipelingi sakho bese uzama futhi.</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Ithunyelwe kusukela ku-<ph name="DEVICE_NAME" /></translation>
 <translation id="130581733275749598">Khetha isifanekiso sokugqamisa kwakho</translation>
-<translation id="1307205233980126133">Uxolo, asikwazanga ukufakazela iziqinisekiso zakho</translation>
 <translation id="1310482092992808703">Faka kuqembu amathebhu</translation>
 <translation id="1311657260431405215">Ikhodi ye-QR ayiyona i-URL: <ph name="QRCODEVALUE" /></translation>
 <translation id="1316212908214730110">chrome_stylized_highlight_</translation>
@@ -187,6 +185,7 @@
 <translation id="218608176142494674">Ukwabelana</translation>
 <translation id="2195339740518523951">Thola isivikelo esinamandla kakhulu se-Chrome</translation>
 <translation id="2200113223741723867">Phatha ukwabiwa kwedatha yokusetshenziswa</translation>
+<translation id="2218567645332692482">Thuthukisa ukuzula ku-HTTPS futhi ikuxwayise ngaphambi kokulayisha amasayithi angayisekeli</translation>
 <translation id="2227444325776770048">Qhubeka njengo-<ph name="USER_FULL_NAME" /></translation>
 <translation id="2230777942707397948">Iwindi elingenalutho</translation>
 <translation id="2239812875700136898">Lawula izindaba zakho kusukela Kuzinketho zenkinobho ye-Discover</translation>
@@ -720,6 +719,7 @@
 <translation id="5548606607480005320">Ukuhlolwa kokuphepha</translation>
 <translation id="5556459405103347317">Phinda ulayishe</translation>
 <translation id="5561549206367097665">Ilindele inethiwekhi…</translation>
+<translation id="5568069709869097550">Ayikwazi ukungena ngemvume</translation>
 <translation id="55737423895878184">Indawo nezaziso zivunyelwe</translation>
 <translation id="5578795271662203820">Sesha ku-<ph name="SEARCH_ENGINE" /> lesi sithombe</translation>
 <translation id="5581519193887989363">Ungahlala ukhetha ukuthi yini ezovunyelaniswa <ph name="BEGIN_LINK1" />kuzilungiselelo<ph name="END_LINK1" />.</translation>
@@ -1295,6 +1295,7 @@
 <translation id="8965591936373831584">kulindile</translation>
 <translation id="8970887620466824814">Okuthile akuhambanga kahle.</translation>
 <translation id="8972098258593396643">Landela kufonda yokuzenzakalelayo?</translation>
+<translation id="8987641763863173640">Phatha Amasethingi Wokuhlola Kuqala Ividiyo</translation>
 <translation id="8988028529677883095">Sebenzisa ifoni njengokhiye wokuqinisekisa ubunikazi</translation>
 <translation id="8993760627012879038">Vula kuthebhu entsha kumodi ye-Incognito</translation>
 <translation id="8996847606757455498">Khetha omunye umhlinzeki</translation>
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index cd22cb2..9087852fe 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -409,7 +409,7 @@
     launch_files->file_paths.push_back(downloads_path);
 
     proxy->LaunchAppWithFiles(
-        update.AppId(), apps::mojom::LaunchContainer::kLaunchContainerNone,
+        update.AppId(),
         apps::GetEventFlags(apps::mojom::LaunchContainer::kLaunchContainerNone,
                             WindowOpenDisposition::NEW_FOREGROUND_TAB,
                             /*preferred_containner=*/true),
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
index e428670..47cf831 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
@@ -7,8 +7,11 @@
 #include <vector>
 
 #include "ash/constants/ash_features.h"
+#include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_progress.h"
+#include "ash/public/cpp/image_util.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/style/ash_color_provider.h"
 #include "base/containers/cxx20_erase.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
@@ -16,11 +19,14 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_util.h"
 #include "components/download/public/common/download_item.h"
+#include "components/vector_icons/vector_icons.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/download_item_utils.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/text/bytes_formatting.h"
+#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/paint_vector_icon.h"
 
 namespace ash {
 
@@ -64,6 +70,10 @@
   mojo_download_item->total_bytes = item->GetTotalBytes();
   mojo_download_item->has_total_bytes = true;
   mojo_download_item->start_time = item->GetStartTime();
+  mojo_download_item->is_dangerous = item->IsDangerous();
+  mojo_download_item->has_is_dangerous = true;
+  mojo_download_item->is_mixed_content = item->IsMixedContent();
+  mojo_download_item->has_is_mixed_content = true;
 
   // NOTE: `browser_context` may be `nullptr` in tests.
   auto* browser_context = content::DownloadItemUtils::GetBrowserContext(item);
@@ -75,6 +85,22 @@
   return mojo_download_item;
 }
 
+// Returns a `gfx::ImageSkia` to show as a placeholder in a holding space image
+// to indicate error.
+gfx::ImageSkia CreateErrorPlaceholderImageSkia(
+    const gfx::Size& size,
+    const absl::optional<bool>& dark_background) {
+  DCHECK_GE(size.width(), kHoldingSpaceIconSize);
+  DCHECK_GE(size.height(), kHoldingSpaceIconSize);
+  return gfx::ImageSkiaOperations::CreateSuperimposedImage(
+      image_util::CreateEmptyImage(size),
+      gfx::CreateVectorIcon(
+          vector_icons::kErrorOutlineIcon, kHoldingSpaceIconSize,
+          dark_background.value_or(AshColorProvider::Get()->IsDarkModeEnabled())
+              ? gfx::kGoogleRed300
+              : gfx::kGoogleRed600));
+}
+
 // Returns the singleton `crosapi::DownloadControllerAsh` if it exists.
 crosapi::DownloadControllerAsh* GetDownloadControllerAsh() {
   return crosapi::CrosapiManager::IsInitialized()
@@ -99,10 +125,11 @@
 // in-progress downloads integration.
 bool IsEligibleForInProgressIntegration(
     const crosapi::mojom::DownloadItem* mojo_download_item) {
-  // The `start_time` field was the last field to be implemented in Lacros. Its
-  // presence indicates that other required APIs (e.g. pause/resume/cancel/...)
-  // are also implemented and is therefore used to gate eligibility.
-  return mojo_download_item->start_time.has_value();
+  // The `has_is_mixed_content` field was the last field to be implemented in
+  // Lacros. Its presence indicates that other required metadata and APIs (e.g.
+  // pause, resume, cancel, etc.) are also implemented and is therefore used to
+  // gate eligibility.
+  return mojo_download_item->has_is_mixed_content;
 }
 
 // Returns whether the specified `mojo_download_item` is in progress.
@@ -203,6 +230,12 @@
     return total_bytes >= 0 ? absl::make_optional(total_bytes) : absl::nullopt;
   }
 
+  // Returns whether the underlying download is dangerous.
+  bool IsDangerous() const { return mojo_download_item_->is_dangerous; }
+
+  // Returns whether the underlying download is mixed content.
+  bool IsMixedContent() const { return mojo_download_item_->is_mixed_content; }
+
   // Returns whether the underlying download is paused.
   bool IsPaused() const { return mojo_download_item_->is_paused; }
 
@@ -220,9 +253,11 @@
     return holding_space_item_;
   }
 
-  // Returns a placeholder resolver which creates a placeholder corresponding
-  // to the file type of the associated *target* file path, rather than the
-  // *backing* file path, when a thumbnail cannot be generated.
+  // Returns a resolver which creates a `gfx::ImageSkia` placeholder
+  // corresponding to the file type of the associated *target* file path, rather
+  // than the *backing* file path, when a thumbnail cannot be generated. Note
+  // that if the download is dangerous or is mixed content, a placeholder
+  // indicating error will be returned.
   HoldingSpaceImage::PlaceholderImageSkiaResolver
   GetPlaceholderImageSkiaResolver() const {
     return base::BindRepeating(
@@ -230,13 +265,20 @@
            const base::FilePath& file_path, const gfx::Size& size,
            const absl::optional<bool>& dark_background,
            const absl::optional<bool>& is_folder) {
+          if (in_progress_download &&
+              (in_progress_download->IsDangerous() ||
+               in_progress_download->IsMixedContent())) {
+            return CreateErrorPlaceholderImageSkia(size, dark_background);
+          }
+
+          base::FilePath rewritten_file_path(file_path);
+          if (in_progress_download &&
+              IsInProgress(in_progress_download->mojo_download_item_.get())) {
+            rewritten_file_path = in_progress_download->GetTargetFilePath();
+          }
+
           return HoldingSpaceImage::CreateDefaultPlaceholderImageSkiaResolver()
-              .Run(in_progress_download &&
-                           IsInProgress(
-                               in_progress_download->mojo_download_item_.get())
-                       ? in_progress_download->GetTargetFilePath()
-                       : file_path,
-                   size, dark_background, is_folder);
+              .Run(rewritten_file_path, size, dark_background, is_folder);
         },
         weak_factory_.GetWeakPtr());
   }
@@ -257,6 +299,13 @@
     if (!IsInProgress(mojo_download_item_.get()))
       return absl::nullopt;
 
+    // In-progress download items which are dangerous or mixed content have a
+    // special secondary text treatment.
+    if (IsDangerous() || IsMixedContent()) {
+      return l10n_util::GetStringUTF16(
+          IDS_ASH_HOLDING_SPACE_IN_PROGRESS_DOWNLOAD_DANGEROUS_FILE);
+    }
+
     // In-progress download items which are marked to be opened when complete
     // have a special secondary text treatment.
     if (mojo_download_item_->open_when_complete) {
@@ -302,6 +351,9 @@
   // this method may result in the destruction of `this`.
   void UpdateMojoDownloadItem(
       crosapi::mojom::DownloadItemPtr mojo_download_item) {
+    const bool was_dangerous_or_mixed_content =
+        IsDangerous() || IsMixedContent();
+
     mojo_download_item_ = std::move(mojo_download_item);
 
     if (!mojo_download_item_) {
@@ -309,12 +361,18 @@
       return;
     }
 
+    // Explicitly invalidate the image of the associated holding space item if
+    // the download is transitioning to/from a dangerous or mixed content state.
+    const bool invalidate_image =
+        was_dangerous_or_mixed_content != (IsDangerous() || IsMixedContent());
+
     switch (mojo_download_item_->state) {
       case crosapi::mojom::DownloadState::kInProgress:
-        delegate_->OnDownloadUpdated(this);
+        delegate_->OnDownloadUpdated(this, invalidate_image);
         break;
       case crosapi::mojom::DownloadState::kComplete:
-        delegate_->OnDownloadCompleted(this);  // NOTE: Destroys `this`.
+        delegate_->OnDownloadCompleted(
+            this, invalidate_image);  // NOTE: Destroys `this`.
         break;
       case crosapi::mojom::DownloadState::kCancelled:
       case crosapi::mojom::DownloadState::kInterrupted:
@@ -671,7 +729,8 @@
 }
 
 void HoldingSpaceDownloadsDelegate::OnDownloadUpdated(
-    InProgressDownload* in_progress_download) {
+    InProgressDownload* in_progress_download,
+    bool invalidate_image) {
   // If in-progress downloads integration is disabled, a holding space item will
   // be associated with a download only upon download completion.
   if (!features::IsHoldingSpaceInProgressDownloadsIntegrationEnabled())
@@ -682,14 +741,15 @@
   // file path from a selection dialog. Only once file path information is set
   // should a holding space item be associated with the in-progress download.
   if (!in_progress_download->GetFilePath().empty())
-    CreateOrUpdateHoldingSpaceItem(in_progress_download);
+    CreateOrUpdateHoldingSpaceItem(in_progress_download, invalidate_image);
 }
 
 void HoldingSpaceDownloadsDelegate::OnDownloadCompleted(
-    InProgressDownload* in_progress_download) {
+    InProgressDownload* in_progress_download,
+    bool invalidate_image) {
   // If in-progress downloads integration is enabled, a holding space item will
   // have already been associated with the download while it was in-progress.
-  CreateOrUpdateHoldingSpaceItem(in_progress_download);
+  CreateOrUpdateHoldingSpaceItem(in_progress_download, invalidate_image);
   EraseDownload(in_progress_download);
 }
 
@@ -716,7 +776,8 @@
 }
 
 void HoldingSpaceDownloadsDelegate::CreateOrUpdateHoldingSpaceItem(
-    InProgressDownload* in_progress_download) {
+    InProgressDownload* in_progress_download,
+    bool invalidate_image) {
   const HoldingSpaceItem* item = in_progress_download->GetHoldingSpaceItem();
 
   // Create.
@@ -754,6 +815,15 @@
       .SetSecondaryText(in_progress_download->GetSecondaryText())
       .SetPaused(in_progress_download->IsPaused())
       .SetProgress(in_progress_download->GetProgress());
+
+  if (!invalidate_image)
+    return;
+
+  model()->InvalidateItemImageIf(base::BindRepeating(
+      [](const std::string& item_id, const HoldingSpaceItem* item) {
+        return item->id() == item_id;
+      },
+      std::cref(item->id())));
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
index e0218fe..d34bb73 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
@@ -84,11 +84,21 @@
   void OnLacrosDownloadsSynced(
       std::vector<crosapi::mojom::DownloadItemPtr> mojo_download_items);
 
-  // Invoked when the specified `in_progress_download` is updated.
-  void OnDownloadUpdated(InProgressDownload* in_progress_download);
+  // Invoked when the specified `in_progress_download` is updated. If
+  // `invalidate_image` is `true`, the image for the associated holding space
+  // item will be explicitly invalidated. This is necessary if, for example, the
+  // underlying download is transitioning to/from a dangerous or mixed content
+  // state.
+  void OnDownloadUpdated(InProgressDownload* in_progress_download,
+                         bool invalidate_image);
 
-  // Invoked when the specified `in_progress_download` is completed.
-  void OnDownloadCompleted(InProgressDownload* in_progress_download);
+  // Invoked when the specified `in_progress_download` is completed. If
+  // `invalidate_image` is `true`, the image for the associated holding space
+  // item will be explicitly invalidated. This is necessary if, for example, the
+  // underlying download is transitioning to/from a dangerous or mixed content
+  // state.
+  void OnDownloadCompleted(InProgressDownload* in_progress_download,
+                           bool invalidate_image);
 
   // Invoked when the specified `in_progress_download` fails. This may be due to
   // cancellation, interruption, or destruction of the underlying download.
@@ -99,8 +109,12 @@
   void EraseDownload(const InProgressDownload* in_progress_download);
 
   // Creates or updates the holding space item in the model associated with the
-  // specified `in_progress_download`.
-  void CreateOrUpdateHoldingSpaceItem(InProgressDownload* in_progress_download);
+  // specified `in_progress_download`. If `invalidate_image` is `true`, the
+  // image for the holding space item will be explicitly invalidated. This is
+  // necessary if, for example, the underlying download is transitioning to/from
+  // a dangerous or mixed content state.
+  void CreateOrUpdateHoldingSpaceItem(InProgressDownload* in_progress_download,
+                                      bool invalidate_image);
 
   // The collection of currently in-progress downloads.
   std::set<std::unique_ptr<InProgressDownload>, base::UniquePtrComparator>
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
index 0b15b54..f804858 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
@@ -868,10 +868,12 @@
   download->is_from_incognito_profile = FromIncognitoProfile();
 
   // Lacros clients which are eligible for in-progress downloads integration
-  // have `start_time` present. This field was added at the same time as other
-  // needed APIs (e.g. pause, resume, cancel, etc.) and is used as a sentinel.
+  // have `has_is_mixed_content` present. This field was the last field to be
+  // implemented in Lacros. Its presence indicates that other required metadata
+  // and APIs (e.g. pause, resume, cancel, etc.) are also implemented and is
+  // therefore used to gate eligibility.
   if (InProgressDownloadsEligibleClient())
-    download->start_time = base::Time::Now();
+    download->has_is_mixed_content = true;
 
   // Notify observers of `download` creation.
   download->state = crosapi::mojom::DownloadState::kInProgress;
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
index 695fefa..0ab3831 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -50,6 +50,7 @@
 #include "components/sync_preferences/pref_service_mock_factory.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "components/user_manager/scoped_user_manager.h"
+#include "components/vector_icons/vector_icons.h"
 #include "content/public/browser/download_item_utils.h"
 #include "content/public/test/fake_download_item.h"
 #include "content/public/test/mock_download_manager.h"
@@ -61,7 +62,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/image/image_unittest_util.h"
+#include "ui/gfx/paint_vector_icon.h"
 
 namespace ash {
 
@@ -1761,6 +1764,7 @@
   base::FilePath current_target_path;
   int64_t current_received_bytes = 0;
   int64_t current_total_bytes = 100;
+  bool current_is_dangerous = false;
 
   // Create a fake download item and cache a function to update it.
   std::unique_ptr<content::FakeDownloadItem> fake_download_item =
@@ -1772,6 +1776,7 @@
     fake_download_item->SetState(current_state);
     fake_download_item->SetTargetFilePath(current_target_path);
     fake_download_item->SetTotalBytes(current_total_bytes);
+    fake_download_item->SetIsDangerous(current_is_dangerous);
     fake_download_item->NotifyDownloadUpdated();
   };
 
@@ -1910,6 +1915,36 @@
     run_loop.Run();
   }
 
+  // Mark the download as dangerous.
+  current_is_dangerous = true;
+  UpdateFakeDownloadItem();
+
+  {
+    // Because the download has been marked as dangerous, the image should
+    // represent that the underlying download is in error.
+    base::RunLoop run_loop;
+    auto image_skia_changed_subscription =
+        model->items()[0]->image().AddImageSkiaChangedCallback(
+            base::BindLambdaForTesting([&]() {
+              gfx::ImageSkia actual_image =
+                  model->items()[0]->image().GetImageSkia(kImageSize,
+                                                          kDarkBackground);
+              gfx::ImageSkia expected_image =
+                  gfx::ImageSkiaOperations::CreateSuperimposedImage(
+                      image_util::CreateEmptyImage(kImageSize),
+                      gfx::CreateVectorIcon(vector_icons::kErrorOutlineIcon,
+                                            kHoldingSpaceIconSize,
+                                            gfx::kGoogleRed600));
+              EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image));
+              run_loop.Quit();
+            }));
+
+    // Force a thumbnail request and wait for the `ThumbnailLoader` to finish
+    // processing the request.
+    model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground);
+    run_loop.Run();
+  }
+
   // Complete the download.
   current_state = download::DownloadItem::COMPLETE;
   current_path = current_target_path;
@@ -1922,9 +1957,9 @@
   EXPECT_EQ(model->items()[0]->file_path(), current_path);
   EXPECT_TRUE(model->items()[0]->progress().IsComplete());
 
-  // The image should still be representative of the file type of the *target*
-  // file for the underlying download which by this point is actually the same
-  // file path as the backing file path.
+  // The image should be representative of the file type of the *target* file
+  // for the underlying download which by this point is actually the same file
+  // path as the backing file path.
   gfx::ImageSkia actual_image =
       model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground);
   gfx::ImageSkia expected_image =
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
index 0d97c2f8..a08a610a 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
@@ -1495,6 +1495,33 @@
     }
   }
 
+  // Updates whether the specified `in_progress_download` of the appropriate
+  // type for Ash or Lacros given test parameterization is dangerous or mixed
+  // content.
+  void UpdateInProgressDownloadIsDangerousOrMixedContent(
+      AshOrLacrosDownload* in_progress_download,
+      bool is_dangerous,
+      bool is_mixed_content) {
+    switch (GetDownloadTypeToUse()) {
+      case DownloadTypeToUse::kAsh: {
+        auto& in_progress_ash_download = absl::get<0>(*in_progress_download);
+        ON_CALL(*in_progress_ash_download, IsDangerous())
+            .WillByDefault(testing::Return(is_dangerous));
+        ON_CALL(*in_progress_ash_download, IsMixedContent())
+            .WillByDefault(testing::Return(is_mixed_content));
+        NotifyObserversAshDownloadUpdated(in_progress_ash_download.get());
+        return;
+      }
+      case DownloadTypeToUse::kLacros: {
+        auto& in_progress_lacros_download = absl::get<1>(*in_progress_download);
+        in_progress_lacros_download->is_dangerous = is_dangerous;
+        in_progress_lacros_download->is_mixed_content = is_mixed_content;
+        NotifyObserversLacrosDownloadUpdated(in_progress_lacros_download.get());
+        return;
+      }
+    }
+  }
+
   // Returns the target file path for the specified `download` of the
   // appropriate type for Ash or Lacros given test parameterization.
   base::FilePath GetTargetFilePath(const AshOrLacrosDownload* download) const {
@@ -1658,6 +1685,10 @@
     lacros_download_item->open_when_complete = false;
     lacros_download_item->has_open_when_complete = true;
     lacros_download_item->start_time = base::Time::Now();
+    lacros_download_item->is_dangerous = false;
+    lacros_download_item->has_is_dangerous = true;
+    lacros_download_item->is_mixed_content = false;
+    lacros_download_item->has_is_mixed_content = true;
 
     auto* const download_controller_ash = crosapi::CrosapiManager::Get()
                                               ->crosapi_ash()
@@ -1876,7 +1907,7 @@
 
   // Because the download has not yet been marked complete, the number of bytes
   // received will not equal the total number of expected bytes but in most
-  // cases that will be imperceivable to the user due to rounding. This is to
+  // cases that will be imperceptible to the user due to rounding. This is to
   // prevent giving the impression of completion before download progress is
   // truly complete (which does not occur until after renaming, etc).
   EXPECT_TRUE(primary_label->GetVisible());
@@ -1884,6 +1915,54 @@
   EXPECT_TRUE(secondary_label->GetVisible());
   WaitForText(secondary_label, u"Paused, 2.0/2.0 MB");
 
+  // Mark the download as dangerous.
+  UpdateInProgressDownloadIsDangerousOrMixedContent(in_progress_download.get(),
+                                                    /*is_dangerous=*/true,
+                                                    /*is_mixed_content=*/false);
+
+  // Because the download is marked as dangerous, that should be indicated in
+  // the `secondary_label` of the holding space item chip view.
+  EXPECT_TRUE(primary_label->GetVisible());
+  EXPECT_EQ(primary_label->GetText(), target_file_name);
+  EXPECT_TRUE(secondary_label->GetVisible());
+  WaitForText(secondary_label, u"Dangerous file");
+
+  // Mark the download as safe.
+  UpdateInProgressDownloadIsDangerousOrMixedContent(in_progress_download.get(),
+                                                    /*is_dangerous=*/false,
+                                                    /*is_mixed_content=*/false);
+
+  // Because the download is no longer marked as dangerous, that should be
+  // indicated in the `secondary_label` of the holding space item chip view.
+  EXPECT_TRUE(primary_label->GetVisible());
+  EXPECT_EQ(primary_label->GetText(), target_file_name);
+  EXPECT_TRUE(secondary_label->GetVisible());
+  WaitForText(secondary_label, u"Paused, 2.0/2.0 MB");
+
+  // Mark the download as mixed content.
+  UpdateInProgressDownloadIsDangerousOrMixedContent(in_progress_download.get(),
+                                                    /*is_dangerous=*/false,
+                                                    /*is_mixed_content=*/true);
+
+  // Because the download is marked as mixed content, that should be indicated
+  // in the `secondary_label` of the holding space item chip view.
+  EXPECT_TRUE(primary_label->GetVisible());
+  EXPECT_EQ(primary_label->GetText(), target_file_name);
+  EXPECT_TRUE(secondary_label->GetVisible());
+  WaitForText(secondary_label, u"Dangerous file");
+
+  // Mark the download as *not* mixed content.
+  UpdateInProgressDownloadIsDangerousOrMixedContent(in_progress_download.get(),
+                                                    /*is_dangerous=*/false,
+                                                    /*is_mixed_content=*/false);
+
+  // Because the download is no longer marked as mixed content, that should be
+  // indicated in the `secondary_label` of the holding space item chip view.
+  EXPECT_TRUE(primary_label->GetVisible());
+  EXPECT_EQ(primary_label->GetText(), target_file_name);
+  EXPECT_TRUE(secondary_label->GetVisible());
+  WaitForText(secondary_label, u"Paused, 2.0/2.0 MB");
+
   // Complete the download.
   CompleteInProgressDownload(in_progress_download.get());
 
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index c7b30a8..2dbdf3e 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -663,10 +663,10 @@
 
     auto launch_container =
         apps::mojom::LaunchContainer::kLaunchContainerWindow;
-    if (web_app::WebAppProvider::Get(profile)
-            ->registrar()
-            .GetAppEffectiveDisplayMode(app_id) ==
-        blink::mojom::DisplayMode::kBrowser) {
+
+    auto* provider = web_app::WebAppProvider::GetForWebApps(profile);
+    if (provider && provider->registrar().GetAppEffectiveDisplayMode(app_id) ==
+                        blink::mojom::DisplayMode::kBrowser) {
       launch_container = apps::mojom::LaunchContainer::kLaunchContainerTab;
     }
     apps::AppLaunchParams params = apps::AppLaunchParams(
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index 494a5b3..94b675b 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -62,9 +62,9 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/test/test_web_app_provider.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_provider_factory.h"
@@ -1677,9 +1677,10 @@
   // the PRE test.
   web_app::WebAppProvider* const provider =
       web_app::WebAppProvider::Get(browser()->profile());
-  web_app::InstallFinalizer& web_app_finalizer = provider->install_finalizer();
+  web_app::WebAppInstallFinalizer& web_app_finalizer =
+      provider->install_finalizer();
 
-  web_app::InstallFinalizer::FinalizeOptions options;
+  web_app::WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON;
 
   // Install web app set to open as a tab.
diff --git a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
index 9bb149b..8ebfffd 100644
--- a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
@@ -23,10 +23,10 @@
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
 #include "chrome/browser/web_applications/components/install_bounce_metric.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_prefs_utils.h"
 #include "chrome/browser/web_applications/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc
index 4d0b802..de70fef 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc
@@ -32,13 +32,13 @@
 #include "chrome/browser/ui/web_applications/web_app_menu_model.h"
 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/policy/web_app_policy_constants.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/browser/web_applications/manifest_update_manager.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/test/web_app_install_observer.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_view.cc b/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_view.cc
index 355428c8..ea32d14a 100644
--- a/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_view.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_view.cc
@@ -16,8 +16,8 @@
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/web_apps/web_app_info_image_source.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
index 6232448..4d3f4b32 100644
--- a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
+++ b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
@@ -184,8 +184,7 @@
     DCHECK(!params.url.has_value())
         << "Launch URL can't be used with launch_paths.";
     app_service->LaunchAppWithFiles(
-        *app_id, apps::mojom::LaunchContainer::kLaunchContainerWindow,
-        event_flags, params.launch_source,
+        *app_id, event_flags, params.launch_source,
         apps::mojom::FilePaths::New(params.launch_paths));
     return;
   }
diff --git a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
index a0e54ba..9842d22 100644
--- a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
+++ b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
@@ -13,6 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "build/build_config.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
@@ -28,13 +29,13 @@
 #include "chrome/browser/ui/toolbar/app_menu_model.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/web_applications/components/external_install_options.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/service_worker_registration_waiter.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc
index 9847454..c36c1890 100644
--- a/chrome/browser/ui/web_applications/web_app_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -52,12 +52,12 @@
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
 #include "chrome/browser/web_applications/components/external_install_options.h"
 #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/test/web_app_install_observer.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/ui/web_applications/web_app_dialog_manager.cc b/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
index d06ff3c6..91ed393 100644
--- a/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
+++ b/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/web_applications/web_app_uninstall_dialog.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 
 namespace web_app {
diff --git a/chrome/browser/ui/web_applications/web_app_uninstall_browsertest.cc b/chrome/browser/ui/web_applications/web_app_uninstall_browsertest.cc
index a361bd8..30749dc 100644
--- a/chrome/browser/ui/web_applications/web_app_uninstall_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_uninstall_browsertest.cc
@@ -16,10 +16,10 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/browser/web_applications/isolation_prefs_utils.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
diff --git a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc
index ddcd2dc..b18c6fe 100644
--- a/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_untrusted_web_ui_controller_factory.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/ash/web_applications/help_app/help_app_untrusted_ui_config.h"
 #include "chrome/browser/ash/web_applications/media_app/media_app_guest_ui_config.h"
 #include "chrome/browser/ash/web_applications/terminal_ui.h"
+#include "chromeos/components/eche_app_ui/untrusted_eche_app_ui.h"
 #include "chromeos/components/help_app_ui/help_app_kids_magazine_untrusted_ui.h"
 #include "chromeos/components/personalization_app/untrusted_personalization_app_ui_config.h"
 #include "chromeos/components/projector_app/untrusted_projector_ui_config.h"
@@ -61,6 +62,8 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   register_config(std::make_unique<TerminalUIConfig>());
+  register_config(
+      std::make_unique<chromeos::eche_app::UntrustedEcheAppUIConfig>());
   register_config(std::make_unique<MediaAppGuestUIConfig>());
   register_config(
       std::make_unique<chromeos::UntrustedPersonalizationAppUIConfig>());
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
index d63ae349..e5d1344 100644
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -7,6 +7,8 @@
 #include <memory>
 #include <string>
 
+#include "ash/components/security_token_pin/constants.h"
+#include "ash/components/security_token_pin/error_generator.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_switches.h"
 #include "ash/constants/devicetype.h"
@@ -72,8 +74,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/installer/util/google_update_settings.h"
-#include "chromeos/components/security_token_pin/constants.h"
-#include "chromeos/components/security_token_pin/error_generator.h"
 #include "chromeos/dbus/util/version_loader.h"
 #include "chromeos/login/auth/challenge_response/cert_utils.h"
 #include "chromeos/login/auth/cryptohome_key_constants.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
index 4b2d5f7..2a95172 100644
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "ash/components/security_token_pin/constants.h"
 #include "base/command_line.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -20,7 +21,6 @@
 #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
 #include "chrome/browser/ui/webui/chromeos/login/online_login_helper.h"
 #include "chrome/browser/ui/webui/chromeos/login/saml_challenge_key_handler.h"
-#include "chromeos/components/security_token_pin/constants.h"
 #include "components/user_manager/user_type.h"
 #include "net/base/net_errors.h"
 #include "net/cookies/canonical_cookie.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.cc
index 2206972..f5a86a9 100644
--- a/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.cc
@@ -65,21 +65,22 @@
   screen_ = screen;
 }
 
-void TermsOfServiceScreenHandler::Show() {
+void TermsOfServiceScreenHandler::Show(const std::string& manager) {
+  manager_ = manager;
   if (!page_is_ready()) {
     show_on_init_ = true;
     return;
   }
-  DoShow();
+  // Update the UI to show an error message or the Terms of Service.
+  UpdateTermsOfServiceInUI();
+
+  base::DictionaryValue data;
+  data.SetString("manager", manager_);
+
+  ShowScreenWithData(kScreenId, &data);
 }
 
-void TermsOfServiceScreenHandler::Hide() {
-}
-
-void TermsOfServiceScreenHandler::SetManager(const std::string& manager) {
-  manager_ = manager;
-  UpdateManagerInUI();
-}
+void TermsOfServiceScreenHandler::Hide() {}
 
 void TermsOfServiceScreenHandler::OnLoadError() {
   load_error_ = true;
@@ -100,45 +101,11 @@
 
 void TermsOfServiceScreenHandler::Initialize() {
   if (show_on_init_) {
-    Show();
+    Show(manager_);
     show_on_init_ = false;
   }
 }
 
-void TermsOfServiceScreenHandler::DoShow() {
-  // Determine the user's most preferred input method.
-  std::vector<std::string> input_methods = base::SplitString(
-      ProfileHelper::Get()
-          ->GetProfileByUserUnsafe(
-              user_manager::UserManager::Get()->GetActiveUser())
-          ->GetPrefs()
-          ->GetString(prefs::kLanguagePreloadEngines),
-      ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-
-  if (!input_methods.empty()) {
-    // If the user has a preferred input method, enable it and switch to it.
-    chromeos::input_method::InputMethodManager* input_method_manager =
-        chromeos::input_method::InputMethodManager::Get();
-    input_method_manager->GetActiveIMEState()->EnableInputMethod(
-        input_methods.front());
-    input_method_manager->GetActiveIMEState()->ChangeInputMethod(
-        input_methods.front(), false /* show_message */);
-  }
-
-  // Updates the manager name shown in the UI.
-  UpdateManagerInUI();
-
-  // Update the UI to show an error message or the Terms of Service.
-  UpdateTermsOfServiceInUI();
-
-  ShowScreen(kScreenId);
-}
-
-void TermsOfServiceScreenHandler::UpdateManagerInUI() {
-  if (page_is_ready())
-    CallJS("login.TermsOfServiceScreen.setManager", manager_);
-}
-
 void TermsOfServiceScreenHandler::UpdateTermsOfServiceInUI() {
   if (!page_is_ready())
     return;
diff --git a/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h
index b18e387..a64d9662 100644
--- a/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h
@@ -30,14 +30,11 @@
   virtual void SetScreen(ash::TermsOfServiceScreen* screen) = 0;
 
   // Shows the contents of the screen.
-  virtual void Show() = 0;
+  virtual void Show(const std::string& manager) = 0;
 
   // Hides the contents of the screen.
   virtual void Hide() = 0;
 
-  // Sets the manager whose Terms of Service are being shown.
-  virtual void SetManager(const std::string& manager) = 0;
-
   // Called when the download of the Terms of Service fails. Show an error
   // message to the user.
   virtual void OnLoadError() = 0;
@@ -65,9 +62,8 @@
 
   // TermsOfServiceScreenView:
   void SetScreen(ash::TermsOfServiceScreen* screen) override;
-  void Show() override;
+  void Show(const std::string& manager) override;
   void Hide() override;
-  void SetManager(const std::string& manager) override;
   void OnLoadError() override;
   void OnLoadSuccess(const std::string& terms_of_service) override;
   bool AreTermsLoaded() override;
@@ -76,14 +72,6 @@
   // BaseScreenHandler:
   void Initialize() override;
 
-  // Switch to the user's preferred input method and show the screen. This
-  // method is called after it has been ensured that the current UI locale
-  // matches the UI locale chosen by the user.
-  void DoShow();
-
-  // Update the manager shown in the UI.
-  void UpdateManagerInUI();
-
   // Update the UI to show an error message or the Terms of Service, depending
   // on whether the download of the Terms of Service was successful. Does
   // nothing if the download is still in progress.
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index 04d170ba..d471bfa 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -51,11 +51,11 @@
 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/buildflags.h"
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index e1730bb..f6e9b90 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -25,7 +25,6 @@
     "components/file_handling_permission_context.h",
     "components/install_bounce_metric.cc",
     "components/install_bounce_metric.h",
-    "components/install_finalizer.h",
     "components/policy/web_app_policy_constants.cc",
     "components/policy/web_app_policy_constants.h",
     "components/preinstalled_app_install_features.cc",
@@ -103,7 +102,6 @@
     "file_handlers_permission_helper.h",
     "file_utils_wrapper.cc",
     "file_utils_wrapper.h",
-    "install_finalizer.cc",
     "isolation_prefs_utils.cc",
     "isolation_prefs_utils.h",
     "manifest_update_manager.cc",
@@ -471,7 +469,6 @@
 
   sources = [
     "components/file_handler_manager_unittest.cc",
-    "components/install_finalizer_unittest.cc",
     "components/preinstalled_app_install_features_unittest.cc",
     "components/protocol_handler_manager_unittest.cc",
     "components/web_app_constants_unittest.cc",
@@ -496,6 +493,7 @@
     "system_web_apps/test/system_web_app_manager_unittest.cc",
     "web_app_database_unittest.cc",
     "web_app_icon_manager_unittest.cc",
+    "web_app_install_finalizer_unittest.cc",
     "web_app_install_manager_unittest.cc",
     "web_app_install_task_unittest.cc",
     "web_app_installation_utils_unittest.cc",
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
index e37583e..2a7f3e3 100644
--- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
+++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -19,13 +19,13 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
@@ -485,13 +485,15 @@
 
 content::WebContents* WebAppPublisherHelper::LaunchAppWithFiles(
     const std::string& app_id,
-    apps::mojom::LaunchContainer container,
     int32_t event_flags,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::FilePathsPtr file_paths) {
-  apps::AppLaunchParams params(
-      app_id, container, ui::DispositionFromEventFlags(event_flags),
-      apps::GetAppLaunchSource(launch_source), display::kDefaultDisplayId);
+  DisplayMode display_mode = registrar().GetAppEffectiveDisplayMode(app_id);
+  apps::AppLaunchParams params = apps::CreateAppIdLaunchParamsWithEventFlags(
+      app_id, event_flags, apps::GetAppLaunchSource(launch_source),
+      display::kDefaultDisplayId,
+      /*fallback_container=*/
+      ConvertDisplayModeToAppLaunchContainer(display_mode));
   if (file_paths) {
     for (const auto& file_path : file_paths->file_paths) {
       params.launch_files.push_back(file_path);
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
index dd63deb..63618060 100644
--- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
+++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
@@ -151,7 +151,6 @@
 
   content::WebContents* LaunchAppWithFiles(
       const std::string& app_id,
-      apps::mojom::LaunchContainer container,
       int32_t event_flags,
       apps::mojom::LaunchSource launch_source,
       apps::mojom::FilePathsPtr file_paths);
diff --git a/chrome/browser/web_applications/app_service/web_apps_base.cc b/chrome/browser/web_applications/app_service/web_apps_base.cc
index 72f7dd8..abb00a1f 100644
--- a/chrome/browser/web_applications/app_service/web_apps_base.cc
+++ b/chrome/browser/web_applications/app_service/web_apps_base.cc
@@ -16,12 +16,12 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_manager.h"
 #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
@@ -146,12 +146,11 @@
 }
 
 void WebAppsBase::LaunchAppWithFiles(const std::string& app_id,
-                                     apps::mojom::LaunchContainer container,
                                      int32_t event_flags,
                                      apps::mojom::LaunchSource launch_source,
                                      apps::mojom::FilePathsPtr file_paths) {
-  publisher_helper().LaunchAppWithFiles(app_id, container, event_flags,
-                                        launch_source, std::move(file_paths));
+  publisher_helper().LaunchAppWithFiles(app_id, event_flags, launch_source,
+                                        std::move(file_paths));
 }
 
 void WebAppsBase::LaunchAppWithIntent(const std::string& app_id,
diff --git a/chrome/browser/web_applications/app_service/web_apps_base.h b/chrome/browser/web_applications/app_service/web_apps_base.h
index 690adb29..603f798 100644
--- a/chrome/browser/web_applications/app_service/web_apps_base.h
+++ b/chrome/browser/web_applications/app_service/web_apps_base.h
@@ -81,7 +81,6 @@
               apps::mojom::LaunchSource launch_source,
               apps::mojom::WindowInfoPtr window_info) override;
   void LaunchAppWithFiles(const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths) override;
diff --git a/chrome/browser/web_applications/app_service/web_apps_chromeos.cc b/chrome/browser/web_applications/app_service/web_apps_chromeos.cc
index 2510a28..be4dc64 100644
--- a/chrome/browser/web_applications/app_service/web_apps_chromeos.cc
+++ b/chrome/browser/web_applications/app_service/web_apps_chromeos.cc
@@ -26,13 +26,13 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_manager.h"
 #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc b/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc
index 311ea001..1c9691a 100644
--- a/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc
+++ b/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc
@@ -133,13 +133,11 @@
 
 content::WebContents* WebAppsPublisherHost::LaunchAppWithFiles(
     const std::string& app_id,
-    apps::mojom::LaunchContainer container,
     int32_t event_flags,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::FilePathsPtr file_paths) {
   return publisher_helper().LaunchAppWithFiles(
-      app_id, std::move(container), event_flags, std::move(launch_source),
-      std::move(file_paths));
+      app_id, event_flags, std::move(launch_source), std::move(file_paths));
 }
 
 content::WebContents* WebAppsPublisherHost::LaunchAppWithIntent(
diff --git a/chrome/browser/web_applications/app_service/web_apps_publisher_host.h b/chrome/browser/web_applications/app_service/web_apps_publisher_host.h
index 039d8fd..83a296fc 100644
--- a/chrome/browser/web_applications/app_service/web_apps_publisher_host.h
+++ b/chrome/browser/web_applications/app_service/web_apps_publisher_host.h
@@ -63,7 +63,6 @@
                                apps::mojom::WindowInfoPtr window_info);
   content::WebContents* LaunchAppWithFiles(
       const std::string& app_id,
-      apps::mojom::LaunchContainer container,
       int32_t event_flags,
       apps::mojom::LaunchSource launch_source,
       apps::mojom::FilePathsPtr file_paths);
diff --git a/chrome/browser/web_applications/components/install_finalizer.h b/chrome/browser/web_applications/components/install_finalizer.h
deleted file mode 100644
index de7ab33a..0000000
--- a/chrome/browser/web_applications/components/install_finalizer.h
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_INSTALL_FINALIZER_H_
-#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_INSTALL_FINALIZER_H_
-
-#include "base/callback_forward.h"
-#include "chrome/browser/web_applications/components/web_app_chromeos_data.h"
-#include "chrome/browser/web_applications/components/web_app_id.h"
-#include "chrome/browser/web_applications/components/web_app_system_web_app_data.h"
-#include "components/webapps/browser/installable/installable_metrics.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-
-struct WebApplicationInfo;
-class GURL;
-
-namespace content {
-class WebContents;
-}
-
-namespace webapps {
-enum class WebappUninstallSource;
-}
-
-namespace web_app {
-
-enum class ExternalInstallSource;
-enum class InstallResultCode;
-class WebAppRegistrar;
-class AppRegistryController;
-class WebApp;
-class WebAppUiManager;
-class OsIntegrationManager;
-
-// An abstract finalizer for the installation process, represents the last step.
-// Takes WebApplicationInfo as input, writes data to disk (e.g icons, shortcuts)
-// and registers an app.
-class InstallFinalizer {
- public:
-  using InstallFinalizedCallback =
-      base::OnceCallback<void(const AppId& app_id, InstallResultCode code)>;
-  using UninstallWebAppCallback = base::OnceCallback<void(bool uninstalled)>;
-  using RepeatingUninstallCallback =
-      base::RepeatingCallback<void(const AppId& app_id, bool uninstalled)>;
-
-  struct FinalizeOptions {
-    FinalizeOptions();
-    ~FinalizeOptions();
-    FinalizeOptions(const FinalizeOptions&);
-
-    webapps::WebappInstallSource install_source =
-        webapps::WebappInstallSource::COUNT;
-    bool locally_installed = true;
-
-    absl::optional<WebAppChromeOsData> chromeos_data;
-    absl::optional<WebAppSystemWebAppData> system_web_app_data;
-  };
-
-  // Write the WebApp data to disk and register the app.
-  virtual void FinalizeInstall(const WebApplicationInfo& web_app_info,
-                               const FinalizeOptions& options,
-                               InstallFinalizedCallback callback) = 0;
-
-  // Write the new WebApp data to disk and update the app.
-  // TODO(https://crbug.com/1196051): Chrome fails to update the manifest
-  // if the app window needing update closes at the same time as Chrome.
-  // Therefore, the manifest may not always update as expected.
-  virtual void FinalizeUpdate(const WebApplicationInfo& web_app_info,
-                              content::WebContents* web_contents,
-                              InstallFinalizedCallback callback) = 0;
-
-  // Removes |webapp_uninstall_source| from |app_id|. If no more interested
-  // sources left, deletes the app from disk and registrar.
-  virtual void UninstallExternalWebApp(
-      const AppId& app_id,
-      webapps::WebappUninstallSource webapp_uninstall_source,
-      UninstallWebAppCallback callback) = 0;
-
-  // Removes the external app for |app_url| from disk and registrar. Fails if
-  // there is no installed external app for |app_url|. Virtual for testing.
-  virtual void UninstallExternalWebAppByUrl(
-      const GURL& app_url,
-      webapps::WebappUninstallSource webapp_uninstall_source,
-      UninstallWebAppCallback callback);
-
-  virtual bool CanUserUninstallWebApp(const AppId& app_id) const = 0;
-
-  // Removes |webapp_uninstall_source| from |app_id|. If no more interested
-  // sources left, deletes the app from disk and registrar.
-  virtual void UninstallWebApp(
-      const AppId& app_id,
-      webapps::WebappUninstallSource webapp_uninstall_source,
-      UninstallWebAppCallback callback) = 0;
-
-  // Sync-initiated uninstall. Copied from WebAppInstallSyncInstallDelegate.
-  // Called before the web apps are removed from the registry. Begins process of
-  // uninstalling OS hooks, which initially requires the registrar to still
-  // contain the web app data. Also notify observers of WebAppWillBeUninstalled.
-  // TODO(dmurph): After migration to WebApp* from the registry, this could
-  // potentially just be done in one step, after removal from registry, as os
-  // hooks information could be passed.
-  virtual void UninstallFromSyncBeforeRegistryUpdate(
-      std::vector<AppId> web_apps) = 0;
-  // Delete non-database app data from disk (icon .png files). |app_id| must be
-  // unregistered. Observers are notified of WebAppUninstalled and the
-  // |callback| is called after the app data is fully deleted & os hooks
-  // uninstalled.
-  virtual void UninstallFromSyncAfterRegistryUpdate(
-      std::vector<std::unique_ptr<WebApp>> web_apps,
-      RepeatingUninstallCallback callback) = 0;
-
-  // Returns true if the app with |app_id| was previously uninstalled by the
-  // user. For example, if a user uninstalls a default app ('default apps' are
-  // considered external apps), then this will return true.
-  virtual bool WasPreinstalledWebAppUninstalled(const AppId& app_id) const = 0;
-
-  // |virtual| for testing.
-  virtual bool CanReparentTab(const AppId& app_id, bool shortcut_created) const;
-  virtual void ReparentTab(const AppId& app_id,
-                           bool shortcut_created,
-                           content::WebContents* web_contents);
-
-  virtual void SetRemoveSourceCallbackForTesting(
-      base::RepeatingCallback<void(const AppId&)>) = 0;
-
-  virtual void Start() {}
-  virtual void Shutdown() {}
-
-  void SetSubsystems(WebAppRegistrar* registrar,
-                     WebAppUiManager* ui_manager,
-                     AppRegistryController* registry_controller,
-                     OsIntegrationManager* os_integration_manager);
-
-  virtual ~InstallFinalizer() = default;
-
- protected:
-  bool is_legacy_finalizer() const { return registrar_ == nullptr; }
-  WebAppRegistrar& registrar() const;
-
-  WebAppUiManager& ui_manager() const { return *ui_manager_; }
-  AppRegistryController& registry_controller() { return *registry_controller_; }
-  OsIntegrationManager& os_integration_manager() {
-    return *os_integration_manager_;
-  }
-
- private:
-  // If these pointers are nullptr then this is legacy install finalizer
-  // operating in standalone mode.
-  WebAppRegistrar* registrar_ = nullptr;
-  AppRegistryController* registry_controller_ = nullptr;
-  WebAppUiManager* ui_manager_ = nullptr;
-  OsIntegrationManager* os_integration_manager_ = nullptr;
-};
-
-}  // namespace web_app
-
-#endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_INSTALL_FINALIZER_H_
diff --git a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
index b7b97b0..0bdb7762 100644
--- a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
@@ -34,6 +33,7 @@
 #include "chrome/browser/web_applications/test/test_web_app_ui_manager.h"
 #include "chrome/browser/web_applications/test/test_web_app_url_loader.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -86,11 +86,12 @@
   return entry->FindBoolKey("is_placeholder").value();
 }
 
-class TestExternallyManagedAppInstallFinalizer : public InstallFinalizer {
+class TestExternallyManagedAppInstallFinalizer : public WebAppInstallFinalizer {
  public:
   explicit TestExternallyManagedAppInstallFinalizer(
       WebAppRegistrarMutable* registrar)
-      : registrar_(registrar) {}
+      : WebAppInstallFinalizer(nullptr, nullptr, nullptr),
+        registrar_(registrar) {}
   TestExternallyManagedAppInstallFinalizer(
       const TestExternallyManagedAppInstallFinalizer&) = delete;
   TestExternallyManagedAppInstallFinalizer& operator=(
@@ -157,7 +158,7 @@
 
   size_t num_reparent_tab_calls() { return num_reparent_tab_calls_; }
 
-  // InstallFinalizer
+  // WebAppInstallFinalizer
   void FinalizeInstall(const WebApplicationInfo& web_app_info,
                        const FinalizeOptions& options,
                        InstallFinalizedCallback callback) override {
@@ -354,7 +355,7 @@
     return install_finalizer_->web_app_info_list().at(0);
   }
 
-  const InstallFinalizer::FinalizeOptions& finalize_options() {
+  const WebAppInstallFinalizer::FinalizeOptions& finalize_options() {
     DCHECK_EQ(1u, install_finalizer_->finalize_options_list().size());
     return install_finalizer_->finalize_options_list().at(0);
   }
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.cc b/chrome/browser/web_applications/externally_managed_app_install_task.cc
index 18e7252e..e1e1d80 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.cc
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.cc
@@ -17,10 +17,10 @@
 #include "chrome/browser/favicon/favicon_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_installation_utils.h"
 #include "components/webapps/browser/installable/installable_manager.h"
@@ -44,7 +44,7 @@
     WebAppRegistrar* registrar,
     OsIntegrationManager* os_integration_manager,
     WebAppUiManager* ui_manager,
-    InstallFinalizer* install_finalizer,
+    WebAppInstallFinalizer* install_finalizer,
     WebAppInstallManager* install_manager,
     ExternalInstallOptions install_options)
     : profile_(profile),
@@ -260,7 +260,7 @@
       break;
   }
 
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::EXTERNAL_POLICY;
 
   install_finalizer_->FinalizeInstall(
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.h b/chrome/browser/web_applications/externally_managed_app_install_task.h
index 0ba2bb1..2076281 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.h
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.h
@@ -29,7 +29,7 @@
 
 class WebAppUrlLoader;
 class OsIntegrationManager;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 class WebAppInstallManager;
 class WebAppUiManager;
 enum class InstallResultCode;
@@ -55,7 +55,7 @@
       WebAppRegistrar* registrar,
       OsIntegrationManager* os_integration_manager,
       WebAppUiManager* ui_manager,
-      InstallFinalizer* install_finalizer,
+      WebAppInstallFinalizer* install_finalizer,
       WebAppInstallManager* install_manager,
       ExternalInstallOptions install_options);
 
@@ -112,7 +112,7 @@
   WebAppUrlLoader* const url_loader_;
   WebAppRegistrar* const registrar_;
   OsIntegrationManager* const os_integration_manager_;
-  InstallFinalizer* const install_finalizer_;
+  WebAppInstallFinalizer* const install_finalizer_;
   WebAppInstallManager* const install_manager_;
   WebAppUiManager* const ui_manager_;
 
diff --git a/chrome/browser/web_applications/externally_managed_app_manager.cc b/chrome/browser/web_applications/externally_managed_app_manager.cc
index 8c03b5c..dd8ab820 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager.cc
@@ -49,7 +49,7 @@
     WebAppRegistrar* registrar,
     OsIntegrationManager* os_integration_manager,
     WebAppUiManager* ui_manager,
-    InstallFinalizer* finalizer,
+    WebAppInstallFinalizer* finalizer,
     WebAppInstallManager* install_manager) {
   registrar_ = registrar;
   os_integration_manager_ = os_integration_manager;
diff --git a/chrome/browser/web_applications/externally_managed_app_manager.h b/chrome/browser/web_applications/externally_managed_app_manager.h
index 2e273bd..06fb987 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager.h
+++ b/chrome/browser/web_applications/externally_managed_app_manager.h
@@ -23,7 +23,7 @@
 
 class WebAppRegistrar;
 class OsIntegrationManager;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 class WebAppInstallManager;
 class WebAppUiManager;
 
@@ -79,7 +79,7 @@
   void SetSubsystems(WebAppRegistrar* registrar,
                      OsIntegrationManager* os_integration_manager,
                      WebAppUiManager* ui_manager,
-                     InstallFinalizer* finalizer,
+                     WebAppInstallFinalizer* finalizer,
                      WebAppInstallManager* install_manager);
 
   // Queues an installation operation with the highest priority. Essentially
@@ -151,7 +151,7 @@
     return os_integration_manager_;
   }
   WebAppUiManager* ui_manager() { return ui_manager_; }
-  InstallFinalizer* finalizer() { return finalizer_; }
+  WebAppInstallFinalizer* finalizer() { return finalizer_; }
   WebAppInstallManager* install_manager() { return install_manager_; }
 
   virtual void OnRegistrationFinished(const GURL& launch_url,
@@ -187,7 +187,7 @@
   WebAppRegistrar* registrar_ = nullptr;
   OsIntegrationManager* os_integration_manager_ = nullptr;
   WebAppUiManager* ui_manager_ = nullptr;
-  InstallFinalizer* finalizer_ = nullptr;
+  WebAppInstallFinalizer* finalizer_ = nullptr;
   WebAppInstallManager* install_manager_ = nullptr;
 
   base::flat_map<ExternalInstallSource, SynchronizeRequest>
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
index 422722b..0b74661 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
@@ -14,10 +14,10 @@
 #include "base/feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/externally_managed_app_registration_task.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
index 3d92d69..d41cbe8 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/timer/mock_timer.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/externally_managed_app_install_task.h"
@@ -31,6 +30,7 @@
 #include "chrome/browser/web_applications/test/web_app_registration_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/test/base/testing_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -1580,8 +1580,8 @@
     EXPECT_EQ(kFooWebAppUrl, url.value());
 
     // Even though the placeholder app is already install, we make a call to
-    // InstallFinalizer. InstallFinalizer ensures we don't unnecessarily
-    // install the placeholder app again.
+    // WebAppInstallFinalizer. WebAppInstallFinalizer ensures we don't
+    // unnecessarily install the placeholder app again.
     EXPECT_EQ(2u, install_run_count());
   }
 }
diff --git a/chrome/browser/web_applications/install_finalizer.cc b/chrome/browser/web_applications/install_finalizer.cc
deleted file mode 100644
index 20f9694..0000000
--- a/chrome/browser/web_applications/install_finalizer.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/web_applications/components/install_finalizer.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "chrome/browser/web_applications/components/web_app_constants.h"
-#include "chrome/browser/web_applications/components/web_app_ui_manager.h"
-#include "chrome/browser/web_applications/os_integration_manager.h"
-#include "chrome/browser/web_applications/web_app_registrar.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-
-namespace web_app {
-
-InstallFinalizer::FinalizeOptions::FinalizeOptions() = default;
-
-InstallFinalizer::FinalizeOptions::~FinalizeOptions() = default;
-
-InstallFinalizer::FinalizeOptions::FinalizeOptions(const FinalizeOptions&) =
-    default;
-
-void InstallFinalizer::UninstallExternalWebAppByUrl(
-    const GURL& app_url,
-    webapps::WebappUninstallSource webapp_uninstall_source,
-    UninstallWebAppCallback callback) {
-  absl::optional<AppId> app_id = registrar().LookupExternalAppId(app_url);
-  if (!app_id.has_value()) {
-    LOG(WARNING) << "Couldn't uninstall web app with url " << app_url
-                 << "; No corresponding web app for url.";
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), /*uninstalled=*/false));
-    return;
-  }
-
-  UninstallExternalWebApp(app_id.value(), webapp_uninstall_source,
-                          std::move(callback));
-}
-
-void InstallFinalizer::SetSubsystems(
-    WebAppRegistrar* registrar,
-    WebAppUiManager* ui_manager,
-    AppRegistryController* registry_controller,
-    OsIntegrationManager* os_integration_manager) {
-  registrar_ = registrar;
-  ui_manager_ = ui_manager;
-  registry_controller_ = registry_controller;
-  os_integration_manager_ = os_integration_manager;
-}
-
-bool InstallFinalizer::CanReparentTab(const AppId& app_id,
-                                      bool shortcut_created) const {
-  // Reparent the web contents into its own window only if that is the
-  // app's launch type.
-  DCHECK(registrar_);
-  if (registrar_->GetAppUserDisplayMode(app_id) != DisplayMode::kStandalone)
-    return false;
-
-  return ui_manager().CanReparentAppTabToWindow(app_id, shortcut_created);
-}
-
-void InstallFinalizer::ReparentTab(const AppId& app_id,
-                                   bool shortcut_created,
-                                   content::WebContents* web_contents) {
-  DCHECK(web_contents);
-  return ui_manager().ReparentAppTabToWindow(web_contents, app_id,
-                                             shortcut_created);
-}
-
-WebAppRegistrar& InstallFinalizer::registrar() const {
-  DCHECK(!is_legacy_finalizer());
-  return *registrar_;
-}
-
-}  // namespace web_app
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
index 6bd9ddb..e669f43 100644
--- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
+++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -27,7 +27,6 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
@@ -37,6 +36,7 @@
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_registry_update.h"
diff --git a/chrome/browser/web_applications/test/test_install_finalizer.cc b/chrome/browser/web_applications/test/test_install_finalizer.cc
index 5afe2ee..5f81af43 100644
--- a/chrome/browser/web_applications/test/test_install_finalizer.cc
+++ b/chrome/browser/web_applications/test/test_install_finalizer.cc
@@ -26,7 +26,8 @@
   return GenerateAppId(/*manifest_id=*/absl::nullopt, url);
 }
 
-TestInstallFinalizer::TestInstallFinalizer() = default;
+TestInstallFinalizer::TestInstallFinalizer()
+    : WebAppInstallFinalizer(nullptr, nullptr, nullptr) {}
 
 TestInstallFinalizer::~TestInstallFinalizer() = default;
 
diff --git a/chrome/browser/web_applications/test/test_install_finalizer.h b/chrome/browser/web_applications/test/test_install_finalizer.h
index a302470..4497313 100644
--- a/chrome/browser/web_applications/test/test_install_finalizer.h
+++ b/chrome/browser/web_applications/test/test_install_finalizer.h
@@ -9,14 +9,14 @@
 #include <memory>
 #include <set>
 
-#include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 struct WebApplicationInfo;
 
 namespace web_app {
 
-class TestInstallFinalizer final : public InstallFinalizer {
+class TestInstallFinalizer final : public WebAppInstallFinalizer {
  public:
   // Returns what would be the AppId if an app is installed with |url|.
   static AppId GetAppIdForUrl(const GURL& url);
@@ -26,7 +26,7 @@
   TestInstallFinalizer& operator=(const TestInstallFinalizer&) = delete;
   ~TestInstallFinalizer() override;
 
-  // InstallFinalizer:
+  // WebAppInstallFinalizer:
   void FinalizeInstall(const WebApplicationInfo& web_app_info,
                        const FinalizeOptions& options,
                        InstallFinalizedCallback callback) override;
@@ -98,7 +98,6 @@
   std::set<AppId> user_uninstalled_external_apps_;
 
   int num_reparent_tab_calls_ = 0;
-
 };
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/test/test_web_app_provider.cc b/chrome/browser/web_applications/test/test_web_app_provider.cc
index 92513ec..21bbb4fa 100644
--- a/chrome/browser/web_applications/test/test_web_app_provider.cc
+++ b/chrome/browser/web_applications/test/test_web_app_provider.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
@@ -17,6 +16,7 @@
 #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h"
 #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_manager.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider_factory.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -81,7 +81,7 @@
 }
 
 void TestWebAppProvider::SetInstallFinalizer(
-    std::unique_ptr<InstallFinalizer> install_finalizer) {
+    std::unique_ptr<WebAppInstallFinalizer> install_finalizer) {
   CheckNotStarted();
   install_finalizer_ = std::move(install_finalizer);
 }
diff --git a/chrome/browser/web_applications/test/test_web_app_provider.h b/chrome/browser/web_applications/test/test_web_app_provider.h
index d92ac2d..51219f2 100644
--- a/chrome/browser/web_applications/test/test_web_app_provider.h
+++ b/chrome/browser/web_applications/test/test_web_app_provider.h
@@ -23,7 +23,7 @@
 
 class WebAppRegistrar;
 class OsIntegrationManager;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 class ExternallyManagedAppManager;
 class SystemWebAppManager;
 class WebAppInstallManager;
@@ -59,7 +59,8 @@
   void SetOsIntegrationManager(
       std::unique_ptr<OsIntegrationManager> os_integration_manager);
   void SetInstallManager(std::unique_ptr<WebAppInstallManager> install_manager);
-  void SetInstallFinalizer(std::unique_ptr<InstallFinalizer> install_finalizer);
+  void SetInstallFinalizer(
+      std::unique_ptr<WebAppInstallFinalizer> install_finalizer);
   void SetExternallyManagedAppManager(
       std::unique_ptr<ExternallyManagedAppManager>
           externally_managed_app_manager);
diff --git a/chrome/browser/web_applications/test/web_app_install_test_utils.cc b/chrome/browser/web_applications/test/web_app_install_test_utils.cc
index 3d90900c..c108665c 100644
--- a/chrome/browser/web_applications/test/web_app_install_test_utils.cc
+++ b/chrome/browser/web_applications/test/web_app_install_test_utils.cc
@@ -9,13 +9,13 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "build/build_config.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/components/web_app_install_utils.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_manager.h"
 #include "chrome/browser/web_applications/test/test_web_app_provider.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/buildflags.h"
@@ -72,7 +72,7 @@
   web_app_info.description = base::UTF8ToUTF16(app_name);
   web_app_info.open_as_window = true;
 
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::EXTERNAL_DEFAULT;
 
   // In unit tests, we do not have Browser or WebContents instances.
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index fb6400c..a97a310 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -92,6 +92,10 @@
   return sources_[Source::kSystem];
 }
 
+bool WebApp::IsWebAppStoreInstalledApp() const {
+  return sources_[Source::kWebAppStore];
+}
+
 bool WebApp::CanUserUninstallWebApp() const {
   Sources specified_sources;
   specified_sources[Source::kDefault] = true;
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index 3b6802c..1b8045e 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -226,6 +226,7 @@
   bool IsPreinstalledApp() const;
   bool IsPolicyInstalledApp() const;
   bool IsSystemApp() const;
+  bool IsWebAppStoreInstalledApp() const;
   bool CanUserUninstallWebApp() const;
   bool WasInstalledByUser() const;
   // Returns the highest priority source. AppService assumes that every app has
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc
index b218ac60..5ab7ef7 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/web_applications/components/web_app_prefs_utils.h"
 #include "chrome/browser/web_applications/components/web_app_shortcuts_menu.h"
 #include "chrome/browser/web_applications/components/web_app_system_web_app_data.h"
+#include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/file_handlers_permission_helper.h"
@@ -103,6 +104,13 @@
 WebAppInstallFinalizer::SyncUninstallState::SyncUninstallState() = default;
 WebAppInstallFinalizer::SyncUninstallState::~SyncUninstallState() = default;
 
+WebAppInstallFinalizer::FinalizeOptions::FinalizeOptions() = default;
+
+WebAppInstallFinalizer::FinalizeOptions::~FinalizeOptions() = default;
+
+WebAppInstallFinalizer::FinalizeOptions::FinalizeOptions(
+    const FinalizeOptions&) = default;
+
 WebAppInstallFinalizer::WebAppInstallFinalizer(
     Profile* profile,
     WebAppIconManager* icon_manager,
@@ -247,6 +255,23 @@
   UninstallExternalWebAppOrRemoveSource(app_id, source, std::move(callback));
 }
 
+void WebAppInstallFinalizer::UninstallExternalWebAppByUrl(
+    const GURL& app_url,
+    webapps::WebappUninstallSource webapp_uninstall_source,
+    UninstallWebAppCallback callback) {
+  absl::optional<AppId> app_id = registrar().LookupExternalAppId(app_url);
+  if (!app_id.has_value()) {
+    LOG(WARNING) << "Couldn't uninstall web app with url " << app_url
+                 << "; No corresponding web app for url.";
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), /*uninstalled=*/false));
+    return;
+  }
+
+  UninstallExternalWebApp(app_id.value(), webapp_uninstall_source,
+                          std::move(callback));
+}
+
 bool WebAppInstallFinalizer::CanUserUninstallWebApp(const AppId& app_id) const {
   DCHECK(started_);
 
@@ -340,6 +365,25 @@
                            kWasExternalAppUninstalledByUser);
 }
 
+bool WebAppInstallFinalizer::CanReparentTab(const AppId& app_id,
+                                            bool shortcut_created) const {
+  // Reparent the web contents into its own window only if that is the
+  // app's launch type.
+  DCHECK(registrar_);
+  if (registrar_->GetAppUserDisplayMode(app_id) != DisplayMode::kStandalone)
+    return false;
+
+  return ui_manager_->CanReparentAppTabToWindow(app_id, shortcut_created);
+}
+
+void WebAppInstallFinalizer::ReparentTab(const AppId& app_id,
+                                         bool shortcut_created,
+                                         content::WebContents* web_contents) {
+  DCHECK(web_contents);
+  return ui_manager_->ReparentAppTabToWindow(web_contents, app_id,
+                                             shortcut_created);
+}
+
 void WebAppInstallFinalizer::FinalizeUpdate(
     const WebApplicationInfo& web_app_info,
     content::WebContents* web_contents,
@@ -393,6 +437,17 @@
   install_source_removed_callback_for_testing_ = std::move(callback);
 }
 
+void WebAppInstallFinalizer::SetSubsystems(
+    WebAppRegistrar* registrar,
+    WebAppUiManager* ui_manager,
+    AppRegistryController* registry_controller,
+    OsIntegrationManager* os_integration_manager) {
+  registrar_ = registrar;
+  ui_manager_ = ui_manager;
+  registry_controller_ = registry_controller;
+  os_integration_manager_ = os_integration_manager;
+}
+
 void WebAppInstallFinalizer::UninstallWebAppInternal(
     const AppId& app_id,
     webapps::WebappUninstallSource uninstall_source,
@@ -609,4 +664,9 @@
   return registrar();
 }
 
+WebAppRegistrar& WebAppInstallFinalizer::registrar() const {
+  DCHECK(!is_legacy_finalizer());
+  return *registrar_;
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h
index a494ceb..3663bf4 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.h
+++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -11,10 +11,12 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/components/web_app_chromeos_data.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
+#include "chrome/browser/web_applications/components/web_app_system_web_app_data.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/os_integration_manager.h"
+#include "components/webapps/browser/installable/installable_metrics.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 class Profile;
@@ -25,60 +27,134 @@
 
 namespace web_app {
 
+class AppRegistryController;
 class FileHandlersPermissionHelper;
+class WebAppUiManager;
 class WebApp;
 class WebAppIconManager;
 class WebAppPolicyManager;
 class WebAppRegistrar;
 
-class WebAppInstallFinalizer final : public InstallFinalizer {
+// An finalizer for the installation process, represents the last step.
+// Takes WebApplicationInfo as input, writes data to disk (e.g icons, shortcuts)
+// and registers an app.
+class WebAppInstallFinalizer {
  public:
+  using InstallFinalizedCallback =
+      base::OnceCallback<void(const AppId& app_id, InstallResultCode code)>;
+  using UninstallWebAppCallback = base::OnceCallback<void(bool uninstalled)>;
+  using RepeatingUninstallCallback =
+      base::RepeatingCallback<void(const AppId& app_id, bool uninstalled)>;
+
+  struct FinalizeOptions {
+    FinalizeOptions();
+    ~FinalizeOptions();
+    FinalizeOptions(const FinalizeOptions&);
+
+    webapps::WebappInstallSource install_source =
+        webapps::WebappInstallSource::COUNT;
+    bool locally_installed = true;
+
+    absl::optional<WebAppChromeOsData> chromeos_data;
+    absl::optional<WebAppSystemWebAppData> system_web_app_data;
+  };
+
   WebAppInstallFinalizer(Profile* profile,
                          WebAppIconManager* icon_manager,
                          WebAppPolicyManager* policy_manager);
   WebAppInstallFinalizer(const WebAppInstallFinalizer&) = delete;
   WebAppInstallFinalizer& operator=(const WebAppInstallFinalizer&) = delete;
-  ~WebAppInstallFinalizer() override;
+  virtual ~WebAppInstallFinalizer();
 
-  // InstallFinalizer:
-  void FinalizeInstall(const WebApplicationInfo& web_app_info,
-                       const FinalizeOptions& options,
-                       InstallFinalizedCallback callback) override;
-  void FinalizeUpdate(const WebApplicationInfo& web_app_info,
-                      content::WebContents* web_contents,
-                      InstallFinalizedCallback callback) override;
+  // All methods below are |virtual| for testing.
 
-  void UninstallExternalWebApp(
+  // Write the WebApp data to disk and register the app.
+  virtual void FinalizeInstall(const WebApplicationInfo& web_app_info,
+                               const FinalizeOptions& options,
+                               InstallFinalizedCallback callback);
+
+  // Write the new WebApp data to disk and update the app.
+  // TODO(https://crbug.com/1196051): Chrome fails to update the manifest
+  // if the app window needing update closes at the same time as Chrome.
+  // Therefore, the manifest may not always update as expected.
+  virtual void FinalizeUpdate(const WebApplicationInfo& web_app_info,
+                              content::WebContents* web_contents,
+                              InstallFinalizedCallback callback);
+
+  // Removes |webapp_uninstall_source| from |app_id|. If no more interested
+  // sources left, deletes the app from disk and registrar.
+  virtual void UninstallExternalWebApp(
       const AppId& app_id,
       webapps::WebappUninstallSource external_install_source,
-      UninstallWebAppCallback callback) override;
+      UninstallWebAppCallback callback);
 
-  void UninstallWebApp(const AppId& app_id,
-                       webapps::WebappUninstallSource external_install_source,
-                       UninstallWebAppCallback callback) override;
+  // Removes the external app for |app_url| from disk and registrar. Fails if
+  // there is no installed external app for |app_url|.
+  virtual void UninstallExternalWebAppByUrl(
+      const GURL& app_url,
+      webapps::WebappUninstallSource webapp_uninstall_source,
+      UninstallWebAppCallback callback);
 
-  void UninstallFromSyncBeforeRegistryUpdate(
-      std::vector<AppId> web_apps) override;
-  void UninstallFromSyncAfterRegistryUpdate(
+  // Removes |webapp_uninstall_source| from |app_id|. If no more interested
+  // sources left, deletes the app from disk and registrar.
+  virtual void UninstallWebApp(
+      const AppId& app_id,
+      webapps::WebappUninstallSource external_install_source,
+      UninstallWebAppCallback callback);
+
+  // Sync-initiated uninstall. Copied from WebAppInstallSyncInstallDelegate.
+  // Called before the web apps are removed from the registry. Begins process of
+  // uninstalling OS hooks, which initially requires the registrar to still
+  // contain the web app data. Also notify observers of WebAppWillBeUninstalled.
+  // TODO(dmurph): After migration to WebApp* from the registry, this could
+  // potentially just be done in one step, after removal from registry, as os
+  // hooks information could be passed.
+  virtual void UninstallFromSyncBeforeRegistryUpdate(
+      std::vector<AppId> web_apps);
+  virtual void UninstallFromSyncAfterRegistryUpdate(
       std::vector<std::unique_ptr<WebApp>> web_apps,
-      RepeatingUninstallCallback callback) override;
+      RepeatingUninstallCallback callback);
 
-  bool CanUserUninstallWebApp(const AppId& app_id) const override;
-  bool WasPreinstalledWebAppUninstalled(const AppId& app_id) const override;
-  void Start() override;
-  void Shutdown() override;
+  virtual bool CanUserUninstallWebApp(const AppId& app_id) const;
 
-  void SetRemoveSourceCallbackForTesting(
-      base::RepeatingCallback<void(const AppId&)>) override;
+  // Returns true if the app with |app_id| was previously uninstalled by the
+  // user. For example, if a user uninstalls a default app ('default apps' are
+  // considered external apps), then this will return true.
+  virtual bool WasPreinstalledWebAppUninstalled(const AppId& app_id) const;
+
+  virtual bool CanReparentTab(const AppId& app_id, bool shortcut_created) const;
+  virtual void ReparentTab(const AppId& app_id,
+                           bool shortcut_created,
+                           content::WebContents* web_contents);
+
+  void Start();
+  void Shutdown();
+
+  void SetSubsystems(WebAppRegistrar* registrar,
+                     WebAppUiManager* ui_manager,
+                     AppRegistryController* registry_controller,
+                     OsIntegrationManager* os_integration_manager);
+
+  virtual void SetRemoveSourceCallbackForTesting(
+      base::RepeatingCallback<void(const AppId&)>);
 
   Profile* profile() { return profile_; }
 
   WebAppRegistrar& GetWebAppRegistrar() const;
 
+ protected:
+  AppRegistryController& registry_controller() { return *registry_controller_; }
+  OsIntegrationManager& os_integration_manager() {
+    return *os_integration_manager_;
+  }
+
  private:
   using CommitCallback = base::OnceCallback<void(bool success)>;
   friend class FileHandlersPermissionHelper;
 
+  bool is_legacy_finalizer() const { return registrar_ == nullptr; }
+  WebAppRegistrar& registrar() const;
+
   void UninstallWebAppInternal(const AppId& app_id,
                                webapps::WebappUninstallSource uninstall_source,
                                UninstallWebAppCallback callback);
@@ -128,6 +204,13 @@
                           UninstallWebAppCallback callback,
                           OsHooksResults os_hooks_info);
 
+  // If these pointers are nullptr then this is legacy install finalizer
+  // operating in standalone mode.
+  WebAppRegistrar* registrar_ = nullptr;
+  AppRegistryController* registry_controller_ = nullptr;
+  WebAppUiManager* ui_manager_ = nullptr;
+  OsIntegrationManager* os_integration_manager_ = nullptr;
+
   Profile* const profile_;
   WebAppIconManager* const icon_manager_;
   WebAppPolicyManager* policy_manager_;
diff --git a/chrome/browser/web_applications/components/install_finalizer_unittest.cc b/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc
similarity index 86%
rename from chrome/browser/web_applications/components/install_finalizer_unittest.cc
rename to chrome/browser/web_applications/web_app_install_finalizer_unittest.cc
index ea2d394..9329f4b 100644
--- a/chrome/browser/web_applications/components/install_finalizer_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 
 #include <memory>
 
@@ -36,14 +36,14 @@
 
 }  // namespace
 
-// TODO(crbug.com/1068081): Migrate remaining tests from
-// bookmark_app_install_finalizer_unittest.
-class InstallFinalizerUnitTest : public WebAppTest {
+class WebAppInstallFinalizerUnitTest : public WebAppTest {
  public:
-  InstallFinalizerUnitTest() = default;
-  InstallFinalizerUnitTest(const InstallFinalizerUnitTest&) = delete;
-  InstallFinalizerUnitTest& operator=(const InstallFinalizerUnitTest&) = delete;
-  ~InstallFinalizerUnitTest() override = default;
+  WebAppInstallFinalizerUnitTest() = default;
+  WebAppInstallFinalizerUnitTest(const WebAppInstallFinalizerUnitTest&) =
+      delete;
+  WebAppInstallFinalizerUnitTest& operator=(
+      const WebAppInstallFinalizerUnitTest&) = delete;
+  ~WebAppInstallFinalizerUnitTest() override = default;
 
   void SetUp() override {
     WebAppTest::SetUp();
@@ -79,7 +79,7 @@
   // Synchronous version of FinalizeInstall.
   FinalizeInstallResult AwaitFinalizeInstall(
       WebApplicationInfo info,
-      InstallFinalizer::FinalizeOptions options) {
+      WebAppInstallFinalizer::FinalizeOptions options) {
     FinalizeInstallResult result{};
     base::RunLoop run_loop;
     finalizer().FinalizeInstall(
@@ -94,7 +94,7 @@
     return result;
   }
 
-  InstallFinalizer& finalizer() { return *finalizer_.get(); }
+  WebAppInstallFinalizer& finalizer() { return *finalizer_.get(); }
   WebAppRegistrar& registrar() {
     return test_registry_controller_->registrar();
   }
@@ -104,14 +104,14 @@
   std::unique_ptr<WebAppIconManager> icon_manager_;
   std::unique_ptr<WebAppPolicyManager> policy_manager_;
   std::unique_ptr<WebAppUiManager> ui_manager_;
-  std::unique_ptr<InstallFinalizer> finalizer_;
+  std::unique_ptr<WebAppInstallFinalizer> finalizer_;
 };
 
-TEST_F(InstallFinalizerUnitTest, BasicInstallSucceeds) {
+TEST_F(WebAppInstallFinalizerUnitTest, BasicInstallSucceeds) {
   auto info = std::make_unique<WebApplicationInfo>();
   info->start_url = GURL("https://foo.example");
   info->title = u"Foo Title";
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::INTERNAL_DEFAULT;
 
   FinalizeInstallResult result = AwaitFinalizeInstall(*info, options);
@@ -121,7 +121,7 @@
             GenerateAppId(/*manifest_id=*/absl::nullopt, info->start_url));
 }
 
-TEST_F(InstallFinalizerUnitTest, ConcurrentInstallSucceeds) {
+TEST_F(WebAppInstallFinalizerUnitTest, ConcurrentInstallSucceeds) {
   auto info1 = std::make_unique<WebApplicationInfo>();
   info1->start_url = GURL("https://foo1.example");
   info1->title = u"Foo1 Title";
@@ -130,7 +130,7 @@
   info2->start_url = GURL("https://foo2.example");
   info2->title = u"Foo2 Title";
 
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::INTERNAL_DEFAULT;
 
   base::RunLoop run_loop;
@@ -175,11 +175,11 @@
   EXPECT_TRUE(callback2_called);
 }
 
-TEST_F(InstallFinalizerUnitTest, InstallStoresLatestWebAppInstallSource) {
+TEST_F(WebAppInstallFinalizerUnitTest, InstallStoresLatestWebAppInstallSource) {
   auto info = std::make_unique<WebApplicationInfo>();
   info->start_url = GURL("https://foo.example");
   info->title = u"Foo Title";
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = webapps::WebappInstallSource::INTERNAL_DEFAULT;
 
   FinalizeInstallResult result = AwaitFinalizeInstall(*info, options);
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc
index 5a2adf0..2076e2e 100644
--- a/chrome/browser/web_applications/web_app_install_manager.cc
+++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -12,12 +12,12 @@
 #include "base/strings/utf_string_conversions.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_task.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
@@ -83,7 +83,7 @@
 void WebAppInstallManager::SetSubsystems(
     WebAppRegistrar* registrar,
     OsIntegrationManager* os_integration_manager,
-    InstallFinalizer* finalizer) {
+    WebAppInstallFinalizer* finalizer) {
   registrar_ = registrar;
   os_integration_manager_ = os_integration_manager;
   finalizer_ = finalizer;
@@ -380,7 +380,7 @@
   // installs.
   task->ExpectAppId(sync_app_id);
 
-  InstallFinalizer::FinalizeOptions finalize_options;
+  WebAppInstallFinalizer::FinalizeOptions finalize_options;
   finalize_options.install_source = webapps::WebappInstallSource::SYNC;
   finalize_options.locally_installed = AreAppsLocallyInstalledBySync();
 
diff --git a/chrome/browser/web_applications/web_app_install_manager.h b/chrome/browser/web_applications/web_app_install_manager.h
index 7d6927d..5d149156 100644
--- a/chrome/browser/web_applications/web_app_install_manager.h
+++ b/chrome/browser/web_applications/web_app_install_manager.h
@@ -29,7 +29,7 @@
 namespace web_app {
 
 enum class InstallResultCode;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 class OsIntegrationManager;
 class WebAppDataRetriever;
 class WebAppInstallTask;
@@ -81,7 +81,7 @@
 
   void SetSubsystems(WebAppRegistrar* registrar,
                      OsIntegrationManager* os_integration_manager,
-                     InstallFinalizer* finalizer);
+                     WebAppInstallFinalizer* finalizer);
 
   // Loads |web_app_url| in a new WebContents and determines whether it has a
   // valid manifest. Calls |callback| with results.
@@ -209,7 +209,7 @@
   OsIntegrationManager* os_integration_manager() {
     return os_integration_manager_;
   }
-  InstallFinalizer* finalizer() { return finalizer_; }
+  WebAppInstallFinalizer* finalizer() { return finalizer_; }
 
   bool disable_web_app_sync_install_for_testing() const {
     return disable_web_app_sync_install_for_testing_;
@@ -277,7 +277,7 @@
 
   WebAppRegistrar* registrar_ = nullptr;
   OsIntegrationManager* os_integration_manager_ = nullptr;
-  InstallFinalizer* finalizer_ = nullptr;
+  WebAppInstallFinalizer* finalizer_ = nullptr;
 
   bool disable_web_app_sync_install_for_testing_ = false;
 
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
index 65166ea6b..8fc4d73d 100644
--- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -464,6 +464,8 @@
   TestFileUtils* file_utils_ = nullptr;
 };
 
+using WebAppInstallManagerUninstallTest = WebAppInstallManagerTest;
+
 TEST_P(WebAppInstallManagerTest,
        InstallWebAppsAfterSync_TwoConcurrentInstallsAreRunInOrder) {
   if (GetParam() == SyncParam::kWithoutSync) {
@@ -844,7 +846,8 @@
   EXPECT_EQ(*expected_app, *app);
 }
 
-TEST_P(WebAppInstallManagerTest, UninstallFromSyncAfterRegistryUpdate) {
+TEST_P(WebAppInstallManagerUninstallTest,
+       UninstallFromSyncAfterRegistryUpdate) {
   std::unique_ptr<WebApp> app =
       CreateWebApp(GURL("https://example.com/path"), Source::kSync,
                    /*user_display_mode=*/DisplayMode::kStandalone);
@@ -912,7 +915,8 @@
   EXPECT_EQ(expected_event_order, event_order);
 }
 
-TEST_P(WebAppInstallManagerTest, PolicyAndUser_UninstallExternalWebApp) {
+TEST_P(WebAppInstallManagerUninstallTest,
+       PolicyAndUser_UninstallExternalWebApp) {
   std::unique_ptr<WebApp> policy_and_user_app =
       CreateWebApp(GURL("https://example.com/path"), Source::kSync,
                    /*user_display_mode=*/DisplayMode::kStandalone);
@@ -948,7 +952,7 @@
   EXPECT_TRUE(finalizer().CanUserUninstallWebApp(app_id));
 }
 
-TEST_P(WebAppInstallManagerTest, DefaultAndUser_UninstallWebApp) {
+TEST_P(WebAppInstallManagerUninstallTest, DefaultAndUser_UninstallWebApp) {
   std::unique_ptr<WebApp> default_and_user_app =
       CreateWebApp(GURL("https://example.com/path"), Source::kSync,
                    /*user_display_mode=*/DisplayMode::kStandalone);
@@ -1102,4 +1106,9 @@
 #endif
                          WebAppInstallManagerTest::ParamInfoToString);
 
+INSTANTIATE_TEST_SUITE_P(All,
+                         WebAppInstallManagerUninstallTest,
+                         ::testing::Values(SyncParam::kWithSync),
+                         WebAppInstallManagerTest::ParamInfoToString);
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc
index 15a84c4..43ece3594 100644
--- a/chrome/browser/web_applications/web_app_install_task.cc
+++ b/chrome/browser/web_applications/web_app_install_task.cc
@@ -5,7 +5,6 @@
 #include <string>
 #include <utility>
 
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_system_web_app_data.h"
 #include "chrome/browser/web_applications/web_app_install_task.h"
 
@@ -76,7 +75,7 @@
 WebAppInstallTask::WebAppInstallTask(
     Profile* profile,
     OsIntegrationManager* os_integration_manager,
-    InstallFinalizer* install_finalizer,
+    WebAppInstallFinalizer* install_finalizer,
     std::unique_ptr<WebAppDataRetriever> data_retriever,
     WebAppRegistrar* registrar)
     : data_retriever_(std::move(data_retriever)),
@@ -205,7 +204,7 @@
 
 void UpdateFinalizerClientData(
     const absl::optional<WebAppInstallManager::InstallParams>& params,
-    InstallFinalizer::FinalizeOptions* options) {
+    WebAppInstallFinalizer::FinalizeOptions* options) {
   if (params) {
     if (IsChromeOsDataMandatory()) {
       options->chromeos_data.emplace();
@@ -243,7 +242,7 @@
 
   RecordInstallEvent();
 
-  InstallFinalizer::FinalizeOptions options;
+  WebAppInstallFinalizer::FinalizeOptions options;
   options.install_source = install_source;
   options.locally_installed = true;
 
@@ -340,7 +339,7 @@
 }
 
 void WebAppInstallTask::SetInstallFinalizerForTesting(
-    InstallFinalizer* install_finalizer) {
+    WebAppInstallFinalizer* install_finalizer) {
   install_finalizer_ = install_finalizer;
 }
 
@@ -667,7 +666,7 @@
 void WebAppInstallTask::InstallWebAppFromInfoRetrieveIcons(
     content::WebContents* web_contents,
     std::unique_ptr<WebApplicationInfo> web_application_info,
-    InstallFinalizer::FinalizeOptions finalize_options,
+    WebAppInstallFinalizer::FinalizeOptions finalize_options,
     WebAppInstallManager::OnceInstallCallback callback) {
   CheckInstallPreconditions();
 
@@ -695,7 +694,7 @@
 
 void WebAppInstallTask::OnIconsRetrieved(
     std::unique_ptr<WebApplicationInfo> web_app_info,
-    InstallFinalizer::FinalizeOptions finalize_options,
+    WebAppInstallFinalizer::FinalizeOptions finalize_options,
     IconsMap icons_map) {
   DCHECK(background_installation_);
 
@@ -780,7 +779,7 @@
   // This metric is recorded regardless of the installation result.
   RecordInstallEvent();
 
-  InstallFinalizer::FinalizeOptions finalize_options;
+  WebAppInstallFinalizer::FinalizeOptions finalize_options;
   finalize_options.install_source = install_source_;
   finalize_options.locally_installed = true;
   if (install_params_) {
diff --git a/chrome/browser/web_applications/web_app_install_task.h b/chrome/browser/web_applications/web_app_install_task.h
index a472761..3c659677 100644
--- a/chrome/browser/web_applications/web_app_install_task.h
+++ b/chrome/browser/web_applications/web_app_install_task.h
@@ -11,12 +11,12 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/browser/web_applications/components/web_app_install_utils.h"
 #include "chrome/browser/web_applications/components/web_app_url_loader.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "chrome/browser/web_applications/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
 #include "content/public/browser/web_contents_observer.h"
@@ -34,7 +34,6 @@
 namespace web_app {
 
 class OsIntegrationManager;
-class InstallFinalizer;
 class WebAppDataRetriever;
 class WebAppUrlLoader;
 class WebAppRegistrar;
@@ -50,7 +49,7 @@
 
   WebAppInstallTask(Profile* profile,
                     OsIntegrationManager* os_integration_manager,
-                    InstallFinalizer* install_finalizer,
+                    WebAppInstallFinalizer* install_finalizer,
                     std::unique_ptr<WebAppDataRetriever> data_retriever,
                     WebAppRegistrar* registrar);
   WebAppInstallTask(const WebAppInstallTask&) = delete;
@@ -114,7 +113,7 @@
   void InstallWebAppFromInfoRetrieveIcons(
       content::WebContents* web_contents,
       std::unique_ptr<WebApplicationInfo> web_application_info,
-      InstallFinalizer::FinalizeOptions finalize_options,
+      WebAppInstallFinalizer::FinalizeOptions finalize_options,
       WebAppInstallManager::OnceInstallCallback callback);
 
   // Starts a web app installation process using prefilled
@@ -158,7 +157,7 @@
   // WebContentsObserver:
   void WebContentsDestroyed() override;
 
-  void SetInstallFinalizerForTesting(InstallFinalizer* install_finalizer);
+  void SetInstallFinalizerForTesting(WebAppInstallFinalizer* install_finalizer);
 
  private:
   void CheckInstallPreconditions();
@@ -224,9 +223,10 @@
       const std::string& intent,
       bool should_intent_to_store);
 
-  void OnIconsRetrieved(std::unique_ptr<WebApplicationInfo> web_app_info,
-                        InstallFinalizer::FinalizeOptions finalize_options,
-                        IconsMap icons_map);
+  void OnIconsRetrieved(
+      std::unique_ptr<WebApplicationInfo> web_app_info,
+      WebAppInstallFinalizer::FinalizeOptions finalize_options,
+      IconsMap icons_map);
   void OnIconsRetrievedShowDialog(
       std::unique_ptr<WebApplicationInfo> web_app_info,
       ForInstallableSite for_installable_site,
@@ -273,7 +273,7 @@
   std::unique_ptr<content::WebContents> web_contents_;
 
   OsIntegrationManager* os_integration_manager_;
-  InstallFinalizer* install_finalizer_;
+  WebAppInstallFinalizer* install_finalizer_;
   Profile* const profile_;
   WebAppRegistrar* registrar_;
 
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc
index 93677dbb..ccfa84ba 100644
--- a/chrome/browser/web_applications/web_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -342,7 +342,7 @@
   std::unique_ptr<WebAppPolicyManager> policy_manager_;
   std::unique_ptr<WebAppInstallTask> install_task_;
   std::unique_ptr<TestWebAppUiManager> ui_manager_;
-  std::unique_ptr<InstallFinalizer> install_finalizer_;
+  std::unique_ptr<WebAppInstallFinalizer> install_finalizer_;
 
   // Owned by icon_manager_:
   TestFileUtils* file_utils_ = nullptr;
diff --git a/chrome/browser/web_applications/web_app_mover.cc b/chrome/browser/web_applications/web_app_mover.cc
index 2c7be15..7dd1cc6a 100644
--- a/chrome/browser/web_applications/web_app_mover.cc
+++ b/chrome/browser/web_applications/web_app_mover.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/web_applications/components/app_registry_controller.h"
-#include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/chrome_features.h"
@@ -41,7 +41,7 @@
 std::unique_ptr<WebAppMover> WebAppMover::CreateIfNeeded(
     Profile* profile,
     WebAppRegistrar* registrar,
-    InstallFinalizer* install_finalizer,
+    WebAppInstallFinalizer* install_finalizer,
     WebAppInstallManager* install_manager,
     AppRegistryController* controller) {
   if (g_disabled_for_testing)
@@ -122,7 +122,7 @@
 
 WebAppMover::WebAppMover(Profile* profile,
                          WebAppRegistrar* registrar,
-                         InstallFinalizer* install_finalizer,
+                         WebAppInstallFinalizer* install_finalizer,
                          WebAppInstallManager* install_manager,
                          AppRegistryController* controller,
                          UninstallMode uninstall_mode,
diff --git a/chrome/browser/web_applications/web_app_mover.h b/chrome/browser/web_applications/web_app_mover.h
index c150b132..9e43ea0 100644
--- a/chrome/browser/web_applications/web_app_mover.h
+++ b/chrome/browser/web_applications/web_app_mover.h
@@ -29,7 +29,7 @@
 
 class WebAppRegistrar;
 class AppRegistryController;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 
 // WebAppMover is designed to facilitate a one-off migration for a webapp, from
 // one start_url to another.
@@ -39,7 +39,7 @@
   static std::unique_ptr<WebAppMover> CreateIfNeeded(
       Profile* profile,
       WebAppRegistrar* registrar,
-      InstallFinalizer* install_finalizer,
+      WebAppInstallFinalizer* install_finalizer,
       WebAppInstallManager* install_manager,
       AppRegistryController* controller);
 
@@ -49,7 +49,7 @@
 
   WebAppMover(Profile* profile,
               WebAppRegistrar* registrar,
-              InstallFinalizer* install_finalizer,
+              WebAppInstallFinalizer* install_finalizer,
               WebAppInstallManager* install_manager,
               AppRegistryController* controller,
               UninstallMode mode,
@@ -102,7 +102,7 @@
 
   Profile* profile_;
   WebAppRegistrar* registrar_;
-  InstallFinalizer* install_finalizer_;
+  WebAppInstallFinalizer* install_finalizer_;
   WebAppInstallManager* install_manager_;
   AppRegistryController* controller_;
 
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index f36b2177..93bb6a2 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -149,7 +149,7 @@
   return *install_manager_;
 }
 
-InstallFinalizer& WebAppProvider::install_finalizer() {
+WebAppInstallFinalizer& WebAppProvider::install_finalizer() {
   CheckIsConnected();
   return *install_finalizer_;
 }
diff --git a/chrome/browser/web_applications/web_app_provider.h b/chrome/browser/web_applications/web_app_provider.h
index 8b4b878..cae267f 100644
--- a/chrome/browser/web_applications/web_app_provider.h
+++ b/chrome/browser/web_applications/web_app_provider.h
@@ -32,7 +32,7 @@
 class AppRegistryController;
 class WebAppIconManager;
 class PreinstalledWebAppManager;
-class InstallFinalizer;
+class WebAppInstallFinalizer;
 class ManifestUpdateManager;
 class SystemWebAppManager;
 class WebAppAudioFocusIdMap;
@@ -107,7 +107,7 @@
   // UIs can use WebAppInstallManager for user-initiated Web Apps install.
   WebAppInstallManager& install_manager();
   // Implements persistence for Web Apps install.
-  InstallFinalizer& install_finalizer();
+  WebAppInstallFinalizer& install_finalizer();
   // Keeps app metadata up to date with site manifests.
   ManifestUpdateManager& manifest_update_manager();
   // Clients can use ExternallyManagedAppManager to install, uninstall, and
@@ -171,7 +171,7 @@
   std::unique_ptr<AppRegistryController> registry_controller_;
   std::unique_ptr<PreinstalledWebAppManager> preinstalled_web_app_manager_;
   std::unique_ptr<WebAppIconManager> icon_manager_;
-  std::unique_ptr<InstallFinalizer> install_finalizer_;
+  std::unique_ptr<WebAppInstallFinalizer> install_finalizer_;
   std::unique_ptr<ManifestUpdateManager> manifest_update_manager_;
   std::unique_ptr<ExternallyManagedAppManager> externally_managed_app_manager_;
   std::unique_ptr<SystemWebAppManager> system_web_app_manager_;
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc
index ab71d61e..c98a6cb 100644
--- a/chrome/browser/web_applications/web_app_registrar.cc
+++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -12,7 +12,9 @@
 #include "base/check_op.h"
 #include "base/containers/contains.h"
 #include "base/containers/cxx20_erase.h"
+#include "base/feature_list.h"
 #include "base/strings/string_util.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/web_applications/components/app_registrar_observer.h"
@@ -27,6 +29,21 @@
 
 namespace web_app {
 
+namespace {
+
+// With Lacros, web apps are not loaded using the Ash browser.
+bool Accepts(const WebApp& web_app) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  if (base::FeatureList::IsEnabled(features::kWebAppsCrosapi) &&
+      !web_app.IsSystemApp()) {
+    return false;
+  }
+#endif
+  return true;
+}
+
+}  // namespace
+
 WebAppRegistrar::WebAppRegistrar(Profile* profile) : profile_(profile) {}
 
 WebAppRegistrar::~WebAppRegistrar() {
@@ -371,7 +388,9 @@
     return nullptr;
 
   auto it = registry_.find(app_id);
-  return it == registry_.end() ? nullptr : it->second.get();
+  if (it != registry_.end() && Accepts(*it->second))
+    return it->second.get();
+  return nullptr;
 }
 
 const WebApp* WebAppRegistrar::GetAppByStartUrl(const GURL& start_url) const {
@@ -379,7 +398,7 @@
     return nullptr;
 
   for (auto const& it : registry_) {
-    if (it.second->start_url() == start_url)
+    if (Accepts(*it.second) && it.second->start_url() == start_url)
       return it.second.get();
   }
   return nullptr;
@@ -695,7 +714,7 @@
 
 const WebAppRegistrar::AppSet WebAppRegistrar::GetApps() const {
   return AppSet(this, [](const WebApp& web_app) {
-    return !web_app.is_from_sync_and_pending_installation();
+    return Accepts(web_app) && !web_app.is_from_sync_and_pending_installation();
   });
 }
 
@@ -738,7 +757,7 @@
 
 WebAppRegistrar::AppSet WebAppRegistrarMutable::GetAppsMutable() {
   return AppSet(this, [](const WebApp& web_app) {
-    return !web_app.is_from_sync_and_pending_installation();
+    return Accepts(web_app) && !web_app.is_from_sync_and_pending_installation();
   });
 }
 
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl
index ae6b784..a54f762b 100644
--- a/chrome/common/extensions/api/file_manager_private.idl
+++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -967,7 +967,15 @@
 // contain at most one path per hash.
 callback SearchFilesByHashesCallback = void(object paths);
 
-callback ZipSelectionCallback = void(optional boolean success);
+// |zipId| The ID of the ZIP operation.
+// |totalBytes| Total number of bytes to be zipped.
+callback ZipSelectionCallback = void(long zipId, double totalBytes);
+
+// |result| Less than 0 if the operation is still in progress, 0 if the
+// operation finished successfully, or greater than 0 if the operation finished
+// with an error.
+// |bytes| Total number of bytes having been zipped so far.
+callback ZipProgressCallback = void(long result, double bytes);
 
 callback GetDriveConnectionStateCallback = void(DriveConnectionState result);
 
@@ -1287,11 +1295,12 @@
 
   // Cancels an ongoing ZIP operation.
   // Does nothing if there is no matching ongoing ZIP operation.
-  // |parentEntry| Entry of the directory where the ZIP file is being created.
-  // |destName| Name of the ZIP file to cancel.
-  [nocompile]
-  static void cancelZip([instanceof=DirectoryEntry] object parentEntry,
-                        DOMString destName);
+  // |zipId| ID of the ZIP operation.
+  static void cancelZip(long zipId);
+
+  // Gets the progress of an ongoing ZIP operation.
+  // |zipId| ID of the ZIP operation.
+  static void getZipProgress(long zipId, ZipProgressCallback callback);
 
   // Retrieves the state of the current drive connection.
   // |callback|
diff --git a/chrome/common/extensions/api/file_manager_private_internal.idl b/chrome/common/extensions/api/file_manager_private_internal.idl
index ae6d0dcf..b1006eb 100644
--- a/chrome/common/extensions/api/file_manager_private_internal.idl
+++ b/chrome/common/extensions/api/file_manager_private_internal.idl
@@ -31,7 +31,7 @@
   callback GetUrlCallback = void(DOMString url);
   callback GetUrlCallback = void(DOMString url);
   callback StartCopyCallback = void(long copyId);
-  callback ZipSelectionCallback = void(optional boolean success);
+  callback ZipSelectionCallback = void(long zipId, double totalBytes);
   callback ValidatePathNameLengthCallback = void(boolean result);
   callback GetDirectorySizeCallback = void(double size);
   callback GetRecentFilesCallback = void(EntryDescription[] entries);
@@ -94,7 +94,6 @@
                              DOMString[] urls,
                              DOMString destName,
                              ZipSelectionCallback callback);
-    static void cancelZip(DOMString parentUrl, DOMString destName);
     static void validatePathNameLength(
         DOMString parentUrl,
         DOMString name,
diff --git a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
index c50000b..898eb307 100644
--- a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
@@ -231,11 +231,6 @@
               getEntryURL(parentEntry), entries.map(getEntryURL), destName,
               callback));
 
-  apiFunctions.setHandleRequest(
-      'cancelZip',
-      (parentEntry, destName) => fileManagerPrivateInternal.cancelZip(
-          getEntryURL(parentEntry), destName));
-
   apiFunctions.setHandleRequest('validatePathNameLength', function(
         entry, name, callback) {
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index d3e9a6a8..c946fb1 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4411,7 +4411,7 @@
     "../browser/notifications/notification_trigger_scheduler_unittest.cc",
     "../browser/notifications/persistent_notification_handler_unittest.cc",
     "../browser/notifications/platform_notification_service_unittest.cc",
-    "../browser/optimization_guide/optimization_guide_hints_manager_unittest.cc",
+    "../browser/optimization_guide/chrome_hints_manager_unittest.cc",
     "../browser/optimization_guide/prediction/prediction_manager_unittest.cc",
     "../browser/optimization_guide/prediction/prediction_model_download_manager_unittest.cc",
     "../browser/page_load_metrics/metrics_web_contents_observer_unittest.cc",
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index d9be9a7..f2ce8a1 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -45,7 +45,6 @@
     data = [
       "$root_gen_dir/chrome/test/data/webui/fake_chrome_event.m.js",
       "$root_gen_dir/chrome/test/data/webui/mock_controller.m.js",
-      "$root_gen_dir/chrome/test/data/webui/test_store.m.js",
       "$root_gen_dir/chrome/test/data/webui/test_util.m.js",
     ]
     defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
@@ -67,7 +66,6 @@
     ]
 
     data = [
-      "$root_gen_dir/chrome/test/data/webui/test_store.m.js",
       "$root_gen_dir/chrome/test/data/webui/test_util.m.js",
       "mojo_webui_test_support.js",
     ]
@@ -213,7 +211,6 @@
       "$root_gen_dir/chrome/test/data/webui/settings/settings_toggle_button_tests.js",
       "$root_gen_dir/chrome/test/data/webui/settings/route_tests.js",
       "$root_gen_dir/chrome/test/data/webui/signin/profile_card_menu_test.js",
-      "$root_gen_dir/chrome/test/data/webui/test_store.m.js",
       "$root_gen_dir/chrome/test/data/webui/test_util.m.js",
       "$root_gen_dir/ui/webui/resources/js/load_time_data.js",
     ]
@@ -312,7 +309,6 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/toggle_row_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/managed_apps_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_plugin_vm_browser_proxy.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_store.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_util.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/uninstall_button_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/bluetooth_page_tests.m.js",
@@ -495,10 +491,7 @@
       "//chrome/browser/ui",
     ]
 
-    data = [
-      "$root_gen_dir/chrome/test/data/webui/test_store.m.js",
-      "$root_gen_dir/chrome/test/data/webui/test_util.m.js",
-    ]
+    data = [ "$root_gen_dir/chrome/test/data/webui/test_util.m.js" ]
 
     defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
   }
@@ -536,7 +529,6 @@
     "fake_chrome_event.js",
     "mock_controller.js",
     "mock_timer.js",
-    "test_store.js",
     "test_util.js",
   ]
   namespace_rewrites =
diff --git a/chrome/test/data/webui/bookmarks/test_store.js b/chrome/test/data/webui/bookmarks/test_store.js
index e638ef2d..18e8129 100644
--- a/chrome/test/data/webui/bookmarks/test_store.js
+++ b/chrome/test/data/webui/bookmarks/test_store.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {createEmptyState, reduceAction, Store} from 'chrome://bookmarks/bookmarks.js';
-import {TestStore as CrUiTestStore} from 'chrome://test/test_store.m.js';
+import {TestStore as CrUiTestStore} from 'chrome://test/test_store.js';
 
 export class TestStore extends CrUiTestStore {
   constructor(data) {
diff --git a/chrome/test/data/webui/chromeos/personalization_app/test_personalization_store.js b/chrome/test/data/webui/chromeos/personalization_app/test_personalization_store.js
index dc1b5c2..b6bba9a 100644
--- a/chrome/test/data/webui/chromeos/personalization_app/test_personalization_store.js
+++ b/chrome/test/data/webui/chromeos/personalization_app/test_personalization_store.js
@@ -13,7 +13,7 @@
 
 import {emptyState, reduce} from 'chrome://personalization/trusted/personalization_reducers.js';
 import {PersonalizationStore} from 'chrome://personalization/trusted/personalization_store.js';
-import {TestStore} from '../../test_store.m.js';
+import {TestStore} from '../../test_store.js';
 
 export class TestPersonalizationStore extends TestStore {
   constructor(data) {
diff --git a/chrome/test/data/webui/new_tab_page/modules/recipes_v2/module_test.js b/chrome/test/data/webui/new_tab_page/modules/recipes_v2/module_test.js
index a474fd2..c2aec27 100644
--- a/chrome/test/data/webui/new_tab_page/modules/recipes_v2/module_test.js
+++ b/chrome/test/data/webui/new_tab_page/modules/recipes_v2/module_test.js
@@ -2,17 +2,93 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {recipeTasksV2Descriptor} from 'chrome://new-tab-page/new_tab_page.js';
+import {recipeTasksV2Descriptor, TaskModuleHandlerProxy} from 'chrome://new-tab-page/new_tab_page.js';
+import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.js';
 
 suite('NewTabPageModulesRecipesV2ModuleTest', () => {
+  let testProxy;
   setup(() => {
     PolymerTest.clearBody();
+
+    testProxy = TestBrowserProxy.fromClass(TaskModuleHandlerProxy);
+    testProxy.handler =
+        TestBrowserProxy.fromClass(taskModule.mojom.TaskModuleHandlerRemote);
+    TaskModuleHandlerProxy.setInstance(testProxy);
   });
 
-  test('module appears on render', async () => {
-    const module = await recipeTasksV2Descriptor.initialize();
-    document.body.append(module);
+  test('module appears on render with recipes', async () => {
+    // Arrange.
+    const task = {
+      title: 'First Recipes',
+      taskItems: [
+        {
+          name: 'apricot',
+          imageUrl: {url: 'https://apricot.com/img.png'},
+          info: 'Viewed 6 months ago',
+          siteName: 'Apricot Site',
+        },
+        {
+          name: 'banana',
+          imageUrl: {url: 'https://banana.com/img.png'},
+          info: 'Viewed 2 days ago',
+          siteName: 'Banana Site',
+        },
+        {
+          name: 'cranberry',
+          imageUrl: {url: 'https://cranberry.com/img.png'},
+          info: 'Viewed 3 weeks ago',
+          siteName: 'Cranberry Site',
+        },
+      ],
+    };
+    testProxy.handler.setResultFor('getPrimaryTask', Promise.resolve({task}));
 
-    assertTrue(!!module);
+    // Act.
+    const moduleElement = await recipeTasksV2Descriptor.initialize();
+    document.body.append(moduleElement);
+    moduleElement.$.recipesRepeat.render();
+
+    // Assert.
+    const recipes =
+        Array.from(moduleElement.shadowRoot.querySelectorAll('.recipe-item'));
+    assertEquals(1, testProxy.handler.getCallCount('getPrimaryTask'));
+    assertEquals(3, recipes.length);
+    assertEquals(
+        'https://apricot.com/img.png', recipes[0].querySelector('img').autoSrc);
+    assertEquals('apricot', recipes[0].querySelector('.name').innerText);
+    assertEquals('apricot', recipes[0].querySelector('.name').title);
+    assertEquals(
+        'Viewed 6 months ago', recipes[0].querySelector('.info').innerText);
+    assertEquals(
+        'Apricot Site', recipes[0].querySelector('.site-name').innerText);
+    assertEquals(
+        'https://banana.com/img.png', recipes[1].querySelector('img').autoSrc);
+    assertEquals('banana', recipes[1].querySelector('.name').innerText);
+    assertEquals('banana', recipes[1].querySelector('.name').title);
+    assertEquals(
+        'Viewed 2 days ago', recipes[1].querySelector('.info').innerText);
+    assertEquals(
+        'Banana Site', recipes[1].querySelector('.site-name').innerText);
+    assertEquals(
+        'https://cranberry.com/img.png',
+        recipes[2].querySelector('img').autoSrc);
+    assertEquals('cranberry', recipes[2].querySelector('.name').innerText);
+    assertEquals('cranberry', recipes[2].querySelector('.name').title);
+    assertEquals(
+        'Viewed 3 weeks ago', recipes[2].querySelector('.info').innerText);
+    assertEquals(
+        'Cranberry Site', recipes[2].querySelector('.site-name').innerText);
+  });
+
+  test('no module renders if no tasks available', async () => {
+    // Arrange.
+    testProxy.handler.setResultFor(
+        'getPrimaryTask', Promise.resolve({task: null}));
+
+    // Act.
+    const moduleElement = await recipeTasksV2Descriptor.initialize();
+
+    // Assert.
+    assertEquals(null, moduleElement);
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/test_store.js b/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
index 7dbd0be..0671cfa 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // clang-format off
-// #import {TestStore} from 'chrome://test/test_store.m.js';
+// #import {TestStore} from 'chrome://test/test_store.js';
 // #import {AppManagementStore, createEmptyState, reduceAction} from 'chrome://os-settings/chromeos/os_settings.js';
 // clang-format on
 
diff --git a/chrome/test/data/webui/test_store.js b/chrome/test/data/webui/test_store.js
index c2e4b874..3cf2fd3 100644
--- a/chrome/test/data/webui/test_store.js
+++ b/chrome/test/data/webui/test_store.js
@@ -2,125 +2,118 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// #import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
-// #import {Store} from 'chrome://resources/js/cr/ui/store.m.js';
+import {Store} from 'chrome://resources/js/cr/ui/store.m.js';
+import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
 
-cr.define('cr.ui', function() {
-  /**
-   * This is a generic test store, designed to replace a real Store instance
-   * during testing. It should be extended by providing the specific store
-   * implementation class that the test store is replacing, as in
-   * chrome/test/data/webui/bookmarks/test_store.js.
-   */
-  /* #export */ class TestStore extends cr.ui.Store {
-    constructor(
-        initialData, storeImplClass, storeImplEmptyState, storeImplReducer) {
-      super(storeImplEmptyState, storeImplReducer);
+/**
+ * This is a generic test store, designed to replace a real Store instance
+ * during testing. It should be extended by providing the specific store
+ * implementation class that the test store is replacing, as in
+ * chrome/test/data/webui/bookmarks/test_store.js.
+ */
+export class TestStore extends Store {
+  constructor(
+      initialData, storeImplClass, storeImplEmptyState, storeImplReducer) {
+    super(storeImplEmptyState, storeImplReducer);
 
-      this.data = Object.assign(this.data, initialData);
-      this.initialized_ = true;
-      this.lastAction_ = null;
-      /** @type {?PromiseResolver} */
-      this.initPromise_ = null;
-      this.enableReducers_ = false;
-      /** @type {!Map<string, !PromiseResolver>} */
-      this.resolverMap_ = new Map();
-      /** @type {!cr.ui.Store} */
-      this.storeImplClass = storeImplClass;
-    }
+    this.data = Object.assign(this.data, initialData);
+    this.initialized_ = true;
+    this.lastAction_ = null;
+    /** @type {?PromiseResolver} */
+    this.initPromise_ = null;
+    this.enableReducers_ = false;
+    /** @type {!Map<string, !PromiseResolver>} */
+    this.resolverMap_ = new Map();
+    /** @type {!Store} */
+    this.storeImplClass = storeImplClass;
+  }
 
-    /** @override */
-    init(state) {
-      if (this.initPromise_) {
-        this.storeImplClass.prototype.init.call(this, state);
-        this.initPromise_.resolve();
-      }
-    }
-
-    get lastAction() {
-      return this.lastAction_;
-    }
-
-    resetLastAction() {
-      this.lastAction_ = null;
-    }
-
-    /** Replace the global store instance with this TestStore. */
-    replaceSingleton() {
-      this.storeImplClass.instance_ = this;
-    }
-
-    /**
-     * Enable or disable calling the reducer for each action.
-     * With reducers disabled (the default), TestStore is a stub which
-     * requires state be managed manually (suitable for unit tests). With
-     * reducers enabled, TestStore becomes a proxy for observing actions
-     * (suitable for integration tests).
-     * @param {boolean} enabled
-     */
-    setReducersEnabled(enabled) {
-      this.enableReducers_ = enabled;
-    }
-
-    /** @override */
-    reduce_(action) {
-      this.lastAction_ = action;
-      if (this.enableReducers_) {
-        this.storeImplClass.prototype.reduce_.call(this, action);
-      }
-      if (this.resolverMap_.has(action.name)) {
-        this.resolverMap_.get(action.name).resolve(action);
-      }
-    }
-
-    /**
-     * Notifies UI elements that the store data has changed. When reducers are
-     * disabled, tests are responsible for manually changing the data to make
-     * UI elements update correctly (eg, tests must replace the whole list
-     * when changing a single element).
-     */
-    notifyObservers() {
-      this.notifyObservers_(this.data);
-    }
-
-    /**
-     * Call in order to accept data from an init call to the TestStore once.
-     * @return {Promise} Promise which resolves when the store is initialized.
-     */
-    acceptInitOnce() {
-      this.initPromise_ = new PromiseResolver();
-      this.initialized_ = false;
-      return this.initPromise_.promise;
-    }
-
-    /**
-     * Track actions called |name|, allowing that type of action to be waited
-     * for with `waitForAction`.
-     * @param {string} name
-     */
-    expectAction(name) {
-      this.resolverMap_.set(name, new PromiseResolver());
-    }
-
-    /**
-     * Returns a Promise that will resolve when an action called |name| is
-     * dispatched. The promise must be prepared by calling
-     * `expectAction(name)` before the action is dispatched.
-     * @param {string} name
-     * @return {!Promise<!Action>}
-     */
-    async waitForAction(name) {
-      assertTrue(
-          this.resolverMap_.has(name),
-          'Must call expectAction before each call to waitForAction');
-      const action = await this.resolverMap_.get(name).promise;
-      this.resolverMap_.delete(name);
-      return action;
+  /** @override */
+  init(state) {
+    if (this.initPromise_) {
+      this.storeImplClass.prototype.init.call(this, state);
+      this.initPromise_.resolve();
     }
   }
 
-  // #cr_define_end
-  return {
-    TestStore: TestStore,
-  };
-});
+  get lastAction() {
+    return this.lastAction_;
+  }
+
+  resetLastAction() {
+    this.lastAction_ = null;
+  }
+
+  /** Replace the global store instance with this TestStore. */
+  replaceSingleton() {
+    this.storeImplClass.instance_ = this;
+  }
+
+  /**
+   * Enable or disable calling the reducer for each action.
+   * With reducers disabled (the default), TestStore is a stub which
+   * requires state be managed manually (suitable for unit tests). With
+   * reducers enabled, TestStore becomes a proxy for observing actions
+   * (suitable for integration tests).
+   * @param {boolean} enabled
+   */
+  setReducersEnabled(enabled) {
+    this.enableReducers_ = enabled;
+  }
+
+  /** @override */
+  reduce_(action) {
+    this.lastAction_ = action;
+    if (this.enableReducers_) {
+      this.storeImplClass.prototype.reduce_.call(this, action);
+    }
+    if (this.resolverMap_.has(action.name)) {
+      this.resolverMap_.get(action.name).resolve(action);
+    }
+  }
+
+  /**
+   * Notifies UI elements that the store data has changed. When reducers are
+   * disabled, tests are responsible for manually changing the data to make
+   * UI elements update correctly (eg, tests must replace the whole list
+   * when changing a single element).
+   */
+  notifyObservers() {
+    this.notifyObservers_(this.data);
+  }
+
+  /**
+   * Call in order to accept data from an init call to the TestStore once.
+   * @return {Promise} Promise which resolves when the store is initialized.
+   */
+  acceptInitOnce() {
+    this.initPromise_ = new PromiseResolver();
+    this.initialized_ = false;
+    return this.initPromise_.promise;
+  }
+
+  /**
+   * Track actions called |name|, allowing that type of action to be waited
+   * for with `waitForAction`.
+   * @param {string} name
+   */
+  expectAction(name) {
+    this.resolverMap_.set(name, new PromiseResolver());
+  }
+
+  /**
+   * Returns a Promise that will resolve when an action called |name| is
+   * dispatched. The promise must be prepared by calling
+   * `expectAction(name)` before the action is dispatched.
+   * @param {string} name
+   * @return {!Promise<!Action>}
+   */
+  async waitForAction(name) {
+    assertTrue(
+        this.resolverMap_.has(name),
+        'Must call expectAction before each call to waitForAction');
+    const action = await this.resolverMap_.get(name).promise;
+    this.resolverMap_.delete(name);
+    return action;
+  }
+}
diff --git a/chromeos/components/BUILD.gn b/chromeos/components/BUILD.gn
index b1e78f1..e982763 100644
--- a/chromeos/components/BUILD.gn
+++ b/chromeos/components/BUILD.gn
@@ -35,7 +35,6 @@
     "//chromeos/components/phonehub:unit_tests",
     "//chromeos/components/proximity_auth:unit_tests",
     "//chromeos/components/quick_answers:unit_tests",
-    "//chromeos/components/security_token_pin:unit_tests",
     "//chromeos/components/sensors:unit_tests",
     "//chromeos/components/smbfs:unit_tests",
     "//chromeos/components/string_matching:unit_tests",
diff --git a/chromeos/components/camera_app_ui/resources/css/new_feature_toast.css b/chromeos/components/camera_app_ui/resources/css/new_feature_toast.css
index e5adb26a..efb3187 100644
--- a/chromeos/components/camera_app_ui/resources/css/new_feature_toast.css
+++ b/chromeos/components/camera_app_ui/resources/css/new_feature_toast.css
@@ -4,25 +4,25 @@
 
 @property --ripple-start-width {
   syntax: '<length>';
-  inherits: true;
+  inherits: false;
   initial-value: 0;
 }
 
 @property --ripple-start-height {
   syntax: '<length>';
-  inherits: true;
+  inherits: false;
   initial-value: 0;
 }
 
 @property --ripple-scale-x {
   syntax: '<number>';
-  inherits: true;
+  inherits: false;
   initial-value: 1;
 }
 
 @property --ripple-scale-y {
   syntax: '<number>';
-  inherits: true;
+  inherits: false;
   initial-value: 1;
 }
 
diff --git a/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js b/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
index 3b34537..171fa556 100644
--- a/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
+++ b/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
@@ -118,20 +118,6 @@
   TOP: 'top',
 };
 
-// TODO(pihsun): This introduce some global effect on module import, consider
-// some way to move this into some kind of initialization method.
-for (const elProperty of Object.values(PositionProperty)) {
-  for (const toastProperty of Object.values(PositionProperty)) {
-    const cssName = `--toast-${toastProperty}-to-element-${elProperty}`;
-    CSS.registerProperty({
-      name: cssName,
-      syntax: '<length>',
-      inherits: true,
-      initialValue: '0',
-    });
-  }
-}
-
 /**
  * Controller for showing new feature toast.
  */
@@ -166,7 +152,16 @@
           if (!style.has(cssName)) {
             continue;
           }
-          const offset = util.getStyleValueInPx(style, cssName);
+          // Since these css custom properties are not defined by @property,
+          // the return value of .get() is a CSSUnparsedValue, so we need to
+          // parse by ourself here.
+          //
+          // Defining a property with @property will cause those properties
+          // to be always defined on all computedStyleMap() calls for every
+          // elements, so we can't define them here.
+          const offset = CSSNumericValue.parse(style.get(cssName).toString())
+                             .to('px')
+                             .value;
           properties.push({elProperty, toastProperty, offset});
         }
       }
diff --git a/chromeos/components/eche_app_ui/BUILD.gn b/chromeos/components/eche_app_ui/BUILD.gn
index 0fa5a57..cda1907 100644
--- a/chromeos/components/eche_app_ui/BUILD.gn
+++ b/chromeos/components/eche_app_ui/BUILD.gn
@@ -40,6 +40,8 @@
     "system_info.h",
     "system_info_provider.cc",
     "system_info_provider.h",
+    "untrusted_eche_app_ui.cc",
+    "untrusted_eche_app_ui.h",
     "url_constants.cc",
     "url_constants.h",
   ]
@@ -59,6 +61,7 @@
     "//chromeos/services/secure_channel/public/cpp/client:client",
     "//components/prefs",
     "//content/public/browser",
+    "//mojo/public/js:resources",
     "//ui/webui",
   ]
 }
@@ -112,12 +115,15 @@
 js_library("app") {
   deps = [
     "//chromeos/components/eche_app_ui/mojom:mojom_js_library_for_compile",
+    "//chromeos/components/system_apps/public/js:message_pipe",
     "//ui/webui/resources/js:cr.m",
   ]
   externs_list = [ "$externs_path/metrics_private.js" ]
   sources = [
     "resources/browser_proxy.js",
+    "resources/message_types.js",
     "resources/mock/js/app_bundle.js",
+    "resources/receiver.js",
   ]
 }
 
@@ -133,7 +139,12 @@
 
 generate_grd("build_grd") {
   input_files_base_dir = rebase_path("resources", "//")
-  input_files = [ "browser_proxy.js" ]
+  input_files = [
+    "../../system_apps/public/js/message_pipe.js",
+    "browser_proxy.js",
+    "message_types.js",
+    "receiver.js",
+  ]
   manifest_files = []
   grd_prefix = "chromeos_eche_app"
   out_grd = "$target_gen_dir/${grd_prefix}_resources.grd"
diff --git a/chromeos/components/eche_app_ui/eche_app_ui.cc b/chromeos/components/eche_app_ui/eche_app_ui.cc
index 05777d8..0c9f8fb8 100644
--- a/chromeos/components/eche_app_ui/eche_app_ui.cc
+++ b/chromeos/components/eche_app_ui/eche_app_ui.cc
@@ -13,6 +13,9 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
+#include "content/public/common/url_constants.h"
+#include "mojo/public/js/grit/mojo_bindings_resources.h"
+#include "ui/webui/webui_allowlist.h"
 
 namespace chromeos {
 namespace eche_app {
@@ -40,15 +43,46 @@
   html_source->AddResourcePath(
       "eche_app.mojom-lite.js",
       IDR_CHROMEOS_ECHE_APP_CHROMEOS_COMPONENTS_ECHE_APP_UI_MOJOM_ECHE_APP_MOJOM_LITE_JS);
+  html_source->AddResourcePath(
+      "message_pipe.js",
+      IDR_CHROMEOS_ECHE_APP_______SYSTEM_APPS_PUBLIC_JS_MESSAGE_PIPE_JS);
+  html_source->AddResourcePath("message_types.js",
+                               IDR_CHROMEOS_ECHE_APP_MESSAGE_TYPES_JS);
   html_source->AddResourcePath("browser_proxy.js",
                                IDR_CHROMEOS_ECHE_APP_BROWSER_PROXY_JS);
 
+  html_source->AddResourcePath("mojo_bindings_lite.js",
+                               IDR_MOJO_MOJO_BINDINGS_LITE_JS);
+
   // DisableTrustedTypesCSP to support TrustedTypePolicy named 'goog#html'.
   // It is the Closure templating system that renders our UI, as it does many
   // other web apps using it.
   html_source->DisableTrustedTypesCSP();
-  content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
-                                html_source.release());
+  // The guest is in an <iframe>. Add it to CSP.
+  std::string csp = std::string("frame-src ") + kChromeUIEcheAppGuestURL + ";";
+  html_source->OverrideContentSecurityPolicy(
+      network::mojom::CSPDirectiveName::FrameSrc, csp);
+  auto* browser_context = web_ui->GetWebContents()->GetBrowserContext();
+  content::WebUIDataSource::Add(browser_context, html_source.release());
+
+  // Add ability to request chrome-untrusted: URLs.
+  web_ui->AddRequestableScheme(content::kChromeUIUntrustedScheme);
+
+  // Register common permissions for chrome-untrusted:// pages.
+  // TODO(https://crbug.com/1113568): Remove this after common permissions are
+  // granted by default.
+  auto* webui_allowlist = WebUIAllowlist::GetOrCreate(browser_context);
+  const url::Origin untrusted_eche_app_origin =
+      url::Origin::Create(GURL(kChromeUIEcheAppGuestURL));
+  for (const auto& permission : {
+           ContentSettingsType::COOKIES,
+           ContentSettingsType::JAVASCRIPT,
+           ContentSettingsType::IMAGES,
+           ContentSettingsType::SOUND,
+       }) {
+    webui_allowlist->RegisterAutoGrantedPermission(untrusted_eche_app_origin,
+                                                   permission);
+  }
 }
 
 EcheAppUI::~EcheAppUI() = default;
diff --git a/chromeos/components/eche_app_ui/resources/browser_proxy.js b/chromeos/components/eche_app_ui/resources/browser_proxy.js
index b33f6c3..cbaa84c 100644
--- a/chromeos/components/eche_app_ui/resources/browser_proxy.js
+++ b/chromeos/components/eche_app_ui/resources/browser_proxy.js
@@ -2,6 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// Pass the query string params from the trusted URL.
+const mainUrl = 'chrome-untrusted://eche-app/untrusted_index.html';
+// The window.location.hash starts with # and window.location.search starts
+// with ?, uses substring(1) to remove them.
+let urlParams = window.location.hash ?
+    new URLSearchParams(window.location.hash.substring(1)) :
+    new URLSearchParams(window.location.search.substring(1));
+urlParams = urlParams.toString();
+const iframeUrl = mainUrl + '?' + urlParams;
+document.getElementsByTagName('iframe')[0].src = iframeUrl;
+
 // Returns a remote for SignalingMessageExchanger interface which sends messages
 // to the browser.
 const signalMessageExchanger =
@@ -27,56 +38,77 @@
 systemInfo.setSystemInfoObserver(
     systemInfoObserverRouter.$.bindNewPipeAndPassRemote());
 
-// The implementation of echeapi.d.ts
-const EcheApiBindingImpl = new class {
-  onWebRtcSignalReceived(callback) {
-    signalingMessageObserverRouter.onReceivedSignalingMessage.addListener(
-        callback);
-  }
+/**
+ * A pipe through which we can send messages to the guest frame.
+ * Use an undefined `target` to find the <iframe> automatically.
+ * Do not rethrow errors, since handlers installed here are expected to
+ * throw exceptions that are handled on the other side of the pipe. And
+ * nothing `awaits` async callHandlerForMessageType_(), so they will always
+ * be reported as `unhandledrejection` and trigger a crash report.
+ */
+ const guestMessagePipe =
+ new MessagePipe('chrome-untrusted://eche-app',
+                 /*target=*/ undefined,
+                 /*rethrow_errors=*/ false);
 
-  sendWebRtcSignal(signaling) {
-    signalMessageExchanger.sendSignalingMessage(signaling);
-  }
+// Register bi-directional SEND_SIGNAL pipes.
+guestMessagePipe.registerHandler(Message.SEND_SIGNAL, async (signal) => {
+signalMessageExchanger.sendSignalingMessage(signal);
+})
 
-  tearDownSignal() {
+signalingMessageObserverRouter.onReceivedSignalingMessage.addListener(
+ (signal) => {
+   guestMessagePipe.sendMessage(
+       Message.SEND_SIGNAL, {/** @type {Uint8Array} */signal});
+ });
+
+// Register TEAR_DOWN_SIGNAL pipes.
+guestMessagePipe.registerHandler(Message.TEAR_DOWN_SIGNAL, async () => {
     signalMessageExchanger.tearDownSignaling();
-  }
+})
 
-  getSystemInfo() {
-    return systemInfo.getSystemInfo();
-  }
+// window.close() doesn't work from the iframe.
+guestMessagePipe.registerHandler(Message.CLOSE_WINDOW, async () => {
+    window.close();
+})
 
-  getLocalUid() {
-    return uidGenerator.getUid();
-  }
+// Register GET_SYSTEM_INFO pipes for wrapping getSystemInfo async api call.
+guestMessagePipe.registerHandler(Message.GET_SYSTEM_INFO, async () => {
+    return /** @type {!SystemInfo} */ (await systemInfo.getSystemInfo());
+})
 
-  onScreenBacklightStateChanged(callback) {
-    systemInfoObserverRouter.onScreenBacklightStateChanged.addListener(
-        callback);
-  }
+// Register GET_UID pipes for wrapping getUid async api call.
+guestMessagePipe.registerHandler(Message.GET_UID, async () => {
+    return /** @type {!UidInfo} */ (await uidGenerator.getUid());
+})
 
-  onReceivedTabletModeChanged(callback) {
-    systemInfoObserverRouter.onReceivedTabletModeChanged.addListener(
-        callback);
-  }
-};
+// Add Screen Backlight state listener and send state via pipes.
+systemInfoObserverRouter.onScreenBacklightStateChanged.addListener(
+    (state) => {
+      guestMessagePipe.sendMessage(
+          Message.SCREEN_BACKLIGHT_STATE, {/** @type {number} */state});
+});
 
-// Declare module echeapi and bind the implementation to echeapi.d.ts
-const echeapi = {};
-echeapi.webrtc = {};
-echeapi.webrtc.sendSignal =
-    EcheApiBindingImpl.sendWebRtcSignal.bind(EcheApiBindingImpl);
-echeapi.webrtc.tearDownSignal =
-    EcheApiBindingImpl.tearDownSignal.bind(EcheApiBindingImpl);
-echeapi.webrtc.registerSignalReceiver =
-    EcheApiBindingImpl.onWebRtcSignalReceived.bind(EcheApiBindingImpl);
-echeapi.system = {};
-echeapi.system.getLocalUid =
-    EcheApiBindingImpl.getLocalUid.bind(EcheApiBindingImpl);
-echeapi.system.getSystemInfo =
-    EcheApiBindingImpl.getSystemInfo.bind(EcheApiBindingImpl);
-echeapi.system.registerScreenBacklightState =
-    EcheApiBindingImpl.onScreenBacklightStateChanged.bind(EcheApiBindingImpl);
-echeapi.system.registerTabletModeChangedReceiver =
-    EcheApiBindingImpl.onReceivedTabletModeChanged.bind(EcheApiBindingImpl);
-window['echeapi'] = echeapi;
+// Add tablet mode listener and send result via pipes.
+systemInfoObserverRouter.onReceivedTabletModeChanged.addListener(
+    (isTabletMode) => {
+      guestMessagePipe.sendMessage(
+          Message.TABLET_MODE, {/** @type {boolean} */isTabletMode});
+});
+
+// We can't access hash change event inside iframe so parse the notification
+// info from the anchor part of the url when hash is changed and send them to
+// untrusted section via message pipes.
+function locationHashChanged() {
+    let urlParams = window.location.hash ?
+    new URLSearchParams(window.location.hash.substring(1)) :
+    new URLSearchParams(window.location.search.substring(1));
+    const notificationId = urlParams.get('notification_id');
+    const packageName = urlParams.get('package_name');
+    const timestamp = urlParams.get('timestamp');
+    const notificationInfo = /** @type {!NotificationInfo} */(
+        {notificationId, packageName, timestamp});
+    guestMessagePipe.sendMessage(Message.NOTIFICATION_INFO, notificationInfo);
+}
+
+window.onhashchange = locationHashChanged;
\ No newline at end of file
diff --git a/chromeos/components/eche_app_ui/resources/message_types.js b/chromeos/components/eche_app_ui/resources/message_types.js
new file mode 100644
index 0000000..35bac6a
--- /dev/null
+++ b/chromeos/components/eche_app_ui/resources/message_types.js
@@ -0,0 +1,59 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview @externs
+ * Message definitions passed over the Eche privileged/unprivileged pipe.
+ */
+
+/**
+ * Representation of an event passed in from the phone notification.
+ * @typedef {{
+ *    notificationId: string,
+ *    packageName: string,
+ *    timestamp: number,
+ * }}
+ */
+/* #export */ let NotificationInfo;
+
+/**
+ * Representation of the system info passed in from SystemInfoProvider.
+ * @typedef {{
+ *    boardName: string,
+ *    deviceName: string,
+ * }}
+ */
+/* #export */ let SystemInfo;
+
+/**
+ * Representation of the uid from local device.
+ * @typedef {{
+ *    localUid: string,
+ * }}
+ */
+/* #export */ let UidInfo;
+
+/**
+ * Enum for message types.
+ * @enum {string}
+ */
+ /* #export */ const Message = {
+    // Message for sending window close request to privileged section.
+    CLOSE_WINDOW: 'close-window',
+    // Message for sending signaling data in bi-directional pipes.
+    SEND_SIGNAL: 'send-signal',
+    // Message for sending tear down signal request to privileged section.
+    TEAR_DOWN_SIGNAL: 'tear-down-signal',
+    // Message for getting the result of getSystemInfo api from privileged
+    // section.
+    GET_SYSTEM_INFO: 'get-system-info',
+    // Message for getting the result of getUid api from privileged section.
+    GET_UID: 'get-uid',
+    // Message for sending screen backlight state to unprivileged section.
+    SCREEN_BACKLIGHT_STATE: 'screen-backlight-state',
+    // Message for sending tablet mode state to unprivileged section.
+    TABLET_MODE: 'tablet-mode',
+    // Message for sending notification event to unprivileged section.
+    NOTIFICATION_INFO: 'notification_info',
+};
\ No newline at end of file
diff --git a/chromeos/components/eche_app_ui/resources/mock/eche_bundle_mock_resources.grd b/chromeos/components/eche_app_ui/resources/mock/eche_bundle_mock_resources.grd
index 4634400b..86d99ad 100644
--- a/chromeos/components/eche_app_ui/resources/mock/eche_bundle_mock_resources.grd
+++ b/chromeos/components/eche_app_ui/resources/mock/eche_bundle_mock_resources.grd
@@ -10,6 +10,7 @@
   </outputs>
   <release seq="1">
     <includes>
+      <include name="IDR_CHROMEOS_ECHE_UNTRUSTED_INDEX_HTML" file="untrusted_index.html" type="BINDATA" />
       <include name="IDR_CHROMEOS_ECHE_INDEX_HTML" file="index.html" type="BINDATA" />
       <include name="IDR_CHROMEOS_ECHE_APP_BUNDLE_CSS" file="assets/app_bundle.css" type="BINDATA" />
       <include name="IDR_CHROMEOS_ECHE_APP_BUNDLE_JS" file="js/app_bundle.js" type="BINDATA" />
diff --git a/chromeos/components/eche_app_ui/resources/mock/index.html b/chromeos/components/eche_app_ui/resources/mock/index.html
index ab6ccd0e..31eb1f1 100644
--- a/chromeos/components/eche_app_ui/resources/mock/index.html
+++ b/chromeos/components/eche_app_ui/resources/mock/index.html
@@ -12,7 +12,8 @@
   </head>
   <body>
     <!-- Below mojo script required to run browser tests -->
-    <script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script>
+    <script src="mojo_bindings_lite.js"></script>
     <script src="js/app_bundle.js"></script>
+    <iframe src="chrome-untrusted://eche-app/app.html"></iframe>
   </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/chromeos/components/eche_app_ui/resources/mock/untrusted_index.html b/chromeos/components/eche_app_ui/resources/mock/untrusted_index.html
new file mode 100644
index 0000000..a95303b
--- /dev/null
+++ b/chromeos/components/eche_app_ui/resources/mock/untrusted_index.html
@@ -0,0 +1,11 @@
+<!-- Copyright 2021 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Eche App</title>
+    <header id='title'>Eche App</header>
+    <meta charset="utf-8">
+</head>
+</html>
diff --git a/chromeos/components/eche_app_ui/resources/receiver.js b/chromeos/components/eche_app_ui/resources/receiver.js
new file mode 100644
index 0000000..95c2c49
--- /dev/null
+++ b/chromeos/components/eche_app_ui/resources/receiver.js
@@ -0,0 +1,104 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+const parentMessagePipe = new MessagePipe('chrome://eche-app', window.parent);
+
+let signalingCallback = null;
+parentMessagePipe.registerHandler(Message.SEND_SIGNAL, async (message) => {
+    if (!signalingCallback) {
+        return;
+    }
+    signalingCallback(/** @type {Uint8Array} */ (message.signal));
+})
+
+let screenBacklightCallback = null;
+parentMessagePipe.registerHandler(Message.SCREEN_BACKLIGHT_STATE,
+ async (message) => {
+    if (!screenBacklightCallback) {
+        return;
+    }
+    screenBacklightCallback(/** @type {number} */ (message.state));
+})
+
+let tabletModeCallback = null;
+parentMessagePipe.registerHandler(Message.TABLET_MODE, async (message) => {
+    if (!tabletModeCallback) {
+        return;
+    }
+    tabletModeCallback(/** @type {boolean} */ (message.isTabletMode));
+})
+
+let notificationCallback = null;
+parentMessagePipe.registerHandler(
+  Message.NOTIFICATION_INFO, async (message) => {
+  if (!notificationCallback) {
+      return;
+  }
+  notificationCallback(/** @type {!NotificationInfo} */ (message));
+})
+
+// The implementation of echeapi.d.ts
+const EcheApiBindingImpl = new class {
+  closeWindow() {
+    parentMessagePipe.sendMessage(Message.CLOSE_WINDOW)
+  }
+
+  onWebRtcSignalReceived(callback) {
+    signalingCallback = callback;
+  }
+
+  sendWebRtcSignal(signaling) {
+    parentMessagePipe.sendMessage(Message.SEND_SIGNAL, signaling);
+  }
+
+  tearDownSignal() {
+    parentMessagePipe.sendMessage(Message.TEAR_DOWN_SIGNAL);
+  }
+
+  getSystemInfo() {
+    return /** @type {!SystemInfo} */ (
+      parentMessagePipe.sendMessage(Message.GET_SYSTEM_INFO));
+  }
+
+  getLocalUid() {
+    return /** @type {!UidInfo} */ (
+      parentMessagePipe.sendMessage(Message.GET_UID));
+  }
+
+  onScreenBacklightStateChanged(callback) {
+    screenBacklightCallback = callback;
+  }
+
+  onReceivedTabletModeChanged(callback) {
+    tabletModeCallback = callback;
+  }
+
+  onReceivedNotification(callback) {
+    notificationCallback = callback;
+  }
+};
+
+// Declare module echeapi and bind the implementation to echeapi.d.ts
+const echeapi = {};
+echeapi.webrtc = {};
+echeapi.webrtc.sendSignal =
+    EcheApiBindingImpl.sendWebRtcSignal.bind(EcheApiBindingImpl);
+echeapi.webrtc.tearDownSignal =
+    EcheApiBindingImpl.tearDownSignal.bind(EcheApiBindingImpl);
+echeapi.webrtc.registerSignalReceiver =
+    EcheApiBindingImpl.onWebRtcSignalReceived.bind(EcheApiBindingImpl);
+echeapi.webrtc.closeWindow =
+    EcheApiBindingImpl.closeWindow.bind(EcheApiBindingImpl);
+echeapi.system = {};
+echeapi.system.getLocalUid =
+    EcheApiBindingImpl.getLocalUid.bind(EcheApiBindingImpl);
+echeapi.system.getSystemInfo =
+    EcheApiBindingImpl.getSystemInfo.bind(EcheApiBindingImpl);
+echeapi.system.registerScreenBacklightState =
+    EcheApiBindingImpl.onScreenBacklightStateChanged.bind(EcheApiBindingImpl);
+echeapi.system.registerTabletModeChangedReceiver =
+    EcheApiBindingImpl.onReceivedTabletModeChanged.bind(EcheApiBindingImpl);
+echeapi.system.registerNotificationReceiver =
+    EcheApiBindingImpl.onReceivedNotification.bind(EcheApiBindingImpl);
+window['echeapi'] = echeapi;
\ No newline at end of file
diff --git a/chromeos/components/eche_app_ui/test/eche_app_ui_browsertest.js b/chromeos/components/eche_app_ui/test/eche_app_ui_browsertest.js
index 07297c3..3bdad66 100644
--- a/chromeos/components/eche_app_ui/test/eche_app_ui_browsertest.js
+++ b/chromeos/components/eche_app_ui/test/eche_app_ui_browsertest.js
@@ -10,6 +10,7 @@
 GEN('#include "content/public/test/browser_test.h"');
 
 const HOST_ORIGIN = 'chrome://eche-app';
+const GUEST_ORIGIN = 'chrome-untrusted://eche-app';
 
 var EcheAppUIBrowserTest = class extends testing.Test {
   /** @override */
@@ -33,6 +34,11 @@
   }
 };
 
+/** @return {!HTMLIFrameElement} */
+function queryIFrame() {
+  return /** @type{!HTMLIFrameElement} */ (document.querySelector('iframe'));
+}
+
 // Tests that chrome://eche-app goes somewhere instead of
 // 404ing or crashing.
 TEST_F('EcheAppUIBrowserTest', 'HasChromeSchemeURL', () => {
@@ -40,3 +46,19 @@
   assertEquals(document.location.origin, HOST_ORIGIN);
   testDone();
 });
+
+// Tests that chrome://eche-app is allowed to frame
+// chrome-untrusted://eche-app. The URL is set in the html. If that URL can't
+// load, test this fails like JS ERROR: "Refused to frame '...' because it
+// violates the following Content Security Policy directive: "frame-src
+// chrome-untrusted://eche-app/". This test also fails if the guest renderer is
+// terminated, e.g., due to webui performing bad IPC such as network requests
+// (failure detected in content/public/test/no_renderer_crashes_assertion.cc).
+TEST_F('EcheAppUIBrowserTest', 'GuestCanLoad', async () => {
+  const guest = queryIFrame();
+
+  assertEquals(document.location.origin, HOST_ORIGIN);
+  assertEquals(guest.src, GUEST_ORIGIN + '/app.html');
+
+  testDone();
+});
diff --git a/chromeos/components/eche_app_ui/test/eche_app_ui_chrome_branded_browsertest.js b/chromeos/components/eche_app_ui/test/eche_app_ui_chrome_branded_browsertest.js
index 5332c9af..88caea65 100644
--- a/chromeos/components/eche_app_ui/test/eche_app_ui_chrome_branded_browsertest.js
+++ b/chromeos/components/eche_app_ui/test/eche_app_ui_chrome_branded_browsertest.js
@@ -33,6 +33,22 @@
   }
 };
 
-// TODO(samchiu) Temporarily disable browser_test since a future Eche roll
-// will break the function of eche window. Test will be enable when we
-// phase in http://go/crrev/c/3081307.
+// Tests that chrome://eche-app goes somewhere instead of
+// 404ing or crashing.
+TEST_F('EcheAppUIBrowserTest', 'HasChromeSchemeURL', () => {
+  assertEquals(document.title, 'Eche');
+  assertEquals(document.location.origin, HOST_ORIGIN);
+  testDone();
+});
+
+// Tests that the implementations of echeapi.d.ts are defined.
+TEST_F('EcheAppUIBrowserTest', 'HasDefinedEcheapi', () => {
+  chai.assert.isDefined(echeapi.webrtc.registerSignalReceiver);
+  chai.assert.isDefined(echeapi.webrtc.sendSignal);
+  chai.assert.isDefined(echeapi.webrtc.tearDownSignal);
+  chai.assert.isDefined(echeapi.webrtc.closeWindow);
+  chai.assert.isDefined(echeapi.system.registerTabletModeChangedReceiver);
+  chai.assert.isDefined(echeapi.system.registerScreenBacklightState);
+  chai.assert.isDefined(echeapi.system.getLocalUid);
+  testDone();
+});
diff --git a/chromeos/components/eche_app_ui/untrusted_eche_app_ui.cc b/chromeos/components/eche_app_ui/untrusted_eche_app_ui.cc
new file mode 100644
index 0000000..3943679
--- /dev/null
+++ b/chromeos/components/eche_app_ui/untrusted_eche_app_ui.cc
@@ -0,0 +1,67 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/eche_app_ui/untrusted_eche_app_ui.h"
+
+#include "chromeos/components/eche_app_ui/url_constants.h"
+#include "chromeos/grit/chromeos_eche_app_resources.h"
+#include "chromeos/grit/chromeos_eche_bundle_resources.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_data_source.h"
+#include "content/public/common/url_constants.h"
+#include "mojo/public/js/grit/mojo_bindings_resources.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+namespace eche_app {
+
+UntrustedEcheAppUIConfig::UntrustedEcheAppUIConfig()
+    : WebUIConfig(content::kChromeUIUntrustedScheme,
+                  eche_app::kChromeUIEcheAppGuestHost) {}
+
+UntrustedEcheAppUIConfig::~UntrustedEcheAppUIConfig() = default;
+
+std::unique_ptr<content::WebUIController>
+UntrustedEcheAppUIConfig::CreateWebUIController(content::WebUI* web_ui) {
+  return std::make_unique<UntrustedEcheAppUI>(web_ui);
+}
+
+UntrustedEcheAppUI::UntrustedEcheAppUI(content::WebUI* web_ui)
+    : ui::UntrustedWebUIController(web_ui) {
+  content::WebUIDataSource* html_source =
+      content::WebUIDataSource::Create(eche_app::kChromeUIEcheAppGuestURL);
+
+  html_source->AddResourcePath("untrusted_index.html",
+                               IDR_CHROMEOS_ECHE_UNTRUSTED_INDEX_HTML);
+  html_source->AddResourcePath("js/app_bundle.js",
+                               IDR_CHROMEOS_ECHE_APP_BUNDLE_JS);
+  html_source->AddResourcePath("assets/app_bundle.css",
+                               IDR_CHROMEOS_ECHE_APP_BUNDLE_CSS);
+  html_source->AddResourcePath(
+      "message_pipe.js",
+      IDR_CHROMEOS_ECHE_APP_______SYSTEM_APPS_PUBLIC_JS_MESSAGE_PIPE_JS);
+  html_source->AddResourcePath("message_types.js",
+                               IDR_CHROMEOS_ECHE_APP_MESSAGE_TYPES_JS);
+  html_source->AddResourcePath("receiver.js",
+                               IDR_CHROMEOS_ECHE_APP_RECEIVER_JS);
+
+  html_source->AddFrameAncestor(GURL(eche_app::kChromeUIEcheAppURL));
+
+  // DisableTrustedTypesCSP to support TrustedTypePolicy named 'goog#html'.
+  // It is the Closure templating system that renders our UI, as it does many
+  // other web apps using it.
+  html_source->DisableTrustedTypesCSP();
+  // TODO(b/194964287): Audit and tighten CSP.
+  html_source->OverrideContentSecurityPolicy(
+      network::mojom::CSPDirectiveName::DefaultSrc, "");
+
+  auto* browser_context = web_ui->GetWebContents()->GetBrowserContext();
+  content::WebUIDataSource::Add(browser_context, html_source);
+}
+
+UntrustedEcheAppUI::~UntrustedEcheAppUI() = default;
+
+}  // namespace eche_app
+}  // namespace chromeos
diff --git a/chromeos/components/eche_app_ui/untrusted_eche_app_ui.h b/chromeos/components/eche_app_ui/untrusted_eche_app_ui.h
new file mode 100644
index 0000000..b09ca0a
--- /dev/null
+++ b/chromeos/components/eche_app_ui/untrusted_eche_app_ui.h
@@ -0,0 +1,31 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#ifndef CHROMEOS_COMPONENTS_ECHE_APP_UI_UNTRUSTED_ECHE_APP_UI_H_
+#define CHROMEOS_COMPONENTS_ECHE_APP_UI_UNTRUSTED_ECHE_APP_UI_H_
+#include "ui/webui/untrusted_web_ui_controller.h"
+#include "ui/webui/webui_config.h"
+namespace content {
+class WebUI;
+}  // namespace content
+namespace chromeos {
+namespace eche_app {
+// WebUI config for chrome-untrusted://eche-app
+class UntrustedEcheAppUIConfig : public ui::WebUIConfig {
+ public:
+  UntrustedEcheAppUIConfig();
+  ~UntrustedEcheAppUIConfig() override;
+  std::unique_ptr<content::WebUIController> CreateWebUIController(
+      content::WebUI* web_ui) override;
+};
+// WebUI controller for chrome-untrusted://eche-app
+class UntrustedEcheAppUI : public ui::UntrustedWebUIController {
+ public:
+  explicit UntrustedEcheAppUI(content::WebUI* web_ui);
+  UntrustedEcheAppUI(const UntrustedEcheAppUI&) = delete;
+  UntrustedEcheAppUI& operator=(const UntrustedEcheAppUI&) = delete;
+  ~UntrustedEcheAppUI() override;
+};
+}  // namespace eche_app
+}  // namespace chromeos
+#endif  // CHROMEOS_COMPONENTS_ECHE_APP_UI_UNTRUSTED_ECHE_APP_UI_H_
diff --git a/chromeos/components/eche_app_ui/url_constants.cc b/chromeos/components/eche_app_ui/url_constants.cc
index 7fc4467..31c54152 100644
--- a/chromeos/components/eche_app_ui/url_constants.cc
+++ b/chromeos/components/eche_app_ui/url_constants.cc
@@ -9,6 +9,8 @@
 
 const char kChromeUIEcheAppHost[] = "eche-app";
 const char kChromeUIEcheAppURL[] = "chrome://eche-app";
+const char kChromeUIEcheAppGuestHost[] = "eche-app";
+const char kChromeUIEcheAppGuestURL[] = "chrome-untrusted://eche-app/";
 
 }  // namespace eche_app
 }  // namespace chromeos
diff --git a/chromeos/components/eche_app_ui/url_constants.h b/chromeos/components/eche_app_ui/url_constants.h
index 39437d54..7580b08 100644
--- a/chromeos/components/eche_app_ui/url_constants.h
+++ b/chromeos/components/eche_app_ui/url_constants.h
@@ -10,6 +10,8 @@
 
 extern const char kChromeUIEcheAppHost[];
 extern const char kChromeUIEcheAppURL[];
+extern const char kChromeUIEcheAppGuestHost[];
+extern const char kChromeUIEcheAppGuestURL[];
 
 }  // namespace eche_app
 }  // namespace chromeos
diff --git a/chromeos/crosapi/mojom/BUILD.gn b/chromeos/crosapi/mojom/BUILD.gn
index 1d4bdb3..da848e9 100644
--- a/chromeos/crosapi/mojom/BUILD.gn
+++ b/chromeos/crosapi/mojom/BUILD.gn
@@ -30,6 +30,7 @@
     "message_center.mojom",
     "metrics_reporting.mojom",
     "native_theme.mojom",
+    "network_settings_service.mojom",
     "networking_attributes.mojom",
     "notification.mojom",
     "power.mojom",
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom
index 48b721f..f46f7ac 100644
--- a/chromeos/crosapi/mojom/crosapi.mojom
+++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -27,6 +27,7 @@
 import "chromeos/crosapi/mojom/native_theme.mojom";
 import "chromeos/crosapi/mojom/networking_attributes.mojom";
 import "chromeos/crosapi/mojom/power.mojom";
+import "chromeos/crosapi/mojom/network_settings_service.mojom";
 import "chromeos/crosapi/mojom/prefs.mojom";
 import "chromeos/crosapi/mojom/remoting.mojom";
 import "chromeos/crosapi/mojom/resource_manager.mojom";
@@ -67,8 +68,8 @@
 // please note the milestone when you added it, to help us reason about
 // compatibility between the client applications and older ash-chrome binaries.
 //
-// Next version: 41
-// Next method id: 46
+// Next version: 42
+// Next method id: 47
 [Stable, Uuid="8b79c34f-2bf8-4499-979a-b17cac522c1e",
  RenamedFrom="crosapi.mojom.AshChromeService"]
 interface Crosapi {
@@ -168,6 +169,13 @@
   [MinVersion=37]
   BindImageWriter@42(pending_receiver<ImageWriter> receiver);
 
+  // Binds the NetworkSettingsService interface for reading and observing
+  // network changes.
+  // Added in M93.
+  [MinVersion=41]
+  BindNetworkSettingsService@46(
+      pending_receiver<NetworkSettingsService> receiver);
+
   // Binds the KeystoreService interface for challenging keys.
   // Added in M87.
   BindKeystoreService@2(pending_receiver<KeystoreService> receiver);
diff --git a/chromeos/crosapi/mojom/download_controller.mojom b/chromeos/crosapi/mojom/download_controller.mojom
index 56b8428..acd1946d 100644
--- a/chromeos/crosapi/mojom/download_controller.mojom
+++ b/chromeos/crosapi/mojom/download_controller.mojom
@@ -25,8 +25,8 @@
 // non-nullable `field`. This is for backwards compatibility, so that older
 // clients know when values are present or are absent by default.
 //
-// Next MinVersion: 3
-// Next ID: 13
+// Next MinVersion: 4
+// Next ID: 18
 [Stable, RenamedFrom="crosapi.mojom.DownloadEvent"]
 struct DownloadItem {
   DownloadState state@0;
@@ -43,6 +43,10 @@
   [MinVersion=1] bool has_total_bytes@11;
   [MinVersion=1] int64 total_bytes@12;
   [MinVersion=2] mojo_base.mojom.Time? start_time@13;
+  [MinVersion=3] bool has_is_dangerous@14;
+  [MinVersion=3] bool is_dangerous@15;
+  [MinVersion=3] bool has_is_mixed_content@16;
+  [MinVersion=3] bool is_mixed_content@17;
 };
 
 // A client implemented in lacros-chrome for the DownloadController which is
diff --git a/chromeos/crosapi/mojom/network_settings_service.mojom b/chromeos/crosapi/mojom/network_settings_service.mojom
new file mode 100644
index 0000000..e69d41c
--- /dev/null
+++ b/chromeos/crosapi/mojom/network_settings_service.mojom
@@ -0,0 +1,85 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module crosapi.mojom;
+
+import "url/mojom/url.mojom";
+
+[Stable]
+struct ProxyLocation {
+    // Host (or IP address) to use for proxy.
+   string host;
+   int32 port;
+};
+
+// Description of the extension in the primary profile which is controlling the
+// OS proxy configuration. It is sent from Lacros' primary profile to Ash and
+// from Ash to all profiles in Lacros, the PlayStore and Chrome OS system
+// services.
+// Note: In the Lacros primary profile, the extension set proxy has priority so
+// proxy updates coming from the OS are ignored.
+[Stable]
+struct ExtensionControllingProxy {
+    string name;
+    string id;
+};
+
+[Stable]
+struct ProxySettingsDirect {};
+
+[Stable]
+struct ProxySettingsManual {
+    array<ProxyLocation> http_proxies;
+    array<ProxyLocation> secure_http_proxies;
+    array<ProxyLocation> socks_proxies;
+    // Domains and hosts for which to exclude proxy settings.
+    array<string> exclude_domains;
+ };
+
+[Stable]
+struct ProxySettingsPac {
+    url.mojom.Url pac_url;
+    // If true, network traffic does not fall back to direct connections in
+    // case the PAC script is not available.
+    bool pac_mandatory;
+ };
+
+[Stable]
+struct ProxySettingsWpad {
+    url.mojom.Url pac_url;
+};
+
+[Stable]
+union ProxySettings {
+    ProxySettingsDirect direct;
+    ProxySettingsManual manual;
+    ProxySettingsPac pac;
+    ProxySettingsWpad wpad;
+};
+
+[Stable]
+struct ProxyConfig {
+    ProxySettings proxy_settings;
+
+    // Identifies the extension controlling the proxy.
+    ExtensionControllingProxy? extension;
+};
+
+// Implemented by Lacros-Chrome.
+[Stable]
+interface NetworkSettingsObserver {
+    // This methods is called when:
+    // - the observer is added to the `NetworkSettingsService`;
+    // - the proxy configuration in Ash is updated;
+    // - the WPAD URL on the default network is updated.
+    OnProxyChanged@0(ProxyConfig proxy_config);
+};
+
+// Implemented by Ash-Chrome.
+[Stable, Uuid="e8916037-b993-454a-96ef-20f269cace54"]
+interface NetworkSettingsService {
+    // Add an Ash network settings service observer.
+    AddNetworkSettingsObserver@0(
+        pending_remote<NetworkSettingsObserver> observer);
+};
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc
index ac137d8..4d2216e 100644
--- a/chromeos/lacros/lacros_service.cc
+++ b/chromeos/lacros/lacros_service.cc
@@ -32,6 +32,7 @@
 #include "chromeos/crosapi/mojom/local_printer.mojom.h"
 #include "chromeos/crosapi/mojom/message_center.mojom.h"
 #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h"
+#include "chromeos/crosapi/mojom/network_settings_service.mojom.h"
 #include "chromeos/crosapi/mojom/networking_attributes.mojom.h"
 #include "chromeos/crosapi/mojom/power.mojom.h"
 #include "chromeos/crosapi/mojom/prefs.mojom.h"
@@ -260,6 +261,10 @@
       Crosapi::MethodMinVersions::kBindNetworkingAttributesMinVersion>();
   ConstructRemote<crosapi::mojom::Prefs, &crosapi::mojom::Crosapi::BindPrefs,
                   Crosapi::MethodMinVersions::kBindPrefsMinVersion>();
+  ConstructRemote<
+      crosapi::mojom::NetworkSettingsService,
+      &crosapi::mojom::Crosapi::BindNetworkSettingsService,
+      Crosapi::MethodMinVersions::kBindNetworkSettingsServiceMinVersion>();
   ConstructRemote<crosapi::mojom::Remoting,
                   &crosapi::mojom::Crosapi::BindRemoting,
                   Crosapi::MethodMinVersions::kBindRemotingMinVersion>();
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index 8cb1bc9..3040497 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">የእኔ ፋይሎች</translation>
 <translation id="3199982728237701504">ሰነድ መጋቢ (ባለሁለት ጎን)</translation>
 <translation id="3226405216343213872">ቃኚዎችን በመፈለግ ላይ</translation>
+<translation id="3228433892370472777">ነባሪ ግንኙነት</translation>
 <translation id="3246869037381808805">ከ1 ቀን በላይ ዕድሜ ያላቸው የህትመት ሥራዎች ይወገዳሉ</translation>
 <translation id="3268178239013324452">አልተሳካም - በር ክፍት ነው</translation>
 <translation id="3283504360622356314">{0,plural, =1{ፋይል አርትዕ ያድርጉ}one{ፋይሎችን አርትዕ ያድርጉ}other{ፋይሎችን አርትዕ ያድርጉ}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">ጭንቀት</translation>
 <translation id="4917385247580444890">ጠንካራ</translation>
 <translation id="4917889632206600977">ቆሟል - ወረቀት አልቋል</translation>
+<translation id="491836528011451486">ሰነድዎን በመቃኛው ላይ ያስቀምጡት እና ገጽ <ph name="CURRENT_PAGE" />ን ለመቃኘትና ለመተካት ዳግም ቃኝን ይምረጡ።</translation>
 <translation id="4921665434385737356">በ<ph name="NUM_SECONDS" /> ሰከንዶች ውስጥ <ph name="RATE" /> ሞልቷል።</translation>
 <translation id="4932733599132424254">ቀን</translation>
 <translation id="498186245079027698">መቃኛውን ይፈትሹ እና እንደገና ይሞክሩ። የተቃኙ ፋይሎችን ለማስቀመጥ በቂ አከባቢያዊ ቦታ መኖሩን ያረጋግጡ።</translation>
@@ -330,6 +332,7 @@
 <translation id="7177485034254901881">ይህ <ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> የሚተዳደር ነው። አስተዳዳሪዎች መሣሪያውን ከርቀት ማዋቀር ይችላሉ።</translation>
 <translation id="7180611975245234373">አድስ</translation>
 <translation id="7216409898977639127">የተንቀሳቃሽ ስልክ አገልግሎት አቅራቢ</translation>
+<translation id="7257889006063274246">እርግጠኛ ነዎት ገጽ <ph name="CURRENT_PAGE" />ን ማስወገድ ይፈልጋሉ?</translation>
 <translation id="7271040990581020067">ቃኚ በአሁኑ ጊዜ ጥቅም ላይ እየዋለ ነው። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">የልጣፍ ስብስቦች</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index ca7ceb34..45913c17 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Meine Dateien</translation>
 <translation id="3199982728237701504">Dokumenteneinzug (beidseitig)</translation>
 <translation id="3226405216343213872">Suche nach Scannern läuft</translation>
+<translation id="3228433892370472777">Standardverbindung</translation>
 <translation id="3246869037381808805">Druckaufträge, die älter als 1 Tag sind, werden entfernt</translation>
 <translation id="3268178239013324452">Fehlgeschlagen – Druckerklappe offen</translation>
 <translation id="3283504360622356314">{0,plural, =1{Datei bearbeiten}other{Dateien bearbeiten}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Belastung</translation>
 <translation id="4917385247580444890">Stark</translation>
 <translation id="4917889632206600977">Angehalten – Kein Papier</translation>
+<translation id="491836528011451486">Legen Sie das Dokument in den Scanner und wählen Sie „Noch einmal scannen“ aus, um die Seite <ph name="CURRENT_PAGE" /> zu scannen und zu ersetzen.</translation>
 <translation id="4921665434385737356"><ph name="RATE" /> in <ph name="NUM_SECONDS" /> Sekunden aufgeladen.</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="498186245079027698">Prüfe den Scanner und versuche es noch einmal. Sieh nach, ob ausreichend lokaler Speicherplatz vorhanden ist, um die gescannten Dateien zu speichern.</translation>
@@ -330,6 +332,7 @@
 <translation id="7177485034254901881">Dieses <ph name="DEVICE_TYPE" /> wird von <ph name="MANAGER" /> verwaltet. Administratoren können das Gerät per Remotezugriff konfigurieren.</translation>
 <translation id="7180611975245234373">Aktualisieren</translation>
 <translation id="7216409898977639127">Mobilfunkanbieter</translation>
+<translation id="7257889006063274246">Sind Sie sicher, dass Sie Seite <ph name="CURRENT_PAGE" /> entfernen möchten?</translation>
 <translation id="7271040990581020067">Der Scanner wird derzeit verwendet. Versuchen Sie es später noch einmal.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Hintergrundsammlungen</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 0994e51..e2771e14 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -102,7 +102,7 @@
 <translation id="3188257591659621405">Файлдарым</translation>
 <translation id="3199982728237701504">Құжат беруші (екі жақты)</translation>
 <translation id="3226405216343213872">Сканерлер ізделуде</translation>
-<translation id="3228433892370472777">Әдепкі қосылу</translation>
+<translation id="3228433892370472777">Әдепкі байланыс</translation>
 <translation id="3246869037381808805">1 күннен асқан баспа жұмыстары өшіріледі.</translation>
 <translation id="3268178239013324452">Сәтсіз: есігі ашық</translation>
 <translation id="3283504360622356314">{0,plural, =1{Файлды өзгерту}other{Файлдарды өзгерту}}</translation>
@@ -201,7 +201,7 @@
 <translation id="4891842000192098784">Стресс</translation>
 <translation id="4917385247580444890">Күшті</translation>
 <translation id="4917889632206600977">Тоқтатылды: қағаз бітіп қалды</translation>
-<translation id="491836528011451486"><ph name="CURRENT_PAGE" />-бетті сканерлеп, ауыстыру үшін құжатты сканерге қойып, "Қайта сканерлеу" түймесін басыңыз.</translation>
+<translation id="491836528011451486"><ph name="CURRENT_PAGE" />-бетті қайтадан сканерлеу үшін (ескісінің үстіне жазылады) құжатты сканерге қойып, "Қайта сканерлеу" түймесін басыңыз.</translation>
 <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> секундта <ph name="RATE" /> зарядталды.</translation>
 <translation id="4932733599132424254">Күні</translation>
 <translation id="498186245079027698">Сканерді тексеріп, әрекетті қайталаңыз. Сканерленген файлдарды сақтайтын орынның жеткілікті екенін тексеріңіз.</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index ba3d255..e90bdc8a 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -46,7 +46,7 @@
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1792647875738159689">స్కానింగ్ రద్దు అవుతోంది</translation>
-<translation id="1851218745569890714">వీడియో సమావేశం నిర్వహించడం</translation>
+<translation id="1851218745569890714">వీడియో మీటింగ్‌ నిర్వహించడం</translation>
 <translation id="1887850431809612466">హార్డ్‌వేర్ పునర్విమర్శ</translation>
 <translation id="1905710495812624430">అనుమతించిన గరిష్ట ప్రయత్నాలు మించిపోయారు.</translation>
 <translation id="1908234395526491708">UDP రిక్వెస్ట్ వైఫల్యాలు</translation>
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index fe16ae1..47f446a 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -15,9 +15,6 @@
   # crbug.com/1167243
   "login.Chrome",
 
-  # crbug.com/1115622
-  "login.ChromeGAIA",
-
   # crbug.com/1099695
   "platform.Drivefs",
 
@@ -25,10 +22,6 @@
   "apps.LaunchHelpApp.clamshell_oobe_stable",
   "apps.LaunchHelpApp.tablet_oobe_stable",
 
-  # crbug.com/1148036
-  "ui.ExistingUserLogin",
-  "ui.SigninProfileExtension",
-
   # crbug.com/1154794
   "policy.DefaultGeolocationSetting",
 
@@ -47,9 +40,6 @@
   # crbug.com/1181243
   "network.ConfigureServiceForUserProfile.normal",
 
-  # crbug.com/1181283
-  "ui.QuickSettingsLockScreen.no_battery",
-
   # crbug.com/1185176
   "arc.Optin",
 
diff --git a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
index 85f47dd..9a40438 100644
--- a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
+++ b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
@@ -119,16 +119,13 @@
     uint32_t texture_target) {
   VLOGF(2);
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(client_);
 
-  pending_coded_size_ = dimensions;
-
-  decoder_state_ = DecoderState::kAwaitingAssignPictureBuffers;
-
-  auto pbf = mojom::PictureBufferFormat::New();
-  pbf->min_num_buffers = requested_num_of_buffers;
-  pbf->coded_size = dimensions;
-  client_->ProvidePictureBuffers(std::move(pbf), visible_rect);
+  // Unretained(this) is safe, this callback will be executed inside the class.
+  pending_provide_picture_buffers_requests_.push(
+      base::BindOnce(&GpuArcVideoDecodeAccelerator::HandleProvidePictureBuffers,
+                     base::Unretained(this), requested_num_of_buffers,
+                     dimensions, visible_rect));
+  CallPendingProvidePictureBuffers();
 }
 
 void GpuArcVideoDecodeAccelerator::DismissPictureBuffer(
@@ -476,9 +473,67 @@
        PendingCallback()});
 }
 
+void GpuArcVideoDecodeAccelerator::HandleProvidePictureBuffers(
+    uint32_t requested_num_of_buffers,
+    const gfx::Size& dimensions,
+    const gfx::Rect& visible_rect) {
+  DVLOGF(2) << "requested_num_of_buffers=" << requested_num_of_buffers
+            << ", dimensions=" << dimensions.ToString()
+            << ", visible_rect=" << visible_rect.ToString();
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  DCHECK(client_);
+
+  // Unretained(this) is safe, this callback will be executed inside the class.
+  DCHECK(!current_provide_picture_buffers_cb_);
+  current_provide_picture_buffers_cb_ = base::BindOnce(
+      &GpuArcVideoDecodeAccelerator::OnAssignPictureBuffersCalled,
+      base::Unretained(this), dimensions);
+
+  auto pbf = mojom::PictureBufferFormat::New();
+  pbf->min_num_buffers = requested_num_of_buffers;
+  pbf->coded_size = dimensions;
+  client_->ProvidePictureBuffers(std::move(pbf), visible_rect);
+}
+
+bool GpuArcVideoDecodeAccelerator::CallPendingProvidePictureBuffers() {
+  DVLOGF(3);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  if (current_provide_picture_buffers_cb_ ||
+      pending_provide_picture_buffers_requests_.empty()) {
+    return false;
+  }
+
+  std::move(pending_provide_picture_buffers_requests_.front()).Run();
+  pending_provide_picture_buffers_requests_.pop();
+  return true;
+}
+
 void GpuArcVideoDecodeAccelerator::AssignPictureBuffers(uint32_t count) {
   VLOGF(2) << "count=" << count;
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  if (!current_provide_picture_buffers_cb_) {
+    VLOGF(1) << "AssignPictureBuffers is not called right after "
+             << "Client::ProvidePictureBuffers()";
+    client_->NotifyError(
+        mojom::VideoDecodeAccelerator::Result::INVALID_ARGUMENT);
+    return;
+  }
+  std::move(current_provide_picture_buffers_cb_).Run(count);
+
+  if (!CallPendingProvidePictureBuffers()) {
+    // No further request. Now we can wait for the first imported buffer.
+    awaiting_first_import_ = true;
+  }
+}
+
+void GpuArcVideoDecodeAccelerator::OnAssignPictureBuffersCalled(
+    const gfx::Size& dimensions,
+    uint32_t count) {
+  DVLOGF(3) << "dimensions=" << dimensions.ToString() << ", count=" << count;
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (!vda_) {
     VLOGF(1) << "VDA not initialized.";
     return;
@@ -490,17 +545,8 @@
         mojom::VideoDecodeAccelerator::Result::INVALID_ARGUMENT);
     return;
   }
-  if (decoder_state_ != DecoderState::kAwaitingAssignPictureBuffers) {
-    VLOGF(1) << "AssignPictureBuffers is not called right after "
-             << "Client::ProvidePictureBuffers()";
-    client_->NotifyError(
-        mojom::VideoDecodeAccelerator::Result::INVALID_ARGUMENT);
-    return;
-  }
-
-  coded_size_ = pending_coded_size_;
+  coded_size_ = dimensions;
   output_buffer_count_ = static_cast<size_t>(count);
-  decoder_state_ = DecoderState::kAwaitingFirstImport;
 }
 
 void GpuArcVideoDecodeAccelerator::ImportBufferForPicture(
@@ -515,9 +561,9 @@
     VLOGF(1) << "VDA not initialized.";
     return;
   }
-  if (decoder_state_ == DecoderState::kAwaitingAssignPictureBuffers) {
-    DVLOGF(3) << "AssignPictureBuffers() hasn't been called after calling "
-              << "Client::ProvidePictureBuffers(), ignored.";
+  if (current_provide_picture_buffers_cb_) {
+    DVLOGF(3) << "AssignPictureBuffers() for the last "
+              << "Client::ProvidePictureBuffers() hasn't been called, ignored.";
     return;
   }
 
@@ -595,7 +641,8 @@
 
   // This is the first time of ImportBufferForPicture() after
   // AssignPictureBuffers() is called. Call VDA::AssignPictureBuffers() here.
-  if (decoder_state_ == DecoderState::kAwaitingFirstImport) {
+  if (awaiting_first_import_) {
+    awaiting_first_import_ = false;
     gfx::Size picture_size(gmb_handle.native_pixmap_handle.planes[0].stride,
                            coded_size_.height());
     std::vector<media::PictureBuffer> buffers;
@@ -605,7 +652,6 @@
     }
 
     vda_->AssignPictureBuffers(std::move(buffers));
-    decoder_state_ = DecoderState::kDecoding;
   }
 
   vda_->ImportBufferForPicture(picture_buffer_id, pixel_format,
@@ -620,9 +666,9 @@
     VLOGF(1) << "VDA not initialized.";
     return;
   }
-  if (decoder_state_ == DecoderState::kAwaitingAssignPictureBuffers) {
-    DVLOGF(3) << "AssignPictureBuffers() hasn't been called after calling "
-              << "Client::ProvidePictureBuffers(), ignored.";
+  if (current_provide_picture_buffers_cb_) {
+    DVLOGF(3) << "AssignPictureBuffers() for the last "
+              << "Client::ProvidePictureBuffers() hasn't been called, ignored.";
     return;
   }
 
diff --git a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
index f47f324..04191d6e 100644
--- a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
+++ b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
@@ -80,25 +80,6 @@
   void Flush(FlushCallback callback) override;
   void Reset(ResetCallback callback) override;
  private:
-  // The calling flow of changing resolution is:
-  // 1. VDA calls Client::ProvidePictureBuffers()
-  // 2. Client calls VDA::AssignPictureBuffers()
-  // 3. Client calls VDA::ImportBufferForPicture() for N times
-  // 4. Client calls VDA::ReusePictureBuffer() when a buffer is recycled.
-  //
-  // The enum state is used to check these two situations:
-  // 1. Client should not call VDA::AssignPictureBuffers() twice without calling
-  //    VDA::ImportBufferForPicture() between them.
-  // 2. If VDA::ImportBufferForPicture() or VDA::ReusePictureBuffer() is
-  //    called right after calling Client::ProvidePictureBuffers() without
-  //    VDA::AssignPictureBuffers() be called, then the buffer contains previous
-  //    resolution and should be ignored.
-  enum class DecoderState {
-    kAwaitingAssignPictureBuffers,
-    kAwaitingFirstImport,
-    kDecoding,
-  };
-
   using PendingCallback =
       base::OnceCallback<void(mojom::VideoDecodeAccelerator::Result)>;
   static_assert(std::is_same<ResetCallback, PendingCallback>::value,
@@ -134,6 +115,16 @@
                      PendingCallback cb,
                      media::VideoDecodeAccelerator* vda);
 
+  // Call the ProvidePictureBuffers() to the client.
+  void HandleProvidePictureBuffers(uint32_t requested_num_of_buffers,
+                                   const gfx::Size& dimensions,
+                                   const gfx::Rect& visible_rect);
+  // Call the pending ProvidePictureBuffers() to the client if needed.
+  bool CallPendingProvidePictureBuffers();
+  // Called when the AssignPictureBuffers() is called by the client.
+  void OnAssignPictureBuffersCalled(const gfx::Size& dimensions,
+                                    uint32_t count);
+
   // Global counter that keeps track of the number of active clients (i.e., how
   // many VDAs in use by this class).
   // Since this class only works on the same thread, it's safe to access
@@ -178,7 +169,15 @@
   absl::optional<bool> secure_mode_ = absl::nullopt;
   size_t output_buffer_count_ = 0;
 
-  DecoderState decoder_state_ = DecoderState::kDecoding;
+  // When the client resets VDA during requesting new buffers, then VDA will
+  // request new buffers again. These variables are used to handle multiple
+  // ProvidePictureBuffers() requests.
+  // The pending ProvidePictureBuffers() requests.
+  std::queue<base::OnceClosure> pending_provide_picture_buffers_requests_;
+  // The callback of the current ProvidePictureBuffers() requests.
+  base::OnceCallback<void(uint32_t)> current_provide_picture_buffers_cb_;
+  // Set to true when the last ProvidePictureBuffers() is replied.
+  bool awaiting_first_import_ = false;
 
   THREAD_CHECKER(thread_checker_);
   DISALLOW_COPY_AND_ASSIGN(GpuArcVideoDecodeAccelerator);
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index f91ea017..fff9528 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -239,7 +239,7 @@
 <translation id="7260727271532453612"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> అనుమతించబడ్డాయి</translation>
 <translation id="7302486331832100261">మీరు సాధారణంగా నోటిఫికేషన్‌లను బ్లాక్ చేస్తుంటారు. అనుమతించడానికి, 'వివరాలు'ను నొక్కండి.</translation>
 <translation id="7423098979219808738">ముందుగా అడుగుతుంది</translation>
-<translation id="7423538860840206698">క్లిప్‌బోర్డ్‌ని చదవకుండా బ్లాక్ చేసారు</translation>
+<translation id="7423538860840206698">క్లిప్‌బోర్డ్‌ని చదవకుండా బ్లాక్ చేశారు</translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7554752735887601236">ఒక సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగిస్తోంది</translation>
 <translation id="7561196759112975576">ఎల్లప్పుడూ</translation>
diff --git a/components/full_restore/full_restore_read_and_save_unittest.cc b/components/full_restore/full_restore_read_and_save_unittest.cc
index 46eb2e1..83c886f 100644
--- a/components/full_restore/full_restore_read_and_save_unittest.cc
+++ b/components/full_restore/full_restore_read_and_save_unittest.cc
@@ -182,10 +182,11 @@
 
   const base::FilePath& GetPath() { return tmp_dir_.GetPath(); }
 
-  void ReadFromFile(const base::FilePath& file_path) {
+  void ReadFromFile(const base::FilePath& file_path, bool clear_data = true) {
     FullRestoreReadHandler* read_handler =
         FullRestoreReadHandler::GetInstance();
-    FullRestoreReadHandlerTestApi(read_handler).ClearRestoreData();
+    if (clear_data)
+      FullRestoreReadHandlerTestApi(read_handler).ClearRestoreData();
 
     base::RunLoop run_loop;
 
@@ -198,6 +199,12 @@
     run_loop.Run();
   }
 
+  FullRestoreSaveHandler* GetSaveHandler(bool start_save_timer = true) {
+    auto* save_handler = FullRestoreSaveHandler::GetInstance();
+    save_handler->AllowSave();
+    return save_handler;
+  }
+
   const RestoreData* GetRestoreData(const base::FilePath& file_path) {
     return restore_data_.get();
   }
@@ -305,8 +312,131 @@
   ASSERT_TRUE(restore_data->app_id_to_launch_list().empty());
 }
 
+TEST_F(FullRestoreReadAndSaveTest, StopSavingWhenShutdown) {
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
+  base::OneShotTimer* timer = save_handler->GetTimerForTesting();
+
+  // Add app launch info, and verify the timer starts.
+  AddAppLaunchInfo(GetPath(), kId1);
+  EXPECT_TRUE(timer->IsRunning());
+
+  // Simulate timeout.
+  timer->FireNow();
+  task_environment().RunUntilIdle();
+
+  // Add one more app launch info, and verify the timer is running.
+  AddAppLaunchInfo(GetPath(), kId2);
+  EXPECT_TRUE(timer->IsRunning());
+
+  // Simulate shutdown.
+  save_handler->SetShutDown();
+
+  // Simulate timeout.
+  timer->FireNow();
+  task_environment().RunUntilIdle();
+
+  FullRestoreReadHandler* read_handler = FullRestoreReadHandler::GetInstance();
+  FullRestoreReadHandlerTestApi(read_handler).ClearRestoreData();
+
+  // Add one more app launch info, to simulate a window is created during the
+  // system startup phase.
+  AddAppLaunchInfo(GetPath(), kId3);
+  timer->FireNow();
+  task_environment().RunUntilIdle();
+
+  ReadFromFile(GetPath(), /*clear_data=*/false);
+
+  // Verify the restore data can be read correctly.
+  const auto* restore_data = GetRestoreData(GetPath());
+  ASSERT_TRUE(restore_data);
+
+  const auto& launch_list = restore_data->app_id_to_launch_list();
+  EXPECT_EQ(1u, launch_list.size());
+
+  // Verify for |kAppId|.
+  const auto launch_list_it = launch_list.find(kAppId);
+  EXPECT_TRUE(launch_list_it != launch_list.end());
+  EXPECT_EQ(1u, launch_list_it->second.size());
+
+  // Verify the restore data for `kId1` exists.
+  EXPECT_TRUE(base::Contains(launch_list_it->second, kId1));
+
+  // Verify the restore data for `kId2` and `kId3` doesn't exist.
+  EXPECT_FALSE(base::Contains(launch_list_it->second, kId2));
+  EXPECT_FALSE(base::Contains(launch_list_it->second, kId3));
+}
+
+TEST_F(FullRestoreReadAndSaveTest, StartSaveTimer) {
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
+  base::OneShotTimer* timer = save_handler->GetTimerForTesting();
+
+  // Add app launch info, and verify the timer starts.
+  AddAppLaunchInfo(GetPath(), kId1);
+  EXPECT_TRUE(timer->IsRunning());
+
+  // Simulate timeout.
+  timer->FireNow();
+  task_environment().RunUntilIdle();
+
+  // Simulate the system reboots.
+  FullRestoreReadHandler* read_handler = FullRestoreReadHandler::GetInstance();
+  FullRestoreReadHandlerTestApi(read_handler).ClearRestoreData();
+  save_handler->ClearForTesting();
+
+  // Add one more app launch info, to simulate an app is launched during the
+  // system startup phase.
+  AddAppLaunchInfo(GetPath(), kId2);
+
+  // Verify `timer` doesn't start.
+  EXPECT_FALSE(timer->IsRunning());
+
+  ReadFromFile(GetPath(), /*clear_data=*/false);
+
+  // Verify the restore data can be read correctly.
+  auto* restore_data = GetRestoreData(GetPath());
+  ASSERT_TRUE(restore_data);
+
+  auto& launch_list1 = restore_data->app_id_to_launch_list();
+  EXPECT_EQ(1u, launch_list1.size());
+
+  // Verify for |kAppId|.
+  auto launch_list_it = launch_list1.find(kAppId);
+  EXPECT_TRUE(launch_list_it != launch_list1.end());
+  EXPECT_EQ(1u, launch_list_it->second.size());
+
+  // Verify the restore data for `kId1` exists.
+  EXPECT_TRUE(base::Contains(launch_list_it->second, kId1));
+
+  // Verify the restore data for `kId2` doesn't exist.
+  EXPECT_FALSE(base::Contains(launch_list_it->second, kId2));
+
+  // Simulate the system reboots.
+  FullRestoreReadHandlerTestApi(read_handler).ClearRestoreData();
+  save_handler->ClearForTesting();
+
+  ReadFromFile(GetPath(), /*clear_data=*/false);
+
+  // Verify the original restore data can be read correctly.
+  restore_data = GetRestoreData(GetPath());
+  ASSERT_TRUE(restore_data);
+
+  auto& launch_list2 = restore_data->app_id_to_launch_list();
+  EXPECT_EQ(1u, launch_list2.size());
+
+  // Verify for |kAppId|.
+  launch_list_it = launch_list2.find(kAppId);
+  EXPECT_TRUE(launch_list_it != launch_list2.end());
+  EXPECT_EQ(1u, launch_list_it->second.size());
+
+  // Verify the restore data for `kId1` exists.
+  EXPECT_TRUE(base::Contains(launch_list_it->second, kId1));
+
+  // Verify the restore data for `kId2` doesn't exist.
+  EXPECT_FALSE(base::Contains(launch_list_it->second, kId2));
+}
+
 TEST_F(FullRestoreReadAndSaveTest, SaveAndReadRestoreData) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   base::OneShotTimer* timer = save_handler->GetTimerForTesting();
 
   // Add app launch info, and verify the timer starts.
@@ -317,12 +447,12 @@
   AddAppLaunchInfo(GetPath(), kId2);
   EXPECT_TRUE(timer->IsRunning());
 
-  // Simulate timeout, and verify the timer stops.
-  timer->FireNow();
   std::unique_ptr<aura::Window> window1 =
       CreateWindowInfo(kId2, kActivationIndex2);
+
+  // Simulate timeout, and verify the timer stops.
+  timer->FireNow();
   task_environment().RunUntilIdle();
-  EXPECT_FALSE(timer->IsRunning());
 
   // Modify the window info, and verify the timer starts.
   std::unique_ptr<aura::Window> window2 =
@@ -380,7 +510,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, MultipleFilePaths) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   base::OneShotTimer* timer = save_handler->GetTimerForTesting();
 
   base::ScopedTempDir tmp_dir1;
@@ -414,7 +544,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ClearRestoreData) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   FullRestoreSaveHandlerTestApi test_api(save_handler);
 
   base::OneShotTimer* timer = save_handler->GetTimerForTesting();
@@ -462,7 +592,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ArcWindowSaving) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   FullRestoreSaveHandlerTestApi test_api(save_handler);
 
   save_handler->SetPrimaryProfilePath(GetPath());
@@ -508,7 +638,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ArcLaunchWithoutTask) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   FullRestoreSaveHandlerTestApi test_api(save_handler);
 
   save_handler->SetPrimaryProfilePath(GetPath());
@@ -549,7 +679,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ArcWindowRestore) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   FullRestoreSaveHandlerTestApi save_test_api(save_handler);
 
   save_handler->SetPrimaryProfilePath(GetPath());
@@ -651,7 +781,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ReadBrowserRestoreData) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   base::OneShotTimer* timer = save_handler->GetTimerForTesting();
 
   // Add browser launch info.
@@ -687,7 +817,7 @@
 }
 
 TEST_F(FullRestoreReadAndSaveTest, ReadChromeAppRestoreData) {
-  FullRestoreSaveHandler* save_handler = FullRestoreSaveHandler::GetInstance();
+  FullRestoreSaveHandler* save_handler = GetSaveHandler();
   base::OneShotTimer* timer = save_handler->GetTimerForTesting();
 
   // Add Chrome app launch info.
diff --git a/components/full_restore/full_restore_save_handler.cc b/components/full_restore/full_restore_save_handler.cc
index cd0c854..5a3c2f3 100644
--- a/components/full_restore/full_restore_save_handler.cc
+++ b/components/full_restore/full_restore_save_handler.cc
@@ -32,6 +32,9 @@
 // full restore file.
 constexpr base::TimeDelta kSaveDelay = base::TimeDelta::FromMilliseconds(2500);
 
+// Delay starting `save_timer_` during the system startup phase.
+constexpr base::TimeDelta kWaitDelay = base::TimeDelta::FromSeconds(120);
+
 const char kCrxAppPrefix[] = "_crx_";
 
 std::string GetAppIdFromAppName(const std::string& app_name) {
@@ -75,6 +78,19 @@
     profile_path_to_app_registry_cache_.erase(profile_path);
 }
 
+void FullRestoreSaveHandler::AllowSave() {
+  if (allow_save_)
+    return;
+
+  allow_save_ = true;
+
+  if (wait_timer_.IsRunning())
+    wait_timer_.Stop();
+
+  for (const auto& profile_path : pending_save_profile_paths_)
+    MaybeStartSaveTimer(profile_path);
+}
+
 void FullRestoreSaveHandler::SetShutDown() {
   is_shut_down_ = true;
 }
@@ -456,6 +472,10 @@
   pending_save_profile_paths_.clear();
   window_id_to_app_restore_info_.clear();
   app_id_to_app_launch_infos_.clear();
+  is_shut_down_ = false;
+  allow_save_ = false;
+  save_timer_.Stop();
+  wait_timer_.Stop();
 }
 
 void FullRestoreSaveHandler::MaybeStartSaveTimer(
@@ -471,6 +491,15 @@
     been_read_profile_paths_.insert(profile_path);
   }
 
+  if (!allow_save_) {
+    if (!wait_timer_.IsRunning()) {
+      wait_timer_.Start(FROM_HERE, kWaitDelay,
+                        base::BindOnce(&FullRestoreSaveHandler::AllowSave,
+                                       weak_factory_.GetWeakPtr()));
+    }
+    return;
+  }
+
   if (!save_timer_.IsRunning() && save_running_.empty()) {
     save_timer_.Start(FROM_HERE, kSaveDelay,
                       base::BindOnce(&FullRestoreSaveHandler::Save,
diff --git a/components/full_restore/full_restore_save_handler.h b/components/full_restore/full_restore_save_handler.h
index 485ee32f..667b3a8e 100644
--- a/components/full_restore/full_restore_save_handler.h
+++ b/components/full_restore/full_restore_save_handler.h
@@ -26,6 +26,12 @@
 class AppRegistryCache;
 }
 
+namespace ash {
+namespace full_restore {
+class FullRestoreServiceTestHavingFullRestoreFile;
+}
+}  // namespace ash
+
 namespace base {
 class FilePath;
 class SequencedTaskRunner;
@@ -65,6 +71,10 @@
   void SetAppRegistryCache(const base::FilePath& profile_path,
                            apps::AppRegistryCache* app_registry_cache);
 
+  // When called, allows the Save() method to write to disk. Schedules the save
+  // timer to start for each monitored profile.
+  void AllowSave();
+
   void SetShutDown();
 
   // aura::EnvObserver:
@@ -166,6 +176,7 @@
 
  private:
   friend class FullRestoreSaveHandlerTestApi;
+  friend class ::ash::full_restore::FullRestoreServiceTestHavingFullRestoreFile;
 
   // Map from a profile path to AppLaunchInfos.
   using AppLaunchInfos = std::map<base::FilePath, std::list<AppLaunchInfoPtr>>;
@@ -234,6 +245,12 @@
   // Timer used to delay the restore data writing to the full restore file.
   base::OneShotTimer save_timer_;
 
+  // During the startup phase, start `wait_timer_` to wait for the system
+  // finishes the startup and the restore process, to prevent the original
+  // restore data is overwritten if the system restarts due to fast crash or
+  // upgrading.
+  base::OneShotTimer wait_timer_;
+
   // Records whether the saving process is running for a full restore file.
   std::set<base::FilePath> save_running_;
 
@@ -241,6 +258,24 @@
 
   bool is_shut_down_ = false;
 
+  // Due to the system crash or upgrading, the system might restart or reboot
+  // very fast after startup. If the new window is written for the first time
+  // startup, after the second time reboot, the original restore data can't be
+  // restored. For the user, it looks like not restore. So block the save timer
+  // when startup until one of the below condition is matched:
+  // 1. restore finish if the restore setting is always, and no crash.
+  // 2. restore finish if there is a restore notification, and the user selects
+  // restore.
+  // 3. an app is launched by the user if there is a restore notification.
+  // 4. the restore notification is cancel or closed by the user if there is a
+  // restore notification.
+  // 5. the restore setting is off.
+  // 6. 'wait_timer_' is expired.
+  //
+  // When one of the above condition is matched, allow_save_ is set as true to
+  // permit `save_timer_` to start periodically triggering saving to disk.
+  bool allow_save_ = false;
+
   // The number of window created. This is used for metrics only.
   int window_count_ = 0;
 
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn
index e09cdf2..4cb2faed 100644
--- a/components/metrics/BUILD.gn
+++ b/components/metrics/BUILD.gn
@@ -479,6 +479,7 @@
     "//services/network:test_support",
     "//services/network/public/cpp:cpp",
     "//services/service_manager/public/cpp",
+    "//testing/gmock",
     "//testing/gtest",
     "//third_party/metrics_proto",
     "//third_party/zlib/google:compression_utils",
diff --git a/components/metrics/cloned_install_detector.cc b/components/metrics/cloned_install_detector.cc
index 4a4d7a38..43e51fc 100644
--- a/components/metrics/cloned_install_detector.cc
+++ b/components/metrics/cloned_install_detector.cc
@@ -115,6 +115,41 @@
 void ClonedInstallDetector::RegisterPrefs(PrefRegistrySimple* registry) {
   registry->RegisterBooleanPref(prefs::kMetricsResetIds, false);
   registry->RegisterIntegerPref(prefs::kMetricsMachineId, 0);
+  registry->RegisterIntegerPref(prefs::kClonedResetCount, 0);
+  registry->RegisterInt64Pref(prefs::kFirstClonedResetTimestamp, 0);
+  registry->RegisterInt64Pref(prefs::kLastClonedResetTimestamp, 0);
+}
+
+ClonedInstallInfo ClonedInstallDetector::ReadClonedInstallInfo(
+    PrefService* local_state) {
+  return ClonedInstallInfo{
+      .last_reset_timestamp =
+          local_state->GetInt64(prefs::kLastClonedResetTimestamp),
+      .first_reset_timestamp =
+          local_state->GetInt64(prefs::kFirstClonedResetTimestamp),
+      .reset_count = local_state->GetInteger(prefs::kClonedResetCount)};
+}
+
+void ClonedInstallDetector::ClearClonedInstallInfo(PrefService* local_state) {
+  local_state->ClearPref(prefs::kClonedResetCount);
+  local_state->ClearPref(prefs::kFirstClonedResetTimestamp);
+  local_state->ClearPref(prefs::kLastClonedResetTimestamp);
+}
+
+void ClonedInstallDetector::RecordClonedInstallInfo(PrefService* local_state) {
+  ClonedInstallInfo cloned = ReadClonedInstallInfo(local_state);
+
+  // Make sure that at the first time of reset, the first_timestamp matches with
+  // the last_timestamp.
+  int64_t time = base::Time::Now().ToTimeT();
+
+  // Only set |prefs::kFirstClonedResetTimestamp| when the client needs to be
+  // reset due to cloned install for the first time.
+  if (cloned.reset_count == 0) {
+    local_state->SetInt64(prefs::kFirstClonedResetTimestamp, time);
+  }
+  local_state->SetInt64(prefs::kLastClonedResetTimestamp, time);
+  local_state->SetInteger(prefs::kClonedResetCount, cloned.reset_count + 1);
 }
 
 }  // namespace metrics
diff --git a/components/metrics/cloned_install_detector.h b/components/metrics/cloned_install_detector.h
index c38e052..3d744ab 100644
--- a/components/metrics/cloned_install_detector.h
+++ b/components/metrics/cloned_install_detector.h
@@ -14,6 +14,14 @@
 
 namespace metrics {
 
+// A struct that holds cloned install related fields in prefs that need to be
+// reported in the system_profile.
+struct ClonedInstallInfo {
+  int64_t last_reset_timestamp;
+  int64_t first_reset_timestamp;
+  int reset_count;
+};
+
 // A class for detecting if an install is cloned. It does this by detecting
 // when the hardware running Chrome changes.
 class ClonedInstallDetector {
@@ -30,6 +38,16 @@
 
   static void RegisterPrefs(PrefRegistrySimple* registry);
 
+  // Reads cloned install info fields from |local_state| and returns them in
+  // a ClonedInstallInfo.
+  static ClonedInstallInfo ReadClonedInstallInfo(PrefService* local_state);
+
+  // Clears cloned install info fields from |local_state|.
+  static void ClearClonedInstallInfo(PrefService* local_state);
+
+  // Updates cloned install info fields in |local_state| on reset.
+  static void RecordClonedInstallInfo(PrefService* local_state);
+
   // Returns true for the whole session if we detected a cloned install during
   // the construction of a client id.
   bool ShouldResetClientIds(PrefService* local_state);
diff --git a/components/metrics/metrics_pref_names.cc b/components/metrics/metrics_pref_names.cc
index 3ecd873..115a329 100644
--- a/components/metrics/metrics_pref_names.cc
+++ b/components/metrics/metrics_pref_names.cc
@@ -92,6 +92,16 @@
 const char kMetricsFileMetricsMetadata[] =
     "user_experience_metrics.file_metrics_metadata";
 
+// The number of times the client has been reset due to cloned install.
+const char kClonedResetCount[] = "cloned_install.count";
+
+// The first timestamp when we reset a cloned client’s client id. This is only
+// set once. Attached to metrics reports forever thereafter.
+const char kFirstClonedResetTimestamp[] = "cloned_install.first_timestamp";
+
+// The last timestamp the client is reset due to cloned install. This will be
+// updated every time we reset the client due to cloned install.
+const char kLastClonedResetTimestamp[] = "cloned_install.last_timestamp";
 
 // A time stamp at which time the browser was known to be alive. Used to
 // evaluate whether the browser crash was due to a whole system crash.
diff --git a/components/metrics/metrics_pref_names.h b/components/metrics/metrics_pref_names.h
index 745cc6e..585f867 100644
--- a/components/metrics/metrics_pref_names.h
+++ b/components/metrics/metrics_pref_names.h
@@ -24,6 +24,11 @@
 extern const char kMetricsOngoingLogsMetadata[];
 extern const char kMetricsResetIds[];
 
+// Preferences for cloned installs.
+extern const char kClonedResetCount[];
+extern const char kFirstClonedResetTimestamp[];
+extern const char kLastClonedResetTimestamp[];
+
 // For finding out whether metrics and crash reporting is enabled use the
 // relevant embedder-specific subclass of MetricsServiceAccessor instead of
 // reading this pref directly; see the comments on metrics_service_accessor.h.
diff --git a/components/metrics/metrics_state_manager.cc b/components/metrics/metrics_state_manager.cc
index 766be1a..e7cc3d6 100644
--- a/components/metrics/metrics_state_manager.cc
+++ b/components/metrics/metrics_state_manager.cc
@@ -99,6 +99,24 @@
     std::string client_id = ReadClientId(local_state_);
     system_profile->set_client_id_was_used_for_trial_assignment(
         !client_id.empty() && client_id == initial_client_id_);
+
+    ClonedInstallInfo cloned =
+        ClonedInstallDetector::ReadClonedInstallInfo(local_state_);
+    if (cloned.reset_count == 0)
+      return;
+    auto* cloned_install_info = system_profile->mutable_cloned_install_info();
+    if (metrics_ids_were_reset_) {
+      // Only report the cloned from client_id in the resetting session.
+      if (!previous_client_id_.empty()) {
+        cloned_install_info->set_cloned_from_client_id(
+            MetricsLog::Hash(previous_client_id_));
+      }
+    }
+    cloned_install_info->set_last_timestamp(
+        RoundSecondsToHour(cloned.last_reset_timestamp));
+    cloned_install_info->set_first_timestamp(
+        RoundSecondsToHour(cloned.first_reset_timestamp));
+    cloned_install_info->set_count(cloned.reset_count);
   }
 
   void ProvidePreviousSessionData(
@@ -436,6 +454,8 @@
   local_state_->ClearPref(prefs::kMetricsClientID);
   EntropyState::ClearPrefs(local_state_);
 
+  ClonedInstallDetector::RecordClonedInstallInfo(local_state_);
+
   // Also clear the backed up client info. This is asynchronus; any reads
   // shortly after may retrieve the old ClientInfo from the backup.
   store_client_info_.Run(ClientInfo());
diff --git a/components/metrics/metrics_state_manager.h b/components/metrics/metrics_state_manager.h
index 36896510..7675bab 100644
--- a/components/metrics/metrics_state_manager.h
+++ b/components/metrics/metrics_state_manager.h
@@ -130,6 +130,9 @@
 
  private:
   FRIEND_TEST_ALL_PREFIXES(MetricsStateManagerTest, CheckProviderResetIds);
+  FRIEND_TEST_ALL_PREFIXES(
+      MetricsStateManagerTest,
+      CheckProviderResetIds_PreviousIdOnlyReportInResetSession);
   FRIEND_TEST_ALL_PREFIXES(MetricsStateManagerTest, EntropySourceUsed_Low);
   FRIEND_TEST_ALL_PREFIXES(MetricsStateManagerTest, EntropySourceUsed_High);
   FRIEND_TEST_ALL_PREFIXES(MetricsStateManagerTest,
diff --git a/components/metrics/metrics_state_manager_unittest.cc b/components/metrics/metrics_state_manager_unittest.cc
index 6c45c142..f22b310b 100644
--- a/components/metrics/metrics_state_manager_unittest.cc
+++ b/components/metrics/metrics_state_manager_unittest.cc
@@ -27,6 +27,7 @@
 #include "components/metrics/test/test_enabled_state_provider.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/variations/pref_names.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace metrics {
@@ -45,6 +46,21 @@
   }
 }
 
+MATCHER(HaveClonedInstallInfo, "") {
+  return (
+      !arg.FindPreference(prefs::kClonedResetCount)->IsDefaultValue() &&
+      !arg.FindPreference(prefs::kFirstClonedResetTimestamp)
+           ->IsDefaultValue() &&
+      !arg.FindPreference(prefs::kLastClonedResetTimestamp)->IsDefaultValue());
+}
+
+MATCHER(HaveNoClonedInstallInfo, "") {
+  return (
+      arg.FindPreference(prefs::kClonedResetCount)->IsDefaultValue() &&
+      arg.FindPreference(prefs::kFirstClonedResetTimestamp)->IsDefaultValue() &&
+      arg.FindPreference(prefs::kLastClonedResetTimestamp)->IsDefaultValue());
+}
+
 }  // namespace
 
 class MetricsStateManagerTest : public testing::Test {
@@ -193,12 +209,16 @@
 
   EnableMetricsReporting();
 
+  // No cloned install info should have been stored.
+  EXPECT_THAT(prefs_, HaveNoClonedInstallInfo());
+
   // Make sure the initial client id isn't reset by the metrics state manager.
   {
     std::unique_ptr<MetricsStateManager> state_manager(CreateStateManager());
     state_manager->ForceClientIdCreation();
     EXPECT_EQ(kInitialClientId, state_manager->client_id());
     EXPECT_FALSE(state_manager->metrics_ids_were_reset_);
+    EXPECT_THAT(prefs_, HaveNoClonedInstallInfo());
   }
 
   // Set the reset pref to cause the IDs to be reset.
@@ -216,6 +236,11 @@
     state_manager->GetLowEntropySource();
 
     EXPECT_FALSE(prefs_.GetBoolean(prefs::kMetricsResetIds));
+
+    EXPECT_THAT(prefs_, HaveClonedInstallInfo());
+    EXPECT_EQ(prefs_.GetInteger(prefs::kClonedResetCount), 1);
+    EXPECT_EQ(prefs_.GetInt64(prefs::kFirstClonedResetTimestamp),
+              prefs_.GetInt64(prefs::kLastClonedResetTimestamp));
   }
 
   EXPECT_NE(kInitialClientId, prefs_.GetString(prefs::kMetricsClientID));
@@ -545,10 +570,10 @@
 }
 
 TEST_F(MetricsStateManagerTest, CheckProviderResetIds) {
-  int64_t kInstallDate = 1373051956;
-  int64_t kInstallDateExpected = 1373050800;  // Computed from kInstallDate.
-  int64_t kEnabledDate = 1373001211;
-  int64_t kEnabledDateExpected = 1373000400;  // Computed from kEnabledDate.
+  int64_t kInstallDate = 1373001211;
+  int64_t kInstallDateExpected = 1373000400;  // Computed from kInstallDate.
+  int64_t kEnabledDate = 1373051956;
+  int64_t kEnabledDateExpected = 1373050800;  // Computed from kEnabledDate.
 
   ClientInfo client_info;
   client_info.client_id = "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE";
@@ -561,22 +586,43 @@
   // Set the reset pref to cause the IDs to be reset.
   prefs_.SetBoolean(prefs::kMetricsResetIds, true);
   std::unique_ptr<MetricsStateManager> state_manager(CreateStateManager());
+  // Verify that MetricsStateManager has the a new client_id after reset and has
+  // the right previous_client_id (equals to the client_id before being reset).
   EXPECT_NE(client_info.client_id, state_manager->client_id());
   EXPECT_TRUE(state_manager->metrics_ids_were_reset_);
   EXPECT_EQ(client_info.client_id, state_manager->previous_client_id_);
   EXPECT_EQ(0, client_info_load_count_);
 
+  uint64_t hashed_previous_client_id =
+      MetricsLog::Hash(state_manager->previous_client_id_);
   std::unique_ptr<MetricsProvider> provider = state_manager->GetProvider();
   SystemProfileProto system_profile;
   provider->ProvideSystemProfileMetrics(&system_profile);
   EXPECT_EQ(system_profile.install_date(), kInstallDateExpected);
   EXPECT_EQ(system_profile.uma_enabled_date(), kEnabledDateExpected);
+  auto cloned_install_info = system_profile.cloned_install_info();
+  EXPECT_EQ(cloned_install_info.count(), 1);
+  EXPECT_EQ(cloned_install_info.cloned_from_client_id(),
+            hashed_previous_client_id);
+  // Make sure the first_timestamp is updated and is the same as the
+  // last_timestamp.
+  EXPECT_EQ(cloned_install_info.last_timestamp(),
+            cloned_install_info.first_timestamp());
+  EXPECT_NE(cloned_install_info.first_timestamp(), 0);
 
   base::HistogramTester histogram_tester;
   ChromeUserMetricsExtension uma_proto;
+  // The system_profile in the |uma_proto| is provided in
+  // https://source.chromium.org/chromium/chromium/src/+/main:components/metrics/metrics_service.cc;drc=4b86ff6c58f5651a4e2f44abb22d93c3593155cb;l=759
+  // and it's hard to be tested here. For logs from the previous session:
+  // 1. if the previous session is the detection session, the
+  // |uma_proto.system_profile| won't contain the latest cloned_install_info
+  // message.
+  // 2. if the previous session is a normal session, the
+  // |uma_proto.system_profile| should contain the cloned_install_info message
+  // as long as it's saved in prefs.
   provider->ProvidePreviousSessionData(&uma_proto);
-  EXPECT_EQ(MetricsLog::Hash(state_manager->previous_client_id_),
-            uma_proto.client_id());
+  EXPECT_EQ(uma_proto.client_id(), hashed_previous_client_id);
   histogram_tester.ExpectUniqueSample("UMA.IsClonedInstall", 1, 1);
 
   // Since we set the pref and didn't call SaveMachineId(), this should do
@@ -592,4 +638,67 @@
   histogram_tester.ExpectUniqueSample("UMA.IsClonedInstall", 1, 2);
 }
 
+TEST_F(MetricsStateManagerTest,
+       CheckProviderResetIds_PreviousIdOnlyReportInResetSession) {
+  int64_t kInstallDate = 1373001211;
+  int64_t kInstallDateExpected = 1373000400;  // Computed from kInstallDate.
+  int64_t kEnabledDate = 1373051956;
+  int64_t kEnabledDateExpected = 1373050800;  // Computed from kEnabledDate.
+
+  ClientInfo client_info;
+  client_info.client_id = "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE";
+  client_info.installation_date = kInstallDate;
+  client_info.reporting_enabled_date = kEnabledDate;
+
+  SetFakeClientInfoBackup(client_info);
+  SetClientInfoPrefs(client_info);
+
+  // In the reset session:
+  // Set the reset pref to cause the IDs to be reset.
+  prefs_.SetBoolean(prefs::kMetricsResetIds, true);
+
+  {
+    std::unique_ptr<MetricsStateManager> state_manager(CreateStateManager());
+    EXPECT_NE(client_info.client_id, state_manager->client_id());
+    EXPECT_TRUE(state_manager->metrics_ids_were_reset_);
+    // Verify that MetricsStateManager has the right previous_client_id (the ID
+    // that was there before being reset).
+    EXPECT_EQ(client_info.client_id, state_manager->previous_client_id_);
+    EXPECT_EQ(0, client_info_load_count_);
+
+    std::unique_ptr<MetricsProvider> provider = state_manager->GetProvider();
+    SystemProfileProto system_profile;
+    provider->ProvideSystemProfileMetrics(&system_profile);
+    EXPECT_EQ(system_profile.install_date(), kInstallDateExpected);
+    EXPECT_EQ(system_profile.uma_enabled_date(), kEnabledDateExpected);
+    auto cloned_install_info = system_profile.cloned_install_info();
+    // |cloned_from_client_id| should be uploaded in the reset session.
+    EXPECT_EQ(cloned_install_info.cloned_from_client_id(),
+              MetricsLog::Hash(state_manager->previous_client_id_));
+    // Make sure the first_timestamp is updated and is the same as the
+    // last_timestamp.
+    EXPECT_EQ(cloned_install_info.count(), 1);
+    EXPECT_EQ(cloned_install_info.last_timestamp(),
+              cloned_install_info.first_timestamp());
+    EXPECT_NE(cloned_install_info.last_timestamp(), 0);
+  }
+  // In the normal session:
+  {
+    std::unique_ptr<MetricsStateManager> state_manager(CreateStateManager());
+    EXPECT_FALSE(state_manager->metrics_ids_were_reset_);
+    std::unique_ptr<MetricsProvider> provider = state_manager->GetProvider();
+    SystemProfileProto system_profile;
+    provider->ProvideSystemProfileMetrics(&system_profile);
+
+    auto cloned_install_info = system_profile.cloned_install_info();
+    // |cloned_from_client_id| shouldn't be reported in the normal session.
+    EXPECT_FALSE(cloned_install_info.has_cloned_from_client_id());
+    // Other cloned_install_info fields should continue be reported once set.
+    EXPECT_EQ(cloned_install_info.count(), 1);
+    EXPECT_EQ(cloned_install_info.last_timestamp(),
+              cloned_install_info.first_timestamp());
+    EXPECT_NE(cloned_install_info.last_timestamp(), 0);
+  }
+}
+
 }  // namespace metrics
diff --git a/components/metrics/structured/event_base.cc b/components/metrics/structured/event_base.cc
index 14f15598..05c9dde 100644
--- a/components/metrics/structured/event_base.cc
+++ b/components/metrics/structured/event_base.cc
@@ -12,11 +12,13 @@
 EventBase::EventBase(uint64_t event_name_hash,
                      uint64_t project_name_hash,
                      IdType id_type,
-                     IdScope id_scope)
+                     IdScope id_scope,
+                     StructuredEventProto_EventType event_type)
     : event_name_hash_(event_name_hash),
       project_name_hash_(project_name_hash),
       id_type_(id_type),
-      id_scope_(id_scope) {}
+      id_scope_(id_scope),
+      event_type_(event_type) {}
 EventBase::EventBase(const EventBase& other) = default;
 EventBase::~EventBase() = default;
 
@@ -28,9 +30,9 @@
   return Recorder::GetInstance()->LastKeyRotation(project_name_hash_);
 }
 
-void EventBase::AddStringMetric(uint64_t name_hash, const std::string& value) {
-  Metric metric(name_hash, MetricType::kString);
-  metric.string_value = value;
+void EventBase::AddHmacMetric(uint64_t name_hash, const std::string& value) {
+  Metric metric(name_hash, MetricType::kHmac);
+  metric.hmac_value = value;
   metrics_.push_back(metric);
 }
 
@@ -40,6 +42,13 @@
   metrics_.push_back(metric);
 }
 
+void EventBase::AddRawStringMetric(uint64_t name_hash,
+                                   const std::string& value) {
+  Metric metric(name_hash, MetricType::kRawString);
+  metric.string_value = value;
+  metrics_.push_back(metric);
+}
+
 EventBase::Metric::Metric(uint64_t name_hash, MetricType type)
     : name_hash(name_hash), type(type) {}
 EventBase::Metric::~Metric() = default;
diff --git a/components/metrics/structured/event_base.h b/components/metrics/structured/event_base.h
index e57cc5d..2a17de7 100644
--- a/components/metrics/structured/event_base.h
+++ b/components/metrics/structured/event_base.h
@@ -9,6 +9,7 @@
 #include <utility>
 #include <vector>
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/metrics_proto/structured_data.pb.h"
 
 namespace metrics {
 namespace structured {
@@ -39,8 +40,9 @@
 
   // Specifies which value type a Metric object holds.
   enum class MetricType {
-    kString = 0,
+    kHmac = 0,
     kInt = 1,
+    kRawString = 2,
   };
 
   // Stores all information about a single metric: name hash, value, and a
@@ -57,11 +59,13 @@
 
     // TODO(crbug.com/10116655): Replace this with a base::Value.
     // All possible value types a metric can take. Exactly one of these should
-    // be set. If |string_value| is set (with |type| as MetricType::STRING),
+    // be set. If |hmac_value| is set (with |type| as MetricType::kHmac),
     // only the HMAC digest will be reported, so it is safe to put any value
-    // here.
-    std::string string_value;
+    // here. If |raw_string_value| is set (with |type| as MetricType::kString),
+    // the unprocessed string will be reported.
+    std::string hmac_value;
     int64_t int_value;
+    std::string string_value;
   };
 
   // Finalizes the event and sends it for recording. After this call, the event
@@ -82,16 +86,21 @@
 
   IdScope id_scope() const { return id_scope_; }
 
+  StructuredEventProto_EventType event_type() const { return event_type_; }
+
  protected:
   EventBase(uint64_t event_name_hash,
             uint64_t project_name_hash,
             IdType id_type,
-            IdScope id_scope);
+            IdScope id_scope,
+            StructuredEventProto_EventType event_type);
 
-  void AddStringMetric(uint64_t name_hash, const std::string& value);
+  void AddHmacMetric(uint64_t name_hash, const std::string& value);
 
   void AddIntMetric(uint64_t name_hash, int64_t value);
 
+  void AddRawStringMetric(uint64_t name_hash, const std::string& value);
+
  private:
   // First 8 bytes of the MD5 hash of the event name, as defined in
   // structured.xml. This is calculated by tools/metrics/structured/codegen.py.
@@ -110,10 +119,17 @@
   // name.
   uint64_t project_name_hash_;
 
+  // See enum definition.
   IdType id_type_;
 
+  // See enum definition.
   IdScope id_scope_;
 
+  // Specifies the type of an event, which determines how it is treated after
+  // upload. See /third_party/metrics_proto/structured_data.proto for more
+  // information.
+  StructuredEventProto_EventType event_type_;
+
   std::vector<Metric> metrics_;
 };
 
diff --git a/components/metrics/structured/key_data.cc b/components/metrics/structured/key_data.cc
index 6d614b7..35f7edb3 100644
--- a/components/metrics/structured/key_data.cc
+++ b/components/metrics/structured/key_data.cc
@@ -198,5 +198,9 @@
   return absl::nullopt;
 }
 
+void KeyData::Purge() {
+  proto_->Purge();
+}
+
 }  // namespace structured
 }  // namespace metrics
diff --git a/components/metrics/structured/key_data.h b/components/metrics/structured/key_data.h
index 7565157..ab3608d 100644
--- a/components/metrics/structured/key_data.h
+++ b/components/metrics/structured/key_data.h
@@ -91,6 +91,11 @@
   // since epoch. Returns nullopt if the key doesn't exist.
   absl::optional<int> LastKeyRotation(uint64_t project_name_hash);
 
+  // Clears all key data from memory and from disk. If this is called before the
+  // underlying proto has been read from disk, the purge will be performed once
+  // the read is complete.
+  void Purge();
+
   // Returns whether this KeyData instance has finished reading from disk and is
   // ready to be used. If false, both Id and HmacMetric will return 0u.
   bool is_initialized() { return is_initialized_; }
diff --git a/components/metrics/structured/persistent_proto.cc b/components/metrics/structured/persistent_proto.cc
index d1fc798..0aef892 100644
--- a/components/metrics/structured/persistent_proto.cc
+++ b/components/metrics/structured/persistent_proto.cc
@@ -95,11 +95,11 @@
     QueueWrite();
   }
 
-  if (wipe_after_reading_) {
+  if (purge_after_reading_) {
     proto_.reset();
     proto_ = std::make_unique<T>();
-    QueueWrite();
-    wipe_after_reading_ = false;
+    StartWrite();
+    purge_after_reading_ = false;
   }
 
   std::move(on_read_).Run(result.first);
@@ -160,13 +160,13 @@
 }
 
 template <class T>
-void PersistentProto<T>::Wipe() {
+void PersistentProto<T>::Purge() {
   if (proto_) {
     proto_.reset();
     proto_ = std::make_unique<T>();
-    QueueWrite();
+    StartWrite();
   } else {
-    wipe_after_reading_ = true;
+    purge_after_reading_ = true;
   }
 }
 
diff --git a/components/metrics/structured/persistent_proto.h b/components/metrics/structured/persistent_proto.h
index 22c7174..872e7b9 100644
--- a/components/metrics/structured/persistent_proto.h
+++ b/components/metrics/structured/persistent_proto.h
@@ -86,10 +86,11 @@
   void StartWrite();
 
   // Safely clear this proto from memory and disk. This is preferred to clearing
-  // the proto, because it ensures the proto is wiped even if called before the
+  // the proto, because it ensures the proto is purged even if called before the
   // backing file is read from disk. In this case, the file is overwritten after
-  // it has been read.
-  void Wipe();
+  // it has been read. In either case, the file is written as soon as possible,
+  // skipping the |save_delay_ms_| wait time.
+  void Purge();
 
  private:
   void OnReadComplete(std::pair<ReadStatus, std::unique_ptr<T>> result);
@@ -106,7 +107,7 @@
   bool write_is_queued_ = false;
 
   // Whether we should immediately clear the proto after reading it.
-  bool wipe_after_reading_ = false;
+  bool purge_after_reading_ = false;
 
   // Run when the cache finishes reading from disk, if provided.
   ReadCallback on_read_;
diff --git a/components/metrics/structured/recorder.cc b/components/metrics/structured/recorder.cc
index e53bbeee..a0f87b6 100644
--- a/components/metrics/structured/recorder.cc
+++ b/components/metrics/structured/recorder.cc
@@ -68,6 +68,12 @@
   return result;
 }
 
+void Recorder::OnReportingStateChanged(bool enabled) {
+  for (auto& observer : observers_) {
+    observer.OnReportingStateChanged(enabled);
+  }
+}
+
 void Recorder::SetUiTaskRunner(
     const scoped_refptr<base::SequencedTaskRunner> ui_task_runner) {
   ui_task_runner_ = ui_task_runner;
diff --git a/components/metrics/structured/recorder.h b/components/metrics/structured/recorder.h
index 36ee6a0..920fb8f 100644
--- a/components/metrics/structured/recorder.h
+++ b/components/metrics/structured/recorder.h
@@ -43,6 +43,8 @@
     virtual void OnRecord(const EventBase& event) = 0;
     // Called on a call to ProfileAdded.
     virtual void OnProfileAdded(const base::FilePath& profile_path) = 0;
+    // Called on a call to OnReportingStateChanged.
+    virtual void OnReportingStateChanged(bool enabled) = 0;
     // Called on a call to LastKeyRotation.
     virtual absl::optional<int> LastKeyRotation(uint64_t project_name_hash) = 0;
   };
@@ -65,6 +67,9 @@
   // since epoch. Returns nullopt if the information is not available.
   absl::optional<int> LastKeyRotation(uint64_t project_name_hash);
 
+  // Notifies observers that metrics reporting has been enabled or disabled.
+  void OnReportingStateChanged(bool enabled);
+
   void SetUiTaskRunner(
       const scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
 
diff --git a/components/metrics/structured/structured_metrics_provider.cc b/components/metrics/structured/structured_metrics_provider.cc
index 8a23c20..8c404ee 100644
--- a/components/metrics/structured/structured_metrics_provider.cc
+++ b/components/metrics/structured/structured_metrics_provider.cc
@@ -58,14 +58,6 @@
   DCHECK(!IsInObserverList());
 }
 
-void StructuredMetricsProvider::OnExternalMetricsCollected(
-    const EventsProto& events) {
-  DCHECK(base::CurrentUIThread::IsSet());
-  events_.get()->get()->mutable_uma_events()->MergeFrom(events.uma_events());
-  events_.get()->get()->mutable_non_uma_events()->MergeFrom(
-      events.non_uma_events());
-}
-
 void StructuredMetricsProvider::OnKeyDataInitialized() {
   DCHECK(base::CurrentUIThread::IsSet());
 
@@ -111,6 +103,21 @@
   }
 }
 
+void StructuredMetricsProvider::OnExternalMetricsCollected(
+    const EventsProto& events) {
+  DCHECK(base::CurrentUIThread::IsSet());
+  events_.get()->get()->mutable_uma_events()->MergeFrom(events.uma_events());
+  events_.get()->get()->mutable_non_uma_events()->MergeFrom(
+      events.non_uma_events());
+}
+
+void StructuredMetricsProvider::Purge() {
+  DCHECK(events_ && profile_key_data_ && device_key_data_);
+  events_->Purge();
+  profile_key_data_->Purge();
+  device_key_data_->Purge();
+}
+
 void StructuredMetricsProvider::OnProfileAdded(
     const base::FilePath& profile_path) {
   DCHECK(base::CurrentUIThread::IsSet());
@@ -155,8 +162,9 @@
           weak_factory_.GetWeakPtr()));
 
   // See OnRecordingDisabled for more information.
-  if (wipe_events_on_init_) {
-    events_->Wipe();
+  if (purge_state_on_init_) {
+    Purge();
+    purge_state_on_init_ = false;
   }
 }
 
@@ -241,13 +249,16 @@
     metric_proto->set_name_hash(metric.name_hash);
 
     switch (metric.type) {
+      case EventBase::MetricType::kHmac:
+        metric_proto->set_value_hmac(key_data->HmacMetric(
+            event.project_name_hash(), metric.name_hash, metric.hmac_value));
+        break;
       case EventBase::MetricType::kInt:
         metric_proto->set_value_int64(metric.int_value);
         break;
-      case EventBase::MetricType::kString:
-        const int64_t hmac = key_data->HmacMetric(
-            event.project_name_hash(), metric.name_hash, metric.string_value);
-        metric_proto->set_value_hmac(hmac);
+      case EventBase::MetricType::kRawString:
+        // TODO(crbug.com/1233803): Unimplemented.
+        NOTREACHED();
         break;
     }
   }
@@ -283,22 +294,36 @@
 void StructuredMetricsProvider::OnRecordingDisabled() {
   DCHECK(base::CurrentUIThread::IsSet());
   recording_enabled_ = false;
+}
 
-  // Delete the cache of unsent logs. We need to handle two cases:
+void StructuredMetricsProvider::OnReportingStateChanged(bool enabled) {
+  DCHECK(base::CurrentUIThread::IsSet());
+
+  // When reporting is enabled, OnRecordingEnabled is also called. Let that
+  // handle enabling.
+  if (enabled) {
+    return;
+  }
+
+  // When reporting is disabled, OnRecordingDisabled is also called. Disabling
+  // here is redundant but done for clarity.
+  recording_enabled_ = false;
+
+  // Delete keys and unsent logs. We need to handle two cases:
   //
-  // 1. A profile has been added and so |events_| has been constructed. In this
-  //    case just call Wipe.
+  // 1. A profile hasn't been added yet and we can't delete the files
+  //    immediately. In this case set |purge_state_on_init_| and let
+  //    OnProfileAdded call Purge after initialization.
   //
-  // 2. A profile hasn't been added and |events_| is nullptr. In this case set
-  //    |wipe_events_on_init_| and let OnProfileAdded call Wipe after |events_|
-  //    is initialized.
+  // 2. A profile has been added and so the backing PersistentProtos have been
+  //    constructed. In this case just call Purge directly.
   //
-  // Note that Wipe will ensure the events are deleted from disk even if the
-  // PersistentProto hasn't itself finished initializing.
-  if (events_) {
-    events_->Wipe();
+  // Note that Purge will ensure the events are deleted from disk even if the
+  // PersistentProto hasn't itself finished being read.
+  if (init_state_ == InitState::kUninitialized) {
+    purge_state_on_init_ = true;
   } else {
-    wipe_events_on_init_ = true;
+    Purge();
   }
 }
 
diff --git a/components/metrics/structured/structured_metrics_provider.h b/components/metrics/structured/structured_metrics_provider.h
index 5364e3d8..4e36569c 100644
--- a/components/metrics/structured/structured_metrics_provider.h
+++ b/components/metrics/structured/structured_metrics_provider.h
@@ -81,10 +81,12 @@
   void OnRead(ReadStatus status);
   void OnWrite(WriteStatus status);
   void OnExternalMetricsCollected(const EventsProto& events);
+  void Purge();
 
   // Recorder::RecorderImpl:
   void OnProfileAdded(const base::FilePath& profile_path) override;
   void OnRecord(const EventBase& event) override;
+  void OnReportingStateChanged(bool enabled) override;
   absl::optional<int> LastKeyRotation(uint64_t project_name_hash) override;
 
   // metrics::MetricsProvider:
@@ -146,10 +148,10 @@
   // feature flag is enabled.
   bool recording_enabled_ = false;
 
-  // Set by OnRecordingDisabled if |events_| hasn't been initialized yet to
-  // indicate events should be deleted from disk when |events_| is initialized.
-  // See OnRecordingDisabled for more information.
-  bool wipe_events_on_init_ = false;
+  // Set by OnReportingStateChanged if all keys and events should be deleted,
+  // but the files backing that state haven't been initialized yet. If set,
+  // state will be purged upon initialization.
+  bool purge_state_on_init_ = false;
 
   // The last time we provided independent metrics.
   base::Time last_provided_independent_metrics_;
diff --git a/components/metrics/structured/structured_metrics_provider_unittest.cc b/components/metrics/structured/structured_metrics_provider_unittest.cc
index 983cc12..f1ee4cb 100644
--- a/components/metrics/structured/structured_metrics_provider_unittest.cc
+++ b/components/metrics/structured/structured_metrics_provider_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_mock_clock_override.h"
 #include "base/test/task_environment.h"
+#include "base/threading/scoped_blocking_call.h"
 #include "base/values.h"
 #include "components/metrics/structured/event_base.h"
 #include "components/metrics/structured/recorder.h"
@@ -158,6 +159,20 @@
     Wait();
   }
 
+  KeyDataProto ReadKeys(const base::FilePath& filepath) {
+    base::ScopedBlockingCall scoped_blocking_call(
+        FROM_HERE, base::BlockingType::MAY_BLOCK);
+    Wait();
+    CHECK(base::PathExists(filepath));
+
+    std::string proto_str;
+    CHECK(base::ReadFileToString(filepath, &proto_str));
+
+    KeyDataProto proto;
+    CHECK(proto.ParseFromString(proto_str));
+    return proto;
+  }
+
   // Simulates the three external events that the structure metrics system cares
   // about: the metrics service initializing and enabling its providers, and a
   // user logging in.
@@ -187,6 +202,10 @@
 
   void OnRecordingDisabled() { provider_->OnRecordingDisabled(); }
 
+  void OnReportingStateChanged(bool enabled) {
+    provider_->OnReportingStateChanged(enabled);
+  }
+
   void OnProfileAdded(const base::FilePath& path) {
     provider_->OnProfileAdded(path);
   }
@@ -279,6 +298,39 @@
   ExpectNoErrors();
 }
 
+// Ensure that keys and unsent logs are deleted when reporting is disabled, and
+// that reporting resumes when re-enabled.
+TEST_F(StructuredMetricsProviderTest, ReportingStateChangesHandledCorrectly) {
+  Init();
+
+  // Record an event and read the keys, there should be one.
+  events::test_project_one::TestEventOne().Record();
+  EXPECT_EQ(GetIndependentMetrics().events_size(), 1);
+  const KeyDataProto enabled_proto = ReadKeys(ProfileKeyFilePath());
+  EXPECT_EQ(enabled_proto.keys_size(), 1);
+
+  // Record an event, disable reporting, then record another event. Both of
+  // these events should have been ignored.
+  events::test_project_one::TestEventOne().Record();
+  OnReportingStateChanged(false);
+  events::test_project_one::TestEventOne().Record();
+  EXPECT_EQ(GetIndependentMetrics().events_size(), 0);
+
+  // Read the keys again, it should be empty.
+  const KeyDataProto disabled_proto = ReadKeys(ProfileKeyFilePath());
+  EXPECT_EQ(disabled_proto.keys_size(), 0);
+
+  // Enable reporting again, and record an event.
+  OnReportingStateChanged(true);
+  OnRecordingEnabled();
+  events::test_project_one::TestEventOne().Record();
+  EXPECT_EQ(GetIndependentMetrics().events_size(), 1);
+  const KeyDataProto reenabled_proto = ReadKeys(ProfileKeyFilePath());
+  EXPECT_EQ(reenabled_proto.keys_size(), 1);
+
+  ExpectNoErrors();
+}
+
 // Ensure that disabling independent upload of non-client_id metrics via feature
 // flag instead uploads them in the main UMA upload.
 TEST_F(StructuredMetricsProviderTest, DisableIndependentUploads) {
@@ -629,16 +681,14 @@
   events::test_project_three::TestEventFour().SetTestMetricFour(1).Record();
 
   OnRecordingDisabled();
-  events::test_project_one::TestEventOne().SetTestMetricTwo(1).Record();
-  events::test_project_three::TestEventFour().SetTestMetricFour(1).Record();
-
   OnRecordingEnabled();
-  events::test_project_three::TestEventFour().SetTestMetricFour(1).Record();
-  events::test_project_one::TestEventOne().SetTestMetricTwo(1).Record();
-  events::test_project_one::TestEventOne().SetTestMetricTwo(1).Record();
 
-  EXPECT_EQ(GetSessionData().events_size(), 1);
-  EXPECT_EQ(GetIndependentMetrics().events_size(), 2);
+  events::test_project_one::TestEventOne().SetTestMetricTwo(1).Record();
+  events::test_project_one::TestEventOne().SetTestMetricTwo(1).Record();
+  events::test_project_three::TestEventFour().SetTestMetricFour(1).Record();
+
+  EXPECT_EQ(GetSessionData().events_size(), 2);
+  EXPECT_EQ(GetIndependentMetrics().events_size(), 4);
 
   ExpectNoErrors();
 }
diff --git a/components/omnibox/resources/translations/omnibox_pedal_synonyms_ja.xtb b/components/omnibox/resources/translations/omnibox_pedal_synonyms_ja.xtb
index 6c5f5cb..b149d674 100644
--- a/components/omnibox/resources/translations/omnibox_pedal_synonyms_ja.xtb
+++ b/components/omnibox/resources/translations/omnibox_pedal_synonyms_ja.xtb
@@ -5,34 +5,34 @@
 <translation id="1806296531228394314">プレゼンテーション, プレゼンテーション スライド, スライド, プレゼン, プレゼンテーション資料</translation>
 <translation id="1824980356476543253">会議, 招待, 予定</translation>
 <translation id="1891988516537124499">コントロール, 管理, 調整, 削除, 変更, 保存, 編集, 追加</translation>
-<translation id="206230951215631020">ワークスペース, ブラウザ, g suite, google, chrome, クローム, keep</translation>
-<translation id="2408395371488465534">google chrome, ブラウジング, ブラウザ, chrome, クローム, google, 閲覧, 変更, 管理</translation>
+<translation id="206230951215631020">ワークスペース, ブラウザ, g suite, ジースイート, google, グーグル, chrome, クローム, keep, キープ</translation>
+<translation id="2408395371488465534">google chrome, グーグル クローム, ブラウジング, ブラウザ, chrome, クローム, google, グーグル, 閲覧, 変更, 管理</translation>
 <translation id="2872605192111199355">同期設定, 同期</translation>
-<translation id="2980790221229395883">ワークスペース, ブラウザ, g suite, chrome, クローム, google</translation>
+<translation id="2980790221229395883">ワークスペース, ブラウザ, g suite, ジースイート, chrome, クローム, google, グーグル</translation>
 <translation id="30033598029999130">サイトの権限, サイトの設定, 権限</translation>
 <translation id="3188448139252341632">作成, 開始, 開く, 作る, 新規</translation>
 <translation id="3301236201196851325">google chrome, カスタマイズ, ブラウザ, コントロール, 無効, chrome, google, 管理, 調整, 変更, 編集, 追加</translation>
-<translation id="331746689497206697">ワークスペース, ブラウザ, g suite, google, chrome, クローム</translation>
+<translation id="331746689497206697">ワークスペース, ブラウザ, g suite, ジースイート, google, グーグル, chrome, クローム</translation>
 <translation id="3325899408702304400">コントロール, 管理, 調整, 修正</translation>
-<translation id="340152034555856560">google アカウント</translation>
-<translation id="356556104436575005">新しい chrome 機能, chrome ヒントセンター, chrome 機能, chrome ヒント</translation>
-<translation id="3608306948000872696">google chrome, ブラウザ, chrome, クローム, google</translation>
-<translation id="3673793929882893073">ワークスペース, カレンダー, ブラウザ, g suite, google, chrome, クローム, 日程表</translation>
-<translation id="3739710162211139054">ブラウザ, google</translation>
+<translation id="340152034555856560">google アカウント, グーグル アカウント</translation>
+<translation id="356556104436575005">新しい chrome 機能, クローム 新機能, chrome ヒントセンター, chrome 機能, クローム 機能, chrome ヒント, クローム ヒント</translation>
+<translation id="3608306948000872696">google chrome, グーグル クローム, ブラウザ, chrome, クローム, google, グーグル</translation>
+<translation id="3673793929882893073">ワークスペース, カレンダー, ブラウザ, g suite, ジースイート, google, グーグル, chrome, クローム, 日程表</translation>
+<translation id="3739710162211139054">ブラウザ, google, グーグル</translation>
 <translation id="4028070048244364234">変更, 使用</translation>
 <translation id="4204829249546886659">パスワード, セキュリティ, 暗証文字, 安全</translation>
-<translation id="4692900934258103694">内部, 中, で, 方法, その, 1 つの, する, 内の, 自分の, に, へ, ある, 自分</translation>
-<translation id="4878529596268869399">google workspace, google chrome, ワークスペース, ブラウザ, g suite, google, chrome, クローム</translation>
+<translation id="4692900934258103694">内部, 中, 用, で, その, ある, 内, 私, に, へ, の, 自分</translation>
+<translation id="4878529596268869399">google workspace, グーグル ワークスペース, google chrome, グーグル クローム, ワークスペース, ブラウザ, g suite, ジースイート, google, グーグル, chrome, クローム</translation>
 <translation id="5234917617639041434">有効化, 実施, 実行, 使用</translation>
 <translation id="5972655345051164437">配送先住所, 発送先住所, 新しい住所, 住所, 宛先</translation>
 <translation id="6241669245761841993">スケジュール, 作成, 開始, 開く, 作る, 新規, 追加</translation>
 <translation id="6364816288574080368">ドキュメント, 文書</translation>
-<translation id="643615523759948852">google chrome, カスタマイズ, ブラウザ, コントロール, chrome, クローム, google, 管理, 調整, 変更, 編集</translation>
+<translation id="643615523759948852">google chrome, グーグル クローム, カスタマイズ, ブラウザ, コントロール, chrome, クローム, google, 管理, 調整, 変更, 編集</translation>
 <translation id="6476628369862487450">変更, 更新, リセット, 修正</translation>
-<translation id="6665938179110759050">google workspace, google chrome, ワークスペース, ブラウザ, g suite, google, chrome, クローム, gsuite</translation>
+<translation id="6665938179110759050">google workspace, グーグル ワークスペース, google chrome, グーグル クローム, ワークスペース, ブラウザ, g suite, google, グーグル, chrome, クローム, ジースイート</translation>
 <translation id="6887215158683958234">スプレッドシート, スプレッド シート, シート, trix</translation>
-<translation id="6911239335785679799">ブラウザ, chrome, クローム, google</translation>
-<translation id="7650615490969055359">google アカウント パスワード, gmail アカウント パスワード, google パスワード, gmail パスワード</translation>
+<translation id="6911239335785679799">ブラウザ, chrome, クローム, google, グーグル</translation>
+<translation id="7650615490969055359">google アカウント パスワード, グーグル アカウント パスワード, gmail アカウント パスワード, ジーメール アカウント パスワード, google パスワード, グーグル パスワード, gmail パスワード, ジーメール パスワード</translation>
 <translation id="7988861522114961979">アンケート, 入力フォーム, フォーム, 質問</translation>
 <translation id="8483249620579465383">最大限に活用, 理解, 探す, 学ぶ, アクセス, 参照</translation>
 <translation id="8591468627389439293">ノート, メモ</translation>
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn
index 3af0c4f..7409e99a 100644
--- a/components/optimization_guide/core/BUILD.gn
+++ b/components/optimization_guide/core/BUILD.gn
@@ -33,6 +33,8 @@
     "hints_fetcher.h",
     "hints_fetcher_factory.cc",
     "hints_fetcher_factory.h",
+    "hints_manager.cc",
+    "hints_manager.h",
     "hints_processing_util.cc",
     "hints_processing_util.h",
     "insertion_ordered_set.h",
@@ -171,6 +173,7 @@
     "hint_cache_unittest.cc",
     "hints_component_util_unittest.cc",
     "hints_fetcher_unittest.cc",
+    "hints_manager_unittest.cc",
     "hints_processing_util_unittest.cc",
     "insertion_ordered_set_unittest.cc",
     "noisy_metrics_recorder_unittest.cc",
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/components/optimization_guide/core/hints_manager.cc
similarity index 80%
rename from chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
rename to components/optimization_guide/core/hints_manager.cc
index af0a6ae5..75867f7 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
+++ b/components/optimization_guide/core/hints_manager.cc
@@ -1,8 +1,8 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
+// Copyright 2021 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "components/optimization_guide/core/hints_manager.h"
 
 #include <string>
 #include <utility>
@@ -21,15 +21,6 @@
 #include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/time/default_clock.h"
-#include "build/build_config.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
-#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
-#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
-#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
-#include "chrome/browser/profiles/profile.h"
-#include "components/google/core/common/google_util.h"
-#include "components/optimization_guide/content/browser/optimization_guide_decider.h"
 #include "components/optimization_guide/core/bloom_filter.h"
 #include "components/optimization_guide/core/hint_cache.h"
 #include "components/optimization_guide/core/hints_component_util.h"
@@ -53,7 +44,6 @@
 #include "components/optimization_guide/proto/models.pb.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
-#include "content/public/browser/browser_thread.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_source.h"
@@ -61,9 +51,7 @@
 #include "services/network/public/cpp/network_connection_tracker.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
-#if defined(OS_ANDROID)
-#include "chrome/browser/optimization_guide/android/android_push_notification_manager.h"
-#endif
+namespace optimization_guide {
 
 namespace {
 
@@ -273,15 +261,19 @@
 
 }  // namespace
 
-OptimizationGuideHintsManager::OptimizationGuideHintsManager(
-    Profile* profile,
+HintsManager::HintsManager(
+    bool is_off_the_record,
+    const std::string& application_locale,
     PrefService* pref_service,
     optimization_guide::OptimizationGuideStore* hint_store,
     optimization_guide::TopHostProvider* top_host_provider,
     optimization_guide::TabUrlProvider* tab_url_provider,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-    network::NetworkConnectionTracker* network_connection_tracker)
-    : profile_(profile),
+    network::NetworkConnectionTracker* network_connection_tracker,
+    std::unique_ptr<optimization_guide::PushNotificationManager>
+        push_notification_manager)
+    : is_off_the_record_(is_off_the_record),
+      application_locale_(application_locale),
       pref_service_(pref_service),
       hint_cache_(std::make_unique<optimization_guide::HintCache>(
           hint_store,
@@ -297,43 +289,28 @@
               network_connection_tracker)),
       top_host_provider_(top_host_provider),
       tab_url_provider_(tab_url_provider),
+      push_notification_manager_(std::move(push_notification_manager)),
       clock_(base::DefaultClock::GetInstance()),
       background_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::TaskPriority::BEST_EFFORT})) {
-#if defined(OS_ANDROID)
-  if (optimization_guide::features::IsPushNotificationsEnabled()) {
-    push_notification_manager_ = std::make_unique<
-        optimization_guide::android::AndroidPushNotificationManager>(
-        pref_service_);
+  if (push_notification_manager_)
     push_notification_manager_->SetDelegate(this);
-  }
-#endif
 
-  hint_cache_->Initialize(
-      optimization_guide::switches::
-          ShouldPurgeOptimizationGuideStoreOnStartup(),
-      base::BindOnce(&OptimizationGuideHintsManager::OnHintCacheInitialized,
-                     ui_weak_ptr_factory_.GetWeakPtr()));
-
-  NavigationPredictorKeyedService* navigation_predictor_service =
-      NavigationPredictorKeyedServiceFactory::GetForProfile(profile_);
-  if (navigation_predictor_service)
-    navigation_predictor_service->AddObserver(this);
+  hint_cache_->Initialize(optimization_guide::switches::
+                              ShouldPurgeOptimizationGuideStoreOnStartup(),
+                          base::BindOnce(&HintsManager::OnHintCacheInitialized,
+                                         weak_ptr_factory_.GetWeakPtr()));
 }
 
-OptimizationGuideHintsManager::~OptimizationGuideHintsManager() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+HintsManager::~HintsManager() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
-void OptimizationGuideHintsManager::Shutdown() {
+void HintsManager::Shutdown() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   optimization_guide::OptimizationHintsComponentUpdateListener::GetInstance()
       ->RemoveObserver(this);
 
-  NavigationPredictorKeyedService* navigation_predictor_service =
-      NavigationPredictorKeyedServiceFactory::GetForProfile(profile_);
-  if (navigation_predictor_service)
-    navigation_predictor_service->RemoveObserver(this);
-
   base::UmaHistogramBoolean("OptimizationGuide.ProcessingComponentAtShutdown",
                             is_processing_component_);
   if (is_processing_component_) {
@@ -347,10 +324,9 @@
 }
 
 // static
-optimization_guide::OptimizationGuideDecision OptimizationGuideHintsManager::
-    GetOptimizationGuideDecisionFromOptimizationTypeDecision(
-        optimization_guide::OptimizationTypeDecision
-            optimization_type_decision) {
+optimization_guide::OptimizationGuideDecision
+HintsManager::GetOptimizationGuideDecisionFromOptimizationTypeDecision(
+    optimization_guide::OptimizationTypeDecision optimization_type_decision) {
   switch (optimization_type_decision) {
     case optimization_guide::OptimizationTypeDecision::
         kAllowedByOptimizationFilter:
@@ -374,9 +350,9 @@
   }
 }
 
-void OptimizationGuideHintsManager::OnHintsComponentAvailable(
+void HintsManager::OnHintsComponentAvailable(
     const optimization_guide::HintsComponentInfo& info) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Check for if hint component is disabled. This check is needed because the
   // optimization guide still registers with the service as an observer for
@@ -394,7 +370,7 @@
   }
 
   std::unique_ptr<optimization_guide::StoreUpdateData> update_data =
-      profile_->IsOffTheRecord()
+      is_off_the_record_
           ? nullptr
           : hint_cache_->MaybeCreateUpdateDataForComponentHints(info.version);
 
@@ -409,8 +385,8 @@
   is_processing_component_ = true;
   background_task_runner_->PostTaskAndReplyWithResult(
       FROM_HERE, base::BindOnce(&ReadComponentFile, info),
-      base::BindOnce(&OptimizationGuideHintsManager::UpdateComponentHints,
-                     ui_weak_ptr_factory_.GetWeakPtr(),
+      base::BindOnce(&HintsManager::UpdateComponentHints,
+                     weak_ptr_factory_.GetWeakPtr(),
                      std::move(next_update_closure_), std::move(update_data)));
 
   // Only replace hints component info if it is not the same - otherwise we will
@@ -421,7 +397,7 @@
   }
 }
 
-void OptimizationGuideHintsManager::ProcessOptimizationFilters(
+void HintsManager::ProcessOptimizationFilters(
     const google::protobuf::RepeatedPtrField<
         optimization_guide::proto::OptimizationFilter>&
         allowlist_optimization_filters,
@@ -437,7 +413,7 @@
                                /*is_allowlist=*/false);
 }
 
-void OptimizationGuideHintsManager::ProcessOptimizationFilterSet(
+void HintsManager::ProcessOptimizationFilterSet(
     const google::protobuf::RepeatedPtrField<
         optimization_guide::proto::OptimizationFilter>& filters,
     bool is_allowlist) {
@@ -488,8 +464,8 @@
   }
 }
 
-void OptimizationGuideHintsManager::OnHintCacheInitialized() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::OnHintCacheInitialized() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (push_notification_manager_) {
     push_notification_manager_->OnDelegateReady();
@@ -502,7 +478,7 @@
       optimization_guide::switches::ParseComponentConfigFromCommandLine();
   if (manual_config) {
     std::unique_ptr<optimization_guide::StoreUpdateData> update_data =
-        profile_->IsOffTheRecord()
+        is_off_the_record_
             ? nullptr
             : hint_cache_->MaybeCreateUpdateDataForComponentHints(
                   base::Version(kManualConfigComponentVersion));
@@ -525,11 +501,11 @@
       ->AddObserver(this);
 }
 
-void OptimizationGuideHintsManager::UpdateComponentHints(
+void HintsManager::UpdateComponentHints(
     base::OnceClosure update_closure,
     std::unique_ptr<optimization_guide::StoreUpdateData> update_data,
     std::unique_ptr<optimization_guide::proto::Configuration> config) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // If we get here, the component file has been processed correctly and did not
   // crash the device.
@@ -546,7 +522,7 @@
                              config->optimization_blocklists());
 
   // Don't store hints in the store if it's off the record.
-  if (update_data && !profile_->IsOffTheRecord()) {
+  if (update_data && !is_off_the_record_) {
     bool did_process_hints = hint_cache_->ProcessAndCacheHints(
         config->mutable_hints(), update_data.get());
     optimization_guide::RecordProcessHintsComponentResult(
@@ -563,8 +539,8 @@
   if (update_data) {
     hint_cache_->UpdateComponentHints(
         std::move(update_data),
-        base::BindOnce(&OptimizationGuideHintsManager::OnComponentHintsUpdated,
-                       ui_weak_ptr_factory_.GetWeakPtr(),
+        base::BindOnce(&HintsManager::OnComponentHintsUpdated,
+                       weak_ptr_factory_.GetWeakPtr(),
                        std::move(update_closure),
                        /* hints_updated=*/true));
   } else {
@@ -572,10 +548,9 @@
   }
 }
 
-void OptimizationGuideHintsManager::OnComponentHintsUpdated(
-    base::OnceClosure update_closure,
-    bool hints_updated) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::OnComponentHintsUpdated(base::OnceClosure update_closure,
+                                           bool hints_updated) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Record the result of updating the hints. This is used as a signal for the
   // hints being fully processed in testing.
@@ -592,32 +567,31 @@
       // Batch update hints with a random delay.
       active_tabs_hints_fetch_timer_.Start(
           FROM_HERE, RandomFetchDelay(), this,
-          &OptimizationGuideHintsManager::FetchHintsForActiveTabs);
+          &HintsManager::FetchHintsForActiveTabs);
     }
   }
 
   MaybeRunUpdateClosure(std::move(update_closure));
 }
 
-void OptimizationGuideHintsManager::ListenForNextUpdateForTesting(
+void HintsManager::ListenForNextUpdateForTesting(
     base::OnceClosure next_update_closure) {
   DCHECK(!next_update_closure_)
       << "Only one update closure is supported at a time";
   next_update_closure_ = std::move(next_update_closure);
 }
 
-void OptimizationGuideHintsManager::SetHintsFetcherFactoryForTesting(
+void HintsManager::SetHintsFetcherFactoryForTesting(
     std::unique_ptr<optimization_guide::HintsFetcherFactory>
         hints_fetcher_factory) {
   hints_fetcher_factory_ = std::move(hints_fetcher_factory);
 }
 
-void OptimizationGuideHintsManager::SetClockForTesting(
-    const base::Clock* clock) {
+void HintsManager::SetClockForTesting(const base::Clock* clock) {
   clock_ = clock;
 }
 
-void OptimizationGuideHintsManager::ScheduleActiveTabsHintsFetch() {
+void HintsManager::ScheduleActiveTabsHintsFetch() {
   DCHECK(!active_tabs_hints_fetch_timer_.IsRunning());
 
   const base::TimeDelta active_tabs_refresh_duration =
@@ -631,7 +605,7 @@
     SetLastHintsFetchAttemptTime(clock_->Now());
     active_tabs_hints_fetch_timer_.Start(
         FROM_HERE, RandomFetchDelay(), this,
-        &OptimizationGuideHintsManager::FetchHintsForActiveTabs);
+        &HintsManager::FetchHintsForActiveTabs);
   } else {
     // If the fetched hints in the store are still up-to-date, set a timer
     // for when the hints need to be updated.
@@ -639,12 +613,11 @@
         active_tabs_refresh_duration - time_since_last_fetch;
     active_tabs_hints_fetch_timer_.Start(
         FROM_HERE, fetcher_delay, this,
-        &OptimizationGuideHintsManager::ScheduleActiveTabsHintsFetch);
+        &HintsManager::ScheduleActiveTabsHintsFetch);
   }
 }
 
-const std::vector<GURL>
-OptimizationGuideHintsManager::GetActiveTabURLsToRefresh() {
+const std::vector<GURL> HintsManager::GetActiveTabURLsToRefresh() {
   if (!tab_url_provider_)
     return {};
 
@@ -662,15 +635,15 @@
   return std::vector<GURL>(urls_to_refresh.begin(), urls_to_refresh.end());
 }
 
-void OptimizationGuideHintsManager::FetchHintsForActiveTabs() {
+void HintsManager::FetchHintsForActiveTabs() {
   active_tabs_hints_fetch_timer_.Stop();
   active_tabs_hints_fetch_timer_.Start(
       FROM_HERE,
       optimization_guide::features::GetActiveTabsFetchRefreshDuration(), this,
-      &OptimizationGuideHintsManager::ScheduleActiveTabsHintsFetch);
+      &HintsManager::ScheduleActiveTabsHintsFetch);
 
   if (!optimization_guide::IsUserPermittedToFetchFromRemoteOptimizationGuide(
-          profile_->IsOffTheRecord(), pref_service_)) {
+          is_off_the_record_, pref_service_)) {
     return;
   }
 
@@ -714,16 +687,14 @@
 
   batch_update_hints_fetcher_->FetchOptimizationGuideServiceHints(
       top_hosts, active_tab_urls_to_refresh, registered_optimization_types_,
-      optimization_guide::proto::CONTEXT_BATCH_UPDATE,
-      g_browser_process->GetApplicationLocale(),
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnHintsForActiveTabsFetched,
-          ui_weak_ptr_factory_.GetWeakPtr(), top_hosts_set,
-          base::flat_set<GURL>(active_tab_urls_to_refresh.begin(),
-                               active_tab_urls_to_refresh.end())));
+      optimization_guide::proto::CONTEXT_BATCH_UPDATE, application_locale_,
+      base::BindOnce(&HintsManager::OnHintsForActiveTabsFetched,
+                     weak_ptr_factory_.GetWeakPtr(), top_hosts_set,
+                     base::flat_set<GURL>(active_tab_urls_to_refresh.begin(),
+                                          active_tab_urls_to_refresh.end())));
 }
 
-void OptimizationGuideHintsManager::OnHintsForActiveTabsFetched(
+void HintsManager::OnHintsForActiveTabsFetched(
     const base::flat_set<std::string>& hosts_fetched,
     const base::flat_set<GURL>& urls_fetched,
     absl::optional<std::unique_ptr<optimization_guide::proto::GetHintsResponse>>
@@ -736,12 +707,11 @@
       clock_->Now() +
           optimization_guide::features::GetActiveTabsFetchRefreshDuration(),
       hosts_fetched, urls_fetched,
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnFetchedActiveTabsHintsStored,
-          ui_weak_ptr_factory_.GetWeakPtr()));
+      base::BindOnce(&HintsManager::OnFetchedActiveTabsHintsStored,
+                     weak_ptr_factory_.GetWeakPtr()));
 }
 
-void OptimizationGuideHintsManager::OnPageNavigationHintsFetched(
+void HintsManager::OnPageNavigationHintsFetched(
     base::WeakPtr<OptimizationGuideNavigationData> navigation_data_weak_ptr,
     const absl::optional<GURL>& navigation_url,
     const base::flat_set<GURL>& page_navigation_urls_requested,
@@ -761,14 +731,13 @@
       clock_->Now() +
           optimization_guide::features::GetActiveTabsFetchRefreshDuration(),
       page_navigation_hosts_requested, page_navigation_urls_requested,
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnFetchedPageNavigationHintsStored,
-          ui_weak_ptr_factory_.GetWeakPtr(), navigation_data_weak_ptr,
-          navigation_url, page_navigation_hosts_requested));
+      base::BindOnce(&HintsManager::OnFetchedPageNavigationHintsStored,
+                     weak_ptr_factory_.GetWeakPtr(), navigation_data_weak_ptr,
+                     navigation_url, page_navigation_hosts_requested));
 }
 
-void OptimizationGuideHintsManager::OnFetchedActiveTabsHintsStored() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::OnFetchedActiveTabsHintsStored() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   LOCAL_HISTOGRAM_BOOLEAN("OptimizationGuide.FetchedHints.Stored", true);
 
   if (!optimization_guide::features::ShouldPersistHintsToDisk()) {
@@ -782,11 +751,11 @@
   hint_cache_->PurgeExpiredFetchedHints();
 }
 
-void OptimizationGuideHintsManager::OnFetchedPageNavigationHintsStored(
+void HintsManager::OnFetchedPageNavigationHintsStored(
     base::WeakPtr<OptimizationGuideNavigationData> navigation_data_weak_ptr,
     const absl::optional<GURL>& navigation_url,
     const base::flat_set<std::string>& page_navigation_hosts_requested) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (navigation_data_weak_ptr) {
     navigation_data_weak_ptr->set_hints_fetch_end(base::TimeTicks::Now());
@@ -802,37 +771,33 @@
   }
 }
 
-bool OptimizationGuideHintsManager::IsHintBeingFetchedForNavigation(
-    const GURL& navigation_url) {
+bool HintsManager::IsHintBeingFetchedForNavigation(const GURL& navigation_url) {
   return page_navigation_hints_fetchers_.Get(navigation_url) !=
          page_navigation_hints_fetchers_.end();
 }
 
-void OptimizationGuideHintsManager::CleanUpFetcherForNavigation(
-    const GURL& navigation_url) {
+void HintsManager::CleanUpFetcherForNavigation(const GURL& navigation_url) {
   auto it = page_navigation_hints_fetchers_.Peek(navigation_url);
   if (it != page_navigation_hints_fetchers_.end())
     page_navigation_hints_fetchers_.Erase(it);
 }
 
-base::Time OptimizationGuideHintsManager::GetLastHintsFetchAttemptTime() const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+base::Time HintsManager::GetLastHintsFetchAttemptTime() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return base::Time::FromDeltaSinceWindowsEpoch(
       base::TimeDelta::FromMicroseconds(pref_service_->GetInt64(
           optimization_guide::prefs::kHintsFetcherLastFetchAttempt)));
 }
 
-void OptimizationGuideHintsManager::SetLastHintsFetchAttemptTime(
-    base::Time last_attempt_time) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::SetLastHintsFetchAttemptTime(base::Time last_attempt_time) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   pref_service_->SetInt64(
       optimization_guide::prefs::kHintsFetcherLastFetchAttempt,
       last_attempt_time.ToDeltaSinceWindowsEpoch().InMicroseconds());
 }
 
-void OptimizationGuideHintsManager::LoadHintForURL(const GURL& url,
-                                                   base::OnceClosure callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::LoadHintForURL(const GURL& url, base::OnceClosure callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (!url.has_host()) {
     std::move(callback).Run();
@@ -842,79 +807,18 @@
   LoadHintForHost(url.host(), std::move(callback));
 }
 
-void OptimizationGuideHintsManager::LoadHintForHost(
-    const std::string& host,
-    base::OnceClosure callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+void HintsManager::LoadHintForHost(const std::string& host,
+                                   base::OnceClosure callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  hint_cache_->LoadHint(
-      host,
-      base::BindOnce(&OptimizationGuideHintsManager::OnHintLoaded,
-                     ui_weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+  hint_cache_->LoadHint(host, base::BindOnce(&HintsManager::OnHintLoaded,
+                                             weak_ptr_factory_.GetWeakPtr(),
+                                             std::move(callback)));
 }
 
-bool OptimizationGuideHintsManager::IsGoogleURL(const GURL& url) const {
-  return google_util::IsGoogleHostname(url.host(),
-                                       google_util::DISALLOW_SUBDOMAIN);
-}
+void HintsManager::FetchHintsForURLs(std::vector<GURL> target_urls) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-bool OptimizationGuideHintsManager::IsAllowedToFetchForNavigationPrediction(
-    const absl::optional<NavigationPredictorKeyedService::Prediction>
-        prediction) const {
-  if (!prediction)
-    return false;
-
-  if (prediction->prediction_source() !=
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage) {
-    // We only support predictions from page anchors.
-    return false;
-  }
-  const absl::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);
-}
-
-void OptimizationGuideHintsManager::OnPredictionUpdated(
-    const absl::optional<NavigationPredictorKeyedService::Prediction>
-        prediction) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  if (!IsAllowedToFetchForNavigationPrediction(prediction)) {
-    return;
-  }
-
-  // Per comments in NavigationPredictorKeyedService::Prediction, this pointer
-  // should be valid while OnPredictionUpdated is on the call stack.
-  content::WebContents* web_contents = prediction->web_contents();
-  auto* observer =
-      OptimizationGuideWebContentsObserver::FromWebContents(web_contents);
-  DCHECK(observer);
-
-  std::vector<GURL> urls_to_fetch;
-  for (const auto& url : prediction->sorted_predicted_urls()) {
-    if (!IsAllowedToFetchNavigationHints(url)) {
-      continue;
-    }
-    if (IsGoogleURL(url)) {
-      // Don't prefetch hints for SRP links that point back to Google.
-      continue;
-    }
-    if (hint_cache_->HasURLKeyedEntryForURL(url)) {
-      continue;
-    }
-    urls_to_fetch.push_back(url);
-  }
-  observer->AddURLsToBatchFetchBasedOnPrediction(std::move(urls_to_fetch),
-                                                 web_contents);
-}
-
-void OptimizationGuideHintsManager::FetchHintsForPredictions(
-    std::vector<GURL> target_urls) {
   // Collect hosts, stripping duplicates, but preserving the ordering.
   optimization_guide::InsertionOrderedSet<std::string> target_hosts;
   for (const auto& url : target_urls) {
@@ -935,18 +839,16 @@
   // returned, we pass this through to the page navigation callback.
   batch_update_hints_fetcher_->FetchOptimizationGuideServiceHints(
       target_hosts.vector(), target_urls, registered_optimization_types_,
-      optimization_guide::proto::CONTEXT_BATCH_UPDATE,
-      g_browser_process->GetApplicationLocale(),
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnPageNavigationHintsFetched,
-          ui_weak_ptr_factory_.GetWeakPtr(), nullptr, absl::nullopt,
-          target_urls, target_hosts.set()));
+      optimization_guide::proto::CONTEXT_BATCH_UPDATE, application_locale_,
+      base::BindOnce(&HintsManager::OnPageNavigationHintsFetched,
+                     weak_ptr_factory_.GetWeakPtr(), nullptr, absl::nullopt,
+                     target_urls, target_hosts.set()));
 }
 
-void OptimizationGuideHintsManager::OnHintLoaded(
+void HintsManager::OnHintLoaded(
     base::OnceClosure callback,
     const optimization_guide::proto::Hint* loaded_hint) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Record the result of loading a hint. This is used as a signal for testing.
   LOCAL_HISTOGRAM_BOOLEAN(optimization_guide::kLoadedHintLocalHistogramString,
@@ -957,9 +859,10 @@
   std::move(callback).Run();
 }
 
-void OptimizationGuideHintsManager::RegisterOptimizationTypes(
+void HintsManager::RegisterOptimizationTypes(
     const std::vector<optimization_guide::proto::OptimizationType>&
         optimization_types) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   bool should_load_new_optimization_filter = false;
 
   DictionaryPrefUpdate previously_registered_opt_types(
@@ -978,7 +881,7 @@
     absl::optional<double> value = previously_registered_opt_types->FindBoolKey(
         optimization_guide::proto::OptimizationType_Name(optimization_type));
     if (!value) {
-      if (!profile_->IsOffTheRecord() &&
+      if (!is_off_the_record_ &&
           !ShouldIgnoreNewlyRegisteredOptimizationType(optimization_type)) {
         should_clear_hints_for_new_type_ = true;
       }
@@ -1020,24 +923,26 @@
   }
 }
 
-bool OptimizationGuideHintsManager::HasLoadedOptimizationAllowlist(
+bool HintsManager::HasLoadedOptimizationAllowlist(
     optimization_guide::proto::OptimizationType optimization_type) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return allowlist_optimization_filters_.find(optimization_type) !=
          allowlist_optimization_filters_.end();
 }
 
-bool OptimizationGuideHintsManager::HasLoadedOptimizationBlocklist(
+bool HintsManager::HasLoadedOptimizationBlocklist(
     optimization_guide::proto::OptimizationType optimization_type) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return blocklist_optimization_filters_.find(optimization_type) !=
          blocklist_optimization_filters_.end();
 }
 
-void OptimizationGuideHintsManager::CanApplyOptimizationAsync(
+void HintsManager::CanApplyOptimizationAsync(
     const GURL& navigation_url,
     const absl::optional<int64_t>& navigation_id,
     optimization_guide::proto::OptimizationType optimization_type,
     optimization_guide::OptimizationGuideDecisionCallback callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   optimization_guide::OptimizationMetadata metadata;
   optimization_guide::OptimizationTypeDecision type_decision =
@@ -1063,13 +968,12 @@
       std::make_pair(navigation_id, std::move(callback)));
 }
 
-optimization_guide::OptimizationTypeDecision
-OptimizationGuideHintsManager::CanApplyOptimization(
+optimization_guide::OptimizationTypeDecision HintsManager::CanApplyOptimization(
     const GURL& navigation_url,
     const absl::optional<int64_t>& navigation_id,
     optimization_guide::proto::OptimizationType optimization_type,
     optimization_guide::OptimizationMetadata* optimization_metadata) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Clear out optimization metadata if provided.
   if (optimization_metadata)
@@ -1202,23 +1106,22 @@
              : optimization_guide::OptimizationTypeDecision::kNotAllowedByHint;
 }
 
-void OptimizationGuideHintsManager::PrepareToInvokeRegisteredCallbacks(
+void HintsManager::PrepareToInvokeRegisteredCallbacks(
     const GURL& navigation_url) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (registered_callbacks_.find(navigation_url) == registered_callbacks_.end())
     return;
 
   LoadHintForHost(
       navigation_url.host(),
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnReadyToInvokeRegisteredCallbacks,
-          ui_weak_ptr_factory_.GetWeakPtr(), navigation_url));
+      base::BindOnce(&HintsManager::OnReadyToInvokeRegisteredCallbacks,
+                     weak_ptr_factory_.GetWeakPtr(), navigation_url));
 }
 
-void OptimizationGuideHintsManager::OnReadyToInvokeRegisteredCallbacks(
+void HintsManager::OnReadyToInvokeRegisteredCallbacks(
     const GURL& navigation_url) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (registered_callbacks_.find(navigation_url) ==
       registered_callbacks_.end()) {
@@ -1249,7 +1152,7 @@
   registered_callbacks_.erase(navigation_url);
 }
 
-bool OptimizationGuideHintsManager::HasOptimizationTypeToFetchFor() {
+bool HintsManager::HasOptimizationTypeToFetchFor() {
   if (registered_optimization_types_.empty())
     return false;
 
@@ -1262,26 +1165,25 @@
   return false;
 }
 
-bool OptimizationGuideHintsManager::IsAllowedToFetchNavigationHints(
-    const GURL& url) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+bool HintsManager::IsAllowedToFetchNavigationHints(const GURL& url) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (!HasOptimizationTypeToFetchFor())
     return false;
 
   if (!optimization_guide::IsUserPermittedToFetchFromRemoteOptimizationGuide(
-          profile_->IsOffTheRecord(), pref_service_)) {
+          is_off_the_record_, pref_service_)) {
     return false;
   }
-  DCHECK(!profile_->IsOffTheRecord());
+  DCHECK(!is_off_the_record_);
 
   return url.is_valid() && url.SchemeIsHTTPOrHTTPS();
 }
 
-void OptimizationGuideHintsManager::OnNavigationStartOrRedirect(
+void HintsManager::OnNavigationStartOrRedirect(
     OptimizationGuideNavigationData* navigation_data,
     base::OnceClosure callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   LoadHintForURL(navigation_data->navigation_url(), std::move(callback));
 
@@ -1293,9 +1195,9 @@
   MaybeFetchHintsForNavigation(navigation_data);
 }
 
-void OptimizationGuideHintsManager::MaybeFetchHintsForNavigation(
+void HintsManager::MaybeFetchHintsForNavigation(
     OptimizationGuideNavigationData* navigation_data) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (registered_optimization_types_.empty())
     return;
@@ -1353,13 +1255,12 @@
 
   bool fetch_attempted = it->second->FetchOptimizationGuideServiceHints(
       hosts, urls, registered_optimization_types_,
-      optimization_guide::proto::CONTEXT_PAGE_NAVIGATION,
-      g_browser_process->GetApplicationLocale(),
-      base::BindOnce(
-          &OptimizationGuideHintsManager::OnPageNavigationHintsFetched,
-          ui_weak_ptr_factory_.GetWeakPtr(), navigation_data->GetWeakPtr(), url,
-          base::flat_set<GURL>({url}),
-          base::flat_set<std::string>({url.host()})));
+      optimization_guide::proto::CONTEXT_PAGE_NAVIGATION, application_locale_,
+      base::BindOnce(&HintsManager::OnPageNavigationHintsFetched,
+                     weak_ptr_factory_.GetWeakPtr(),
+                     navigation_data->GetWeakPtr(), url,
+                     base::flat_set<GURL>({url}),
+                     base::flat_set<std::string>({url.host()})));
   if (fetch_attempted) {
     navigation_data->set_hints_fetch_start(base::TimeTicks::Now());
 
@@ -1375,9 +1276,9 @@
   }
 }
 
-void OptimizationGuideHintsManager::OnNavigationFinish(
+void HintsManager::OnNavigationFinish(
     const std::vector<GURL>& navigation_redirect_chain) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // The callbacks will be invoked when the fetch request comes back, so it
   // will be cleaned up later.
@@ -1389,21 +1290,20 @@
   }
 }
 
-optimization_guide::OptimizationGuideStore*
-OptimizationGuideHintsManager::hint_store() {
+optimization_guide::OptimizationGuideStore* HintsManager::hint_store() {
   return hint_cache_->hint_store();
 }
 
-optimization_guide::HintCache* OptimizationGuideHintsManager::hint_cache() {
+optimization_guide::HintCache* HintsManager::hint_cache() {
   return hint_cache_.get();
 }
 
 optimization_guide::PushNotificationManager*
-OptimizationGuideHintsManager::push_notification_manager() {
+HintsManager::push_notification_manager() {
   return push_notification_manager_.get();
 }
 
-bool OptimizationGuideHintsManager::HasAllInformationForDecisionAvailable(
+bool HintsManager::HasAllInformationForDecisionAvailable(
     const GURL& navigation_url,
     optimization_guide::proto::OptimizationType optimization_type) {
   if (HasLoadedOptimizationAllowlist(optimization_type) ||
@@ -1443,19 +1343,21 @@
          host_keyed_hint != nullptr;
 }
 
-void OptimizationGuideHintsManager::ClearFetchedHints() {
+void HintsManager::ClearFetchedHints() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   hint_cache_->ClearFetchedHints();
   optimization_guide::HintsFetcher::ClearHostsSuccessfullyFetched(
       pref_service_);
 }
 
-void OptimizationGuideHintsManager::ClearHostKeyedHints() {
+void HintsManager::ClearHostKeyedHints() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   hint_cache_->ClearHostKeyedHints();
   optimization_guide::HintsFetcher::ClearHostsSuccessfullyFetched(
       pref_service_);
 }
 
-void OptimizationGuideHintsManager::AddHintForTesting(
+void HintsManager::AddHintForTesting(
     const GURL& url,
     optimization_guide::proto::OptimizationType optimization_type,
     const absl::optional<optimization_guide::OptimizationMetadata>& metadata) {
@@ -1468,7 +1370,7 @@
       page_hint->add_allowlisted_optimizations();
   optimization->set_optimization_type(optimization_type);
   if (!metadata) {
-    hint_cache_->AddHintForTesting(url, std::move(hint));
+    hint_cache_->AddHintForTesting(url, std::move(hint));  // IN-TEST
     PrepareToInvokeRegisteredCallbacks(url);
     return;
   }
@@ -1486,14 +1388,16 @@
   } else {
     NOTREACHED();
   }
-  hint_cache_->AddHintForTesting(url, std::move(hint));
+  hint_cache_->AddHintForTesting(url, std::move(hint));  // IN-TEST
   PrepareToInvokeRegisteredCallbacks(url);
 }
 
-void OptimizationGuideHintsManager::RemoveFetchedEntriesByHintKeys(
+void HintsManager::RemoveFetchedEntriesByHintKeys(
     base::OnceClosure on_success,
     optimization_guide::proto::KeyRepresentation key_representation,
     const base::flat_set<std::string>& hint_keys) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   // Make sure the key representation is something that we expect.
   switch (key_representation) {
     case optimization_guide::proto::KeyRepresentation::HOST:
@@ -1541,8 +1445,10 @@
   hint_cache_->RemoveHintsForHosts(std::move(on_success), hint_keys);
 }
 
-void OptimizationGuideHintsManager::PurgeFetchedEntries(
-    base::OnceClosure on_success) {
+void HintsManager::PurgeFetchedEntries(base::OnceClosure on_success) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   ClearFetchedHints();
   std::move(on_success).Run();
 }
+
+}  // namespace optimization_guide
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h b/components/optimization_guide/core/hints_manager.h
similarity index 86%
rename from chrome/browser/optimization_guide/optimization_guide_hints_manager.h
rename to components/optimization_guide/core/hints_manager.h
index b7ed3fc..60d4f4e 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
+++ b/components/optimization_guide/core/hints_manager.h
@@ -1,9 +1,9 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
+// Copyright 2021 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_HINTS_MANAGER_H_
-#define CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_HINTS_MANAGER_H_
+#ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_HINTS_MANAGER_H_
+#define COMPONENTS_OPTIMIZATION_GUIDE_CORE_HINTS_MANAGER_H_
 
 #include <memory>
 #include <string>
@@ -18,18 +18,21 @@
 #include "base/sequenced_task_runner.h"
 #include "base/time/clock.h"
 #include "base/timer/timer.h"
-#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
-#include "components/optimization_guide/content/browser/optimization_guide_decider.h"
 #include "components/optimization_guide/core/hints_component_info.h"
 #include "components/optimization_guide/core/hints_fetcher.h"
+#include "components/optimization_guide/core/optimization_guide_decision.h"
 #include "components/optimization_guide/core/optimization_hints_component_observer.h"
 #include "components/optimization_guide/core/push_notification_manager.h"
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+class OptimizationGuideNavigationData;
+class PrefService;
+
 namespace network {
 class SharedURLLoaderFactory;
+class NetworkConnectionTracker;
 }  // namespace network
 
 namespace optimization_guide {
@@ -43,27 +46,26 @@
 class StoreUpdateData;
 class TabUrlProvider;
 class TopHostProvider;
-}  // namespace optimization_guide
 
-class OptimizationGuideNavigationData;
-class PrefService;
-class Profile;
-
-class OptimizationGuideHintsManager
-    : public optimization_guide::OptimizationHintsComponentObserver,
-      public optimization_guide::PushNotificationManager::Delegate,
-      public NavigationPredictorKeyedService::Observer {
+class HintsManager : public OptimizationHintsComponentObserver,
+                     public PushNotificationManager::Delegate {
  public:
-  OptimizationGuideHintsManager(
-      Profile* profile,
+  HintsManager(
+      bool is_off_the_record,
+      const std::string& application_locale,
       PrefService* pref_service,
       optimization_guide::OptimizationGuideStore* hint_store,
       optimization_guide::TopHostProvider* top_host_provider,
       optimization_guide::TabUrlProvider* tab_url_provider,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-      network::NetworkConnectionTracker* network_connection_tracker);
+      network::NetworkConnectionTracker* network_connection_tracker,
+      std::unique_ptr<optimization_guide::PushNotificationManager>
+          push_notification_manager);
 
-  ~OptimizationGuideHintsManager() override;
+  ~HintsManager() override;
+
+  HintsManager(const HintsManager&) = delete;
+  HintsManager& operator=(const HintsManager&) = delete;
 
   // Unhooks the observer to |optimization_guide_service_|.
   void Shutdown();
@@ -151,8 +153,8 @@
   // |navigation_redirect_chain| has finished.
   void OnNavigationFinish(const std::vector<GURL>& navigation_redirect_chain);
 
-  // Fetch the hints for the given predicted URLs.
-  void FetchHintsForPredictions(std::vector<GURL> target_urls);
+  // Fetch the hints for the given URLs.
+  void FetchHintsForURLs(std::vector<GURL> target_urls);
 
   // optimization_guide::PushNotificationManager::Delegate:
   void RemoveFetchedEntriesByHintKeys(
@@ -161,6 +163,10 @@
       const base::flat_set<std::string>& hint_keys) override;
   void PurgeFetchedEntries(base::OnceClosure on_success) override;
 
+  // Returns true if |this| is allowed to fetch hints at the navigation time for
+  // |url|.
+  bool IsAllowedToFetchNavigationHints(const GURL& url);
+
   // Returns the hint cache for |this|.
   optimization_guide::HintCache* hint_cache();
 
@@ -177,18 +183,6 @@
       const absl::optional<optimization_guide::OptimizationMetadata>& metadata);
 
  private:
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerTest, IsGoogleURL);
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerFetchingTest,
-                           HintsFetched_AtSRP);
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerFetchingTest,
-                           HintsFetched_AtSRP_GoogleLinksIgnored);
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerFetchingTest,
-                           HintsFetched_AtNonSRP);
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerFetchingTest,
-                           HintsFetched_AtSRP_DuplicatesRemoved);
-  FRIEND_TEST_ALL_PREFIXES(OptimizationGuideHintsManagerFetchingTest,
-                           HintsFetched_AtSRP_NonHTTPOrHTTPSHostsRemoved);
-
   // Processes the optimization filters contained in the hints component.
   void ProcessOptimizationFilters(
       const google::protobuf::RepeatedPtrField<
@@ -208,7 +202,7 @@
       bool is_allowlist);
 
   // Callback run after the hint cache is fully initialized. At this point,
-  // the OptimizationGuideHintsManager is ready to process hints.
+  // the HintsManager is ready to process hints.
   void OnHintCacheInitialized();
 
   // Updates the cache with the latest hints sent by the Component Updater.
@@ -291,10 +285,6 @@
   void OnHintLoaded(base::OnceClosure callback,
                     const optimization_guide::proto::Hint* loaded_hint) const;
 
-  // Returns true if |this| is allowed to fetch hints at the navigation time for
-  // |url|.
-  bool IsAllowedToFetchNavigationHints(const GURL& url);
-
   // Loads the hint if available for navigation to |url|.
   // |callback| is run when the request has finished regardless of whether there
   // was actually a hint for that load or not. The callback can be used as a
@@ -307,20 +297,6 @@
   // signal for tests.
   void LoadHintForHost(const std::string& host, base::OnceClosure callback);
 
-  // Returns true if the hostname for |url| matches the host of google web
-  // 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 absl::optional<NavigationPredictorKeyedService::Prediction>
-          prediction) const;
-
-  // NavigationPredictorKeyedService::Observer:
-  void OnPredictionUpdated(
-      const absl::optional<NavigationPredictorKeyedService::Prediction>
-          prediction) override;
-
   // Returns whether there is an optimization type to fetch for. Will return
   // false if no optimization types are registered or if all registered
   // optimization types are covered by optimization filters.
@@ -389,8 +365,11 @@
               optimization_guide::OptimizationGuideDecisionCallback>>>>
       registered_callbacks_;
 
-  // A reference to the profile. Not owned.
-  Profile* profile_ = nullptr;
+  // Whether |this| was created for an off the record profile.
+  const bool is_off_the_record_;
+
+  // The current applcation locale of Chrome.
+  const std::string application_locale_;
 
   // A reference to the PrefService for this profile. Not owned.
   PrefService* pref_service_ = nullptr;
@@ -448,11 +427,12 @@
   // would access other member variables after they have been destroyed.
   scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
 
-  // Used to get |weak_ptr_| to self on the UI thread.
-  base::WeakPtrFactory<OptimizationGuideHintsManager> ui_weak_ptr_factory_{
-      this};
+  SEQUENCE_CHECKER(sequence_checker_);
 
-  DISALLOW_COPY_AND_ASSIGN(OptimizationGuideHintsManager);
+  // Used to get |weak_ptr_| to self.
+  base::WeakPtrFactory<HintsManager> weak_ptr_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_HINTS_MANAGER_H_
+}  // namespace optimization_guide
+
+#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_HINTS_MANAGER_H_
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc b/components/optimization_guide/core/hints_manager_unittest.cc
similarity index 77%
rename from chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
rename to components/optimization_guide/core/hints_manager_unittest.cc
index 8816bab3..85fa0ce 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
+++ b/components/optimization_guide/core/hints_manager_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
+#include "components/optimization_guide/core/hints_manager.h"
 
 #include <string>
 #include <utility>
@@ -14,13 +14,8 @@
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "build/build_config.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/optimization_guide/optimization_guide_tab_url_provider.h"
-#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
-#include "chrome/test/base/testing_profile.h"
+#include "base/test/task_environment.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h"
-#include "components/optimization_guide/content/browser/optimization_guide_decider.h"
 #include "components/optimization_guide/core/bloom_filter.h"
 #include "components/optimization_guide/core/hint_cache.h"
 #include "components/optimization_guide/core/hints_component_util.h"
@@ -34,15 +29,13 @@
 #include "components/optimization_guide/core/optimization_guide_store.h"
 #include "components/optimization_guide/core/optimization_guide_switches.h"
 #include "components/optimization_guide/core/proto_database_provider_test_base.h"
+#include "components/optimization_guide/core/tab_url_provider.h"
 #include "components/optimization_guide/core/top_host_provider.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "components/unified_consent/unified_consent_service.h"
 #include "components/variations/scoped_variations_ids_provider.h"
-#include "content/public/test/browser_task_environment.h"
-#include "content/public/test/mock_navigation_handle.h"
-#include "content/public/test/test_web_contents_factory.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_source.h"
 #include "services/network/public/cpp/network_connection_tracker.h"
@@ -50,14 +43,11 @@
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "services/network/test/test_network_connection_tracker.h"
 #include "services/network/test/test_url_loader_factory.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace optimization_guide {
 namespace {
 
-using ::testing::NiceMock;
-using ::testing::Return;
-
 // Allows for default hour to pass + random delay between 30 and 60 seconds.
 constexpr int kUpdateFetchHintsTimeSecs = 61 * 60;  // 1 hours and 1 minutes.
 
@@ -274,23 +264,21 @@
   std::vector<HintsFetcherEndState> fetch_states_;
 };
 
-class OptimizationGuideHintsManagerTest
+class HintsManagerTest
     : public optimization_guide::ProtoDatabaseProviderTestBase {
  public:
-  OptimizationGuideHintsManagerTest() {
+  HintsManagerTest() {
     scoped_feature_list_.InitAndEnableFeatureWithParameters(
         optimization_guide::features::kOptimizationHints,
         {{"max_host_keyed_hint_cache_size", "1"}});
   }
-  OptimizationGuideHintsManagerTest(const OptimizationGuideHintsManagerTest&) =
-      delete;
-  OptimizationGuideHintsManagerTest& operator=(
-      const OptimizationGuideHintsManagerTest&) = delete;
-  ~OptimizationGuideHintsManagerTest() override = default;
+  ~HintsManagerTest() override = default;
+
+  HintsManagerTest(const HintsManagerTest&) = delete;
+  HintsManagerTest& operator=(const HintsManagerTest&) = delete;
 
   void SetUp() override {
     optimization_guide::ProtoDatabaseProviderTestBase::SetUp();
-    web_contents_factory_ = std::make_unique<content::TestWebContentsFactory>();
     CreateHintsManager(/*top_host_provider=*/nullptr);
   }
 
@@ -322,14 +310,16 @@
 
     tab_url_provider_ = std::make_unique<FakeTabUrlProvider>();
 
-    hints_manager_ = std::make_unique<OptimizationGuideHintsManager>(
-        &testing_profile_, pref_service(), hint_store_.get(), top_host_provider,
+    hints_manager_ = std::make_unique<HintsManager>(
+        /*is_off_the_record=*/false, /*application_locale=*/"en-US",
+        pref_service(), hint_store_.get(), top_host_provider,
         tab_url_provider_.get(), url_loader_factory_,
-        network::TestNetworkConnectionTracker::GetInstance());
+        network::TestNetworkConnectionTracker::GetInstance(),
+        /*push_notification_manager=*/nullptr);
     hints_manager_->SetClockForTesting(task_environment_.GetMockClock());
 
-    // Run until hint cache is initialized and the OptimizationGuideHintsManager
-    // is ready to process hints.
+    // Run until hint cache is initialized and the HintsManager is ready to
+    // process hints.
     RunUntilIdle();
   }
 
@@ -416,42 +406,26 @@
     RunUntilIdle();
   }
 
-  // Creates a navigation handle with the OptimizationGuideWebContentsObserver
-  // attached.
-  std::unique_ptr<content::MockNavigationHandle>
-  CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-      const GURL& url) {
-    content::WebContents* web_contents =
-        web_contents_factory_->CreateWebContents(&testing_profile_);
-    OptimizationGuideWebContentsObserver::CreateForWebContents(web_contents);
-    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-        std::make_unique<NiceMock<content::MockNavigationHandle>>(web_contents);
-    navigation_handle->set_url(url);
-    return navigation_handle;
+  // Creates navigation data for a navigation to |url| with registered
+  // |optimization_types|.
+  std::unique_ptr<OptimizationGuideNavigationData> CreateTestNavigationData(
+      const GURL& url,
+      const std::vector<optimization_guide::proto::OptimizationType>&
+          optimization_types) {
+    auto navigation_data = std::make_unique<OptimizationGuideNavigationData>(
+        /*navigation_id=*/1, /*navigation_start*/ base::TimeTicks::Now());
+    navigation_data->set_navigation_url(url);
+    navigation_data->set_registered_optimization_types(optimization_types);
+    return navigation_data;
   }
 
   void CallOnNavigationStartOrRedirect(
-      content::NavigationHandle* navigation_handle,
+      OptimizationGuideNavigationData* navigation_data,
       base::OnceClosure callback) {
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle);
-    navigation_data->set_navigation_url(navigation_handle->GetURL());
     hints_manager()->OnNavigationStartOrRedirect(navigation_data,
                                                  std::move(callback));
   }
 
-  static OptimizationGuideNavigationData* GetNavigationDataFromNavigationHandle(
-      content::NavigationHandle* navigation_handle) {
-    OptimizationGuideWebContentsObserver*
-        optimization_guide_web_contents_observer =
-            OptimizationGuideWebContentsObserver::FromWebContents(
-                navigation_handle->GetWebContents());
-    if (!optimization_guide_web_contents_observer)
-      return nullptr;
-    return optimization_guide_web_contents_observer
-        ->GetOrCreateOptimizationGuideNavigationData(navigation_handle);
-  }
-
   void SetConnectionOffline() {
     network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
         network::mojom::ConnectionType::CONNECTION_NONE);
@@ -462,9 +436,7 @@
         network::mojom::ConnectionType::CONNECTION_4G);
   }
 
-  OptimizationGuideHintsManager* hints_manager() const {
-    return hints_manager_.get();
-  }
+  HintsManager* hints_manager() const { return hints_manager_.get(); }
 
   TestHintsFetcher* batch_update_hints_fetcher() const {
     return static_cast<TestHintsFetcher*>(
@@ -506,21 +478,18 @@
                               serialized_config.size()));
   }
 
-  content::BrowserTaskEnvironment task_environment_{
+  base::test::TaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
   base::test::ScopedFeatureList scoped_feature_list_;
-  TestingProfile testing_profile_;
-  std::unique_ptr<content::TestWebContentsFactory> web_contents_factory_;
   std::unique_ptr<optimization_guide::OptimizationGuideStore> hint_store_;
   std::unique_ptr<FakeTabUrlProvider> tab_url_provider_;
-  std::unique_ptr<OptimizationGuideHintsManager> hints_manager_;
+  std::unique_ptr<HintsManager> hints_manager_;
   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
   scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
   network::TestURLLoaderFactory test_url_loader_factory_;
 };
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       ProcessHintsWithValidCommandLineOverride) {
+TEST_F(HintsManagerTest, ProcessHintsWithValidCommandLineOverride) {
   base::HistogramTester histogram_tester;
 
   optimization_guide::proto::Configuration config;
@@ -583,8 +552,7 @@
       optimization_guide::proto::PERFORMANCE_HINTS));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       ProcessHintsWithInvalidCommandLineOverride) {
+TEST_F(HintsManagerTest, ProcessHintsWithInvalidCommandLineOverride) {
   base::HistogramTester histogram_tester;
 
   base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -599,7 +567,7 @@
       "OptimizationGuide.UpdateComponentHints.Result", 0);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        ProcessHintsWithCommandLineOverrideShouldNotBeOverriddenByNewComponent) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint = config.add_hints();
@@ -640,7 +608,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ParseTwoConfigVersions) {
+TEST_F(HintsManagerTest, ParseTwoConfigVersions) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
   hint1->set_key("somedomain.org");
@@ -672,7 +640,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ParseInvalidConfigVersions) {
+TEST_F(HintsManagerTest, ParseInvalidConfigVersions) {
   // Test the first time parsing the config.
   {
     base::HistogramTester histogram_tester;
@@ -695,7 +663,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ComponentProcessingWhileShutdown) {
+TEST_F(HintsManagerTest, ComponentProcessingWhileShutdown) {
   base::HistogramTester histogram_tester;
   InitializeWithDefaultConfig("10.0.0.0", /*should_wait=*/false);
   hints_manager()->Shutdown();
@@ -709,7 +677,7 @@
           .empty());
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ParseOlderConfigVersions) {
+TEST_F(HintsManagerTest, ParseOlderConfigVersions) {
   // Test the first time parsing the config.
   {
     base::HistogramTester histogram_tester;
@@ -734,7 +702,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ParseDuplicateConfigVersions) {
+TEST_F(HintsManagerTest, ParseDuplicateConfigVersions) {
   const std::string version = "3.0.0.0";
 
   // Test the first time parsing the config.
@@ -759,7 +727,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ComponentInfoDidNotContainConfig) {
+TEST_F(HintsManagerTest, ComponentInfoDidNotContainConfig) {
   base::HistogramTester histogram_tester;
   ProcessInvalidHintsComponentInfo("1.0.0.0");
   histogram_tester.ExpectUniqueSample(
@@ -767,7 +735,7 @@
       optimization_guide::ProcessHintsComponentResult::kFailedReadingFile, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ProcessHintsWithExistingPref) {
+TEST_F(HintsManagerTest, ProcessHintsWithExistingPref) {
   // Write hints processing pref for version 2.0.0.
   pref_service()->SetString(
       optimization_guide::prefs::kPendingHintsProcessingVersion, "2.0.0");
@@ -803,7 +771,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        ProcessHintsWithExistingPrefDoesNotClearOrCountAsMidProcessing) {
   // Write hints processing pref for version 2.0.0.
   pref_service()->SetString(
@@ -829,7 +797,7 @@
           .empty());
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, ProcessHintsWithInvalidPref) {
+TEST_F(HintsManagerTest, ProcessHintsWithInvalidPref) {
   // Create pref file with invalid version.
   pref_service()->SetString(
       optimization_guide::prefs::kPendingHintsProcessingVersion, "bad-2.0.0");
@@ -866,18 +834,14 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       OnNavigationStartOrRedirectWithHintAfterCommit) {
+TEST_F(HintsManagerTest, OnNavigationStartOrRedirectWithHint) {
   base::HistogramTester histogram_tester;
   InitializeWithDefaultConfig("3.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
-  navigation_handle->set_has_committed(true);
+  auto navigation_data = CreateTestNavigationData(url_with_hints(), {});
 
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -885,33 +849,15 @@
                                       true, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, OnNavigationStartOrRedirectWithHint) {
+TEST_F(HintsManagerTest, OnNavigationStartOrRedirectNoHint) {
   base::HistogramTester histogram_tester;
   InitializeWithDefaultConfig("3.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data =
+      CreateTestNavigationData(GURL("https://notinhints.com"), {});
 
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
-                                  run_loop.QuitClosure());
-  run_loop.Run();
-
-  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
-                                      true, 1);
-}
-
-TEST_F(OptimizationGuideHintsManagerTest, OnNavigationStartOrRedirectNoHint) {
-  base::HistogramTester histogram_tester;
-  InitializeWithDefaultConfig("3.0.0.0");
-
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://notinhints.com"));
-
-  base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -919,24 +865,21 @@
                                       false, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, OnNavigationStartOrRedirectNoHost) {
+TEST_F(HintsManagerTest, OnNavigationStartOrRedirectNoHost) {
   base::HistogramTester histogram_tester;
   InitializeWithDefaultConfig("3.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("blargh"));
+  auto navigation_data = CreateTestNavigationData(GURL("blargh"), {});
 
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   histogram_tester.ExpectTotalCount("OptimizationGuide.LoadedHint.Result", 0);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       OptimizationFiltersAreOnlyLoadedIfTypeIsRegistered) {
+TEST_F(HintsManagerTest, OptimizationFiltersAreOnlyLoadedIfTypeIsRegistered) {
   optimization_guide::proto::Configuration config;
   optimization_guide::BloomFilter bloom_filter(
       kDefaultHostBloomFilterNumHashFunctions, kDefaultHostBloomFilterNumBits);
@@ -1075,8 +1018,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       OptimizationFiltersOnlyLoadOncePerType) {
+TEST_F(HintsManagerTest, OptimizationFiltersOnlyLoadOncePerType) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
 
@@ -1116,7 +1058,7 @@
       2);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, InvalidOptimizationFilterNotLoaded) {
+TEST_F(HintsManagerTest, InvalidOptimizationFilterNotLoaded) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
 
@@ -1147,7 +1089,7 @@
       optimization_guide::proto::LITE_PAGE_REDIRECT));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, CanApplyOptimizationUrlWithNoHost) {
+TEST_F(HintsManagerTest, CanApplyOptimizationUrlWithNoHost) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
 
@@ -1172,8 +1114,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationHasFilterForTypeButNotLoadedYet) {
+TEST_F(HintsManagerTest, CanApplyOptimizationHasFilterForTypeButNotLoadedYet) {
   optimization_guide::proto::Configuration config;
   optimization_guide::BloomFilter blocklist_bloom_filter(
       kDefaultHostBloomFilterNumHashFunctions, kDefaultHostBloomFilterNumBits);
@@ -1205,7 +1146,7 @@
   RunUntilIdle();
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationHasLoadedFilterForTypeUrlInAllowlist) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1231,7 +1172,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationHasLoadedFilterForTypeUrlInBlocklist) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1257,7 +1198,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationHasLoadedFilterForTypeUrlNotInAllowlistFilter) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1283,7 +1224,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationHasLoadedFilterForTypeUrlNotInBlocklistFilter) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1309,7 +1250,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationOptimizationTypeAllowlistedAtTopLevel) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1324,24 +1265,23 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationOptimizationTypeHasTuningVersionShouldLogUKM) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1357,11 +1297,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1370,7 +1309,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
@@ -1389,7 +1328,7 @@
 }
 
 TEST_F(
-    OptimizationGuideHintsManagerTest,
+    HintsManagerTest,
     CanApplyOptimizationOptimizationTypeHostHasSentinelTuningVersionShouldLogUKM) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1405,11 +1344,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1418,7 +1356,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kNotAllowedByHint,
             optimization_type_decision);
@@ -1437,7 +1375,7 @@
 }
 
 TEST_F(
-    OptimizationGuideHintsManagerTest,
+    HintsManagerTest,
     CanApplyOptimizationOptimizationTypePatternHasSentinelTuningVersionShouldLogUKM) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1455,11 +1393,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1468,7 +1405,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kNotAllowedByHint,
             optimization_type_decision);
@@ -1487,7 +1424,7 @@
 }
 
 TEST_F(
-    OptimizationGuideHintsManagerTest,
+    HintsManagerTest,
     CanApplyOptimizationURLKeyedOptimizationTypeHasSentinelTuningVersionShouldLogUKM) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1505,11 +1442,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1518,7 +1454,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kNotAllowedByHint,
             optimization_type_decision);
@@ -1536,7 +1472,7 @@
       UINT64_MAX);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationOptimizationTypeHasTuningVersionButNoNavigation) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1552,11 +1488,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1565,7 +1500,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
@@ -1576,7 +1511,7 @@
   EXPECT_EQ(0u, entries.size());
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationOptimizationTypeHasNavigationButNoTuningVersion) {
   optimization_guide::proto::Configuration config;
   optimization_guide::proto::Hint* hint1 = config.add_hints();
@@ -1591,11 +1526,10 @@
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::RESOURCE_LOADING});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
@@ -1604,7 +1538,7 @@
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
@@ -1615,23 +1549,21 @@
   EXPECT_EQ(0u, entries.size());
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationHasPageHintButNoMatchingOptType) {
+TEST_F(HintsManagerTest, CanApplyOptimizationHasPageHintButNoMatchingOptType) {
   InitializeWithDefaultConfig("1.0.0.0");
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::DEFER_ALL_SCRIPT});
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::DEFER_ALL_SCRIPT,
           /*optimization_metadata=*/nullptr);
 
@@ -1639,7 +1571,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationAndPopulatesPerformanceHintsMetadata) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::PERFORMANCE_HINTS});
@@ -1661,18 +1593,17 @@
 
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::PERFORMANCE_HINTS});
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::PERFORMANCE_HINTS, &optimization_metadata);
   // Make sure performance hints metadata is populated.
   EXPECT_TRUE(optimization_metadata.performance_hints_metadata().has_value());
@@ -1680,8 +1611,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationAndPopulatesPublicImageMetadata) {
+TEST_F(HintsManagerTest, CanApplyOptimizationAndPopulatesPublicImageMetadata) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   optimization_guide::proto::Configuration config;
@@ -1698,18 +1628,17 @@
 
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
           &optimization_metadata);
   // Make sure public images metadata is populated.
@@ -1718,7 +1647,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationAndPopulatesLoadingPredictorMetadata) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LOADING_PREDICTOR});
@@ -1737,18 +1666,17 @@
 
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::LOADING_PREDICTOR});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::LOADING_PREDICTOR, &optimization_metadata);
   // Make sure loading predictor metadata is populated.
   EXPECT_TRUE(optimization_metadata.loading_predictor_metadata().has_value());
@@ -1756,8 +1684,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationAndPopulatesAnyMetadata) {
+TEST_F(HintsManagerTest, CanApplyOptimizationAndPopulatesAnyMetadata) {
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LOADING_PREDICTOR});
   optimization_guide::proto::Configuration config;
@@ -1778,18 +1705,17 @@
 
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::LOADING_PREDICTOR});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+          navigation_data->navigation_url(), navigation_data->navigation_id(),
           optimization_guide::proto::LOADING_PREDICTOR, &optimization_metadata);
   // Make sure loading predictor metadata is populated.
   EXPECT_TRUE(
@@ -1800,56 +1726,22 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, IsGoogleURL) {
-  const struct {
-    const char* url;
-    bool expect_is_google_url;
-  } tests[] = {
-      {"https://www.google.com/"
-       "search?q=cats&oq=cq&aqs=foo&ie=UTF-8",
-       true},
-      {"https://www.google.com/", true},
-      {"https://www.google.com/:99", true},
-
-      // Try localized search pages.
-      {"https://www.google.co.in/"
-       "search?q=cats&oq=cq&aqs=foo&ie=UTF-8",
-       true},
-      {"https://www.google.co.in/", true},
-      {"https://www.google.co.in/:99", true},
-
-      // Try Google domain pages that are not web search related.
-      {"https://www.not-google.com/", false},
-      {"https://www.youtube.com/", false},
-      {"https://domain.google.com/", false},
-      {"https://images.google.com/", false},
-  };
-
-  for (const auto& test : tests) {
-    GURL url(test.url);
-    EXPECT_TRUE(url.is_valid());
-    EXPECT_EQ(test.expect_is_google_url, hints_manager()->IsGoogleURL(url));
-  }
-}
-
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationNoMatchingPageHint) {
+TEST_F(HintsManagerTest, CanApplyOptimizationNoMatchingPageHint) {
   InitializeWithDefaultConfig("1.0.0.0");
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://somedomain.org/nomatch"));
+  auto navigation_data =
+      CreateTestNavigationData(GURL("https://somedomain.org/nomatch"), {});
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::NOSCRIPT});
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
-      hints_manager()->CanApplyOptimization(navigation_handle->GetURL(),
+      hints_manager()->CanApplyOptimization(navigation_data->navigation_url(),
                                             /*navigation_id=*/absl::nullopt,
                                             optimization_guide::proto::NOSCRIPT,
                                             /*optimization_metadata=*/nullptr);
@@ -1858,13 +1750,13 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationNoHintForNavigationMetadataClearedAnyway) {
   InitializeWithDefaultConfig("1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://nohint.com"));
+  auto navigation_data = CreateTestNavigationData(
+      GURL("https://nohint.com"),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
 
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::NOSCRIPT});
@@ -1879,7 +1771,7 @@
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::NOSCRIPT, &optimization_metadata);
 
   EXPECT_FALSE(optimization_metadata.performance_hints_metadata().has_value());
@@ -1887,8 +1779,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationHasHintInCacheButNotLoaded) {
+TEST_F(HintsManagerTest, CanApplyOptimizationHasHintInCacheButNotLoaded) {
   InitializeWithDefaultConfig("1.0.0.0");
 
   hints_manager()->RegisterOptimizationTypes(
@@ -1904,11 +1795,9 @@
       optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
-       CanApplyOptimizationFilterTakesPrecedence) {
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://m.host.com/urlinfilterandhints"));
+TEST_F(HintsManagerTest, CanApplyOptimizationFilterTakesPrecedence) {
+  auto navigation_data = CreateTestNavigationData(
+      GURL("https://m.host.com/urlinfilterandhints"), {});
 
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1934,13 +1823,13 @@
   ProcessHints(config, "1.0.0.0");
 
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::LITE_PAGE_REDIRECT,
           /*optimization_metadata=*/nullptr);
 
@@ -1950,11 +1839,11 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationFilterTakesPrecedenceMatchesFilter) {
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://notfiltered.com/whatever"));
+  auto navigation_data = CreateTestNavigationData(
+      GURL("https://notfiltered.com/whatever"),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
 
   hints_manager()->RegisterOptimizationTypes(
       {optimization_guide::proto::LITE_PAGE_REDIRECT});
@@ -1980,13 +1869,13 @@
   ProcessHints(config, "1.0.0.0");
 
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::LITE_PAGE_REDIRECT,
           /*optimization_metadata=*/nullptr);
 
@@ -1995,10 +1884,9 @@
             optimization_type_decision);
 }
 
-class OptimizationGuideHintsManagerFetchingDisabledTest
-    : public OptimizationGuideHintsManagerTest {
+class HintsManagerFetchingDisabledTest : public HintsManagerTest {
  public:
-  OptimizationGuideHintsManagerFetchingDisabledTest() {
+  HintsManagerFetchingDisabledTest() {
     scoped_list_.InitAndDisableFeature(
         optimization_guide::features::kRemoteOptimizationGuideFetching);
   }
@@ -2007,7 +1895,7 @@
   base::test::ScopedFeatureList scoped_list_;
 };
 
-TEST_F(OptimizationGuideHintsManagerFetchingDisabledTest,
+TEST_F(HintsManagerFetchingDisabledTest,
        HintsFetchNotAllowedIfFeatureIsNotEnabled) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2026,7 +1914,7 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-TEST_F(OptimizationGuideHintsManagerTest,
+TEST_F(HintsManagerTest,
        CanApplyOptimizationAsyncReturnsRightAwayIfNotAllowedToFetch) {
   base::HistogramTester histogram_tester;
 
@@ -2034,11 +1922,10 @@
       {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   InitializeWithDefaultConfig("1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   hints_manager()->CanApplyOptimizationAsync(
-      url_without_hints(), navigation_handle->GetNavigationId(),
+      url_without_hints(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -2054,7 +1941,7 @@
 }
 
 TEST_F(
-    OptimizationGuideHintsManagerTest,
+    HintsManagerTest,
     CanApplyOptimizationAsyncReturnsRightAwayIfNotAllowedToFetchAndNotAllowlistedByAvailableHint) {
   base::HistogramTester histogram_tester;
 
@@ -2062,17 +1949,16 @@
       {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   InitializeWithDefaultConfig("1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   // Wait for hint to be loaded.
   base::RunLoop run_loop;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
   run_loop.Run();
 
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_hints(), navigation_handle->GetNavigationId(),
+      url_with_hints(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -2087,7 +1973,7 @@
       optimization_guide::OptimizationTypeDecision::kNotAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, RemoveFetchedEntriesByHintKeys_Host) {
+TEST_F(HintsManagerTest, RemoveFetchedEntriesByHintKeys_Host) {
   int cache_duration_in_secs = 60;
   GURL url("https://host.com/r/cats");
 
@@ -2127,7 +2013,7 @@
   EXPECT_TRUE(hints_manager()->hint_cache()->HasURLKeyedEntryForURL(url));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, RemoveFetchedEntriesByHintKeys_URL) {
+TEST_F(HintsManagerTest, RemoveFetchedEntriesByHintKeys_URL) {
   int cache_duration_in_secs = 60;
   GURL url("https://host.com/r/cats");
 
@@ -2169,7 +2055,7 @@
   EXPECT_FALSE(hints_manager()->hint_cache()->HasURLKeyedEntryForURL(url));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, PurgeFetchedEntries) {
+TEST_F(HintsManagerTest, PurgeFetchedEntries) {
   int cache_duration_in_secs = 60;
   GURL url("https://host.com/r/cats");
 
@@ -2207,7 +2093,7 @@
   EXPECT_FALSE(hints_manager()->hint_cache()->HasURLKeyedEntryForURL(url));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, HintFetcherPrefUpdated_URL) {
+TEST_F(HintsManagerTest, HintFetcherPrefUpdated_URL) {
   base::Time expiry = base::Time::Now() + base::TimeDelta::FromHours(1);
   optimization_guide::HintsFetcher::AddFetchedHostForTesting(
       pref_service(), "host-key.com", expiry);
@@ -2235,7 +2121,7 @@
       pref_service(), "url-key.com"));
 }
 
-TEST_F(OptimizationGuideHintsManagerTest, HintFetcherPrefUpdated_Hosts) {
+TEST_F(HintsManagerTest, HintFetcherPrefUpdated_Hosts) {
   base::Time expiry = base::Time::Now() + base::TimeDelta::FromHours(1);
   optimization_guide::HintsFetcher::AddFetchedHostForTesting(
       pref_service(), "host-key.com", expiry);
@@ -2263,10 +2149,9 @@
       pref_service(), "url-key.com"));
 }
 
-class OptimizationGuideHintsManagerFetchingTest
-    : public OptimizationGuideHintsManagerTest {
+class HintsManagerFetchingTest : public HintsManagerTest {
  public:
-  OptimizationGuideHintsManagerFetchingTest() {
+  HintsManagerFetchingTest() {
     scoped_list_.InitWithFeaturesAndParameters(
         {
             {
@@ -2278,26 +2163,13 @@
              kRemoteOptimizationGuideFetchingAnonymousDataConsent});
   }
 
-  content::WebContents* Navigate(GURL url) {
-    auto navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(url);
-    return navigation_handle->GetWebContents();
-  }
-
-  void FetchHintsUsingWebContentsObserverURLs(
-      content::WebContents* web_contents) {
-    auto* observer =
-        OptimizationGuideWebContentsObserver::FromWebContents(web_contents);
-    observer->FetchHintsUsingManagerForTesting(hints_manager());
-  }
-
  private:
   variations::ScopedVariationsIdsProvider scoped_variations_ids_provider_{
       variations::VariationsIdsProvider::Mode::kUseSignedInState};
   base::test::ScopedFeatureList scoped_list_;
 };
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        HintsFetchNotAllowedIfFeatureIsEnabledButUserNotAllowed) {
   base::CommandLine::ForCurrentProcess()->RemoveSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2315,7 +2187,7 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        NoRegisteredOptimizationTypesAndHintsFetchNotAttempted) {
   std::unique_ptr<FakeTopHostProvider> top_host_provider =
       std::make_unique<FakeTopHostProvider>(
@@ -2337,7 +2209,7 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        OnlyFilterTypesRegisteredHintsFetchNotAttempted) {
   optimization_guide::proto::Configuration config;
   optimization_guide::BloomFilter allowlist_bloom_filter(
@@ -2370,8 +2242,7 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetcherEnabledNoHostsOrUrlsToFetch) {
+TEST_F(HintsManagerFetchingTest, HintsFetcherEnabledNoHostsOrUrlsToFetch) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   std::unique_ptr<FakeTopHostProvider> top_host_provider =
@@ -2400,8 +2271,7 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetcherEnabledNoHostsButHasUrlsToFetch) {
+TEST_F(HintsManagerFetchingTest, HintsFetcherEnabledNoHostsButHasUrlsToFetch) {
   base::HistogramTester histogram_tester;
 
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
@@ -2420,8 +2290,6 @@
   tab_url_provider()->SetUrls(
       {GURL("https://a.com"), GURL("https://b.com"), GURL("chrome://new-tab")});
 
-  g_browser_process->SetApplicationLocale("en-US");
-
   // Force timer to expire after random delay and schedule a hints fetch that
   // succeeds.
   MoveClockForwardBy(base::TimeDelta::FromSeconds(60 * 2));
@@ -2442,7 +2310,7 @@
       "OptimizationGuide.HintsManager.ActiveTabUrlsToFetchFor", 0, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest, HintsFetcherTimerFetch) {
+TEST_F(HintsManagerFetchingTest, HintsFetcherTimerFetch) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   std::unique_ptr<FakeTopHostProvider> top_host_provider =
@@ -2467,154 +2335,7 @@
   EXPECT_EQ(2, batch_update_hints_fetcher()->num_fetches_requested());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetched_AtSRP_DuplicatesRemoved) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
-  hints_manager()->RegisterOptimizationTypes(
-      {optimization_guide::proto::DEFER_ALL_SCRIPT});
-  InitializeWithDefaultConfig("1.0.0.0");
-
-  // Set to online so fetch is activated.
-  SetConnectionOnline();
-
-  std::vector<GURL> sorted_predicted_urls;
-  sorted_predicted_urls.emplace_back("https://foo.com/page1.html");
-  sorted_predicted_urls.emplace_back("https://foo.com/page2.html");
-  sorted_predicted_urls.emplace_back("https://foo.com/page3.html");
-  sorted_predicted_urls.emplace_back("https://bar.com/");
-
-  GURL url("https://www.google.com/");
-  content::WebContents* web_contents = Navigate(url);
-  NavigationPredictorKeyedService::Prediction prediction(
-      web_contents, url,
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-
-  {
-    base::HistogramTester histogram_tester;
-
-    hints_manager()->OnPredictionUpdated(prediction);
-    FetchHintsUsingWebContentsObserverURLs(web_contents);
-
-    // Ensure that we only include 2 hosts in the request. These would be
-    // foo.com and bar.com.
-    histogram_tester.ExpectUniqueSample(
-        "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 2, 1);
-    // Ensure that we include all URLs in the request.
-    histogram_tester.ExpectUniqueSample(
-        "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 4, 1);
-    RunUntilIdle();
-  }
-
-  {
-    base::HistogramTester histogram_tester;
-    hints_manager()->OnPredictionUpdated(prediction);
-    FetchHintsUsingWebContentsObserverURLs(web_contents);
-
-    // Ensure that URLs are not re-fetched.
-    histogram_tester.ExpectTotalCount(
-        "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
-  }
-}
-
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetched_AtSRP_NonHTTPOrHTTPSHostsRemoved) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
-  hints_manager()->RegisterOptimizationTypes(
-      {optimization_guide::proto::DEFER_ALL_SCRIPT});
-  InitializeWithDefaultConfig("1.0.0.0");
-
-  // Set to online so fetch is activated.
-  SetConnectionOnline();
-  base::HistogramTester histogram_tester;
-  std::vector<GURL> sorted_predicted_urls;
-  sorted_predicted_urls.emplace_back("https://foo.com/page1.html");
-  sorted_predicted_urls.emplace_back("file://non-web-bar.com/");
-  sorted_predicted_urls.emplace_back("http://httppage.com/");
-
-  GURL url("https://www.google.com/");
-  content::WebContents* web_contents = Navigate(url);
-  NavigationPredictorKeyedService::Prediction prediction(
-      web_contents, url,
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-
-  hints_manager()->OnPredictionUpdated(prediction);
-  FetchHintsUsingWebContentsObserverURLs(web_contents);
-  // 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);
-}
-
-TEST_F(OptimizationGuideHintsManagerFetchingTest, HintsFetched_AtSRP) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
-  hints_manager()->RegisterOptimizationTypes(
-      {optimization_guide::proto::DEFER_ALL_SCRIPT});
-  InitializeWithDefaultConfig("1.0.0.0");
-
-  // Set to online so fetch is activated.
-  SetConnectionOnline();
-
-  base::HistogramTester histogram_tester;
-  std::vector<GURL> sorted_predicted_urls;
-  sorted_predicted_urls.emplace_back("https://foo.com/");
-  GURL url("https://www.google.com/");
-  content::WebContents* web_contents = Navigate(url);
-  NavigationPredictorKeyedService::Prediction prediction(
-      web_contents, url,
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-
-  hints_manager()->OnPredictionUpdated(prediction);
-  FetchHintsUsingWebContentsObserverURLs(web_contents);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 1);
-}
-
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetched_AtSRP_GoogleLinksIgnored) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
-  hints_manager()->RegisterOptimizationTypes(
-      {optimization_guide::proto::DEFER_ALL_SCRIPT});
-  InitializeWithDefaultConfig("1.0.0.0");
-
-  // Set to online so fetch is activated.
-  SetConnectionOnline();
-
-  base::HistogramTester histogram_tester;
-  std::vector<GURL> sorted_predicted_urls;
-  sorted_predicted_urls.emplace_back("https://foo.com/");
-  sorted_predicted_urls.emplace_back("https://google.com/bar");
-  GURL url("https://www.google.com/");
-  content::WebContents* web_contents = Navigate(url);
-  NavigationPredictorKeyedService::Prediction prediction(
-      web_contents, url,
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-
-  hints_manager()->OnPredictionUpdated(prediction);
-  FetchHintsUsingWebContentsObserverURLs(web_contents);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 1);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 1);
-}
-
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        HintsFetched_RegisteredOptimizationTypes_AllWithOptFilter) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2633,11 +2354,10 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::LITE_PAGE_REDIRECT});
   base::HistogramTester histogram_tester;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   histogram_tester.ExpectTotalCount(
@@ -2648,7 +2368,7 @@
       "OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus", 0);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest, HintsFetched_AtNonSRP) {
+TEST_F(HintsManagerFetchingTest, HintsFetchedAtNavigationTime) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -2657,40 +2377,10 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
   base::HistogramTester histogram_tester;
-  std::vector<GURL> sorted_predicted_urls;
-  sorted_predicted_urls.emplace_back("https://foo.com/");
-  GURL url("https://www.not-google.com/");
-  content::WebContents* web_contents = Navigate(url);
-  NavigationPredictorKeyedService::Prediction prediction(
-      web_contents, url,
-      NavigationPredictorKeyedService::PredictionSource::
-          kAnchorElementsParsedFromWebPage,
-      sorted_predicted_urls);
-
-  hints_manager()->OnPredictionUpdated(prediction);
-  FetchHintsUsingWebContentsObserverURLs(web_contents);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
-  histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", 0);
-}
-
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       HintsFetchedAtNavigationTime) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
-  hints_manager()->RegisterOptimizationTypes(
-      {optimization_guide::proto::DEFER_ALL_SCRIPT});
-  InitializeWithDefaultConfig("1.0.0.0");
-
-  // Set to online so fetch is activated.
-  SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
-  base::HistogramTester histogram_tester;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   histogram_tester.ExpectUniqueSample(
@@ -2704,7 +2394,7 @@
       1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        HintsFetchedAtNavigationTime_FetchNotAttempted) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2714,13 +2404,12 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory({HintsFetcherEndState::kFetchFailed}));
   base::HistogramTester histogram_tester;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   histogram_tester.ExpectTotalCount(
@@ -2734,7 +2423,7 @@
       1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        HintsFetchedAtNavigationTime_HasComponentHintButNotFetched) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2747,11 +2436,10 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
   base::HistogramTester histogram_tester;
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
   histogram_tester.ExpectTotalCount(
       "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
@@ -2762,8 +2450,7 @@
       1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       URLHintsNotFetchedAtNavigationTime) {
+TEST_F(HintsManagerFetchingTest, URLHintsNotFetchedAtNavigationTime) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -2778,19 +2465,16 @@
 
   {
     base::HistogramTester histogram_tester;
-    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-            url_with_hints());
+    auto navigation_data = CreateTestNavigationData(
+        url_with_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
 
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     RunUntilIdle();
 
     histogram_tester.ExpectTotalCount(
         "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
 
     // Make sure navigation data is populated correctly.
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle.get());
     EXPECT_TRUE(navigation_data->hints_fetch_latency().has_value());
     EXPECT_EQ(navigation_data->hints_fetch_attempt_status(),
               optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -2810,10 +2494,9 @@
 
   {
     base::HistogramTester histogram_tester;
-    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-            url_with_hints());
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    auto navigation_data = CreateTestNavigationData(
+        url_with_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     RunUntilIdle();
 
     histogram_tester.ExpectBucketCount(
@@ -2823,8 +2506,6 @@
         1);
 
     // Make sure navigation data is populated correctly.
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle.get());
     EXPECT_FALSE(navigation_data->hints_fetch_latency().has_value());
     EXPECT_EQ(navigation_data->hints_fetch_attempt_status(),
               optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -2836,8 +2517,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       URLWithNoHintsNotRefetchedAtNavigationTime) {
+TEST_F(HintsManagerFetchingTest, URLWithNoHintsNotRefetchedAtNavigationTime) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -2852,18 +2532,15 @@
 
   base::HistogramTester histogram_tester;
   {
-    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-            url_without_hints());
+    auto navigation_data = CreateTestNavigationData(
+        url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
 
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     RunUntilIdle();
     histogram_tester.ExpectTotalCount(
         "OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount", 0);
 
     // Make sure navigation data is populated correctly.
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle.get());
     EXPECT_TRUE(navigation_data->hints_fetch_latency().has_value());
     EXPECT_EQ(navigation_data->hints_fetch_attempt_status(),
               optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -2878,14 +2555,12 @@
   }
 
   {
-    std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-            url_without_hints());
+    auto navigation_data = CreateTestNavigationData(
+        url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
     base::RunLoop run_loop;
-    navigation_handle =
-        CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-            url_without_hints());
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    navigation_data = CreateTestNavigationData(
+        url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     RunUntilIdle();
 
     histogram_tester.ExpectBucketCount(
@@ -2893,8 +2568,6 @@
         optimization_guide::RaceNavigationFetchAttemptStatus::
             kRaceNavigationFetchHost,
         1);
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle.get());
     EXPECT_TRUE(navigation_data->hints_fetch_latency().has_value());
     EXPECT_EQ(navigation_data->hints_fetch_attempt_status(),
               optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -2902,8 +2575,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       CanApplyOptimizationCalledMidFetch) {
+TEST_F(HintsManagerFetchingTest, CanApplyOptimizationCalledMidFetch) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -2912,13 +2584,12 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::DEFER_ALL_SCRIPT,
           /*optimization_metadata=*/nullptr);
 
@@ -2927,7 +2598,7 @@
                 kHintFetchStartedButNotAvailableInTime);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationCalledPostFetchButNoHintsCameBack) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2941,15 +2612,14 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::DEFER_ALL_SCRIPT,
           /*optimization_metadata=*/nullptr);
 
@@ -2957,7 +2627,7 @@
             optimization_guide::OptimizationTypeDecision::kNoHintAvailable);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationCalledPostFetchButFetchFailed) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -2970,15 +2640,14 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::DEFER_ALL_SCRIPT,
           /*optimization_metadata=*/nullptr);
 
@@ -2986,7 +2655,7 @@
             optimization_guide::OptimizationTypeDecision::kNoHintAvailable);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationWithURLKeyedHintApplicableForOptimizationType) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3000,17 +2669,16 @@
 
   // Set to online so fetch is activated.
   SetConnectionOnline();
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(), {optimization_guide::proto::DEFER_ALL_SCRIPT});
   // Make sure URL-keyed hint is fetched and processed.
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
           &optimization_metadata);
 
@@ -3021,7 +2689,7 @@
   EXPECT_TRUE(optimization_metadata.public_image_metadata().has_value());
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationNotAllowedByURLButAllowedByHostKeyedHint) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3037,23 +2705,22 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(), {optimization_guide::proto::NOSCRIPT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::NOSCRIPT, &optimization_metadata);
 
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationNotAllowedByURLOrHostKeyedHint) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3069,23 +2736,22 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(), {optimization_guide::proto::RESOURCE_LOADING});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::RESOURCE_LOADING, &optimization_metadata);
 
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kNotAllowedByHint,
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationNoURLKeyedHintOrHostKeyedHint) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3100,18 +2766,17 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithNoHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
 
   // Attempt to fetch a hint but ensure nothing comes back.
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
           &optimization_metadata);
 
@@ -3119,7 +2784,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationCalledMidFetchForURLKeyedOptimization) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3133,17 +2798,16 @@
 
   // Attempt to fetch a hint but call CanApplyOptimization right away to
   // simulate being mid-fetch.
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithHostHints}));
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
           &optimization_metadata);
 
@@ -3152,7 +2816,7 @@
             optimization_type_decision);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        OnNavigationStartOrRedirectWontInitiateFetchIfAlreadyStartedForTheURL) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3166,15 +2830,14 @@
 
   // Attempt to fetch a hint but initiate the next navigation right away to
   // simulate being mid-fetch.
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   {
     base::HistogramTester histogram_tester;
     hints_manager()->SetHintsFetcherFactoryForTesting(
         BuildTestHintsFetcherFactory(
             {HintsFetcherEndState::kFetchSuccessWithHostHints}));
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     histogram_tester.ExpectUniqueSample(
         "OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus",
         optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -3189,7 +2852,7 @@
     hints_manager()->SetHintsFetcherFactoryForTesting(
         BuildTestHintsFetcherFactory(
             {HintsFetcherEndState::kFetchSuccessWithHostHints}));
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     histogram_tester.ExpectUniqueSample(
         "OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus",
         optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -3199,8 +2862,6 @@
     histogram_tester.ExpectTotalCount(
         "OptimizationGuide.HintsManager.ConcurrentPageNavigationFetches", 0);
 
-    OptimizationGuideNavigationData* navigation_data =
-        GetNavigationDataFromNavigationHandle(navigation_handle.get());
     // Set hints fetch end.so we can figure out if hints fetch start was set.
     navigation_data->set_hints_fetch_end(base::TimeTicks::Now());
     EXPECT_TRUE(navigation_data->hints_fetch_latency().has_value());
@@ -3210,7 +2871,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        PageNavigationHintsFetcherGetsCleanedUpOnceHintsAreStored) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3227,12 +2888,11 @@
 
   // Attempt to fetch a hint but initiate the next navigation right away to
   // simulate being mid-fetch.
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::RESOURCE_LOADING});
   {
     base::HistogramTester histogram_tester;
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     histogram_tester.ExpectUniqueSample(
         "OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus",
         optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -3247,7 +2907,7 @@
 
   {
     base::HistogramTester histogram_tester;
-    CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+    CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
     histogram_tester.ExpectUniqueSample(
         "OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus",
         optimization_guide::RaceNavigationFetchAttemptStatus::
@@ -3258,7 +2918,7 @@
   }
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        PageNavigationHintsFetcherCanFetchMultipleThingsConcurrently) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3273,26 +2933,23 @@
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle_with_hints =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  std::unique_ptr<content::MockNavigationHandle>
-      navigation_handle_without_hints =
-          CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-              GURL("https://doesntmatter.com/"));
-  std::unique_ptr<content::MockNavigationHandle>
-      navigation_handle_without_hints2 =
-          CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-              url_without_hints());
+  auto navigation_data_with_hints = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
+  auto navigation_data_without_hints = CreateTestNavigationData(
+      GURL("https://doesntmatter.com/"),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
+  auto navigation_data_without_hints2 = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
 
   // Attempt to fetch a hint but initiate the next navigations right away to
   // simulate being mid-fetch.
   base::HistogramTester histogram_tester;
-  CallOnNavigationStartOrRedirect(navigation_handle_with_hints.get(),
+  CallOnNavigationStartOrRedirect(navigation_data_with_hints.get(),
                                   base::DoNothing());
-  CallOnNavigationStartOrRedirect(navigation_handle_without_hints.get(),
+  CallOnNavigationStartOrRedirect(navigation_data_without_hints.get(),
                                   base::DoNothing());
-  CallOnNavigationStartOrRedirect(navigation_handle_without_hints2.get(),
+  CallOnNavigationStartOrRedirect(navigation_data_without_hints2.get(),
                                   base::DoNothing());
 
   // The third one is over the max and should evict another one.
@@ -3304,7 +2961,7 @@
       "OptimizationGuide.HintsManager.ConcurrentPageNavigationFetches", 2, 2);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncDecisionComesFromInFlightURLHint) {
   base::HistogramTester histogram_tester;
 
@@ -3320,12 +2977,12 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3341,7 +2998,7 @@
       optimization_guide::OptimizationTypeDecision::kAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncMultipleCallbacksRegisteredForSameTypeAndURL) {
   base::HistogramTester histogram_tester;
 
@@ -3357,11 +3014,11 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3371,7 +3028,7 @@
             EXPECT_TRUE(metadata.public_image_metadata().has_value());
           }));
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3380,7 +3037,7 @@
                       decision);
             EXPECT_TRUE(metadata.public_image_metadata().has_value());
           }));
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   histogram_tester.ExpectUniqueSample(
@@ -3389,7 +3046,7 @@
 }
 
 TEST_F(
-    OptimizationGuideHintsManagerFetchingTest,
+    HintsManagerFetchingTest,
     CanApplyOptimizationAsyncDecisionComesFromInFlightURLHintNotAllowlisted) {
   base::HistogramTester histogram_tester;
 
@@ -3405,12 +3062,11 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(), {optimization_guide::proto::RESOURCE_LOADING});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::RESOURCE_LOADING,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3425,7 +3081,7 @@
       optimization_guide::OptimizationTypeDecision::kNotAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncFetchFailsDoesNotStrandCallbacks) {
   base::HistogramTester histogram_tester;
 
@@ -3441,11 +3097,11 @@
 
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory({HintsFetcherEndState::kFetchFailed}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3453,7 +3109,7 @@
             EXPECT_EQ(optimization_guide::OptimizationGuideDecision::kFalse,
                       decision);
           }));
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   histogram_tester.ExpectUniqueSample(
@@ -3461,7 +3117,7 @@
       optimization_guide::OptimizationTypeDecision::kNotAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncInfoAlreadyInPriorToCall) {
   base::HistogramTester histogram_tester;
 
@@ -3478,14 +3134,14 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3501,7 +3157,7 @@
       optimization_guide::OptimizationTypeDecision::kAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncInfoAlreadyInPriorToCallAndNotAllowlisted) {
   base::HistogramTester histogram_tester;
 
@@ -3518,14 +3174,14 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data =
+      CreateTestNavigationData(url_with_url_keyed_hint(),
+                               {optimization_guide::proto::PERFORMANCE_HINTS});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::PERFORMANCE_HINTS,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3540,7 +3196,7 @@
       optimization_guide::OptimizationTypeDecision::kNotAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncHintComesInAndNotAllowlisted) {
   base::HistogramTester histogram_tester;
 
@@ -3557,12 +3213,11 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithNoHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_without_hints());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_without_hints(), {optimization_guide::proto::PERFORMANCE_HINTS});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   hints_manager()->CanApplyOptimizationAsync(
-      url_without_hints(), navigation_handle->GetNavigationId(),
+      url_without_hints(), navigation_data->navigation_id(),
       optimization_guide::proto::PERFORMANCE_HINTS,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3577,7 +3232,7 @@
       optimization_guide::OptimizationTypeDecision::kNoHintAvailable, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncDoesNotStrandCallbacksAtBeginningOfChain) {
   base::HistogramTester histogram_tester;
 
@@ -3592,11 +3247,10 @@
   SetConnectionOffline();
 
   GURL url_that_redirected("https://urlthatredirected.com");
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle_redirect =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_that_redirected);
+  auto navigation_data_redirect = CreateTestNavigationData(
+      url_that_redirected, {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
   hints_manager()->CanApplyOptimizationAsync(
-      url_that_redirected, navigation_handle_redirect->GetNavigationId(),
+      url_that_redirected, navigation_data_redirect->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3613,7 +3267,7 @@
       optimization_guide::OptimizationTypeDecision::kNoHintAvailable, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncDoesNotStrandCallbacksIfFetchNotPending) {
   base::HistogramTester histogram_tester;
 
@@ -3630,12 +3284,12 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithNoHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data = CreateTestNavigationData(
+      url_with_url_keyed_hint(),
+      {optimization_guide::proto::COMPRESS_PUBLIC_IMAGES});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3651,7 +3305,7 @@
       optimization_guide::OptimizationTypeDecision::kNotAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncWithDecisionFromAllowlistReturnsRightAway) {
   base::HistogramTester histogram_tester;
 
@@ -3668,11 +3322,11 @@
       /*is_allowlist=*/true, &config);
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://notallowed.com/123"));
+  auto navigation_data =
+      CreateTestNavigationData(GURL("https://notallowed.com/123"),
+                               {optimization_guide::proto::LITE_PAGE_REDIRECT});
   hints_manager()->CanApplyOptimizationAsync(
-      navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+      navigation_data->navigation_url(), navigation_data->navigation_id(),
       optimization_guide::proto::LITE_PAGE_REDIRECT,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3689,7 +3343,7 @@
       1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        CanApplyOptimizationAsyncWithDecisionFromBlocklistReturnsRightAway) {
   base::HistogramTester histogram_tester;
 
@@ -3706,11 +3360,11 @@
       /*is_allowlist=*/false, &config);
   ProcessHints(config, "1.0.0.0");
 
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          GURL("https://m.host.com/123"));
+  auto navigation_data =
+      CreateTestNavigationData(GURL("https://m.host.com/123"),
+                               {optimization_guide::proto::LITE_PAGE_REDIRECT});
   hints_manager()->CanApplyOptimizationAsync(
-      navigation_handle->GetURL(), navigation_handle->GetNavigationId(),
+      navigation_data->navigation_url(), navigation_data->navigation_id(),
       optimization_guide::proto::LITE_PAGE_REDIRECT,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3727,7 +3381,7 @@
       1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        OnNavigationFinishDoesNotPrematurelyInvokeRegisteredCallbacks) {
   base::HistogramTester histogram_tester;
 
@@ -3744,12 +3398,12 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithURLHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
-          url_with_url_keyed_hint());
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  auto navigation_data =
+      CreateTestNavigationData(url_with_url_keyed_hint(),
+                               {optimization_guide::proto::LITE_PAGE_REDIRECT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   hints_manager()->CanApplyOptimizationAsync(
-      url_with_url_keyed_hint(), navigation_handle->GetNavigationId(),
+      url_with_url_keyed_hint(), navigation_data->navigation_id(),
       optimization_guide::proto::COMPRESS_PUBLIC_IMAGES,
       base::BindOnce(
           [](optimization_guide::OptimizationGuideDecision decision,
@@ -3766,7 +3420,7 @@
       optimization_guide::OptimizationTypeDecision::kAllowedByHint, 1);
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
+TEST_F(HintsManagerFetchingTest,
        OnNavigationFinishDoesNotCrashWithoutAnyCallbacksRegistered) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3780,8 +3434,7 @@
   RunUntilIdle();
 }
 
-TEST_F(OptimizationGuideHintsManagerFetchingTest,
-       NewOptTypeRegisteredClearsHintCache) {
+TEST_F(HintsManagerFetchingTest, NewOptTypeRegisteredClearsHintCache) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
   hints_manager()->RegisterOptimizationTypes(
@@ -3797,17 +3450,17 @@
   hints_manager()->SetHintsFetcherFactoryForTesting(
       BuildTestHintsFetcherFactory(
           {HintsFetcherEndState::kFetchSuccessWithHostHints}));
-  std::unique_ptr<content::MockNavigationHandle> navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(url);
+  auto navigation_data = CreateTestNavigationData(
+      url, {optimization_guide::proto::DEFER_ALL_SCRIPT});
 
   // Attempt to fetch a hint but ensure nothing comes back.
-  CallOnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing());
+  CallOnNavigationStartOrRedirect(navigation_data.get(), base::DoNothing());
   RunUntilIdle();
 
   optimization_guide::OptimizationMetadata optimization_metadata;
   optimization_guide::OptimizationTypeDecision optimization_type_decision =
       hints_manager()->CanApplyOptimization(
-          navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+          navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
           optimization_guide::proto::DEFER_ALL_SCRIPT, &optimization_metadata);
 
   EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kNotAllowedByHint,
@@ -3828,15 +3481,15 @@
 
   base::HistogramTester histogram_tester;
 
-  navigation_handle =
-      CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(url);
-  CallOnNavigationStartOrRedirect(navigation_handle.get(),
+  navigation_data = CreateTestNavigationData(
+      url, {optimization_guide::proto::DEFER_ALL_SCRIPT});
+  CallOnNavigationStartOrRedirect(navigation_data.get(),
                                   run_loop.QuitClosure());
 
   run_loop.Run();
 
   optimization_type_decision = hints_manager()->CanApplyOptimization(
-      navigation_handle->GetURL(), /*navigation_id=*/absl::nullopt,
+      navigation_data->navigation_url(), /*navigation_id=*/absl::nullopt,
       optimization_guide::proto::DEFER_ALL_SCRIPT, &optimization_metadata);
 
   // The previously fetched hints for the host should not be available after
@@ -3848,10 +3501,9 @@
       1);
 }
 
-class OptimizationGuideHintsManagerFetchingNoBatchUpdateTest
-    : public OptimizationGuideHintsManagerTest {
+class HintsManagerFetchingNoBatchUpdateTest : public HintsManagerTest {
  public:
-  OptimizationGuideHintsManagerFetchingNoBatchUpdateTest() {
+  HintsManagerFetchingNoBatchUpdateTest() {
     scoped_list_.InitAndEnableFeatureWithParameters(
         optimization_guide::features::kRemoteOptimizationGuideFetching,
         {{"batch_update_hints_for_top_hosts", "false"}});
@@ -3861,7 +3513,7 @@
   base::test::ScopedFeatureList scoped_list_;
 };
 
-TEST_F(OptimizationGuideHintsManagerFetchingNoBatchUpdateTest,
+TEST_F(HintsManagerFetchingNoBatchUpdateTest,
        BatchUpdateHintsFetchNotScheduledIfNotAllowed) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       optimization_guide::switches::kDisableCheckingUserPermissionsForTesting);
@@ -3884,38 +3536,4 @@
   EXPECT_FALSE(batch_update_hints_fetcher());
 }
 
-class OptimizationGuideHintsManagerPushEnabledTest
-    : public OptimizationGuideHintsManagerTest {
- public:
-  OptimizationGuideHintsManagerPushEnabledTest() {
-    scoped_feature_list_.InitAndEnableFeature(
-        optimization_guide::features::kPushNotifications);
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-};
-
-TEST_F(OptimizationGuideHintsManagerPushEnabledTest, PushManagerSetOnAndroid) {
-#if defined(OS_ANDROID)
-  EXPECT_TRUE(hints_manager()->push_notification_manager());
-#else
-  EXPECT_FALSE(hints_manager()->push_notification_manager());
-#endif
-}
-
-class OptimizationGuideHintsManagerPushDisabledTest
-    : public OptimizationGuideHintsManagerTest {
- public:
-  OptimizationGuideHintsManagerPushDisabledTest() {
-    scoped_feature_list_.InitAndDisableFeature(
-        optimization_guide::features::kPushNotifications);
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-};
-
-TEST_F(OptimizationGuideHintsManagerPushDisabledTest, PushManagerSetOnAndroid) {
-  EXPECT_FALSE(hints_manager()->push_notification_manager());
-}
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/optimization_metadata.h b/components/optimization_guide/core/optimization_metadata.h
index f2b5dd4..1cb6010 100644
--- a/components/optimization_guide/core/optimization_metadata.h
+++ b/components/optimization_guide/core/optimization_metadata.h
@@ -14,10 +14,6 @@
 
 // Contains metadata that could be attached to an optimization provided by the
 // Optimization Guide.
-//
-// Note: If a new optimization metadata is added,
-// |OptimizationGuideHintsManager::AddHintsForTesting| should be updated
-// to handle it.
 class OptimizationMetadata {
  public:
   OptimizationMetadata();
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index ef6cabd2..797f48d7 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -93,6 +93,7 @@
 <translation id="1096105751829466145">Standardsuchmaschine</translation>
 <translation id="1099282607296956954">Website-Isolierung für jede Website aktivieren</translation>
 <translation id="1105572260329131950">Standardsymbole für sichere Verbindungen verwenden</translation>
+<translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" />-Ausschnittsuche deaktivieren.</translation>
 <translation id="1117535567637097036">Die über diese Richtlinie festgelegten Protokoll-Handler werden bei der Verarbeitung von Android-Intents nicht verwendet.</translation>
 <translation id="1118093128235245168">Websites dürfen den Nutzer um Zugriff auf ein angeschlossenes USB-Gerät bitten</translation>
 <translation id="111910763555783249">Benachrichtigungseinstellungen</translation>
@@ -346,6 +347,7 @@
       Wenn die Richtlinie nicht konfiguriert ist, versucht <ph name="PRODUCT_NAME" /> zu ermitteln, ob sich ein Server im Intranet befindet. Es reagiert nur dann auf IWA-Anfragen. Wenn der Server sich dagegen im Internet befindet, werden dessen IWA-Anfragen von <ph name="PRODUCT_NAME" /> ignoriert.
 
       Trennen Sie mehrere Servernamen durch Kommas. Platzhalter wie <ph name="WILDCARD_VALUE" /> sind zulässig.</translation>
+<translation id="1488724823347505879">Freigabe zwischen Android-Apps und Webanwendungen aktivieren</translation>
 <translation id="1495817006535797003">Wenn die Richtlinie konfiguriert ist, wird für jeden der benannten Ursprünge in einer durch Kommas getrennten Liste ein eigener Prozess ausgeführt. Dabei werden auch durch Subdomains benannte Ursprünge isoliert. Wenn Sie z. B. „https://beispiel.de/“ angeben, wird auch „https://xyz.beispiel.de/“ als Teil der Website „https://beispiel.de/“ isoliert.  Beachten Sie, dass Android bestimmte sensible Websites ab <ph name="PRODUCT_NAME" /> Version 77 standardmäßig isoliert. Diese Richtlinie weitet diesen Modus aus, sodass bestimmte zusätzliche Ursprünge isoliert werden.
 
       Wenn diese Einstellung deaktiviert ist, wird jegliche Form der Website-Isolierung deaktiviert, einschließlich der Isolierung sensibler Websites und Tests von IsolateOriginsAndroid, SitePerProcessAndroid und anderer Website-Isolierungsmodi. Nutzer können aber weiterhin Befehlszeilen-Flags verwenden, um IsolateOrigins manuell zu aktivieren.
@@ -721,6 +723,7 @@
       Bis zur Einführung hat diese Richtlinie keine Auswirkungen. Wird diese Unternehmensrichtlinie nach der Einführung aktiviert, wird die standardmäßige Verweisrichtlinie in Chrome wieder auf den vorherigen Wert zurückgesetzt, also auf no-referrer-when-downgrade.
 
       Diese Richtlinie ist standardmäßig deaktiviert.</translation>
+<translation id="1960416154405676350"><ph name="GOOGLE_LENS_PRODUCT_NAME" />-Ausschnittsuche aktivieren.</translation>
 <translation id="1962273523772270623">Speichern von WebRTC-Ereignisprotokollen aus Google-Diensten zulassen</translation>
 <translation id="1962864958436828230">Mindestgrößenbeschränkung zur Zwischenablagenbeschränkung für die Verhinderung von Datenlecks festlegen</translation>
 <translation id="1964634611280150550">Inkognitomodus deaktiviert</translation>
@@ -1513,6 +1516,7 @@
 <translation id="288448261660192095">Wenn diese Richtlinie aktiviert ist, werden die physischen Ein- und Ausgabegeräte des Hosts für den Remotezugriff bei bestehender Remote-Verbindung deaktiviert.
 
       Ist diese Richtlinie deaktiviert oder nicht konfiguriert, können lokale und Remote-Nutzer mit dem Host interagieren, sofern dieser freigegeben ist.</translation>
+<translation id="2884765974461416016">Freigabe zwischen Android-Apps und Webanwendungen deaktivieren.</translation>
 <translation id="2886215882246310669">Die Richtlinie legt fest, ob <ph name="PRODUCT_OS_NAME" /> erlaubt, dass neue Family Link-Nutzerkonten zu diesem Gerät hinzugefügt werden können.
       Sie ist nur in Verbindung mit <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> nützlich. Sie erlaubt neben den in der Zulassungsliste festgelegten Konten auch Family Link-Konten.
       Diese Richtlinie hat keinen Einfluss auf andere Richtlinien zur Anmeldung. Sie ist insbesondere dann nicht gültig, wenn:
@@ -3709,6 +3713,7 @@
       Wenn Sie diese Richtlinie konfigurieren, kann sie von Nutzern in <ph name="PRODUCT_NAME" /> nicht geändert werden. Wenn sie nicht konfiguriert ist, können Nutzer entscheiden, ob das PDF extern geöffnet werden soll.</translation>
 <translation id="570062449808736508">Wenn für diese Richtlinie kein leerer String angegeben ist, wird WebView URL-Einschränkungen des Contentanbieters des angegebenen Befugnisnamens erkennen.</translation>
 <translation id="5708969689202733975">Zulässige Modi für das schnelle Entsperren konfigurieren</translation>
+<translation id="5714563837055244378">Freigabe zwischen Android-Apps und Webanwendungen aktivieren.</translation>
 <translation id="5715617256528927547">Wenn die Richtlinie konfiguriert ist, wird die Cachelebensdauer von Gruppenrichtlinienobjekten (Group Policy Objects, GPOs) in Stunden festgelegt. Das ist die maximale Dauer, während der GPOs wiederverwendet werden können, bevor sie nochmals heruntergeladen werden. Anstatt sie bei jedem Richtlinienabruf herunterzuladen, kann das System die im Cache gespeicherten GPOs nochmals verwenden, solange die Version dieselbe ist.
 
       Ist die Richtlinie auf „0“ festgelegt, wird die GPO-Speicherung deaktiviert. Dies erhöht die Serverlast, da GPOs bei jedem Richtlinienabruf heruntergeladen werden, auch wenn sie unverändert sind.
@@ -4868,6 +4873,9 @@
 <translation id="710003290625031750">Ausführliche Schemabeschreibung:</translation>
 <translation id="7101550508196914704">App-Verknüpfung nicht in der Lesezeichenleiste anzeigen</translation>
 <translation id="7109384070286741861">CECPQ2 deaktivieren</translation>
+<translation id="7122626777103192518">Wenn die Richtlinie auf „True“ gesetzt ist, können Text und Dateien aus Android-Apps über die integrierte Android-Freigabefunktion mit unterstützten Webanwendungen geteilt werden.
+      Ist die Richtlinie aktiviert, werden Metadaten zu installierten Webanwendungen an Google gesendet, um eine Shim-Android-App zu erstellen und zu installieren.
+      Ist die Richtlinie auf „Disabled“ gesetzt, wird diese Funktion deaktiviert.</translation>
 <translation id="7126716959063786004">Beenden von Prozessen im Task-Manager erlauben</translation>
 <translation id="7126928806195745404">JavaScript-Einstellungen</translation>
 <translation id="7127892035367404455">Rollback auf die Zielversion</translation>
@@ -5415,6 +5423,7 @@
 Diese Richtlinie kann nur über die <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> konfiguriert werden.</translation>
 <translation id="7816326058023670173">Secret, das zwischen Geräten von Kindern und Eltern geteilt wird.</translation>
 <translation id="7818131573217430250">Standardstatus für den Modus mit hohem Kontrast auf der Anmeldeseite festlegen</translation>
+<translation id="7821864705813933283">Zulassen, dass der Menüpunkt „Ausschnittsuche“ von <ph name="GOOGLE_LENS_PRODUCT_NAME" /> im Kontextmenü angezeigt wird, wenn die Funktion unterstützt wird.</translation>
 <translation id="7823902813460802031">Wenn die Richtlinie aktiviert ist, lässt <ph name="PRODUCT_OS_NAME" /> nicht zu, dass das Gerät in den Entwicklermodus wechselt.
 
        Ist die Richtlinie deaktiviert oder nicht konfiguriert, bleibt der Entwicklermodus auf dem Gerät verfügbar.</translation>
@@ -5693,6 +5702,7 @@
 <translation id="8238421250255592181">Boolescher Parameter, der angibt, ob für die Bildschirmtastatur die automatische Vervollständigung aktiviert ist.</translation>
 <translation id="8244171102276095471">RC4-Verschlüsselungssammlungen in TLS aktivieren</translation>
 <translation id="8244525275280476362">Maximale Abrufverzögerung nach der Außerkraftsetzung einer Richtlinie</translation>
+<translation id="8245574649143980200">Wenn diese Richtlinie nicht konfiguriert oder auf „Enabled“ gesetzt wird, können Nutzer den Menüpunkt „Ausschnittsuche“ von <ph name="GOOGLE_LENS_PRODUCT_NAME" /> im Kontextmenü verwenden. Ist die Richtlinie auf „Disabled“ gesetzt, wird Nutzern der Menüpunkt „Ausschnittsuche“ von <ph name="GOOGLE_LENS_PRODUCT_NAME" /> nicht im Kontextmenü angezeigt, wenn die <ph name="GOOGLE_LENS_PRODUCT_NAME" />-Ausschnittsuche nicht unterstützt wird.</translation>
 <translation id="82530263956734297">Aus der Sperrliste auszuschließende Erweiterungs-IDs</translation>
 <translation id="8256688113167012935">Gibt an, welchen Kontonamen <ph name="PRODUCT_OS_NAME" /> für das entsprechende lokale Gerätekonto auf der Anmeldeseite anzeigt.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index c4a8f98..f84c806 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -106,6 +106,11 @@
       Si se inhabilita esta política, no se activará la recogida de datos anónima con clave de URL.
 
       Si se asigna un valor a esta política, los usuarios no podrán cambiarlo. Si no se le asigna ningún valor, se activará inicialmente la recogida de datos anónima con clave de URL, pero los usuarios podrán cambiar esta opción.</translation>
+<translation id="1137096407176363892">Permite las voces de conversión de texto a voz de red mejorada en la función de accesibilidad Enunciar selección. Estas voces envían texto a los servidores de Google para sintetizar un enunciado que suene natural.
+
+          Si a esta política se le asigna el valor false, la función de voces de conversión de texto a voz de red mejorada en Enunciar selección siempre estarán inhabilitadas.
+
+          Si a esta política se le asigna el valor true o no se le asigna ningún valor, el usuario podrá habilitar o inhabilitar la función de voces de conversión de texto a voz de red mejorada en Enunciar selección.</translation>
 <translation id="1138294736309071213">Esta política solo se encuentra activa en el modo de venta.
 
       Permite determinar el tiempo que debe transcurrir antes de que se muestre el protector de pantalla en la página de inicio de sesión para dispositivos que se encuentren en el modo de venta.
@@ -1807,6 +1812,7 @@
 <translation id="3128072319047570212">Configuración del generador de claves</translation>
 <translation id="3142410959002029864">Si se establece esta política, se anula el modo predeterminado de impresión por las dos caras. Si el modo no está disponible, se ignorará esta política.</translation>
 <translation id="3144173889708944482">Si se utiliza <ph name="PRINTERS_BLOCKLIST" /> para la política <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, al establecer la política <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" />, esta especifica qué impresoras no pueden utilizar los usuarios. Los usuarios podrán utilizar todas las impresoras, excepto aquellas con los ID indicados en la política. Los ID deben coincidir con los campos <ph name="ID_FIELD" /> o <ph name="GUID_FIELD" /> del archivo definido en la política <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
+<translation id="3146711617256415776">No permitir las voces de conversión de texto a voz de red mejorada al usar Enunciar selección</translation>
 <translation id="3152425128389603870">Habilitar el escritorio unificado y activarlo de forma predeterminada</translation>
 <translation id="3159375329008977062">El usuario tiene permiso para exportar e importar contenedores Crostini a través de la UI</translation>
 <translation id="3165808775394012744">Estas políticas se incluyen aquí para que sea fácil eliminarlas.</translation>
@@ -3988,6 +3994,7 @@
       Esta política solo es efectiva cuando el equipo está registrado en <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> para <ph name="PRODUCT_NAME" />.
       Para <ph name="PRODUCT_OS_NAME" />, esta política siempre es efectiva.</translation>
 <translation id="6022948604095165524">Acción al iniciar</translation>
+<translation id="602318745029752898">Permitir las voces de conversión de texto a voz de red mejorada en Enunciar selección</translation>
 <translation id="6025267044008029374">Bloquear descargas maliciosas (recomendado)</translation>
 <translation id="6026722971789064331">Controlar el uso de la API File System para escritura</translation>
 <translation id="602728333950205286">URL de función Instant del proveedor de búsquedas predeterminadas</translation>
@@ -5679,6 +5686,7 @@
 <translation id="8118665053362250806">Establecer tamaño de caché de disco de medios</translation>
 <translation id="8124468781472887384">Política de acceso a la configuración de las impresoras de dispositivos.</translation>
 <translation id="8128192446158421884">URL a las que se puede aplicar AutoOpenFileTypes</translation>
+<translation id="8131046602440880289">Permitir las voces de conversión de texto a voz de red mejorada al usar Enunciar selección</translation>
 <translation id="8133152694354699657">Si se le asigna el valor True a esta política o no se le asigna ningún valor, Tocar para buscar estará disponible para los usuarios y podrán decidir cuándo activar o desactivar la función.
 
       Si se le asigna el valor False, Tocar para buscar se desactivará por completo.</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 1120708d..2abe8470 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -106,6 +106,11 @@
       Si vous la désactivez, les données anonymes incluant les URL ne sont pas collectées.
 
       Si vous configurez cette règle, les utilisateurs ne peuvent pas la modifier. Si vous ne la configurez pas, les données anonymes incluant les URL sont collectées, mais les utilisateurs peuvent modifier ce comportement.</translation>
+<translation id="1137096407176363892">Autoriser la synthèse vocale améliorée via le réseau pour la fonctionnalité d'accessibilité Sélectionner pour prononcer. Le texte à lire sera alors envoyé aux serveurs Google pour être synthétisé en discours naturel.
+
+          Si cette règle est définie sur "False", la fonctionnalité de synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer est toujours désactivée.
+
+          Si cette règle est définie sur "True" ou si elle n'est pas définie, la fonctionnalité de synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer peut être activée ou désactivée par l'utilisateur.</translation>
 <translation id="1138294736309071213">Cette règle n'est active qu'en mode Point de vente.
 
        Détermine pour les appareils en mode Point de vente la durée d'inactivité préalable à l'affichage de l'économiseur d'écran sur l'écran de connexion.
@@ -1788,6 +1793,7 @@
 <translation id="3128072319047570212">Paramètres de keygen</translation>
 <translation id="3142410959002029864">Lorsque cette règle est définie, le mode d'impression recto verso par défaut est ignoré. Si le mode est indisponible, cette règle est ignorée.</translation>
 <translation id="3144173889708944482">Si <ph name="PRINTERS_BLOCKLIST" /> est choisi pour <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, le fait de définir <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> indique les imprimantes indisponibles pour les utilisateurs. Toutes les imprimantes sont proposées aux utilisateurs, sauf celles dont les ID sont répertoriés dans cette règle. Ces ID doivent correspondre à ceux indiqués dans les champs <ph name="ID_FIELD" /> ou <ph name="GUID_FIELD" /> du fichier spécifié dans la règle <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
+<translation id="3146711617256415776">Ne pas autoriser la synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer</translation>
 <translation id="3152425128389603870">Rendre le mode bureau unifié disponible et l'activer par défaut</translation>
 <translation id="3159375329008977062">L'utilisateur est autorisé à exporter/importer des conteneurs Crostini via l'UI</translation>
 <translation id="3165808775394012744">Ces règles sont incluses ici pour faciliter leur suppression.</translation>
@@ -3959,6 +3965,7 @@
       Cette règle n'est appliquée que si l'ordinateur est enregistré avec la règle <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> pour <ph name="PRODUCT_NAME" />.
       Elle est toujours appliquée pour <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="6022948604095165524">Action au démarrage</translation>
+<translation id="602318745029752898">Autoriser la synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer</translation>
 <translation id="6025267044008029374">Bloquer les téléchargements malveillants (recommandé)</translation>
 <translation id="6026722971789064331">Contrôler l'utilisation de l'API File System pour l'accès en écriture</translation>
 <translation id="602728333950205286">URL de recherche instantanée du moteur de recherche par défaut</translation>
@@ -5648,6 +5655,7 @@
 <translation id="8118665053362250806">Définir la taille du cache disque de support</translation>
 <translation id="8124468781472887384">Règle d'accès à la configuration des imprimantes d'appareils.</translation>
 <translation id="8128192446158421884">URL pour lesquelles la règle AutoOpenFileTypes peut s'appliquer</translation>
+<translation id="8131046602440880289">Autoriser la synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer</translation>
 <translation id="8133152694354699657">Si cette règle est définie sur "True" ou qu'elle n'est pas configurée, la fonctionnalité "Appuyer pour rechercher" est proposée aux utilisateurs, qui peuvent ensuite choisir de l'activer ou non.
 
       Si cette règle est définie sur "False", cette fonctionnalité est entièrement désactivée.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 4ad5d6a..2dde7abd 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -107,6 +107,11 @@
       Se viene impostato su Disattivato, non viene attivata alcuna raccolta di dati anonimizzati con chiave URL.
 
       Se il criterio viene configurato, gli utenti non possono modificarlo. In caso contrario, la raccolta di dati anonimizzati con chiave URL viene attivata, ma gli utenti possono disattivarla.</translation>
+<translation id="1137096407176363892">Consenti le voci di sintesi vocale di rete migliorate durante l'utilizzo della funzione di accessibilità in Seleziona per ascoltare. Queste voci inviano il testo ai server di Google per sintetizzare un discorso dal tono naturale.
+
+          Se questo criterio è impostato su false, la funzionalità di sintesi vocale di rete migliorata in Seleziona per ascoltare sarà sempre disattivata.
+
+          Se il criterio viene impostato su true o se non viene configurato, la funzionalità di sintesi vocale di rete migliorata in Seleziona per ascoltare può essere attivata o disattivata dall'utente.</translation>
 <translation id="1138294736309071213">Questa norma è attiva soltanto in modalità retail.
 
       Consente di stabilire il periodo di tempo che deve trascorrere prima della visualizzazione del salvaschermo nella schermata di accesso dei dispositivi in modalità retail.
@@ -1780,6 +1785,7 @@
 <translation id="3128072319047570212">Impostazioni keygen</translation>
 <translation id="3142410959002029864">La configurazione di questo criterio consente di sostituire la modalità di stampa fronte/retro predefinita. Se la modalità non è disponibile, questo criterio viene ignorato.</translation>
 <translation id="3144173889708944482">Se per il criterio <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> viene scelta l'opzione <ph name="PRINTERS_BLOCKLIST" />, la configurazione del criterio <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> consente di specificare le stampanti che gli utenti non possono usare. Gli utenti avranno a disposizione tutte le stampanti, tranne quelle i cui ID sono elencati in questo criterio. Gli ID devono corrispondere ai campi <ph name="ID_FIELD" /> o <ph name="GUID_FIELD" /> del file specificato nel criterio <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
+<translation id="3146711617256415776">Non consentire le voci di sintesi vocale di rete migliorate durante l'utilizzo di Seleziona per ascoltare</translation>
 <translation id="3152425128389603870">Rendi disponibile la modalità Desktop unificato e attivala per impostazione predefinita</translation>
 <translation id="3159375329008977062">L'utente è abilitato a importare/esportare contenitori Crostini tramite l'interfaccia</translation>
 <translation id="3165808775394012744">Queste norme sono incluse qui in modo che sia più facile rimuoverle.</translation>
@@ -3944,6 +3950,7 @@
       Questo criterio viene applicato soltanto se la macchina viene registrata con il criterio <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> per <ph name="PRODUCT_NAME" />.
       Questo criterio viene sempre applicato per <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="6022948604095165524">Azione all'avvio</translation>
+<translation id="602318745029752898">Consenti le voci di sintesi vocale di rete migliorate in di Seleziona per ascoltare</translation>
 <translation id="6025267044008029374">Blocca download dannosi (opzione consigliata)</translation>
 <translation id="6026722971789064331">Controlla l'utilizzo dell'API file system per la scrittura</translation>
 <translation id="602728333950205286">URL di ricerca istantanea del provider di ricerca predefinito</translation>
@@ -5614,6 +5621,7 @@
 <translation id="8118665053362250806">Imposta le dimensioni della cache su disco di supporto</translation>
 <translation id="8124468781472887384">Norma di accesso alla configurazione delle stampanti per i dispositivi.</translation>
 <translation id="8128192446158421884">URL su cui è applicabile AutoOpenFileTypes</translation>
+<translation id="8131046602440880289">Consenti le voci di sintesi vocale di rete migliorate durante l'utilizzo di Seleziona per ascoltare</translation>
 <translation id="8133152694354699657">Se il criterio viene impostato su True o non viene impostato, la funzionalità Tocca per cercare sarà a disposizione degli utenti, che potranno scegliere se attivarla o disattivarla.
 
       Se il criterio viene impostato su False, la funzionalità Tocca per cercare verrà disattivata completamente.</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index c85e600..952ef41 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -106,6 +106,11 @@
       Se a política for definida como "Desativada", não haverá coleta de dados anônimos inseridos no URL.
 
       Se você definir a política, os usuários não poderão mudá-la. Se não for definida, a coleta de dados anônimos inseridos no URL será feita, mas os usuários poderão mudar isso.</translation>
+<translation id="1137096407176363892">Permitir as vozes aprimoradas da conversão de texto em voz da rede no recurso de acessibilidade Selecionar para ouvir. Essas vozes enviam textos para os servidores do Google para sintetizar falas com som natural.
+
+          Se esta política for definida como falsa, o recurso de vozes aprimoradas da conversão de texto em voz da rede no Selecionar para ouvir ficará sempre desativado.
+
+          Se a política for definida como verdadeira ou deixada sem definição, o recurso poderá ser ativado ou desativado pelo usuário.</translation>
 <translation id="1138294736309071213">Esta política é ativa somente no modo de varejo. Determina o tempo antes do protetor de tela ser mostrado na tela de login para os dispositivos no modo de varejo. O valor da política deve ser especificado em milésimos de segundos.</translation>
 <translation id="1144540226829648811">Especifica o canal de liberação ao qual este dispositivo precisa ser vinculado.
 
@@ -1799,6 +1804,7 @@
 <translation id="3128072319047570212">Configurações de keygen</translation>
 <translation id="3142410959002029864">A definição da política substitui o modo duplex de impressão padrão. Se o modo não estiver disponível, a política será ignorada.</translation>
 <translation id="3144173889708944482">Se <ph name="PRINTERS_BLOCKLIST" /> for escolhida para <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, a definição de <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> especificará quais impressoras os usuários não podem usar. Todas as impressoras estão disponíveis para os usuários, com exceção dos IDs listados nesta política. Os IDs precisam corresponder aos campos <ph name="ID_FIELD" /> ou <ph name="GUID_FIELD" /> no arquivo especificado na <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
+<translation id="3146711617256415776">Proibir as vozes aprimoradas da conversão de texto em voz da rede ao usar o Selecionar para ouvir</translation>
 <translation id="3152425128389603870">Disponibilizar e ativar por padrão a área de trabalho unificada</translation>
 <translation id="3159375329008977062">O usuário tem permissão para exportar/importar contêineres do Crostini por meio da IU</translation>
 <translation id="3165808775394012744">Essas políticas estão incluídas aqui para facilitar a remoção delas.</translation>
@@ -3966,6 +3972,7 @@
       Esta política só é eficaz quando a máquina está registrada na <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> do <ph name="PRODUCT_NAME" />.
       Para o <ph name="PRODUCT_OS_NAME" />, ela sempre é eficaz.</translation>
 <translation id="6022948604095165524">Ação na inicialização</translation>
+<translation id="602318745029752898">Permitir as vozes aprimoradas da conversão de texto em voz da rede no Selecionar para ouvir</translation>
 <translation id="6025267044008029374">Bloquear downloads maliciosos (recomendado)</translation>
 <translation id="6026722971789064331">Controlar o uso da API File System para gravação</translation>
 <translation id="602728333950205286">URL instantâneo do provedor de pesquisa padrão</translation>
@@ -5645,6 +5652,7 @@
 <translation id="8118665053362250806">Definir tamanho do cache de disco da mídia</translation>
 <translation id="8124468781472887384">Política de acesso à configuração de impressoras do dispositivo.</translation>
 <translation id="8128192446158421884">URLs em que é possível aplicar AutoOpenFileTypes</translation>
+<translation id="8131046602440880289">Permitir as vozes aprimoradas da conversão de texto em voz da rede ao usar o Selecionar para ouvir</translation>
 <translation id="8133152694354699657">Se a política for definida como verdadeira ou não for definida, a opção "Pesquisa por toque" ficará disponível para o usuário, e ele poderá ativar ou desativar esse recurso.
 
       Se ela for definida como falsa, o recurso será totalmente desativado.</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index b899759e..bb4a68e 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -106,6 +106,11 @@
       Politika, Devre Dışı değerine ayarlanırsa URL içeren veya URL'lerle ilişkili anonim veriler toplanmaz.
 
       Bu politikayı ayarlarsanız kullanıcılar değiştiremez. Politika ayarlanmazsa URL içeren veya URL'lerle ilişkili anonim veri toplama başta etkin olur, ancak kullanıcılar bunu değiştirebilir.</translation>
+<translation id="1137096407176363892">Seç ve Dinle erişilebilirlik özelliğinde gelişmiş ağ metin okuma seslerine izin ver. Bu sesler, kulağa doğal gelen konuşmaları sentezlemek için Google sunucularına metin gönderir.
+
+          Bu politika yanlış değerine ayarlanırsa Seç ve Dinle içerisindeki gelişmiş ağ metin okuma sesleri özelliği her zaman devre dışı kalır.
+
+          Bu politika doğru değerine ayarlanır veya ayarlanmadan bırakılırsa Seç ve Dinle içerisindeki gelişmiş ağ metin okuma sesleri özelliği kullanıcı tarafından etkinleştirilebilir veya devre dışı bırakılabilir.</translation>
 <translation id="1138294736309071213">Bu politika sadece perakende modunda etkindir.
 
      Perakende modunda oturum açma ekranında ekran koruyucunun devreye girmesi için geçecek süreyi belirler.
@@ -1790,6 +1795,7 @@
 <translation id="3128072319047570212">Anahtar oluşturucu ayarları</translation>
 <translation id="3142410959002029864">Politika ayarlanırsa varsayılan dupleks yazdırma modu geçersiz kılınır. Mod kullanılamıyorsa bu politika yok sayılır.</translation>
 <translation id="3144173889708944482"><ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> için <ph name="PRINTERS_BLOCKLIST" /> seçiliyken <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> politikası ayarlanırsa kullanıcıların hangi yazıcıları kullanamayacağı belirlenir. Bu politikada listelenen kimlikler dışında kalan tüm yazıcılar kullanıcılara sağlanır. Kimliklerin, <ph name="DEVICE_PRINTERS_POLICY_NAME" /> politikasında belirtilen dosyadaki <ph name="ID_FIELD" /> veya <ph name="GUID_FIELD" /> alanlarına karşılık gelmesi gerekir.</translation>
+<translation id="3146711617256415776">Seç ve Dinle özelliğini kullanırken gelişmiş ağ metin okuma seslerine izin verme</translation>
 <translation id="3152425128389603870">Birleşik Masaüstü'nü kullanılabilir hale getir ve varsayılan olarak aç.</translation>
 <translation id="3159375329008977062">Kullanıcının, kullanıcı arayüzü üzerinden Crostini kapsayıcıları dışa/içe aktarmasına izin verilir</translation>
 <translation id="3165808775394012744">Bu politikalar kolay kaldırılabilmeleri için buraya eklenmiştir.</translation>
@@ -3940,6 +3946,7 @@
       Bu politika yalnızca <ph name="PRODUCT_NAME" /> için makinenin <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> kaydı yapıldığında geçerli olur.
       <ph name="PRODUCT_OS_NAME" /> için bu politika her zaman geçerlidir.</translation>
 <translation id="6022948604095165524">Başlangıçtaki işlem</translation>
+<translation id="602318745029752898">Seç ve Dinle özelliğinde gelişmiş ağ metin okuma seslerine izin ver</translation>
 <translation id="6025267044008029374">Kötü amaçlı indirmeleri engelle (önerilir)</translation>
 <translation id="6026722971789064331">Yazma için File System API'nin kullanımını kontrol et</translation>
 <translation id="602728333950205286">Varsayılan arama sağlayıcı anında arama URL'si</translation>
@@ -5614,6 +5621,7 @@
 <translation id="8118665053362250806">Medya diski önbellek boyutunu ayarla</translation>
 <translation id="8124468781472887384">Cihaz yazıcı yapılandırması erişim politikası.</translation>
 <translation id="8128192446158421884">AutoOpenFileTypes öğesinin uygulanabileceği URL'ler</translation>
+<translation id="8131046602440880289">Seç ve Dinle özelliğini kullanırken gelişmiş ağ metin okuma seslerine izin ver</translation>
 <translation id="8133152694354699657">Politikayı Doğru (True) değerine ayarlar veya ayarlamadan bırakırsanız kullanıcı Dokun ve Ara özelliğini kullanabilir ve özelliği açıp kapatabilir.
 
       Politikayı Yanlış (False) değerine ayarlarsanız Dokun ve Ara özelliği tümüyle kapanır.</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 20fd020..35c69370 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -106,6 +106,11 @@
       Якщо вимкнути це правило, такі дані не збиратимуться.
 
       Якщо це правило налаштовано, користувачі не зможуть змінювати його. В іншому разі збір анонімних даних за допомогою URL-адрес буде ввімкнено, але користувачі зможуть змінити це налаштування.</translation>
+<translation id="1137096407176363892">Дозволити покращені голоси для синтезу мовлення через мережу під час використання спеціальної можливості "Читання з екрана". Текст надсилається на сервери Google, щоб синтезувати мовлення, схоже на природне.
+
+          Якщо для цього правила вибрати значення false, покращені голоси для синтезу мовлення через мережу під час використання функції "Читання з екрана" буде завжди вимкнено.
+
+          Якщо для правила вибрати значення true або не налаштувати його, користувач зможе вмикати або вимикати цей параметр.</translation>
 <translation id="1138294736309071213">Це правило активне лише в режимі роздрібного продажу.
 
       Визначає період часу, після якого на екрані входу пристрою в режимі роздрібного продажу з’явиться заставка.
@@ -1806,6 +1811,7 @@
 <translation id="3128072319047570212">Налаштування генератора ключів</translation>
 <translation id="3142410959002029864">Якщо ввімкнути це правило, воно замінить стандартні параметри двостороннього друку. Якщо такий режим недоступний, це правило ігнорується.</translation>
 <translation id="3144173889708944482">Якщо для правила <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> вибрано параметр <ph name="PRINTERS_BLOCKLIST" />, тоді налаштування <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> визначає, які принтери не можна використовувати. Користувачам недоступні лише принтери з переліченими в правилі ідентифікаторами. Ідентифікатори мають відповідати полю <ph name="ID_FIELD" /> або <ph name="GUID_FIELD" /> у файлі, указаному в правилі <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
+<translation id="3146711617256415776">Заборонити покращені голоси для синтезу мовлення через мережу під час використання функції "Читання з екрана"</translation>
 <translation id="3152425128389603870">За умовчанням робити доступним і вмикати уніфікований режим робочого стола</translation>
 <translation id="3159375329008977062">Користувач може експортувати або імпортувати контейнери Crostini через інтерфейс</translation>
 <translation id="3165808775394012744">Ці правила зазначені тут, щоб їх було легко видалити.</translation>
@@ -3985,6 +3991,7 @@
       Це правило працює, лише коли комп'ютер зареєстровано відповідно до правила <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> для <ph name="PRODUCT_NAME" />.
       Для <ph name="PRODUCT_OS_NAME" /> це правило діє завжди.</translation>
 <translation id="6022948604095165524">Дія під час запуску</translation>
+<translation id="602318745029752898">Дозволити покращені голоси для синтезу мовлення через мережу під час використання функції "Читання з екрана"</translation>
 <translation id="6025267044008029374">Блокувати шкідливі завантаження (рекомендовано)</translation>
 <translation id="6026722971789064331">Контролювати використання File System API для редагування</translation>
 <translation id="602728333950205286">URL-адреса для миттєвого пошуку пошукової служби за умовчанням</translation>
@@ -5668,6 +5675,7 @@
 <translation id="8118665053362250806">Налаштування обсягу кешу мультимедійного диска</translation>
 <translation id="8124468781472887384">Правила доступу до налаштувань принтерів пристроїв.</translation>
 <translation id="8128192446158421884">URL-адреси, де може застосовуватися правило AutoOpenFileTypes</translation>
+<translation id="8131046602440880289">Дозволити покращені голоси для синтезу мовлення через мережу під час використання функції "Читання з екрана"</translation>
 <translation id="8133152694354699657">Якщо для цього правила вибрано значення True або його не налаштовано, користувачі зможуть користуватися функцією "Пошук дотиком", а також вмикати й вимикати її.
 
       Якщо для цього правила вибрано значення False, функцію "Пошук дотиком" буде вимкнено.</translation>
diff --git a/components/services/app_service/app_service_impl.cc b/components/services/app_service/app_service_impl.cc
index a4572e8..42d7d3e7 100644
--- a/components/services/app_service/app_service_impl.cc
+++ b/components/services/app_service/app_service_impl.cc
@@ -201,7 +201,6 @@
 }
 void AppServiceImpl::LaunchAppWithFiles(apps::mojom::AppType app_type,
                                         const std::string& app_id,
-                                        apps::mojom::LaunchContainer container,
                                         int32_t event_flags,
                                         apps::mojom::LaunchSource launch_source,
                                         apps::mojom::FilePathsPtr file_paths) {
@@ -210,8 +209,8 @@
   if (iter == publishers_.end()) {
     return;
   }
-  iter->second->LaunchAppWithFiles(app_id, container, event_flags,
-                                   launch_source, std::move(file_paths));
+  iter->second->LaunchAppWithFiles(app_id, event_flags, launch_source,
+                                   std::move(file_paths));
 }
 
 void AppServiceImpl::LaunchAppWithIntent(
diff --git a/components/services/app_service/app_service_impl.h b/components/services/app_service/app_service_impl.h
index 85c8d38..6b0e55b0 100644
--- a/components/services/app_service/app_service_impl.h
+++ b/components/services/app_service/app_service_impl.h
@@ -60,7 +60,6 @@
               apps::mojom::WindowInfoPtr window_info) override;
   void LaunchAppWithFiles(apps::mojom::AppType app_type,
                           const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths) override;
diff --git a/components/services/app_service/public/cpp/app_registry_cache.h b/components/services/app_service/public/cpp/app_registry_cache.h
index 56dc214..33dca68 100644
--- a/components/services/app_service/public/cpp/app_registry_cache.h
+++ b/components/services/app_service/public/cpp/app_registry_cache.h
@@ -148,7 +148,7 @@
   // false (and not call f). The AppUpdate argument to f has the same semantics
   // as for ForEachApp, above.
   //
-  // f must be synchronous, and if it asynchronously calls ForEachApp again,
+  // f must be synchronous, and if it asynchronously calls ForOneApp again,
   // it's not guaranteed to see a consistent state.
   template <typename FunctionType>
   bool ForOneApp(const std::string& app_id, FunctionType f) {
diff --git a/components/services/app_service/public/cpp/publisher_base.cc b/components/services/app_service/public/cpp/publisher_base.cc
index 134b82a7..df4f7e9e 100644
--- a/components/services/app_service/public/cpp/publisher_base.cc
+++ b/components/services/app_service/public/cpp/publisher_base.cc
@@ -98,7 +98,6 @@
 }
 
 void PublisherBase::LaunchAppWithFiles(const std::string& app_id,
-                                       apps::mojom::LaunchContainer container,
                                        int32_t event_flags,
                                        apps::mojom::LaunchSource launch_source,
                                        apps::mojom::FilePathsPtr file_paths) {
diff --git a/components/services/app_service/public/cpp/publisher_base.h b/components/services/app_service/public/cpp/publisher_base.h
index 472dbdee..9b713351 100644
--- a/components/services/app_service/public/cpp/publisher_base.h
+++ b/components/services/app_service/public/cpp/publisher_base.h
@@ -60,7 +60,6 @@
  private:
   // apps::mojom::Publisher overrides.
   void LaunchAppWithFiles(const std::string& app_id,
-                          apps::mojom::LaunchContainer container,
                           int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths) override;
diff --git a/components/services/app_service/public/mojom/app_service.mojom b/components/services/app_service/public/mojom/app_service.mojom
index baa00421..b59b906d 100644
--- a/components/services/app_service/public/mojom/app_service.mojom
+++ b/components/services/app_service/public/mojom/app_service.mojom
@@ -43,7 +43,6 @@
   LaunchAppWithFiles(
       AppType app_type,
       string app_id,
-      LaunchContainer container,
       int32 event_flags,
       LaunchSource launch_source,
       FilePaths file_paths);
@@ -166,7 +165,6 @@
   // Launches an app with |app_id| and |file_path|
   LaunchAppWithFiles(
       string app_id,
-      LaunchContainer container,
       int32 event_flags,
       LaunchSource launch_source,
       FilePaths file_paths);
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index b6f9266..4830cc310 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Jou horlosie moet reg gestel wees om 'n veilige verbinding te maak. Die rede hiervoor is omdat sertifikate wat webwerwe gebruik om hulself te identifiseer, net vir sekere tydperke beskikbaar is. Chrome kan nie hierdie sertifikate verifieer nie, omdat jou toestel se horlosie nie reg gestel is nie.</translation>
 <translation id="2597378329261239068">Hierdie dokument word deur 'n wagwoord beskerm. Voer asseblief 'n wagwoord in.</translation>
 <translation id="2609632851001447353">Variasies</translation>
+<translation id="2610561535971892504">Klik om te kopieer</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">Jou horlosie is voor</translation>
 <translation id="262745152991669301">Kan vra om aan USB-toestelle te koppel</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index a257301..bb54027 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">በአቅራቢያ ያሉ የብሉቱዝ መሣሪያዎችን ለማግኘት መጠየቅ ይችላል</translation>
 <translation id="1426410128494586442">አዎ</translation>
 <translation id="1428146450423315676">ቁልል 7</translation>
+<translation id="1428729058023778569">ይህ ጣቢያ ኤችቲቲፒኤስ ስለማይደግፍ ይህን ማስጠንቀቂያ እያዩ ነው። <ph name="BEGIN_LEARN_MORE_LINK" />የበለጠ ለመረዳት<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">አትም</translation>
 <translation id="1436185428532214179">በመሣሪያዎ ላይ ያሉ ፋይሎችን እና አቃፊዎችን ለማርትዕ መጠየቅ ይችላል</translation>
 <translation id="1442386063175183758">ቀኝ በር እጠፍ</translation>
@@ -644,6 +645,7 @@
 <translation id="3282497668470633863">በካርድ ላይ ስም ያክሉ</translation>
 <translation id="3286372614333682499">የምስል ፍሬ</translation>
 <translation id="3287510313208355388">መስመር ላይ ሲሆኑ ያውርዱ</translation>
+<translation id="3288238092761586174"><ph name="URL" /> ክፍያዎን ለማረጋገጥ ተጨማሪ እርምጃዎችን መውሰድ ሊፈልግ ይችላል</translation>
 <translation id="3293642807462928945">ስለ<ph name="POLICY_NAME" /> መመሪያው ተጨማሪ ይወቁ</translation>
 <translation id="3295444047715739395">በChrome ቅንብሮች ውስጥ የእርስዎን የይለፍ ቃላት ይመልከቱ እና ያስተዳድሩ</translation>
 <translation id="3303855915957856445">ምንም የፍለጋ ውጤቶች አልተገኙም</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index e4423285..89d3599 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">‏لإنشاء اتصال آمن، فإنك بحاجة إلى ضبط ساعتك بشكل صحيح. وذلك لأن الشهادات التي تستخدمها المواقع الإلكترونية لتعريف نفسها تكون صالحة فقط لفترات محددة من الوقت. فإذا كانت ساعة جهازك غير صحيحة، فلن يتمكن Chrome من التحقق من هذه الشهادات.</translation>
 <translation id="2597378329261239068">هذا المستند محمي بكلمة المرور.  يُرجى إدخال كلمة مرور.</translation>
 <translation id="2609632851001447353">الاختلافات</translation>
+<translation id="2610561535971892504">النقر لنسخ النص</translation>
 <translation id="2618023639789766142">‏C10 (مغلف)</translation>
 <translation id="2625385379895617796">توقيت ساعتك متقدم عن الوقت الحالي</translation>
 <translation id="262745152991669301">‏السماح للموقع الإلكتروني بطلب الاتصال بأجهزة USB</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 82ca9e2..3b5ac0c5 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -474,7 +474,7 @@
 <translation id="2596415276201385844">Za uspostavu sigurne veze sat mora biti točno postavljen. Razlog je tome što certifikati pomoću kojih se web-lokacije međusobno identificiraju vrijede samo određeno vrijeme. Budući da vaš sat nije točan, Chrome ne može potvrditi te certifikate.</translation>
 <translation id="2597378329261239068">Ovaj dokument je zaštićen lozinkom.  Unesite lozinku.</translation>
 <translation id="2609632851001447353">Varijacije</translation>
-<translation id="2610561535971892504">Klik za kopiranje</translation>
+<translation id="2610561535971892504">Kopiranje klikom</translation>
 <translation id="2618023639789766142">C10 (koverta)</translation>
 <translation id="2625385379895617796">Sat ide unaprijed</translation>
 <translation id="262745152991669301">Može tražiti da se poveže na USB uređaje</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index b20e2d65..b16e9944 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -470,6 +470,7 @@
 <translation id="2596415276201385844">Aby bylo možné navázat zabezpečené spojení, hodiny musejí být nastaveny správně. Důvodem je, že certifikáty, pomocí kterých se weby identifikují, platí pouze pro pevně daná období. Jelikož hodiny v zařízení nejsou nastaveny správně, prohlížeč Chrome tyto certifikáty nemůže ověřit.</translation>
 <translation id="2597378329261239068">Tento dokument je chráněn heslem. Zadejte prosím heslo.</translation>
 <translation id="2609632851001447353">Varianty</translation>
+<translation id="2610561535971892504">Kliknutím zkopírujte</translation>
 <translation id="2618023639789766142">C10 (obálka)</translation>
 <translation id="2625385379895617796">Vaše hodiny jdou napřed</translation>
 <translation id="262745152991669301">Může žádat o připojení k zařízením USB</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 63db94c..ef20ac1 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">For at kunne oprette en sikker forbindelse skal dit ur skal være indstillet korrekt. Det er vigtigt, da de certifikater, som websites bruger til at identificere sig selv, kun er gyldige i bestemte tidsperioder. Da uret på din enhed går forkert, kan Chrome ikke bekræfte disse certifikater.</translation>
 <translation id="2597378329261239068">Dette dokument er adgangskodebeskyttet. Angiv en adgangskode.</translation>
 <translation id="2609632851001447353">Varianter</translation>
+<translation id="2610561535971892504">Klik for at kopiere</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">Dit ur er foran</translation>
 <translation id="262745152991669301">Websitet kan anmode om tilladelse til at oprette forbindelse til USB-enheder</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index a391df2..834dcf9 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Darf nachfragen, wenn sie nach Bluetooth-Geräten in der Nähe suchen möchte</translation>
 <translation id="1426410128494586442">Ja</translation>
 <translation id="1428146450423315676">Stapelfach 7</translation>
+<translation id="1428729058023778569">Sie sehen diese Warnung, weil diese Website kein HTTPS unterstützt. <ph name="BEGIN_LEARN_MORE_LINK" />Weitere Informationen<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Drucken</translation>
 <translation id="1436185428532214179">Darf nachfragen, wenn sie Dateien oder Ordner auf meinem Gerät bearbeiten möchte</translation>
 <translation id="1442386063175183758">Rechtsseitige Fensterfaltung</translation>
@@ -645,6 +646,7 @@
 <translation id="3282497668470633863">Angabe für "Name auf der Karte" hinzufügen</translation>
 <translation id="3286372614333682499">Hochformat</translation>
 <translation id="3287510313208355388">Herunterladen, sobald eine Internetverbindung besteht</translation>
+<translation id="3288238092761586174"><ph name="URL" /> muss möglicherweise zusätzliche Schritte ausführen, um Ihre Zahlung zu bestätigen</translation>
 <translation id="3293642807462928945">Weitere Informationen zur "<ph name="POLICY_NAME" />"-Richtlinie</translation>
 <translation id="3295444047715739395">Passwörter in den Chrome-Einstellungen ansehen und verwalten</translation>
 <translation id="3303855915957856445">Keine Suchergebnisse gefunden</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 11a7a48..6b4b422 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Για την επίτευξη μιας ασφαλούς σύνδεσης, θα πρέπει να γίνει σωστή ρύθμιση του ρολογιού σας. Αυτό οφείλεται στο γεγονός ότι τα πιστοποιητικά που χρησιμοποιούν οι ιστότοποι για την ταυτοποίησή τους είναι έγκυρα μόνο για συγκεκριμένες χρονικές περιόδους. Εφόσον το ρολόι της συσκευής σας δεν είναι σωστά ρυθμισμένο, το Chrome δεν μπορεί να επαληθεύσει αυτά τα πιστοποιητικά.</translation>
 <translation id="2597378329261239068">Αυτό το έγγραφο προστατεύεται με κωδικό πρόσβασης.  Πληκτρολογήστε έναν κωδικό πρόσβασης.</translation>
 <translation id="2609632851001447353">Παραλλαγές</translation>
+<translation id="2610561535971892504">Κλικ για αντιγραφή</translation>
 <translation id="2618023639789766142">C10 (Φάκελος)</translation>
 <translation id="2625385379895617796">Το ρολόι σας πάει μπροστά</translation>
 <translation id="262745152991669301">Μπορεί να ζητά να συνδεθεί σε συσκευές USB.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index d929f0a9f..be43225eb 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Para establecer una conexión segura, tu reloj debe estar correctamente configurado. Esto se debe a que los certificados utilizados por los sitios web para identificarse son solo válidos para períodos específicos de tiempo. Dado que el reloj de tu dispositivo no es correcto, Chrome no puede verificar estos certificados.</translation>
 <translation id="2597378329261239068">Este documento está protegido por contraseña. Introduce una contraseña.</translation>
 <translation id="2609632851001447353">Variaciones</translation>
+<translation id="2610561535971892504">Haz clic para copiar</translation>
 <translation id="2618023639789766142">C10 (sobre)</translation>
 <translation id="2625385379895617796">Tu reloj está adelantado</translation>
 <translation id="262745152991669301">Puede solicitar permiso para conectarse a dispositivos USB</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 5e78645..7720bd4 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -470,6 +470,7 @@
 <translation id="2596415276201385844">Konexio segurua ezartzeko, erlojuak behar bezala ezarrita egon behar du, webguneek beren burua identifikatzeko erabiltzen dituzten ziurtagiriek denboraldi jakinetarako bakarrik balio dutelako. Gailuaren erlojua oker ezarrita dagoenez, Chrome-k ezin ditu ziurtagiri horiek egiaztatu.</translation>
 <translation id="2597378329261239068">Dokumentua pasahitzez babestuta dago. Idatzi pasahitza.</translation>
 <translation id="2609632851001447353">Aldaerak</translation>
+<translation id="2610561535971892504">Sakatu kopiatzeko</translation>
 <translation id="2618023639789766142">C10 (gutun-azala)</translation>
 <translation id="2625385379895617796">Erlojua aurreratuta duzu</translation>
 <translation id="262745152991669301">USB bidezko gailuetara konektatzea eska dezake</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 44194250..174121e 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">‏به منظور برقراری یک اتصال امن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامه‌هایی که وب‌سایت‌ها برای شناسایی خودشان استفاده می‌کنند تنها برای دوره‌های زمانی خاصی معتبر هستند. از آنجا که ساعت دستگاه نادرست است، Chrome نمی‌تواند این گواهینامه‌ها را تأیید کند.</translation>
 <translation id="2597378329261239068">این سند توسط گذرواژه محافظت می‌شود.  لطفاً یک گذرواژه وارد کنید.</translation>
 <translation id="2609632851001447353">انواع مختلف</translation>
+<translation id="2610561535971892504">برای کپی کردن، کلیک کنید</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">ساعت شما جلو است</translation>
 <translation id="262745152991669301">‏می‌تواند برای اتصال به دستگاه‌های USB درخواست دهد</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index cbaad57..2d473b3 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Afin d'établir une connexion sécurisée, votre horloge doit être réglée correctement. Les certificats permettant aux sites Web de s'identifier sont en effet valides pendant une période précise. Si l'horloge de votre appareil est incorrecte, Chrome n'est pas en mesure de vérifier la validité des certificats.</translation>
 <translation id="2597378329261239068">Ce document est protégé par mot de passe. Veuillez saisir ce dernier.</translation>
 <translation id="2609632851001447353">Variantes</translation>
+<translation id="2610561535971892504">Cliquer pour copier</translation>
 <translation id="2618023639789766142">C10 (enveloppe)</translation>
 <translation id="2625385379895617796">Votre horloge est en avance.</translation>
 <translation id="262745152991669301">Peut demander à se connecter à des appareils USB</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index e31a050..e8f9216 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Biztonságos kapcsolat létrehozásához az órát pontosan be kell állítani.Ez azért szükséges, mert a webhelyek által az azonosításukra használt tanúsítványok csak adott ideig érvényesek. Mivel az eszköz órája nem pontos, a Chrome nem tudja ellenőrizni ezeket a tanúsítványokat.</translation>
 <translation id="2597378329261239068">Ez a dokumentum jelszóval védett. Kérjük, adja meg a jelszót.</translation>
 <translation id="2609632851001447353">Változatok</translation>
+<translation id="2610561535971892504">Kattintson a másoláshoz</translation>
 <translation id="2618023639789766142">C10 (boríték)</translation>
 <translation id="2625385379895617796">Az órája siet</translation>
 <translation id="262745152991669301">Engedélyt kérhet az USB-eszközökhöz való csatlakozásra</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 7321c37..7776e0d 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Klukka tölvunnar þarf að vera rétt til að hægt sé að koma á öruggri nettengingu. Þetta er vegna þess að vottorðin sem vefsvæði nota til að auðkenna sig eru aðeins gild í tiltekinn tíma. Chrome getur ekki kannað vottorðin þar sem klukka tækisins er röng.</translation>
 <translation id="2597378329261239068">Þetta skjal er varið með aðgangsorði. Sláðu inn aðgangsorð.</translation>
 <translation id="2609632851001447353">Tilbrigði</translation>
+<translation id="2610561535971892504">Smelltu til að afrita</translation>
 <translation id="2618023639789766142">C10 (umslag)</translation>
 <translation id="2625385379895617796">Klukkan þín er á undan</translation>
 <translation id="262745152991669301">Getur beðið um að tengjast við USB-tæki</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index ddb4cb6..3f69339 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Per poter stabilire una connessione protetta, l'orologio deve essere impostato correttamente perché i certificati utilizzati dai siti web per identificarsi sono validi soltanto per determinati periodi di tempo. L'orologio del dispositivo è sbagliato, pertanto Chrome non può verificare i certificati.</translation>
 <translation id="2597378329261239068">Questo documento è protetto da password. Inserisci una password.</translation>
 <translation id="2609632851001447353">Varianti</translation>
+<translation id="2610561535971892504">Fai clic per copiare</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">L'orologio è avanti</translation>
 <translation id="262745152991669301">Può chiedere di connettersi ai dispositivi USB</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 8b4b7043..32c3553 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Коопсуз туташууну орнотуу үчүн, саатыңыз туура коюлушу керек. Себеби вебсайттардын аныктыгын текшере турган тастыктамалар белгилүү бир убакыт аралыгында гана жарактуу болот. Түзмөгүңүздүн сааты туура эмес болгондуктан, Chrome бул тастыктамаларды текшере албайт.</translation>
 <translation id="2597378329261239068">Бул документ сырсөз менен корголгон. Сырсөздү киргизиңиз.</translation>
 <translation id="2609632851001447353">Варианттар</translation>
+<translation id="2610561535971892504">Көчүрүү үчүн чыкылдатыңыз</translation>
 <translation id="2618023639789766142">C10 (Конверт)</translation>
 <translation id="2625385379895617796">Саатыңыз алдыда</translation>
 <translation id="262745152991669301">USB түзмөктөргө туташууга уруксат сурай алат</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index e62195a..449283f7 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">To establish a secure connection, your clock needs to be set correctly. This is because the certificates that websites use to identify themselves are only valid for specific periods of time. Since your device's clock is incorrect, Chrome cannot verify these certificates.</translation>
 <translation id="2597378329261239068">ເອກະສານນີ້ມີລະຫັດຜ່ານປ້ອງກັນໄວ້. ກະລຸນາໃສ່ລະຫັດຜ່ານ.</translation>
 <translation id="2609632851001447353">ການ​ປ່ຽນ​ແປງ</translation>
+<translation id="2610561535971892504">ຄລິກເພື່ອສຳເນົາ</translation>
 <translation id="2618023639789766142">C10 (ຊອງຈົດໝາຍ)</translation>
 <translation id="2625385379895617796">ໂມງ​ຂອ​ງ​ທ່ານ​ໄວ</translation>
 <translation id="262745152991669301">ສາມາດຂໍເຊື່ອມຕໍ່ຫາອຸປະກອນ USB ໄດ້</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 352fa039..1d88cdb 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -473,6 +473,7 @@
 <translation id="2596415276201385844">ഒരു സുരക്ഷിത കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, നിങ്ങളുടെ ക്ലോക്ക് ശരിയായി സജ്ജീകരിക്കേണ്ടതുണ്ട്. വെബ്‌സൈറ്റുകൾ സ്വയം തിരിച്ചറിയുന്നതിന് ഉപയോഗിക്കുന്ന സർട്ടിഫിക്കറ്റുകൾ, നിർദ്ദിഷ്‌ട സമയ പരിധിയിൽ മാത്രം സാധുതയുള്ളതിനാലാണിത്. നിങ്ങളുടെ ഉപകരണത്തിന്റെ ക്ലോക്ക് തെറ്റായിരിക്കുന്നതിനാൽ, Chrome-ന് ഈ സർട്ടിഫിക്കറ്റുകൾ പരിശോധിച്ചുറപ്പിക്കാനാവില്ല.</translation>
 <translation id="2597378329261239068">ഈ പ്രമാണം പാസ്‌വേഡ് പരിരക്ഷിതമാണ്. പാസ്‌വേഡ് നല്‍‌കുക.</translation>
 <translation id="2609632851001447353">വേരിയേഷനുകൾ</translation>
+<translation id="2610561535971892504">പകർത്താൻ ക്ലിക്ക് ചെയ്യുക</translation>
 <translation id="2618023639789766142">C10 (എൻവലപ്പ്)</translation>
 <translation id="2625385379895617796">നിങ്ങളുടെ ക്ലോക്ക് വളരെ മുമ്പിലാണ്</translation>
 <translation id="262745152991669301">USB ഉപകരണങ്ങൾ കണക്റ്റ് ചെയ്യാൻ ആവശ്യപ്പെടാം</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index cd1ed9c..dc61864 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -479,6 +479,7 @@
  က ထိုလက်မှတ်များကို စိစစ်မရနိုင်ပါ။</translation>
 <translation id="2597378329261239068">ဒီစာတမ်းကို စကားဝှက်ဖြင့် ကာကွယ်ထားသည်။ ကျေးဇူးပြုပြီး စကားဝှက် ရိုက်ထည့်ပါ။</translation>
 <translation id="2609632851001447353">မူကွဲများ</translation>
+<translation id="2610561535971892504">မိတ္တူကူးရန် နှိပ်ပါ</translation>
 <translation id="2618023639789766142">C10 (စာအိတ်)</translation>
 <translation id="2625385379895617796">သင်၏ နာရီမှာ စောနေ</translation>
 <translation id="262745152991669301">USB ကိရိယာများနှင့် ချိတ်ဆက်ရန် ခွင့်တောင်းနိုင်သည်</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index eb994159..fbe6870 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -470,6 +470,7 @@
 <translation id="2596415276201385844">Aby nawiązać bezpieczne połączenie, Twój zegar musi mieć ustawioną prawidłową godzinę. Jest to wymagane, ponieważ certyfikaty używane do identyfikacji stron internetowych są ważne tylko przez określony czas. Ponieważ zegar Twojego urządzenia nie jest ustawiony prawidłowo, Chrome nie może zweryfikować tych certyfikatów.</translation>
 <translation id="2597378329261239068">Ten dokument jest chroniony hasłem. Wprowadź hasło.</translation>
 <translation id="2609632851001447353">Odmiany</translation>
+<translation id="2610561535971892504">Kliknij, aby skopiować</translation>
 <translation id="2618023639789766142">C10 (koperta)</translation>
 <translation id="2625385379895617796">Twój zegar się śpieszy</translation>
 <translation id="262745152991669301">Może prosić o zgodę na połączenie z urządzeniami USB</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index b6f44214..3ef7b0f1 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -470,6 +470,7 @@
 <translation id="2596415276201385844">Para estabelecer uma conexão segura, o relógio precisa ser ajustado corretamente. Isso ocorre porque os certificados que os websites usam para se identificar são válidos apenas por períodos específicos. Como o relógio do seu dispositivo está incorreto, o Chrome não pode verificar esses certificados.</translation>
 <translation id="2597378329261239068">Este documento está protegido por senha.  Digite a senha.</translation>
 <translation id="2609632851001447353">Variações</translation>
+<translation id="2610561535971892504">Clique para copiar</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">Seu relógio está adiantado</translation>
 <translation id="262745152991669301">Pode pedir para se conectar a dispositivos USB</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 91c3018..ccb82a8 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Para estabelecer uma ligação segura, o relógio tem de ser definido corretamente. Isto deve-se ao facto de os certificados que os Sites utilizam para se identificarem serem apenas válidos para períodos de tempo específicos. Uma vez que o relógio do seu dispositivo está incorreto, o Chrome não consegue validar estes certificados.</translation>
 <translation id="2597378329261239068">Este documento está protegido por palavra-passe.  Introduza uma palavra-passe.</translation>
 <translation id="2609632851001447353">Variações</translation>
+<translation id="2610561535971892504">Clique para copiar</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">O seu relógio está adiantado</translation>
 <translation id="262745152991669301">Pode solicitar a ligação a dispositivos USB</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index d63e971b..7b337da5 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">ආරක්ෂිත සම්බන්ධතාවක් ස්ථාපනය කිරීමට, ඔබගේ ඔරලෝසුව නිවැරදිව සකස් කරගැනීමට අවශ්‍යය. මෙයට හේතුව වෙබ් අඩවි ඔවුන්ව හඳුනාගැනීමට භාවිතා කරන සහතිකපත්‍ර වලංගු වන්නේ යම්කිසි කාලයක් සඳහා පමණි. ඔබගේ උපාංගයේ ඔරලෝසුව වැරදි විට, Chrome වලට මෙම සහතික සත්‍යාපනය කිරීම කළ නොහැක.</translation>
 <translation id="2597378329261239068">මෙම ලේඛනයේ රහස්වචනය ආරක්ෂා කර තිබේ. කරුණාකර රහස්වචනයක් ඇතුළු කරන්න.</translation>
 <translation id="2609632851001447353">විචලතා</translation>
+<translation id="2610561535971892504">පිටපත් කිරීමට ක්ලික් කිරීම</translation>
 <translation id="2618023639789766142">C10 (ලියුම් කවරය)</translation>
 <translation id="2625385379895617796">ඔබගේ ඔරලෝසුව ඉදිරියෙන් සිටියි</translation>
 <translation id="262745152991669301">USB උපාංග වෙත සම්බන්ධ වීමට ඉල්ලිය හැකිය</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 471685e16..36681927 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -470,6 +470,7 @@
 <translation id="2596415276201385844">Ak chcete nadviazať zabezpečené pripojenie, vaše hodiny musia byť nastavené správne. Je to preto, že certifikáty, ktoré webové stránky používajú na vlastnú identifikáciu, sú platné iba určitý čas. Keďže nie sú hodiny vášho zariadenia nastavené správne, Chrome nemôže tieto certifikáty overiť.</translation>
 <translation id="2597378329261239068">Tento dokument je chránený heslom. Zadajte heslo.</translation>
 <translation id="2609632851001447353">Variácie</translation>
+<translation id="2610561535971892504">Skopírovať kliknutím</translation>
 <translation id="2618023639789766142">C10 (obálka)</translation>
 <translation id="2625385379895617796">Vaše hodiny idú dopredu</translation>
 <translation id="262745152991669301">Môže žiadať o povolenie pripájať sa k zariadeniam s rozhraním USB</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index dfb2ad8..20558b2 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Om du vill upprätta en säker anslutning måste klockan vara rätt inställd. Det beror på att certifikaten som webbplatserna använder för att identifiera sig endast är giltiga under vissa tidsperioder. Chrome kan inte verifiera certifikaten eftersom klockan på enheten inte stämmer.</translation>
 <translation id="2597378329261239068">Dokumentet är lösenordsskyddat. Ange ett lösenord.</translation>
 <translation id="2609632851001447353">Varianter</translation>
+<translation id="2610561535971892504">Klicka för att kopiera</translation>
 <translation id="2618023639789766142">C10 (kuvert)</translation>
 <translation id="2625385379895617796">Klockan går före</translation>
 <translation id="262745152991669301">Får begära tillstånd att ansluta till USB-enheter</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 8b68c959..63ed9be 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -473,6 +473,7 @@
 <translation id="2596415276201385844">Ili kutambua muunganisho salama, saa yako inahitaji kuwekwa sahihi. Hii ni kwa sababu vyeti ambavyo tovuti hutumia kujitambua ni sahihi kwa vipindi mahususi pekee. Kwa kuwa saa ya kifaa chako si sahihi, Chrome haiwezi kuthibitisha vyeti hivi.</translation>
 <translation id="2597378329261239068">Hati hii imelindwa kwa nenosiri. Tafadhali weka nenosiri linalotumika.</translation>
 <translation id="2609632851001447353">Vipera</translation>
+<translation id="2610561535971892504">Bofya ili unakili</translation>
 <translation id="2618023639789766142">C10 (Bahasha)</translation>
 <translation id="2625385379895617796">Saa yako iko mbele</translation>
 <translation id="262745152991669301">Inaweza kuomba ruhusa ya kuunganisha kwenye vifaa vya USB</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 5192e08..8d2b4e9e 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -84,7 +84,7 @@
     &lt;li&gt;మీ ఇంటర్నెట్ కనెక్షన్ సరిగ్గానే పని చేస్తున్నట్లు నిర్ధారించుకోండి.&lt;/li&gt;
     &lt;li&gt;వెబ్‌సైట్ యజమానిని సంప్రదించండి.&lt;/li&gt;
     &lt;/ol&gt;</translation>
-<translation id="1257286744552378071">మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ను నమోదు చేసారు. మీ ఖాతాను రక్షించడం కోసం, ఇతర యాప్‌లు మరియు సైట్‌లలో మీ పాస్‌వర్డ్‌ను తిరిగి ఉపయోగించవద్దు.</translation>
+<translation id="1257286744552378071">మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ను నమోదు చేశారు. మీ ఖాతాను రక్షించడం కోసం, ఇతర యాప్‌లు మరియు సైట్‌లలో మీ పాస్‌వర్డ్‌ను తిరిగి ఉపయోగించవద్దు.</translation>
 <translation id="1263231323834454256">పఠన జాబితా</translation>
 <translation id="1269516672602708785">Google Sitesలో కొత్త సైట్‌ను త్వరగా క్రియేట్ చేయండి</translation>
 <translation id="1270502636509132238">పికప్ పద్ధతి</translation>
@@ -704,7 +704,7 @@
 <translation id="3438829137925142401">మీ Google ఖాతాలో సేవ్ చేయబడిన పాస్‌వర్డ్‌‌లను ఉపయోగించండి</translation>
 <translation id="3440783957068352691">చతురస్రం</translation>
 <translation id="3443726618221119081">జుర్రో-కు-కాయ్</translation>
-<translation id="3447661539832366887">ఈ పరికర యజమాని డైనోసార్ గేమ్‌ను ఆఫ్ చేసారు.</translation>
+<translation id="3447661539832366887">ఈ పరికర యజమాని డైనోసార్ గేమ్‌ను ఆఫ్ చేశారు.</translation>
 <translation id="3447884698081792621">సర్టిఫికేట్‌ను చూపు (<ph name="ISSUER" /> ద్వారా జారీ చేయబడింది)</translation>
 <translation id="3452404311384756672">విరామాన్ని పొందండి:</translation>
 <translation id="3453962258458347894">పునఃప్రయత్నాల సంఖ్య</translation>
@@ -821,7 +821,7 @@
 <translation id="382518646247711829">మీరు ప్రాక్సీ సర్వర్‌ను ఉపయోగిస్తే...</translation>
 <translation id="3827112369919217609">అబ్సల్యూట్</translation>
 <translation id="3828924085048779000">ఖాళీ రహస్య పదబంధం అనుమతించబడదు.</translation>
-<translation id="3831915413245941253"><ph name="ENROLLMENT_DOMAIN" /> అదనపు ఫంక్షన్‌ల కోసం ఎక్స్‌టెన్షన్‌లను ఇన్‌స్టాల్ చేసారు. మీ డేటాలో కొంత భాగానికి ఎక్స్‌టెన్షన్‌లు యాక్సెస్ కలిగి ఉంటాయి.</translation>
+<translation id="3831915413245941253"><ph name="ENROLLMENT_DOMAIN" /> అదనపు ఫంక్షన్‌ల కోసం ఎక్స్‌టెన్షన్‌లను ఇన్‌స్టాల్ చేశారు. మీ డేటాలో కొంత భాగానికి ఎక్స్‌టెన్షన్‌లు యాక్సెస్ కలిగి ఉంటాయి.</translation>
 <translation id="3832522519263485449">ఎడమవైపు అనేక రంధ్రాలు</translation>
 <translation id="3835233591525155343">మీ పరికర వినియోగం</translation>
 <translation id="3841184659773414994">ఫైల్ హ్యాండ్లర్‌లు</translation>
@@ -993,7 +993,7 @@
 <translation id="437058704415269440">ఖాతా బ్యాలెన్స్</translation>
 <translation id="4372516964750095882">ఫ్యాన్‌ఫోల్డ్-Us</translation>
 <translation id="4372948949327679948">ఆశిస్తున్న <ph name="VALUE_TYPE" /> విలువ.</translation>
-<translation id="4377125064752653719"><ph name="DOMAIN" />ను చేరుకోవడానికి మీరు ప్రయత్నించారు, కానీ సర్వర్ అందించిన ప్రమాణపత్రాన్ని దాన్ని జారీ చేసినవారు రద్దు చేసారు. సర్వర్ అందించిన భద్రత ఆధారాలు ఖచ్చితంగా విశ్వసించబడలేదని దీని అర్థం. మీరు దాడి చేసే వారితో కమ్యూనికేట్ చేస్తూ ఉండవచ్చు.</translation>
+<translation id="4377125064752653719"><ph name="DOMAIN" />ను చేరుకోవడానికి మీరు ప్రయత్నించారు, కానీ సర్వర్ అందించిన ప్రమాణపత్రాన్ని దాన్ని జారీ చేసినవారు రద్దు చేశారు. సర్వర్ అందించిన భద్రత ఆధారాలు ఖచ్చితంగా విశ్వసించబడలేదని దీని అర్థం. మీరు దాడి చేసే వారితో కమ్యూనికేట్ చేస్తూ ఉండవచ్చు.</translation>
 <translation id="4378154925671717803">ఫోన్</translation>
 <translation id="4390472908992056574">బ్రిమ్</translation>
 <translation id="4406883609789734330">లైవ్ క్యాప్షన్</translation>
@@ -1354,7 +1354,7 @@
 <translation id="5654927323611874862">అప్‌లోడ్ చేసిన క్రాష్ రిపోర్ట్ ID:</translation>
 <translation id="5659593005791499971">ఇమెయిల్</translation>
 <translation id="5663614846592581799">9x11 (ఎన్వలప్)</translation>
-<translation id="5663955426505430495">ఈ పరికరం నిర్వాహకుడు అదనపు ఫంక్షన్‌ల కోసం ఎక్స్‌టెన్షన్‌లను ఇన్‌స్టాల్ చేసారు. మీ డేటాలో కొంత భాగానికి ఎక్స్‌టెన్షన్‌లు యాక్సెస్ కలిగి ఉంటాయి.</translation>
+<translation id="5663955426505430495">ఈ పరికరం నిర్వాహకుడు అదనపు ఫంక్షన్‌ల కోసం ఎక్స్‌టెన్షన్‌లను ఇన్‌స్టాల్ చేశారు. మీ డేటాలో కొంత భాగానికి ఎక్స్‌టెన్షన్‌లు యాక్సెస్ కలిగి ఉంటాయి.</translation>
 <translation id="5675650730144413517">ఈ పేజీ పని చేయడం లేదు</translation>
 <translation id="568292603005599551">చిత్రం యొక్క X కోఆర్డినేట్</translation>
 <translation id="5684874026226664614">అయ్యో. ఈ పేజీని అనువదించడం సాధ్యపడలేదు.</translation>
@@ -1470,7 +1470,7 @@
 <translation id="6059925163896151826">USB పరికరాలు</translation>
 <translation id="6060009363608157444">చెల్లని DnsOverHttps మోడ్.</translation>
 <translation id="6064217302520318294">స్క్రీన్ లాక్</translation>
-<translation id="6080696365213338172">మీరు నిర్వాహకుని ద్వారా అందించబడిన ప్రమాణపత్రాన్ని ఉపయోగించి కంటెంట్‌ను యాక్సెస్ చేసారు. మీరు <ph name="DOMAIN" />కు అందించే డేటాకు మీ నిర్వాహకుని ద్వారా అంతరాయం ఏర్పడవచ్చు.</translation>
+<translation id="6080696365213338172">మీరు నిర్వాహకుని ద్వారా అందించబడిన ప్రమాణపత్రాన్ని ఉపయోగించి కంటెంట్‌ను యాక్సెస్ చేశారు. మీరు <ph name="DOMAIN" />కు అందించే డేటాకు మీ నిర్వాహకుని ద్వారా అంతరాయం ఏర్పడవచ్చు.</translation>
 <translation id="6094273045989040137">అదనపు గమనికను జోడించండి</translation>
 <translation id="6104072995492677441">JIS B6</translation>
 <translation id="6105460996796456817">సైట్‌ను క్రియేట్ చేయండి</translation>
@@ -1674,7 +1674,7 @@
 <translation id="691024665142758461">బహుళ ఫైళ్లను డౌన్‌లోడ్ చేయాలనుకుంటోంది</translation>
 <translation id="6915804003454593391">వినియోగదారు:</translation>
 <translation id="6934672428414710184">ఇది మీ Google ఖాతాలో ఉన్న పేరు</translation>
-<translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేసారు. మీ ఖాతాని రక్షించడం కోసం, మీ పాస్‌వర్డ్‌ని ఇతర యాప్‌లు మరియు సైట్‌లలో తిరిగి ఉపయోగించవద్దు.</translation>
+<translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేశారు. మీ ఖాతాని రక్షించడం కోసం, మీ పాస్‌వర్డ్‌ని ఇతర యాప్‌లు మరియు సైట్‌లలో తిరిగి ఉపయోగించవద్దు.</translation>
 <translation id="6945221475159498467">ఎంచుకోండి</translation>
 <translation id="6948051842255602737">గేమ్ పూర్తయింది, మీ స్కోర్ <ph name="SCORE" />.</translation>
 <translation id="6948701128805548767">పికప్ పద్ధతులు మరియు అవసరాలను చూడాలంటే, చిరునామాని ఎంచుకోండి</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 3fe4dc4..3b6b88a 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -471,6 +471,7 @@
 <translation id="2596415276201385844">Güvenli bir bağlantı kurmak için saatinizin doğru ayarlanmış olması gerekir. Bunun sebebi, web sitelerinin kendilerini tanımlamak için kullandıkları sertifikaların sadece belli süreler için geçerli olmasıdır. Cihazınızın saati yanlış olduğundan, Chrome bu sertifikaları doğrulayamıyor.</translation>
 <translation id="2597378329261239068">Doküman şifre korumalı. Lütfen şifreyi girin.</translation>
 <translation id="2609632851001447353">Varyasyonlar</translation>
+<translation id="2610561535971892504">Kopyalamak için tıkla</translation>
 <translation id="2618023639789766142">C10 (Zarf)</translation>
 <translation id="2625385379895617796">Saatiniz ileri</translation>
 <translation id="262745152991669301">USB cihazlara bağlanmak isteyebilir</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 74ba24d..8b5ff52e 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Щоб установити безпечне з’єднання, потрібно правильно вказати час, оскільки сертифікати, які веб-сайти використовують для самоідентифікації дійсні лише протягом певного періоду часу. Час на вашому пристрої неправильний, тому Chrome не може перевірити сертифікати.</translation>
 <translation id="2597378329261239068">Цей документ захищено паролем. Введіть пароль.</translation>
 <translation id="2609632851001447353">Різновиди</translation>
+<translation id="2610561535971892504">Натиснути, щоб скопіювати</translation>
 <translation id="2618023639789766142">C10 (конверт)</translation>
 <translation id="2625385379895617796">Ваш годинник спішить</translation>
 <translation id="262745152991669301">Може просити дозвіл підключатися до пристроїв USB</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index b2232ce..c66e7694 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -473,6 +473,7 @@
 <translation id="2596415276201385844">Xavfsiz aloqa o‘rnatish uchun tizim soati to‘g‘ri sozlangan bo‘lishi kerak. Chunki veb-saytlar o‘zini tanitish uchun ishlatadigan sertifikatlar muayyan vaqt oralig‘idagina kuchga ega. Qurilmangizdagi vaqt noto‘g‘riligi tufayli, Chrome sertifikatlarni tekshira olmaydi.</translation>
 <translation id="2597378329261239068">Bu hujjat parol bilan himoyalangan. Iltimos parolni kiriting.</translation>
 <translation id="2609632851001447353">Variantlar</translation>
+<translation id="2610561535971892504">Nusxa olish uchun bosing</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">Soatingiz oldinda</translation>
 <translation id="262745152991669301">USB qurilmalarga ulanish uchun ruxsat soʻrashi mumkin</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 94cfe0f..e0e2b0c 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -474,6 +474,7 @@
 <translation id="2596415276201385844">Ukuze kusungulwe uxhumano oluvikelekile, iwashi lakho kumele lisethwe ngokufanele. Lokhu yingenxa yokuthi izitifiketi ezisetshenziswa ngamawebhusayithi ukuzikhomba zivumeleke ngesikhathi esithile kuphela. Njengoba iwashi ledivayisi yakho lingalungile, i-Chrome ayikwazi ukuqinisekisa lezi zitifiketi.</translation>
 <translation id="2597378329261239068">Le dokhumenti ivikelwe yiphasiwedi. Sicela ufake iphasiwedi.</translation>
 <translation id="2609632851001447353">Ukwahluka</translation>
+<translation id="2610561535971892504">Chofoza ukuze ukopishe</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">Iwashi lakho liphambili</translation>
 <translation id="262745152991669301">Ingacela ukuxhuma kumadivayisi we-USB</translation>
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index e14c620b..5d9c09b 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -9051,63 +9051,6 @@
   presentation_service.OnDelegateDestroyed();
 }
 
-namespace {
-
-// Subclass of DocumentServiceBase for test.
-class EchoImpl final : public DocumentServiceBase<mojom::Echo> {
- public:
-  EchoImpl(RenderFrameHost* render_frame_host,
-           mojo::PendingReceiver<mojom::Echo> receiver,
-           bool* deleted)
-      : DocumentServiceBase(render_frame_host, std::move(receiver)),
-        deleted_(deleted) {}
-  ~EchoImpl() final { *deleted_ = true; }
-
-  // mojom::Echo implementation
-  void EchoString(const std::string& input, EchoStringCallback callback) final {
-    std::move(callback).Run(input);
-  }
-
- private:
-  bool* deleted_;
-};
-
-}  // namespace
-
-IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, DocumentServiceBase) {
-  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.
-  ASSERT_TRUE(NavigateToURL(shell(), url_a));
-  RenderFrameHostImpl* rfh_a = current_frame_host();
-  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
-
-  mojo::Remote<mojom::Echo> echo_remote;
-  bool echo_deleted = false;
-  new EchoImpl(rfh_a, echo_remote.BindNewPipeAndPassReceiver(), &echo_deleted);
-
-  // 2) Navigate to B.
-  ASSERT_TRUE(NavigateToURL(shell(), url_b));
-
-  // - Page A should be in the cache.
-  ASSERT_FALSE(delete_observer_rfh_a.deleted());
-  EXPECT_TRUE(rfh_a->IsInBackForwardCache());
-  EXPECT_FALSE(echo_deleted);
-
-  // 3) Go back.
-  web_contents()->GetController().GoBack();
-  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
-  EXPECT_FALSE(echo_deleted);
-
-  // 4) Prevent caching and navigate to B.
-  DisableBFCacheForRFHForTesting(rfh_a);
-  ASSERT_TRUE(NavigateToURL(shell(), url_b));
-  delete_observer_rfh_a.WaitUntilDeleted();
-  EXPECT_TRUE(echo_deleted);
-}
-
 IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, OutstandingFetchNotCached) {
   net::test_server::ControllableHttpResponse response(embedded_test_server(),
                                                       "/fetch");
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 078b35456f..37a8813 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -31,6 +31,7 @@
 #include "content/browser/devtools/protocol/handler_helpers.h"
 #include "content/browser/manifest/manifest_manager_host.h"
 #include "content/browser/renderer_host/back_forward_cache_can_store_document_result.h"
+#include "content/browser/renderer_host/back_forward_cache_disable.h"
 #include "content/browser/renderer_host/back_forward_cache_metrics.h"
 #include "content/browser/renderer_host/navigation_entry_impl.h"
 #include "content/browser/renderer_host/navigation_request.h"
@@ -1536,6 +1537,43 @@
   }
 }
 
+Page::BackForwardCacheNotRestoredReason
+DisableForRenderFrameHostReasonToProtocol(
+    BackForwardCache::DisabledReason reason) {
+  BackForwardCacheDisable::DisabledReasonId reasonId =
+      static_cast<BackForwardCacheDisable::DisabledReasonId>(reason.id);
+  switch (reasonId) {
+    case BackForwardCacheDisable::DisabledReasonId::kUnknown:
+      return Page::BackForwardCacheNotRestoredReasonEnum::Unknown;
+    case BackForwardCacheDisable::DisabledReasonId::
+        kMediaSessionImplOnServiceCreated:
+      return Page::BackForwardCacheNotRestoredReasonEnum::
+          MediaSessionImplOnServiceCreated;
+    case BackForwardCacheDisable::DisabledReasonId::kSecurityHandler:
+      return Page::BackForwardCacheNotRestoredReasonEnum::SecurityHandler;
+    case BackForwardCacheDisable::DisabledReasonId::kWebAuthenticationAPI:
+      return Page::BackForwardCacheNotRestoredReasonEnum::WebAuthenticationAPI;
+    case BackForwardCacheDisable::DisabledReasonId::kFileChooser:
+      return Page::BackForwardCacheNotRestoredReasonEnum::FileChooser;
+    case BackForwardCacheDisable::DisabledReasonId::kSerial:
+      return Page::BackForwardCacheNotRestoredReasonEnum::Serial;
+    case BackForwardCacheDisable::DisabledReasonId::kFileSystemAccess:
+      return Page::BackForwardCacheNotRestoredReasonEnum::FileSystemAccess;
+    case BackForwardCacheDisable::DisabledReasonId::kMediaDevicesDispatcherHost:
+      return Page::BackForwardCacheNotRestoredReasonEnum::
+          MediaDevicesDispatcherHost;
+    case BackForwardCacheDisable::DisabledReasonId::kWebBluetooth:
+      return Page::BackForwardCacheNotRestoredReasonEnum::WebBluetooth;
+    case BackForwardCacheDisable::DisabledReasonId::kWebUSB:
+      return Page::BackForwardCacheNotRestoredReasonEnum::WebUSB;
+    case BackForwardCacheDisable::DisabledReasonId::kMediaSession:
+      return Page::BackForwardCacheNotRestoredReasonEnum::MediaSession;
+    default:
+      NOTREACHED();
+      return Page::BackForwardCacheNotRestoredReasonEnum::Unknown;
+  }
+}
+
 Page::BackForwardCacheNotRestoredReasonType MapNotRestoredReasonToType(
     BackForwardCacheMetrics::NotRestoredReason reason) {
   using Reason = BackForwardCacheMetrics::NotRestoredReason;
@@ -1651,11 +1689,18 @@
   }
 }
 
+Page::BackForwardCacheNotRestoredReasonType
+MapDisableForRenderFrameHostReasonToType(
+    BackForwardCache::DisabledReason reason) {
+  return Page::BackForwardCacheNotRestoredReasonTypeEnum::Circumstantial;
+}
+
 std::unique_ptr<protocol::Array<Page::BackForwardCacheNotRestoredExplanation>>
 CreateNotRestoredExplanation(
     const BackForwardCacheCanStoreDocumentResult::NotStoredReasons
         not_stored_reasons,
-    const blink::scheduler::WebSchedulerTrackedFeatures blocklisted_features) {
+    const blink::scheduler::WebSchedulerTrackedFeatures blocklisted_features,
+    const std::set<BackForwardCache::DisabledReason>& disabled_reasons) {
   auto reasons = std::make_unique<
       protocol::Array<Page::BackForwardCacheNotRestoredExplanation>>();
 
@@ -1671,6 +1716,17 @@
                 .SetReason(BlocklistedFeatureToProtocol(feature))
                 .Build());
       }
+    } else if (reason == BackForwardCacheMetrics::NotRestoredReason::
+                             kDisableForRenderFrameHostCalled) {
+      for (auto disabled_reason : disabled_reasons) {
+        reasons->emplace_back(
+            Page::BackForwardCacheNotRestoredExplanation::Create()
+                .SetType(
+                    MapDisableForRenderFrameHostReasonToType(disabled_reason))
+                .SetReason(
+                    DisableForRenderFrameHostReasonToProtocol(disabled_reason))
+                .Build());
+      }
     } else {
       reasons->emplace_back(
           Page::BackForwardCacheNotRestoredExplanation::Create()
@@ -1694,7 +1750,8 @@
   std::string frame_id = ftn->devtools_frame_token().ToString();
 
   auto explanation = CreateNotRestoredExplanation(
-      result->not_stored_reasons(), result->blocklisted_features());
+      result->not_stored_reasons(), result->blocklisted_features(),
+      result->disabled_reasons());
 
   frontend_->BackForwardCacheNotUsed(devtools_navigation_token, frame_id,
                                      std::move(explanation));
diff --git a/content/browser/renderer_host/document_service_base_browsertest.cc b/content/browser/renderer_host/document_service_base_browsertest.cc
new file mode 100644
index 0000000..965996a
--- /dev/null
+++ b/content/browser/renderer_host/document_service_base_browsertest.cc
@@ -0,0 +1,151 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "content/browser/renderer_host/document_service_base_echo_impl.h"
+#include "content/public/browser/document_service_base.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_features.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/prerender_test_util.h"
+#include "content/public/test/test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "content/test/content_browser_test_utils_internal.h"
+#include "content/test/echo.test-mojom.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace content {
+
+class DocumentServiceBaseBrowserTest : public ContentBrowserTest {
+ public:
+  DocumentServiceBaseBrowserTest() = default;
+  ~DocumentServiceBaseBrowserTest() override = default;
+
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    ASSERT_TRUE(test_server_handle_ =
+                    embedded_test_server()->StartAndReturnHandle());
+  }
+
+  WebContents* web_contents() const { return shell()->web_contents(); }
+
+ private:
+  net::test_server::EmbeddedTestServerHandle test_server_handle_;
+};
+
+class DocumentServiceBasePrerenderingBrowserTest
+    : public DocumentServiceBaseBrowserTest {
+ public:
+  DocumentServiceBasePrerenderingBrowserTest()
+      : prerender_helper_(base::BindRepeating(
+            &DocumentServiceBasePrerenderingBrowserTest::web_contents,
+            base::Unretained(this))) {}
+  ~DocumentServiceBasePrerenderingBrowserTest() override = default;
+
+  void SetUp() override {
+    prerender_helper_.SetUp(embedded_test_server());
+    DocumentServiceBaseBrowserTest::SetUp();
+  }
+
+  test::PrerenderTestHelper* prerender_helper() { return &prerender_helper_; }
+
+ private:
+  test::PrerenderTestHelper prerender_helper_;
+};
+
+// Tests that DocumentServiceBase is not destroyed on prerendering activation.
+IN_PROC_BROWSER_TEST_F(DocumentServiceBasePrerenderingBrowserTest,
+                       NotClosedInPrerenderingActivation) {
+  const GURL kInitialUrl = embedded_test_server()->GetURL("/empty.html");
+  const GURL kPrerenderingUrl = embedded_test_server()->GetURL("/title1.html");
+
+  // Navigate to an initial page.
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+
+  int host_id = prerender_helper()->AddPrerender(kPrerenderingUrl);
+  RenderFrameHost* prerendered_frame_host =
+      prerender_helper()->GetPrerenderedMainFrameHost(host_id);
+  // We should disable proactive BrowsingInstance swap for the navigation below
+  // to ensure that the speculative RFH is going to use the same
+  // BrowsingInstance as the original RFH and it's not replaced on navigation.
+  DisableProactiveBrowsingInstanceSwapFor(prerendered_frame_host);
+
+  mojo::Remote<mojom::Echo> echo_remote;
+  bool echo_deleted = false;
+  new DocumentServiceBaseEchoImpl(
+      prerendered_frame_host, echo_remote.BindNewPipeAndPassReceiver(),
+      base::BindOnce([](bool* deleted) { *deleted = true; }, &echo_deleted));
+
+  // Activate the prerendered page.
+  prerender_helper()->NavigatePrimaryPage(kPrerenderingUrl);
+  // DocumentServiceBase should not be destroyed.
+  EXPECT_FALSE(echo_deleted);
+
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+  // It should be destroyed on navigation.
+  EXPECT_TRUE(echo_deleted);
+}
+
+class DocumentServiceBaseBFCacheBrowserTest
+    : public DocumentServiceBaseBrowserTest {
+ public:
+  DocumentServiceBaseBFCacheBrowserTest() {
+    feature_list_.InitWithFeaturesAndParameters(
+        {{features::kBackForwardCache,
+          {{"TimeToLiveInBackForwardCacheInSeconds", "3600"},
+           {"enable_same_site", "true"}}}},
+        {features::kBackForwardCacheMemoryControls});
+  }
+  ~DocumentServiceBaseBFCacheBrowserTest() override = default;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(DocumentServiceBaseBFCacheBrowserTest,
+                       DocumentServiceBase) {
+  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.
+  ASSERT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHost* rfh_a =
+      web_contents()->GetMainFrame();  // current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  mojo::Remote<mojom::Echo> echo_remote;
+  bool echo_deleted = false;
+  new DocumentServiceBaseEchoImpl(
+      rfh_a, echo_remote.BindNewPipeAndPassReceiver(),
+      base::BindOnce([](bool* deleted) { *deleted = true; }, &echo_deleted));
+
+  // 2) Navigate to B.
+  ASSERT_TRUE(NavigateToURL(shell(), url_b));
+
+  // - Page A should be in the cache.
+  ASSERT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_EQ(rfh_a->GetLifecycleState(),
+            RenderFrameHost::LifecycleState::kInBackForwardCache);
+  EXPECT_FALSE(echo_deleted);
+
+  // 3) Go back.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+  EXPECT_FALSE(echo_deleted);
+
+  // 4) Prevent caching and navigate to B.
+  DisableBFCacheForRFHForTesting(rfh_a);
+  ASSERT_TRUE(NavigateToURL(shell(), url_b));
+  delete_observer_rfh_a.WaitUntilDeleted();
+  EXPECT_TRUE(echo_deleted);
+}
+
+}  // namespace content
diff --git a/content/browser/renderer_host/document_service_base_echo_impl.cc b/content/browser/renderer_host/document_service_base_echo_impl.cc
new file mode 100644
index 0000000..cc3fcf1d1
--- /dev/null
+++ b/content/browser/renderer_host/document_service_base_echo_impl.cc
@@ -0,0 +1,25 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/renderer_host/document_service_base_echo_impl.h"
+
+namespace content {
+
+DocumentServiceBaseEchoImpl::DocumentServiceBaseEchoImpl(
+    RenderFrameHost* render_frame_host,
+    mojo::PendingReceiver<mojom::Echo> receiver,
+    base::OnceClosure destruction_cb)
+    : DocumentServiceBase(render_frame_host, std::move(receiver)),
+      destruction_cb_(std::move(destruction_cb)) {}
+
+DocumentServiceBaseEchoImpl::~DocumentServiceBaseEchoImpl() {
+  std::move(destruction_cb_).Run();
+}
+
+void DocumentServiceBaseEchoImpl::EchoString(const std::string& input,
+                                             EchoStringCallback callback) {
+  std::move(callback).Run(input);
+}
+
+}  // namespace content
diff --git a/content/browser/renderer_host/document_service_base_echo_impl.h b/content/browser/renderer_host/document_service_base_echo_impl.h
new file mode 100644
index 0000000..e469d79
--- /dev/null
+++ b/content/browser/renderer_host/document_service_base_echo_impl.h
@@ -0,0 +1,35 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
+#define CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
+
+#include "base/bind.h"
+#include "content/public/browser/document_service_base.h"
+#include "content/test/echo.test-mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+
+namespace content {
+
+class RenderFrameHost;
+
+// Subclass of DocumentServiceBase for test.
+class DocumentServiceBaseEchoImpl final
+    : public DocumentServiceBase<mojom::Echo> {
+ public:
+  DocumentServiceBaseEchoImpl(RenderFrameHost* render_frame_host,
+                              mojo::PendingReceiver<mojom::Echo> receiver,
+                              base::OnceClosure destruction_cb);
+  ~DocumentServiceBaseEchoImpl() final;
+
+  // mojom::Echo implementation
+  void EchoString(const std::string& input, EchoStringCallback callback) final;
+
+ private:
+  base::OnceClosure destruction_cb_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
diff --git a/content/browser/renderer_host/document_service_base_unittest.cc b/content/browser/renderer_host/document_service_base_unittest.cc
index 5489a675..db8755d4 100644
--- a/content/browser/renderer_host/document_service_base_unittest.cc
+++ b/content/browser/renderer_host/document_service_base_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "content/browser/renderer_host/document_service_base_echo_impl.h"
 #include "content/public/browser/back_forward_cache.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -13,7 +14,6 @@
 #include "content/public/test/test_renderer_host.h"
 #include "content/test/echo.test-mojom.h"
 #include "content/test/test_render_frame_host.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "url/gurl.h"
 
@@ -26,25 +26,6 @@
 const char kFooOrigin[] = "https://foo.com";
 const char kBarOrigin[] = "https://bar.com";
 
-// Subclass of DocumentServiceBase for test.
-class EchoImpl final : public DocumentServiceBase<mojom::Echo> {
- public:
-  EchoImpl(RenderFrameHost* render_frame_host,
-           mojo::PendingReceiver<mojom::Echo> receiver,
-           base::OnceClosure destruction_cb)
-      : DocumentServiceBase(render_frame_host, std::move(receiver)),
-        destruction_cb_(std::move(destruction_cb)) {}
-  ~EchoImpl() final { std::move(destruction_cb_).Run(); }
-
-  // mojom::Echo implementation
-  void EchoString(const std::string& input, EchoStringCallback callback) final {
-    std::move(callback).Run(input);
-  }
-
- private:
-  base::OnceClosure destruction_cb_;
-};
-
 // Help functions to manipulate RenderFrameHosts.
 
 // Simulates navigation and returns the final RenderFrameHost.
@@ -82,9 +63,10 @@
 
   void CreateEchoImpl(RenderFrameHost* rfh) {
     DCHECK(!is_echo_impl_alive_);
-    new EchoImpl(rfh, echo_remote_.BindNewPipeAndPassReceiver(),
-                 base::BindOnce(&DocumentServiceBaseTest::OnEchoImplDestructed,
-                                base::Unretained(this)));
+    new DocumentServiceBaseEchoImpl(
+        rfh, echo_remote_.BindNewPipeAndPassReceiver(),
+        base::BindOnce(&DocumentServiceBaseTest::OnEchoImplDestructed,
+                       base::Unretained(this)));
     is_echo_impl_alive_ = true;
   }
 
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index 10a7d40..5377ad6c 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -864,7 +864,7 @@
 
   // Whether this navigation is activating an existing page (e.g. served from
   // the BackForwardCache or Prerender)
-  bool IsPageActivation() const;
+  bool IsPageActivation() const override;
 
   // See comments for |prerender_navigation_entry_|.
   void SetPrerenderNavigationEntry(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index c25dc6f..beaa647 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -570,7 +570,7 @@
       current_display_is_primary != new_display_is_primary ||
       current_display_is_extended != new_display_is_extended;
 
-  if (has_display_property_changed) {
+  if (has_display_property_changed || force_sync_visual_properties) {
     display_list_ = new_display_list;
 
     // Notify the associated RenderWidgetHostImpl when screen info has changed.
diff --git a/content/browser/service_worker/service_worker_subresource_filter_browsertest.cc b/content/browser/service_worker/service_worker_subresource_filter_browsertest.cc
index 2b9438a1..4e4aec9 100644
--- a/content/browser/service_worker/service_worker_subresource_filter_browsertest.cc
+++ b/content/browser/service_worker/service_worker_subresource_filter_browsertest.cc
@@ -2,20 +2,31 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/test/scoped_feature_list.h"
-#include "content/public/common/content_features.h"
+#include "base/strings/strcat.h"
 #include "content/public/test/browser_test.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/url_loader_interceptor.h"
 #include "content/shell/browser/shell.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content {
 namespace {
 
-// This script asks the fetch_event_pass_through service worker what fetch
-// events it saw.
+constexpr char kBaseDataDir[] = "content/test/data/";
+
+// Generate token with the command:
+// generate_token.py https://service-worker-subresource-filter.test:443
+// ServiceWorkerSubresourceFilter
+// --expire-timestamp=2000000000
+base::StringPiece origin_trial_token =
+    "A1CKeg8m2+M4knvICqx+5ELaI1Bh17J1+2cAfNSKCgL4zmPh4hXikI4YGxbR/QQo"
+    "zQyH6JOw/fqwNdWxman2RgQAAACDeyJvcmlnaW4iOiAiaHR0cHM6Ly9zZXJ2aWNl"
+    "LXdvcmtlci1zdWJyZXNvdXJjZS1maWx0ZXIudGVzdDo0NDMiLCAiZmVhdHVyZSI6"
+    "ICJTZXJ2aWNlV29ya2VyU3VicmVzb3VyY2VGaWx0ZXIiLCAiZXhwaXJ5IjogMjAw"
+    "MDAwMDAwMH0=";
+
 const std::string script = R"(
       (async () => {
         const saw_message = new Promise(resolve => {
@@ -33,29 +44,35 @@
     : public ContentBrowserTest,
       public testing::WithParamInterface<bool> {
  protected:
-  ServiceWorkerSubresourceFilterBrowserTest() {
-    feature_list_.InitWithFeatureState(
-        features::kServiceWorkerSubresourceFilter, FeatureIsEnabled());
-  }
+  ServiceWorkerSubresourceFilterBrowserTest() {}
+
   void SetUpOnMainThread() override {
-    ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
-    embedded_test_server()->StartAcceptingConnections();
+    ContentBrowserTest::SetUpOnMainThread();
+
+    // We use a URLLoaderInterceptor, rather than the EmbeddedTestServer, since
+    // the origin trial token in the response is associated with a fixed origin,
+    // whereas EmbeddedTestServer serves content on a random port.
+    url_loader_interceptor_.emplace(base::BindRepeating(
+        &ServiceWorkerSubresourceFilterBrowserTest::InterceptRequest,
+        base::Unretained(this)));
   }
 
+  void TearDownOnMainThread() override { url_loader_interceptor_.reset(); }
+
   void NavigateAndFetch(std::string url, bool expect_only_matching_filter) {
     EXPECT_TRUE(NavigateToURL(
-        shell(), embedded_test_server()->GetURL(
-                     "/service_worker/create_service_worker.html")));
-    EXPECT_EQ("DONE",
-              EvalJs(shell(), "register('fetch_event_pass_through.js');"));
+        shell(), GetUrl("/service_worker/create_service_worker.html")));
+    EXPECT_EQ(
+        "DONE",
+        EvalJs(
+            shell(),
+            "register('/service_worker/fetch_event_pass_through.js', '/');"));
 
-    GURL page_url = embedded_test_server()->GetURL(url);
-    GURL fetch_url = embedded_test_server()->GetURL("/echo");
-    GURL fetch_url_with_fragment = embedded_test_server()->GetURL("/echo#foo");
-    GURL fetch_url_with_fragment_substring =
-        embedded_test_server()->GetURL("/echo#afooz");
-    GURL fetch_url_with_other_fragment =
-        embedded_test_server()->GetURL("/echo#bar");
+    GURL page_url = GetUrl(url);
+    GURL fetch_url = GetUrl("/echo");
+    GURL fetch_url_with_fragment = GetUrl("/echo#foo");
+    GURL fetch_url_with_fragment_substring = GetUrl("/echo#afooz");
+    GURL fetch_url_with_other_fragment = GetUrl("/echo#bar");
 
     EXPECT_TRUE(NavigateToURL(shell(), page_url));
     EXPECT_EQ("Echo",
@@ -88,7 +105,64 @@
   bool FeatureIsEnabled() { return GetParam(); }
 
  private:
-  base::test::ScopedFeatureList feature_list_;
+  static GURL GetUrl(const std::string& path) {
+    return GURL("https://service-worker-subresource-filter.test/")
+        .Resolve(path);
+  }
+
+  bool InterceptRequest(URLLoaderInterceptor::RequestParams* params) {
+    std::string headers =
+        "HTTP/1.1 200 OK\n"
+        "Content-Type: text/html\n";
+
+    if (params->url_request.url.path() == "/echo") {
+      URLLoaderInterceptor::WriteResponse(headers, std::string("Echo"),
+                                          params->client.get(),
+                                          absl::optional<net::SSLInfo>());
+      return true;
+    }
+
+    if (FeatureIsEnabled()) {
+      base::StrAppend(&headers, {"Origin-Trial: ", origin_trial_token, "\n"});
+      headers += '\n';
+    }
+
+    if (params->url_request.url.path() == "/filter") {
+      base::StrAppend(&headers, {"Service-Worker-Subresource-Filter: foo"});
+      headers += '\n';
+      URLLoaderInterceptor::WriteResponse(
+          base::StrCat({kBaseDataDir, "/service_worker/fetch_from_page.html"}),
+          params->client.get(), &headers, absl::optional<net::SSLInfo>());
+
+      return true;
+    }
+
+    if (params->url_request.url.path() == "/nofilter") {
+      // Do not add any additional headers, but intercept the request.
+      URLLoaderInterceptor::WriteResponse(
+          base::StrCat({kBaseDataDir, "/service_worker/fetch_from_page.html"}),
+          params->client.get(), &headers, absl::optional<net::SSLInfo>());
+
+      return true;
+    }
+
+    if (params->url_request.url.path() == "/emptyfilter") {
+      base::StrAppend(&headers, {"Service-Worker-Subresource-Filter:"});
+      headers += '\n';
+      URLLoaderInterceptor::WriteResponse(
+          base::StrCat({kBaseDataDir, "/service_worker/fetch_from_page.html"}),
+          params->client.get(), &headers, absl::optional<net::SSLInfo>());
+
+      return true;
+    }
+
+    URLLoaderInterceptor::WriteResponse(
+        base::StrCat({kBaseDataDir, params->url_request.url.path_piece()}),
+        params->client.get());
+    return true;
+  }
+
+  absl::optional<URLLoaderInterceptor> url_loader_interceptor_;
 };
 
 INSTANTIATE_TEST_SUITE_P(EnabledDisabled,
@@ -99,22 +173,21 @@
   // If the feature is disabled, all URLs should be seen by the Service Worker.
   // If the feature is enabled, only the initial navigation URL and URLs
   // matching the filter should be seen by the Service Worker.
-  NavigateAndFetch("/service_worker/subresource_filter.html",
-                   FeatureIsEnabled());
+  NavigateAndFetch("/filter", FeatureIsEnabled());
 }
 
 IN_PROC_BROWSER_TEST_P(ServiceWorkerSubresourceFilterBrowserTest,
                        WithoutFilter) {
   // All URLs should be seen by the Service Worker regardless of whether or not
   // the feature is enabled.
-  NavigateAndFetch("/service_worker/fetch_from_page.html", false);
+  NavigateAndFetch("/nofilter", false);
 }
 
 IN_PROC_BROWSER_TEST_P(ServiceWorkerSubresourceFilterBrowserTest,
                        WithEmptyFilter) {
   // All URLs should be seen by the Service Worker regardless of whether or not
   // the feature is enabled.
-  NavigateAndFetch("/service_worker/subresource_filter_empty.html", false);
+  NavigateAndFetch("/emptyfilter", false);
 }
 
 }  // namespace
diff --git a/content/public/browser/document_service_base.h b/content/public/browser/document_service_base.h
index a7d9457f..e92c412 100644
--- a/content/public/browser/document_service_base.h
+++ b/content/public/browser/document_service_base.h
@@ -20,9 +20,6 @@
 
 namespace content {
 
-class NavigationHandle;
-class RenderFrameHost;
-
 // Base class for mojo interface implementations tied to a document's lifetime.
 // The service will be destroyed when any of the following happens:
 // 1. mojo interface connection error happened,
@@ -86,11 +83,16 @@
 
     if (!navigation_handle->HasCommitted() ||
         navigation_handle->IsSameDocument() ||
-        navigation_handle->IsServedFromBackForwardCache()) {
+        navigation_handle->IsPageActivation()) {
       return;
     }
 
     if (navigation_handle->GetRenderFrameHost() == render_frame_host_) {
+      // DocumentServiceBase is destroyed either when RenderFrameHost is
+      // destroyed (covered by RenderFrameDeleted) or when a new document
+      // commits in the same RenderFrameHost (covered by DidFinishNavigation).
+      // Only committed non-same-document non-bfcache non-prerendering
+      // activation navigations replace a document in existing RenderFrameHost.
       DVLOG(1) << __func__ << ": Close connection on navigation.";
       Close();
     }
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index c398dee8..7a7be28 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -224,6 +224,10 @@
   // Whether the navigation is restoring a page from back-forward cache.
   virtual bool IsServedFromBackForwardCache() = 0;
 
+  // Whether this navigation is activating an existing page (e.g. served from
+  // the BackForwardCache or Prerender).
+  virtual bool IsPageActivation() const = 0;
+
   // Navigation control flow --------------------------------------------------
 
   // The net error code if an error happened prior to commit. Otherwise it will
diff --git a/content/public/test/fake_download_item.cc b/content/public/test/fake_download_item.cc
index d142fcde..56c22e9 100644
--- a/content/public/test/fake_download_item.cc
+++ b/content/public/test/fake_download_item.cc
@@ -248,6 +248,14 @@
   dummy_file_path = file_path;
 }
 
+void FakeDownloadItem::SetIsDangerous(bool is_dangerous) {
+  is_dangerous_ = is_dangerous;
+}
+
+void FakeDownloadItem::SetIsMixedContent(bool is_mixed_content) {
+  is_mixed_content_ = is_mixed_content;
+}
+
 bool FakeDownloadItem::GetOpenWhenComplete() const {
   return open_when_complete_;
 }
@@ -450,13 +458,11 @@
 }
 
 bool FakeDownloadItem::IsDangerous() const {
-  NOTREACHED();
-  return false;
+  return is_dangerous_;
 }
 
 bool FakeDownloadItem::IsMixedContent() const {
-  NOTREACHED();
-  return false;
+  return is_mixed_content_;
 }
 
 download::DownloadDangerType FakeDownloadItem::GetDangerType() const {
diff --git a/content/public/test/fake_download_item.h b/content/public/test/fake_download_item.h
index 550b6a2..474be5a6 100644
--- a/content/public/test/fake_download_item.h
+++ b/content/public/test/fake_download_item.h
@@ -162,6 +162,8 @@
   void SetHash(const std::string& hash);
   void SetPercentComplete(int percent_complete);
   void SetDummyFilePath(const base::FilePath& dummy_file_path);
+  void SetIsDangerous(bool is_dangerous);
+  void SetIsMixedContent(bool is_mixed_content);
 
  private:
   base::ObserverList<Observer>::Unchecked observers_;
@@ -196,6 +198,8 @@
   int percent_complete_ = 0;
   download::DownloadItemRerouteInfo reroute_info_;
   bool open_when_complete_ = false;
+  bool is_dangerous_ = false;
+  bool is_mixed_content_ = false;
 
   // The members below are to be returned by methods, which return by reference.
   std::string dummy_string;
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h
index 878b79b..7c7b34b1 100644
--- a/content/public/test/mock_navigation_handle.h
+++ b/content/public/test/mock_navigation_handle.h
@@ -70,6 +70,11 @@
   bool IsServedFromBackForwardCache() override {
     return is_served_from_bfcache_;
   }
+  bool IsPageActivation() const override {
+    MockNavigationHandle* handle = const_cast<MockNavigationHandle*>(this);
+    return handle->IsPrerenderedPageActivation() ||
+           handle->IsServedFromBackForwardCache();
+  }
   RenderFrameHost* GetParentFrame() override {
     return render_frame_host_ ? render_frame_host_->GetParent() : nullptr;
   }
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index dab9185e..a05633e2 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2915,17 +2915,15 @@
                 new_loader_factories->CloneWithoutAppCacheFactory()));
   }
 
-  if (base::FeatureList::IsEnabled(features::kServiceWorkerSubresourceFilter)) {
-    WebString subresource_filter = navigation_params->response.HttpHeaderField(
-        WebString::FromUTF8("Service-Worker-Subresource-Filter"));
-    if (!subresource_filter.IsEmpty()) {
-      ServiceWorkerNetworkProviderForFrame* provider =
-          static_cast<ServiceWorkerNetworkProviderForFrame*>(
-              navigation_params->service_worker_network_provider.get());
-      DCHECK(provider);
+  WebString subresource_filter = navigation_params->response.HttpHeaderField(
+      WebString::FromUTF8("Service-Worker-Subresource-Filter"));
+  if (!subresource_filter.IsEmpty()) {
+    ServiceWorkerNetworkProviderForFrame* provider =
+        static_cast<ServiceWorkerNetworkProviderForFrame*>(
+            navigation_params->service_worker_network_provider.get());
+    DCHECK(provider);
 
-      provider->context()->SetSubresourceFilter(subresource_filter.Utf8());
-    }
+    provider->context()->SetSubresourceFilter(subresource_filter.Utf8());
   }
 
   DCHECK(!pending_loader_factories_);
diff --git a/content/renderer/service_worker/service_worker_network_provider_for_frame.cc b/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
index f4df59d..f5e936ee 100644
--- a/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
+++ b/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
@@ -89,9 +89,7 @@
 }
 
 ServiceWorkerNetworkProviderForFrame::ServiceWorkerNetworkProviderForFrame(
-    RenderFrameImpl* frame)
-    : service_worker_subresource_filter_enabled_(base::FeatureList::IsEnabled(
-          features::kServiceWorkerSubresourceFilter)) {
+    RenderFrameImpl* frame) {
   if (frame)
     observer_ = std::make_unique<NewDocumentObserver>(this, frame);
 }
@@ -141,12 +139,17 @@
   if (request.GetSkipServiceWorker())
     return nullptr;
 
-  if (service_worker_subresource_filter_enabled_) {
-    std::string subresource_filter = context()->subresource_filter();
+  if (observer_ && observer_->render_frame()
+                       ->GetWebFrame()
+                       ->ServiceWorkerSubresourceFilterEnabled()) {
+    const std::string subresource_filter = context()->subresource_filter();
     // If the document has a subresource filter set and the requested URL does
     // not match it, do not intercept the request.
     if (!subresource_filter.empty() &&
         gurl.ref().find(subresource_filter) == std::string::npos) {
+      observer_->ReportFeatureUsage(
+          blink::mojom::WebFeature::
+              kServiceWorkerSubresourceFilterBypassedRequest);
       return nullptr;
     }
   }
diff --git a/content/renderer/service_worker/service_worker_network_provider_for_frame.h b/content/renderer/service_worker/service_worker_network_provider_for_frame.h
index 3cb042a..d0dfc1c 100644
--- a/content/renderer/service_worker/service_worker_network_provider_for_frame.h
+++ b/content/renderer/service_worker/service_worker_network_provider_for_frame.h
@@ -76,8 +76,6 @@
   scoped_refptr<ServiceWorkerProviderContext> context_;
 
   std::unique_ptr<NewDocumentObserver> observer_;
-
-  const bool service_worker_subresource_filter_enabled_ = false;
 };
 
 }  // namespace content
diff --git a/content/renderer/service_worker/service_worker_provider_context.h b/content/renderer/service_worker/service_worker_provider_context.h
index e300e330..1df26c4 100644
--- a/content/renderer/service_worker/service_worker_provider_context.h
+++ b/content/renderer/service_worker/service_worker_provider_context.h
@@ -200,7 +200,6 @@
 
   std::string subresource_filter() const { return subresource_filter_; }
   void SetSubresourceFilter(const std::string& filter) {
-    CountFeature(blink::mojom::WebFeature::kServiceWorkerSubresourceFilter);
     subresource_filter_ = filter;
   }
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index a10085c..4b437b4 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -76,6 +76,8 @@
     "../browser/media/session/mock_media_session_service_impl.h",
     "../browser/presentation/presentation_test_utils.cc",
     "../browser/presentation/presentation_test_utils.h",
+    "../browser/renderer_host/document_service_base_echo_impl.cc",
+    "../browser/renderer_host/document_service_base_echo_impl.h",
     "../browser/renderer_host/input/mock_input_router.cc",
     "../browser/renderer_host/input/mock_input_router.h",
     "../browser/renderer_host/mock_render_widget_host.cc",
@@ -1199,6 +1201,7 @@
     "../browser/renderer_host/back_forward_cache_metrics_browsertest.cc",
     "../browser/renderer_host/blocked_scheme_navigation_browsertest.cc",
     "../browser/renderer_host/cookie_browsertest.cc",
+    "../browser/renderer_host/document_service_base_browsertest.cc",
     "../browser/renderer_host/embedding_token_browsertest.cc",
     "../browser/renderer_host/frame_tree_browsertest.cc",
     "../browser/renderer_host/input/autoscroll_browsertest.cc",
diff --git a/content/test/data/service_worker/subresource_filter.html b/content/test/data/service_worker/subresource_filter.html
deleted file mode 100644
index d83213b..0000000
--- a/content/test/data/service_worker/subresource_filter.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<title>subresource filter</title>
-
-<body>this page is for registering a subresource filter via the corresponding mock http header file</body>
-<script>
-  async function fetch_from_page(url) {
-    try {
-      const response = await fetch(url);
-      return await response.text();
-    } catch (error) {
-      return `${error}`;
-    }
-  }
-</script>
-
-</html>
\ No newline at end of file
diff --git a/content/test/data/service_worker/subresource_filter.html.mock-http-headers b/content/test/data/service_worker/subresource_filter.html.mock-http-headers
deleted file mode 100644
index c163927..0000000
--- a/content/test/data/service_worker/subresource_filter.html.mock-http-headers
+++ /dev/null
@@ -1,2 +0,0 @@
-HTTP/1.1 200 OK
-Service-Worker-Subresource-Filter: foo
diff --git a/content/test/data/service_worker/subresource_filter_empty.html b/content/test/data/service_worker/subresource_filter_empty.html
deleted file mode 100644
index d83213b..0000000
--- a/content/test/data/service_worker/subresource_filter_empty.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<title>subresource filter</title>
-
-<body>this page is for registering a subresource filter via the corresponding mock http header file</body>
-<script>
-  async function fetch_from_page(url) {
-    try {
-      const response = await fetch(url);
-      return await response.text();
-    } catch (error) {
-      return `${error}`;
-    }
-  }
-</script>
-
-</html>
\ No newline at end of file
diff --git a/content/test/data/service_worker/subresource_filter_empty.html.mock-http-headers b/content/test/data/service_worker/subresource_filter_empty.html.mock-http-headers
deleted file mode 100644
index 9d4bba1..0000000
--- a/content/test/data/service_worker/subresource_filter_empty.html.mock-http-headers
+++ /dev/null
@@ -1,2 +0,0 @@
-HTTP/1.1 200 OK
-Service-Worker-Subresource-Filter:
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 0c03dad..31f6943 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1615,7 +1615,7 @@
   AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION = 1552,
   TTSENGINE_SENDTTSAUDIO = 1553,
   AUTOTESTPRIVATE_ACTIVATEAPPWINDOW = 1554,
-  FILEMANAGERPRIVATEINTERNAL_CANCELZIP = 1555,
+  FILEMANAGERPRIVATE_CANCELZIP = 1555,
   ACCESSIBILITY_PRIVATE_GETLOCALIZEDDOMKEYSTRINGFORKEYCODE = 1556,
   SCRIPTING_REGISTERCONTENTSCRIPTS = 1557,
   WMDESKSPRIVATE_CAPTUREACTIVEDESKANDSAVETEMPLATE = 1558,
@@ -1630,6 +1630,7 @@
   STORAGE_SETACCESSLEVEL = 1567,
   OS_TELEMETRY_GETOEMDATA = 1568,
   SCRIPTING_UNREGISTERCONTENTSCRIPTS = 1569,
+  FILEMANAGERPRIVATE_GETZIPPROGRESS = 1570,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/strings/extensions_strings_te.xtb b/extensions/strings/extensions_strings_te.xtb
index 644f502..7a9410d 100644
--- a/extensions/strings/extensions_strings_te.xtb
+++ b/extensions/strings/extensions_strings_te.xtb
@@ -32,7 +32,7 @@
 <translation id="4988792151665380515">పబ్లిక్ కీని ఎగుమతి చేయడానికి విఫలమైంది.</translation>
 <translation id="5026754133087629784">వెబ్ వీక్షణ: <ph name="WEBVIEW_TAG_NAME" /></translation>
 <translation id="5098647635849512368">ప్యాక్ చేయడానికి డైరెక్టరీకి ఖచ్చితమైన పాథ్‌ను కనుగొనడం సాధ్యపడదు.</translation>
-<translation id="5356315618422219272">అనువర్తన వీక్షణ: <ph name="APPVIEW_TAG_NAME" /></translation>
+<translation id="5356315618422219272">యాప్‌ వీక్షణ: <ph name="APPVIEW_TAG_NAME" /></translation>
 <translation id="5436430103864390185">ఆకృతీకరించిన విండోలకు మద్దతు లేదు.</translation>
 <translation id="5456409301717116725">ఈ పొడిగింపు '<ph name="KEY_PATH" />' కీ ఫైల్‌ను కలిగి ఉంది. బహుశా మీరు దాన్ని చేయకూడదు.</translation>
 <translation id="5486326529110362464">ప్రైవేట్ కీ కోసం ఇన్‌పుట్ విలువ తప్పనిసరిగా ఉండాలి.</translation>
diff --git a/gpu/command_buffer/service/shared_image_backing_d3d.cc b/gpu/command_buffer/service/shared_image_backing_d3d.cc
index bebccf84..9e0969b 100644
--- a/gpu/command_buffer/service/shared_image_backing_d3d.cc
+++ b/gpu/command_buffer/service/shared_image_backing_d3d.cc
@@ -16,6 +16,7 @@
 #include "gpu/command_buffer/service/shared_image_representation_dawn_egl_image.h"
 #endif
 #include "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
+#include "ui/gfx/buffer_format_util.h"
 #include "ui/gl/trace_util.h"
 
 namespace gpu {
@@ -270,23 +271,29 @@
     Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture,
     base::win::ScopedHandle shared_handle) {
   DCHECK(shared_handle.IsValid());
+
+  const bool has_webgpu_usage = !!(usage & SHARED_IMAGE_USAGE_WEBGPU);
   // Keyed mutexes are required for Dawn interop but are not used for XR
   // composition where fences are used instead.
   Microsoft::WRL::ComPtr<IDXGIKeyedMutex> dxgi_keyed_mutex;
   d3d11_texture.As(&dxgi_keyed_mutex);
-  DCHECK(!(usage & SHARED_IMAGE_USAGE_WEBGPU) || dxgi_keyed_mutex);
+  DCHECK(!has_webgpu_usage || dxgi_keyed_mutex);
 
   auto shared_state = base::MakeRefCounted<SharedState>(
       std::move(shared_handle), std::move(dxgi_keyed_mutex));
 
-  // Creating the GL texture doesn't require exclusive access to the underlying
-  // D3D11 texture.
-  auto gl_texture = CreateGLTexture(format, size, color_space, d3d11_texture);
-  if (!gl_texture) {
-    DLOG(ERROR) << "Failed to create GL texture";
-    return nullptr;
+  // Do not cache a GL texture in the backing if it could be owned by WebGPU
+  // since there's no GL context to MakeCurrent in the destructor.
+  scoped_refptr<gles2::TexturePassthrough> gl_texture;
+  if (!has_webgpu_usage) {
+    // Creating the GL texture doesn't require exclusive access to the
+    // underlying D3D11 texture.
+    gl_texture = CreateGLTexture(format, size, color_space, d3d11_texture);
+    if (!gl_texture) {
+      DLOG(ERROR) << "Failed to create GL texture";
+      return nullptr;
+    }
   }
-
   return base::WrapUnique(new SharedImageBackingD3D(
       mailbox, format, size, color_space, surface_origin, alpha_type, usage,
       std::move(d3d11_texture), std::move(gl_texture), /*swap_chain=*/nullptr,
@@ -381,21 +388,25 @@
     Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain,
     size_t buffer_index,
     scoped_refptr<SharedState> shared_state)
-    : ClearTrackingSharedImageBacking(mailbox,
-                                      format,
-                                      size,
-                                      color_space,
-                                      surface_origin,
-                                      alpha_type,
-                                      usage,
-                                      gl_texture->estimated_size(),
-                                      false /* is_thread_safe */),
+    : ClearTrackingSharedImageBacking(
+          mailbox,
+          format,
+          size,
+          color_space,
+          surface_origin,
+          alpha_type,
+          usage,
+          gl_texture
+              ? gl_texture->estimated_size()
+              : gfx::BufferSizeForBufferFormat(size, viz::BufferFormat(format)),
+          false /* is_thread_safe */),
       d3d11_texture_(std::move(d3d11_texture)),
       gl_texture_(std::move(gl_texture)),
       swap_chain_(std::move(swap_chain)),
       buffer_index_(buffer_index),
       shared_state_(std::move(shared_state)) {
-  DCHECK(gl_texture_);
+  const bool has_webgpu_usage = !!(usage & SHARED_IMAGE_USAGE_WEBGPU);
+  DCHECK(has_webgpu_usage || gl_texture_);
 }
 
 SharedImageBackingD3D::~SharedImageBackingD3D() {
@@ -576,8 +587,18 @@
 SharedImageBackingD3D::ProduceGLTexturePassthrough(SharedImageManager* manager,
                                                    MemoryTypeTracker* tracker) {
   TRACE_EVENT0("gpu", "SharedImageBackingD3D::ProduceGLTexturePassthrough");
+  // Lazily create a GL texture if it wasn't provided on initialization.
+  auto gl_texture = gl_texture_;
+  if (!gl_texture) {
+    gl_texture =
+        CreateGLTexture(format(), size(), color_space(), d3d11_texture_);
+    if (!gl_texture) {
+      DLOG(ERROR) << "Failed to create GL texture";
+      return nullptr;
+    }
+  }
   return std::make_unique<SharedImageRepresentationGLTexturePassthroughD3D>(
-      manager, this, tracker, gl_texture_);
+      manager, this, tracker, std::move(gl_texture));
 }
 
 std::unique_ptr<SharedImageRepresentationSkia>
diff --git a/gpu/command_buffer/service/shared_image_backing_d3d.h b/gpu/command_buffer/service/shared_image_backing_d3d.h
index 506f5f1..c5b3719 100644
--- a/gpu/command_buffer/service/shared_image_backing_d3d.h
+++ b/gpu/command_buffer/service/shared_image_backing_d3d.h
@@ -179,6 +179,8 @@
 
   // Texture could be nullptr if an empty backing is needed for testing.
   Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture_;
+
+  // Can be null for backings owned by non-GL producers e.g. WebGPU.
   scoped_refptr<gles2::TexturePassthrough> gl_texture_;
 
   Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
index bf95d2d..14764ec 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
@@ -1067,6 +1067,72 @@
 
   factory_ref.reset();
 }
+
+// Check if making Dawn have the last ref works without a current GL context.
+TEST_F(SharedImageBackingFactoryD3DTest, Dawn_HasLastRef) {
+  if (!IsD3DSharedImageSupported())
+    return;
+
+  // Create a backing using mailbox.
+  auto mailbox = Mailbox::GenerateForSharedImage();
+  const auto format = viz::ResourceFormat::RGBA_8888;
+  const gfx::Size size(1, 1);
+  const auto color_space = gfx::ColorSpace::CreateSRGB();
+  const uint32_t usage = SHARED_IMAGE_USAGE_GLES2 | SHARED_IMAGE_USAGE_DISPLAY |
+                         SHARED_IMAGE_USAGE_WEBGPU;
+  const gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle;
+  auto backing = shared_image_factory_->CreateSharedImage(
+      mailbox, format, surface_handle, size, color_space,
+      kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, usage,
+      false /* is_thread_safe */);
+  ASSERT_NE(backing, nullptr);
+
+  std::unique_ptr<SharedImageRepresentationFactoryRef> factory_ref =
+      shared_image_manager_.Register(std::move(backing),
+                                     memory_type_tracker_.get());
+
+  // Create a Dawn D3D12 device
+  dawn_native::Instance instance;
+  instance.DiscoverDefaultAdapters();
+
+  std::vector<dawn_native::Adapter> adapters = instance.GetAdapters();
+  auto adapter_it = std::find_if(
+      adapters.begin(), adapters.end(), [](dawn_native::Adapter adapter) {
+        return adapter.GetBackendType() == dawn_native::BackendType::D3D12;
+      });
+  ASSERT_NE(adapter_it, adapters.end());
+
+  wgpu::Device device = wgpu::Device::Acquire(adapter_it->CreateDevice());
+  DawnProcTable procs = dawn_native::GetProcs();
+  dawnProcSetProcs(&procs);
+
+  auto dawn_representation = shared_image_representation_factory_->ProduceDawn(
+      mailbox, device.Get(), WGPUBackendType_D3D12);
+  ASSERT_NE(dawn_representation, nullptr);
+
+  // Creating the Skia representation will also create a temporary GL texture.
+  auto skia_representation = shared_image_representation_factory_->ProduceSkia(
+      mailbox, context_state_);
+  ASSERT_NE(skia_representation, nullptr);
+
+  // Drop Skia representation and factory ref so that the Dawn representation
+  // has the last ref.
+  skia_representation.reset();
+  factory_ref.reset();
+
+  // Ensure no GL context is current.
+  context_->ReleaseCurrent(surface_.get());
+
+  // This shouldn't crash due to no GL context being current.
+  dawn_representation.reset();
+
+  // Shut down Dawn
+  device = wgpu::Device();
+  dawnProcSetProcs(nullptr);
+
+  // Make context current so that it can be destroyed.
+  context_->MakeCurrent(surface_.get());
+}
 #endif  // BUILDFLAG(USE_DAWN)
 
 std::vector<std::unique_ptr<SharedImageRepresentationFactoryRef>>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
index 2bafaa9..35d82211 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -21,6 +21,8 @@
 <translation id="2168108852149185974">አንዳንድ ተጨማሪዎች Chromium እንዲበላሽ ያደርጋሉ። እባክዎ የሚከተለውን ያራግፉ፦</translation>
 <translation id="2178608107313874732">Chromium አሁን ካሜራዎን መጠቀም አይችልም</translation>
 <translation id="2195025571279539885">Chromium በሚቀጥለው ጊዜ ከዚህ ጣቢያ የመጡ የ<ph name="LANGUAGE_NAME" /> ገጾችን እንዲተረጎምልዎ ይፈልጋሉ?</translation>
+<translation id="2450140762465183767">አገናኞችን በመልዕክቶች፣ በሰነዶች እና በሌሎች መተግበሪያዎች ውስጥ መታ በሚያደርጉበት ጊዜ ሁሉ Chromiumን አሁን መጠቀም ይችላሉ።</translation>
+<translation id="2478931088402984578"><ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />ን ይምረጡ</translation>
 <translation id="2567507405773541360">ከመቼውም ጊዜ በበለጠ ቀላል፣ ደህንነቱ በተጠበቀ እና ፈጣን በሆነ Chromium አማካኝነት ተጨማሪ ነገሮችን ያከናውኑ</translation>
 <translation id="2590893390871230428">የChromium ውሂብዎን ያስምሩ</translation>
 <translation id="2650312721222849884">Chromiumን ከሚጠቀሙበት የትኛዉም ቦታ ትሮችን ለማየት ስምረትን ያብሩ</translation>
@@ -99,6 +101,7 @@
 <translation id="894437814105052438">ዘግተው ሲወጡ Chromium ማንኛውም አዲስ ውሂብ ከGoogle መለያዎ ጋር አያሰምርም። ከዚህ ቀደም የሰመረ ውሂብ በመለያው ውስጥ ይቆያል።</translation>
 <translation id="9022552996538154597">Chromium ውስጥ ይግቡ</translation>
 <translation id="9089354809943900324">Chromium ጊዜው አልፎበታል</translation>
+<translation id="9110075932708282655">በነባሪ Chromiumን ይጠቀሙ</translation>
 <translation id="921174536258924340">Chromium ሁሉንም የይለፍ ቃሎች ማረጋገጥ አልቻለም። ነገ እንደገና ይሞክሩ ወይም <ph name="BEGIN_LINK" />የGoogle መለያዎን ይለፍ ቃላት ይፈትሹ።<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">የChromium ደራሲዎች</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
index 671b23b..4385f1d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
@@ -21,6 +21,8 @@
 <translation id="2168108852149185974">Einige Add-ons führen zum Ausfall von Chromium. Bitte deinstallieren Sie:</translation>
 <translation id="2178608107313874732">Chromium kann gerade nicht auf die Kamera zugreifen</translation>
 <translation id="2195025571279539885">Soll Chromium beim nächsten Mal eine Übersetzung von Seiten dieser Website anbieten, die auf <ph name="LANGUAGE_NAME" /> sind?</translation>
+<translation id="2450140762465183767">Sie können jetzt Chromium jederzeit nutzen, wenn Sie in Nachrichten, Dokumenten und anderen Apps auf Links tippen.</translation>
+<translation id="2478931088402984578">Wählen Sie <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /> aus</translation>
 <translation id="2567507405773541360">Jetzt mit dem neuen ultraschnellen Chromium ganz einfach und sicherer noch mehr erledigen</translation>
 <translation id="2590893390871230428">Chromium-Daten synchronisieren</translation>
 <translation id="2650312721222849884">Aktivieren Sie die Synchronisierung, um Ihre Tabs überall dort aufzurufen, wo Sie Chromium verwenden</translation>
@@ -99,6 +101,7 @@
 <translation id="894437814105052438">Wenn Sie sich abmelden, synchronisiert Chromium keine neuen Daten mehr mit Ihrem Google-Konto. Daten, die bereits synchronisiert wurden, bleiben im Konto gespeichert.</translation>
 <translation id="9022552996538154597">In Chromium anmelden</translation>
 <translation id="9089354809943900324">Chromium ist veraltet.</translation>
+<translation id="9110075932708282655">Standardmäßig Chromium verwenden</translation>
 <translation id="921174536258924340">Chromium konnte nicht alle Passwörter prüfen. Versuchen Sie es morgen noch einmal oder <ph name="BEGIN_LINK" />prüfen Sie die Passwörter in Ihrem Google-Konto<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">Die Chromium-Autoren</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
index 252994a..d0605d7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome ሁሉንም የይለፍ ቃላት ማረጋገጥ አልቻለም። ነገ እንደገና ይሞክሩ።</translation>
 <translation id="2869959624320573933">በመለያ ወደ Chrome ይግቡ</translation>
 <translation id="2919738076569633423">Chromeን በመጠቀምዎ በ<ph name="BEGIN_LINK_TOS" />አገልግሎት ውሉ<ph name="END_LINK_TOS" /> ተስማማተዋል።</translation>
+<translation id="2957447865124070833"><ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" />ን ይምረጡ</translation>
 <translation id="3030414234702425231">እርስዎ በ<ph name="SIGNOUT_MANAGED_DOMAIN" /> ከሚተዳደር መለያ ዘግተው እየወጡ ስለሆነ Chrome ውሂብዎ ከዚህ መሣሪያ ላይ ይሰረዛል። የእርስዎ ውሂብ በእርስዎ Google መለያ ውስጥ ይቆያል።</translation>
 <translation id="3167189358072330585">መለያዎ በGoogle Chrome ላይ አይሠራም። እባክዎ የጎራዎ አስተዳዳሪውን ያነጋግሩ ወይም ለመግባት መደበኛ የሆነ የGoogle መለያ ይጠቀሙ።</translation>
 <translation id="3173834708294760622">የGoogle Chrome ገጽ</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">በሌሎች መተግበሪያዎች ውስጥ ያሉ አገናኞችን በማንኛውም ጊዜ መታ ሲያደርጉ Chromeን ይክፈቱ</translation>
 <translation id="5854621639439811139">የChrome ጠቃሚ ምክር። አሁን እንደ ተመለስ፣ ወደፊት እና ፍለጋ ያሉ አንዳንድ አዝራሮች በማያ ገጽዎ ግርጌ ላይ ናቸው።</translation>
 <translation id="5876773482963502140">Chrome አካባቢዎን እንዲያውቅ ከፈቀዱ Chrome እርስዎ ወደሚፈቅዷቸው ማናቸውም ጣቢያዎች ይልከዋል። ጣቢያዎች እንደ በአቅራቢያ ያሉ ሱቆች ወይም ዜናዎች ያሉ ለእርስዎ የሚያሳዩት የአከባቢ መረጃ ሲኖራቸው አካባቢዎን ሊጠይቁ ይችላሉ።</translation>
+<translation id="6054613632208573261">በነባሪነት Chromeን ይጠቀሙ</translation>
 <translation id="6063091872902370735">የChrome በመለያ መግባትን ይፍቀዱ</translation>
 <translation id="6181930887571472871">ወደ Chrome ይቀይሩ</translation>
 <translation id="6238746320622508509">Chrome የእርስዎን ማንነት የማያሳውቁ ትሮች እንዲቆልፍ ይፍቀዱለት።</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">ወደ Chrome እንኳን ደህና መጡ</translation>
 <translation id="7662994914830945754">Chromeን ከሚጠቀሙበት የትኛዉም ቦታ ሆነዉ ትሮችዎን ለማየት በመለያ ይግቡ እና ስምረትን ያብሩ</translation>
 <translation id="766361182512894255">የይለፍ ቃልዎ በውሂብ ጥሰት ውስጥ ተጋልጧል። Chrome የይለፍ ቃልን አሁኑኑ እንዲቀይሩ ይመክራል።</translation>
+<translation id="7693590760643069321">አገናኞችን በመልዕክቶች፣ በሰነዶች እና በሌሎች መተግበሪያዎች ውስጥ መታ በሚያደርጉበት ጊዜ ሁሉ Chromeን አሁን መጠቀም ይችላሉ።</translation>
 <translation id="7698568245838009292">Chrome ካሜራውን መድረስ ይፈልጋል</translation>
 <translation id="7855730255114109580">Google Chrome የተዘመነ ነው</translation>
 <translation id="8022947259858476807">አገናኞችን ለመክፈት፣ ከመግብሮች ለመፈለግ እና በሌሎች መተግበሪያዎች ውስጥ የይለፍ ቃሎችን የራስ-ለመሙላት በነባሪነት Chrome ን ይጠቀሙ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
index a801d41..21dd15e 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome konnte nicht alle Passwörter prüfen. Versuchen Sie es morgen noch einmal.</translation>
 <translation id="2869959624320573933">In Chrome anmelden</translation>
 <translation id="2919738076569633423">Wenn Sie Chrome nutzen, stimmen Sie damit den <ph name="BEGIN_LINK_TOS" />Nutzungsbedingungen<ph name="END_LINK_TOS" /> zu.</translation>
+<translation id="2957447865124070833">Wählen Sie <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /> aus</translation>
 <translation id="3030414234702425231">Sie melden sich von einem Konto ab, das von <ph name="SIGNOUT_MANAGED_DOMAIN" /> verwaltet wird. Dadurch werden Ihre Chrome-Daten von diesem Gerät gelöscht. Sie bleiben jedoch in Ihrem Google-Konto erhalten.</translation>
 <translation id="3167189358072330585">Dieses Konto funktioniert in Google Chrome nicht. Wenden Sie sich an Ihren Domainadministrator oder melden Sie sich mit einem Google-Standardkonto an.</translation>
 <translation id="3173834708294760622">Google Chrome-Seite</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Chrome immer öffnen, wenn Sie auf Links in anderen Apps tippen</translation>
 <translation id="5854621639439811139">Chrome-Tipp: Manche Schaltflächen wie "Zurück", "Weiter" und "Suche" befinden sich jetzt unten auf dem Bildschirm.</translation>
 <translation id="5876773482963502140">Wenn Sie zulassen, dass Chrome Ihren Standort ermittelt, sendet der Browser diesen an Websites, für die Sie die Berechtigung dazu erteilen. Möglicherweise fragen Websites nach Ihrem Standort, wenn sie lokale Informationen wie Geschäfte in der Nähe oder Nachrichten für Sie haben.</translation>
+<translation id="6054613632208573261">Standardmäßig Chrome verwenden</translation>
 <translation id="6063091872902370735">Anmeldung in Chrome zulassen</translation>
 <translation id="6181930887571472871">Zu Chrome wechseln</translation>
 <translation id="6238746320622508509">Erlauben Sie Chrome, Ihre Inkognitotabs zu sperren.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Willkommen bei Chrome</translation>
 <translation id="7662994914830945754">Melden Sie sich an und aktivieren Sie die Synchronisierung, um Ihre Tabs überall dort aufzurufen, wo Sie Chrome verwenden</translation>
 <translation id="766361182512894255">Ihr Passwort wurde durch eine Datenpanne preisgegeben. Chrome empfiehlt, das Passwort jetzt zu ändern.</translation>
+<translation id="7693590760643069321">Sie können jetzt Chrome jederzeit nutzen, wenn Sie in Nachrichten, Dokumenten und anderen Apps auf Links tippen.</translation>
 <translation id="7698568245838009292">Chrome möchte auf Ihre Kamera zugreifen</translation>
 <translation id="7855730255114109580">Google Chrome ist auf dem neuesten Stand.</translation>
 <translation id="8022947259858476807">Chrome standardmäßig verwenden, um Links zu öffnen, über Widgets zu suchen und Passwörter in anderen Apps automatisch auszufüllen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 55eb1362..b11d08c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />፣ <ph name="STATE" />፣ <ph name="URL" /></translation>
 <translation id="2840687315230832938">የመጀመሪያ የስምረት ማዋቀር አልተጠናቀቀም</translation>
 <translation id="2843803966603263712">የትርጉም ቅንብሮችን ዳግም አስጀምር</translation>
+<translation id="2848086008667475748">በቅንብሮች ውስጥ ነባሪ ያድርጉ…</translation>
 <translation id="2858204748079866344">የእርስዎን ግላዊነት ለመጠበቅ፣ Chrome በዚህ መስክ ውስጥ የእርስዎን የይለፍ ቃል በራስ-ሰር አይሞላውም።</translation>
 <translation id="285960592395650245">ማውረድ ዳግም ሞክር</translation>
 <translation id="2870560284913253234">ጣቢያ</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">ሁልጊዜ አሳይ</translation>
 <translation id="418156467088430727">የመስመር ውጭ ስሪቱን በአዲስ ትር ውስጥ ይመልከቱ</translation>
 <translation id="4181841719683918333">ቋንቋዎች</translation>
+<translation id="4237377247299956313"><ph name="BEGIN_BOLD" />ነባሪ የአሳሽ መተግበሪያ<ph name="END_BOLD" />ን መታ ያድርጉ</translation>
 <translation id="424315890655130736">የይለፍ ሐረግ ያስገቡ</translation>
 <translation id="4263576668337963058">ሊገኙ የሚችሉ የገጽ እርምጃዎችን አሳይ</translation>
 <translation id="4267380167363222949">ቀጣዩ ትር</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">የQR ኮድ ፍለጋ</translation>
 <translation id="4378154925671717803">ስልክ</translation>
 <translation id="4389019817280890563">ቋንቋን ለመለወጥ መታ ያድርጉ።</translation>
+<translation id="4442550905108052454"><ph name="BEGIN_BOLD" />ቅንብሮች<ph name="END_BOLD" />ን ይክፈቱ</translation>
 <translation id="4454246407045105932">ቋንቋን ያክሉ</translation>
 <translation id="4469418912670346607">ማዋቀርን ቀጥል</translation>
 <translation id="4474494258097106883">ለእርስዎ iPhone የተገነባ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index c6ad5da..c91f9db 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Erste Einrichtung der Synchronisierung nicht abgeschlossen</translation>
 <translation id="2843803966603263712">Übersetzungseinstellungen zurücksetzen</translation>
+<translation id="2848086008667475748">In den Einstellungen als Standardbrowser festlegen…</translation>
 <translation id="2858204748079866344">Um Ihre Daten zu schützen, füllt Chrome dieses Feld nicht automatisch mit Ihrem Passwort aus.</translation>
 <translation id="285960592395650245">Download wiederholen</translation>
 <translation id="2870560284913253234">Website</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Immer anzeigen</translation>
 <translation id="418156467088430727">Offlineversion in einem neuen Tab ansehen</translation>
 <translation id="4181841719683918333">Sprachen</translation>
+<translation id="4237377247299956313">Tippen Sie auf <ph name="BEGIN_BOLD" />Standard-Browser-App<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Passphrase eingeben</translation>
 <translation id="4263576668337963058">Verfügbare Seitenaktionen anzeigen</translation>
 <translation id="4267380167363222949">Nächster Tab</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">QR-Code-Suche</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4389019817280890563">Zum Ändern der Sprache hier tippen.</translation>
+<translation id="4442550905108052454">Öffnen Sie die <ph name="BEGIN_BOLD" />Einstellungen<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Sprache hinzufügen</translation>
 <translation id="4469418912670346607">Einrichtung fortsetzen</translation>
 <translation id="4474494258097106883">Für Ihr iPhone entwickelt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index c187a7f..5f0da6e9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -492,7 +492,7 @@
 <translation id="5955891643922670672">ఆఫ్‌లైన్ వెర్షన్‌ను చూస్తున్నారు</translation>
 <translation id="5957613098218939406">మరిన్ని ఎంపికలు</translation>
 <translation id="5963939892571022323">హైలైట్‌కు లింక్‌ను క్రియేట్ చేయడం సాధ్యం కాదు.</translation>
-<translation id="5965679971710331625">మీరు సైన్ ఇన్ చేసారు</translation>
+<translation id="5965679971710331625">మీరు సైన్ ఇన్ చేశారు</translation>
 <translation id="5979837087407522202">పాస్‌వర్డ్‌లను వెతుకు</translation>
 <translation id="5982717868370722439">ఇప్పటికే ఉన్న డేటాను <ph name="USER_EMAIL" />కి జోడించండి.</translation>
 <translation id="5984222099446776634">ఇటీవల సందర్శించినవి</translation>
@@ -815,7 +815,7 @@
 <translation id="8976382372951310360">సహాయం</translation>
 <translation id="8976414606286374109">కార్డ్‌లు మీ Google ఖాతాకు సేవ్ చేయబడ్డాయి.</translation>
 <translation id="8981454092730389528">Google కార్య‌క‌లాపాల నియంత్రణలు</translation>
-<translation id="8985320356172329008">Googleకి ఇలా సైన్ ఇన్ చేసారు</translation>
+<translation id="8985320356172329008">Googleకి ఇలా సైన్ ఇన్ చేశారు</translation>
 <translation id="9000089900434778519">మీ సెర్చ్ ఇంజిన్ <ph name="DSE_NAME" />. వర్తిస్తే, మీ సెర్చ్ హిస్టరీని తొలగించడానికి దాని సూచనలను చూడండి.</translation>
 <translation id="9034759925968272072">మీరు మీ Google ఖాతా నుండి సైన్ అవుట్ చేయబడరు. <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />లో మీ Google ఖాతా ఇతర రకాల బ్రౌజింగ్ చరిత్రను కలిగి ఉండవచ్చు.</translation>
 <translation id="9037965129289936994">అసలైనది చూపు</translation>
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
index aedb1f8..2f571dd3 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
@@ -15,9 +15,11 @@
 #import "components/prefs/ios/pref_observer_bridge.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "components/prefs/pref_service.h"
+#include "components/sync/driver/sync_service.h"
 #import "ios/chrome/browser/bookmarks/managed_bookmark_service_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/policy/policy_features.h"
+#include "ios/chrome/browser/sync/sync_service_factory.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_consumer.h"
@@ -73,6 +75,9 @@
 // controller.
 @property(nonatomic, strong) BookmarkPromoController* bookmarkPromoController;
 
+// Sync service.
+@property(nonatomic, assign) syncer::SyncService* syncService;
+
 @end
 
 @implementation BookmarkHomeMediator
@@ -109,11 +114,13 @@
   _prefChangeRegistrar->Init(self.browserState->GetPrefs());
   _prefObserverBridge.reset(new PrefObserverBridge(self));
 
-    _prefObserverBridge->ObserveChangesForPreference(
-        bookmarks::prefs::kEditBookmarksEnabled, _prefChangeRegistrar.get());
+  _prefObserverBridge->ObserveChangesForPreference(
+      bookmarks::prefs::kEditBookmarksEnabled, _prefChangeRegistrar.get());
 
-    _prefObserverBridge->ObserveChangesForPreference(
-        bookmarks::prefs::kManagedBookmarks, _prefChangeRegistrar.get());
+  _prefObserverBridge->ObserveChangesForPreference(
+      bookmarks::prefs::kManagedBookmarks, _prefChangeRegistrar.get());
+
+  _syncService = SyncServiceFactory::GetForBrowserState(self.browserState);
 
   [self computePromoTableViewData];
   [self computeBookmarkTableViewData];
@@ -308,7 +315,8 @@
   BOOL promoVisible = ((self.sharedState.tableViewDisplayedRootNode ==
                         self.sharedState.bookmarkModel->root_node()) &&
                        self.bookmarkPromoController.shouldShowSigninPromo &&
-                       !self.sharedState.currentlyShowingSearchResults);
+                       !self.sharedState.currentlyShowingSearchResults) &&
+                      !self.isSyncDisabledByAdministrator;
 
   if (promoVisible == self.sharedState.promoVisible) {
     return;
@@ -494,7 +502,8 @@
   // Permanent nodes ("Bookmarks Bar", "Other Bookmarks") at the root node might
   // be added after syncing.  So we need to refresh here.
   if (self.sharedState.tableViewDisplayedRootNode ==
-      self.sharedState.bookmarkModel->root_node()) {
+          self.sharedState.bookmarkModel->root_node() ||
+      self.isSyncDisabledByAdministrator) {
     [self.consumer refreshContents];
     return;
   }
@@ -545,4 +554,11 @@
   }
 }
 
+// Returns YES if the user cannot turn on sync for enterprise policy reasons.
+- (BOOL)isSyncDisabledByAdministrator {
+  DCHECK(self.syncService);
+  return self.syncService->GetDisableReasons().Has(
+      syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY);
+}
+
 @end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_egtest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_egtest.mm
index ef5ea528..9d531a3 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_egtest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_egtest.mm
@@ -1201,7 +1201,7 @@
 #else
 #define MAYBE_testTabGridBulkActionShare DISABLED_testTabGridBulkActionShare
 #endif
-- (void)MAYBE_testTabGridBulkActionShare {
+- (void)testTabGridBulkActionShare {
   if (!base::ios::IsRunningOnIOS14OrLater()) {
     EARL_GREY_TEST_SKIPPED(
         @"Bulk actions are only supported on iOS 14 and later.");
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 92e4213..30c75f78 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
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">የተጣቃሚ ስም</translation>
 <translation id="8518521100965196752">የይለፍ ቃላትን ለመጠቀም በመጀመሪያ በመሣሪያዎ ላይ የይለፍ ኮድ ማቀናበር አለብዎት።</translation>
 <translation id="8877181643142698531">ዩአርኤል</translation>
+<translation id="9069288651897538648">ለ<ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/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 319a1283f..c44129f 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
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Nutzername</translation>
 <translation id="8518521100965196752">Sie müssen zuerst einen Code auf Ihrem Gerät einrichten, um Passwörter zu verwenden.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Für <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index 8256117d..153471b5 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-12f4708be935a6b984d46c8c3fd619edfbc06aee
\ No newline at end of file
+2b25a72ba73e64dec3e4a544daeed48bc33ac708
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index 006385e..cfab6d2 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-c2cb46e66232e23ea738668538a3547c7857b27d
\ No newline at end of file
+54772b5ceeb6e92cfc6c515175f850ff72a8e68f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
index ab7ed20..81e6105d 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-567791957da493a57959ea40f2b96f49367a8db9
\ No newline at end of file
+c718e01fb3ef68f0912096f6a4a0cab1659efb6c
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
index f1ab347..7e9352f 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-92483dbbdee94dd2a956ed882fd73e0847271e28
\ No newline at end of file
+1270768db03806d5db478356642aa241ba8020ba
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index 4de7cc1..c2328e9 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-f0383d133f13228a20e8c48e627d6316cdb27766
\ No newline at end of file
+bebe1f68204606b8e4cc5ac03d9786f8b54b336a
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index e86bf91..2ac0814 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-109be2d79ddea7d3c22be831373e6d0b626752b7
\ No newline at end of file
+0de3cc21a610a9d029497cb0dcf2d3c5af7b8b2b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index 72b039df..525bb93 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-7ab19cab3219927743a9364e3647486e0db66780
\ No newline at end of file
+48c263fd2930d73f372202202f26f88960c95e6d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index bed3489..fb2f1d1 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-504c32a942276ab61393426f25a28d972c9e01ea
\ No newline at end of file
+11bd28a395c3d3b7c59bfc9eed5478adbbfe1661
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index 7998e0f..6d9bb17 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-baeecd630da45013a4c1b3b383131530d96680b6
\ No newline at end of file
+72b7ce55b1b2af48d3b6353c44e98652e0e0a70f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index d024350..bebb480 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-484973bac940afa16b523f95d3bc758793d3e116
\ No newline at end of file
+c3b83ab2e5e1b42551252e59a5c974d7badeecc8
\ No newline at end of file
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 336855c8..0dc2efc 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -751,12 +751,11 @@
   return kOk;
 }
 
-void ChunkDemuxer::SetTracksWatcher(
-    const std::string& id,
-    const MediaTracksUpdatedCB& tracks_updated_cb) {
+void ChunkDemuxer::SetTracksWatcher(const std::string& id,
+                                    MediaTracksUpdatedCB tracks_updated_cb) {
   base::AutoLock auto_lock(lock_);
   CHECK(IsValidId(id));
-  source_state_map_[id]->SetTracksWatcher(tracks_updated_cb);
+  source_state_map_[id]->SetTracksWatcher(std::move(tracks_updated_cb));
 }
 
 void ChunkDemuxer::SetParseWarningCallback(
@@ -764,7 +763,7 @@
     SourceBufferParseWarningCB parse_warning_cb) {
   base::AutoLock auto_lock(lock_);
   CHECK(IsValidId(id));
-  source_state_map_[id]->SetParseWarningCallback(parse_warning_cb);
+  source_state_map_[id]->SetParseWarningCallback(std::move(parse_warning_cb));
 }
 
 void ChunkDemuxer::RemoveId(const std::string& id) {
diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h
index 6f40e9c..9f16a03 100644
--- a/media/filters/chunk_demuxer.h
+++ b/media/filters/chunk_demuxer.h
@@ -257,11 +257,13 @@
                std::unique_ptr<VideoDecoderConfig> video_config);
 
   // Notifies a caller via |tracks_updated_cb| that the set of media tracks
-  // for a given |id| has changed.
+  // for a given |id| has changed. This callback must be set before any calls to
+  // AppendData() for this |id|.
   void SetTracksWatcher(const std::string& id,
-                        const MediaTracksUpdatedCB& tracks_updated_cb);
+                        MediaTracksUpdatedCB tracks_updated_cb);
 
-  // Notifies a caller via |parse_warning_cb| of a parse warning.
+  // Notifies a caller via |parse_warning_cb| of a parse warning. This callback
+  // must be set before any calls to AppendData() for this |id|.
   void SetParseWarningCallback(const std::string& id,
                                SourceBufferParseWarningCB parse_warning_cb);
 
diff --git a/media/filters/h264_bitstream_buffer.cc b/media/filters/h264_bitstream_buffer.cc
index 3d6a8c9a..7d8126b 100644
--- a/media/filters/h264_bitstream_buffer.cc
+++ b/media/filters/h264_bitstream_buffer.cc
@@ -4,6 +4,7 @@
 
 #include "media/filters/h264_bitstream_buffer.h"
 
+#include "base/bits.h"
 #include "base/sys_byteorder.h"
 
 namespace media {
@@ -23,6 +24,7 @@
 
   capacity_ = 0;
   pos_ = 0;
+  bits_in_buffer_ = 0;
   reg_ = 0;
 
   Grow();
@@ -43,7 +45,7 @@
   if (bits_in_reg == 0)
     return;
 
-  size_t bytes_in_reg = (bits_in_reg + 7) / 8;
+  size_t bytes_in_reg = base::bits::AlignUp(bits_in_reg, 8) / 8;
   reg_ <<= (kRegBitSize - bits_in_reg);
 
   // Convert to MSB and append as such to the stream.
@@ -54,6 +56,7 @@
     Grow();
 
   memcpy(data_ + pos_, &reg_, bytes_in_reg);
+  bits_in_buffer_ = pos_ * 8 + bits_in_reg;
   pos_ += bytes_in_reg;
 
   reg_ = 0;
@@ -133,10 +136,18 @@
   // Byte-alignment zero bits.
   AppendBits(bits_left_in_reg_ % 8, 0);
 
+  Flush();
+}
+
+void H264BitstreamBuffer::Flush() {
   if (bits_left_in_reg_ != kRegBitSize)
     FlushReg();
 }
 
+size_t H264BitstreamBuffer::BitsInBuffer() const {
+  return bits_in_buffer_;
+}
+
 size_t H264BitstreamBuffer::BytesInBuffer() const {
   DCHECK_FINISHED();
   return pos_;
diff --git a/media/filters/h264_bitstream_buffer.h b/media/filters/h264_bitstream_buffer.h
index 4c5d1fb..773d58b 100644
--- a/media/filters/h264_bitstream_buffer.h
+++ b/media/filters/h264_bitstream_buffer.h
@@ -68,10 +68,22 @@
   // returned by data() to be correct.
   void FinishNALU();
 
+  // Finishes current bit stream. This will flush any cached bits in the reg
+  // without RBSP trailing bits alignment. e.g. for packed slice header, it is
+  // not a complete NALU, the slice data and RBSP trailing will be filled by
+  // user mode driver. This MUST be called for the stream returned by data() to
+  // be correct.
+  void Flush();
+
   // Return number of full bytes in the stream. Note that FinishNALU() has to
   // be called to flush cached bits, or the return value will not include them.
   size_t BytesInBuffer() const;
 
+  // Returns number of bits in the stream. Note that FinishNALU() or Flush() has
+  // to be called to flush cached bits, or the return value will not include
+  // them.
+  size_t BitsInBuffer() const;
+
   // Return a pointer to the stream. FinishNALU() must be called before
   // accessing the stream, otherwise some bits may still be cached and not
   // in the buffer.
@@ -120,6 +132,8 @@
 
   // Current byte offset in data_ (points to the start of unwritten bits).
   size_t pos_;
+  // Current last bit in data_ (points to the start of unwritten bit).
+  size_t bits_in_buffer_;
 
   // Buffer for stream data.
   uint8_t* data_;
diff --git a/media/filters/h264_bitstream_buffer_unittest.cc b/media/filters/h264_bitstream_buffer_unittest.cc
index aa9fd93..374d0c8 100644
--- a/media/filters/h264_bitstream_buffer_unittest.cc
+++ b/media/filters/h264_bitstream_buffer_unittest.cc
@@ -4,6 +4,7 @@
 
 #include <stdint.h>
 
+#include "base/bits.h"
 #include "media/filters/h264_bitstream_buffer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -11,6 +12,22 @@
 
 namespace {
 const uint64_t kTestPattern = 0xfedcba0987654321;
+
+uint64_t GetDataFromBuffer(const uint8_t* ptr, uint64_t num_bits) {
+  uint64_t got = 0;
+  while (num_bits > 8) {
+    got |= (*ptr & 0xff);
+    num_bits -= 8;
+    got <<= (num_bits > 8 ? 8 : num_bits);
+    ptr++;
+  }
+  if (num_bits > 0) {
+    uint64_t temp = (*ptr & 0xff);
+    temp >>= (8 - num_bits);
+    got |= temp;
+  }
+  return got;
+}
 }
 
 class H264BitstreamBufferAppendBitsTest
@@ -23,7 +40,7 @@
   uint64_t num_bits = GetParam();
   // TODO(posciak): Tests for >64 bits.
   ASSERT_LE(num_bits, 64u);
-  uint64_t num_bytes = (num_bits + 7) / 8;
+  uint64_t num_bytes = base::bits::AlignUp(num_bits, 8) / 8;
 
   b->AppendBits(num_bits, kTestPattern);
   b->FlushReg();
@@ -31,23 +48,31 @@
   EXPECT_EQ(b->BytesInBuffer(), num_bytes);
 
   const uint8_t* ptr = b->data();
-  uint64_t got = 0;
+  uint64_t got = GetDataFromBuffer(ptr, num_bits);
   uint64_t expected = kTestPattern;
 
   if (num_bits < 64)
     expected &= ((1ull << num_bits) - 1);
 
-  while (num_bits > 8) {
-    got |= (*ptr & 0xff);
-    num_bits -= 8;
-    got <<= (num_bits > 8 ? 8 : num_bits);
-    ptr++;
-  }
-  if (num_bits > 0) {
-    uint64_t temp = (*ptr & 0xff);
-    temp >>= (8 - num_bits);
-    got |= temp;
-  }
+  EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
+}
+
+TEST_F(H264BitstreamBufferAppendBitsTest, VerifyFlushAndBitsInBuffer) {
+  auto b = base::MakeRefCounted<H264BitstreamBuffer>();
+  uint64_t num_bits = 20;
+  uint64_t num_bytes = base::bits::AlignUp(num_bits, 8) / 8;
+
+  b->AppendBits(num_bits, kTestPattern);
+  b->Flush();
+
+  EXPECT_EQ(b->BytesInBuffer(), num_bytes);
+  EXPECT_EQ(b->BitsInBuffer(), num_bits);
+
+  const uint8_t* ptr = b->data();
+  uint64_t got = GetDataFromBuffer(ptr, num_bits);
+  uint64_t expected = kTestPattern;
+  expected &= ((1ull << num_bits) - 1);
+
   EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
 }
 
diff --git a/media/filters/source_buffer_state.cc b/media/filters/source_buffer_state.cc
index 3a435c0..c1a4cae4 100644
--- a/media/filters/source_buffer_state.cc
+++ b/media/filters/source_buffer_state.cc
@@ -191,17 +191,17 @@
 }
 
 void SourceBufferState::SetTracksWatcher(
-    const Demuxer::MediaTracksUpdatedCB& tracks_updated_cb) {
+    Demuxer::MediaTracksUpdatedCB tracks_updated_cb) {
   DCHECK(!init_segment_received_cb_);
   DCHECK(tracks_updated_cb);
-  init_segment_received_cb_ = tracks_updated_cb;
+  init_segment_received_cb_ = std::move(tracks_updated_cb);
 }
 
 void SourceBufferState::SetParseWarningCallback(
     SourceBufferParseWarningCB parse_warning_cb) {
   // Give the callback to |frame_processor_|; none of these warnings are
   // currently emitted elsewhere.
-  frame_processor_->SetParseWarningCallback(parse_warning_cb);
+  frame_processor_->SetParseWarningCallback(std::move(parse_warning_cb));
 }
 
 bool SourceBufferState::Append(const uint8_t* data,
diff --git a/media/filters/source_buffer_state.h b/media/filters/source_buffer_state.h
index fdf6be2f..8e69435a3 100644
--- a/media/filters/source_buffer_state.h
+++ b/media/filters/source_buffer_state.h
@@ -150,7 +150,7 @@
       const RangesList& active_ranges,
       bool ended);
 
-  void SetTracksWatcher(const Demuxer::MediaTracksUpdatedCB& tracks_updated_cb);
+  void SetTracksWatcher(Demuxer::MediaTracksUpdatedCB tracks_updated_cb);
 
   void SetParseWarningCallback(SourceBufferParseWarningCB parse_warning_cb);
 
diff --git a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc
index 187d001..b39ef648 100644
--- a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc
+++ b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc
@@ -79,9 +79,12 @@
       PIXEL_FORMAT_I420,
       PIXEL_FORMAT_NV12,
       PIXEL_FORMAT_YV12,
+
+      // Compressed format.
+      PIXEL_FORMAT_MJPEG,
   };
   return std::find(std::cbegin(supported_formats), std::cend(supported_formats),
-                   format);
+                   format) != std::cend(supported_formats);
 }
 
 }  // namespace
diff --git a/media/gpu/chromeos/vda_video_frame_pool.cc b/media/gpu/chromeos/vda_video_frame_pool.cc
index dd0a9778..5145817 100644
--- a/media/gpu/chromeos/vda_video_frame_pool.cc
+++ b/media/gpu/chromeos/vda_video_frame_pool.cc
@@ -89,19 +89,19 @@
 
 void VdaVideoFramePool::OnRequestFramesDone(
     base::WaitableEvent* done,
-    absl::optional<GpuBufferLayout> value) {
+    absl::optional<GpuBufferLayout> layout) {
   DVLOGF(3);
   // RequestFrames() is blocked on |parent_task_runner_| to wait for this method
   // finishes, so this method must not be run on the same sequence.
   DCHECK(!parent_task_runner_->RunsTasksInCurrentSequence());
   DCHECK(fourcc_);
 
-  if (!value || value->fourcc() != *fourcc_ ||
-      value->size().height() < coded_size_.height() ||
-      value->size().width() < coded_size_.width()) {
+  if (!layout || layout->fourcc() != *fourcc_ ||
+      layout->size().height() < coded_size_.height() ||
+      layout->size().width() < coded_size_.width()) {
     layout_ = absl::nullopt;
   } else {
-    layout_ = value;
+    layout_ = layout;
   }
 
   done->Signal();
diff --git a/media/gpu/chromeos/vda_video_frame_pool.h b/media/gpu/chromeos/vda_video_frame_pool.h
index 2694a08..d18d4967 100644
--- a/media/gpu/chromeos/vda_video_frame_pool.h
+++ b/media/gpu/chromeos/vda_video_frame_pool.h
@@ -74,7 +74,7 @@
   // Update the layout of the buffers. |vda_| calls this as
   // NotifyLayoutChangedCb.
   void OnRequestFramesDone(base::WaitableEvent* done,
-                           absl::optional<GpuBufferLayout> value);
+                           absl::optional<GpuBufferLayout> layout);
 
   // Thunk to post ImportFrame() to |task_runner|.
   // Because this thunk may be called in any thread, We don't want to
diff --git a/media/gpu/h264_dpb.cc b/media/gpu/h264_dpb.cc
index 0e95581f..2e6f852 100644
--- a/media/gpu/h264_dpb.cc
+++ b/media/gpu/h264_dpb.cc
@@ -33,6 +33,8 @@
       idr(false),
       idr_pic_id(0),
       ref(false),
+      ref_pic_list_modification_flag_l0(0),
+      abs_diff_pic_num_minus1(0),
       long_term(false),
       outputted(false),
       mem_mgmt_5(false),
diff --git a/media/gpu/h264_dpb.h b/media/gpu/h264_dpb.h
index 36abd4a898..0482fa62 100644
--- a/media/gpu/h264_dpb.h
+++ b/media/gpu/h264_dpb.h
@@ -68,6 +68,8 @@
   bool idr;        // IDR picture?
   int idr_pic_id;  // Valid only if idr == true.
   bool ref;        // reference picture?
+  int ref_pic_list_modification_flag_l0;
+  int abs_diff_pic_num_minus1;
   bool long_term;  // long term reference picture?
   bool outputted;
   // Does memory management op 5 needs to be executed after this
diff --git a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc
index a12c1d9..bb87c6b 100644
--- a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc
+++ b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc
@@ -40,7 +40,8 @@
 constexpr uint32_t kCPBWindowSizeMs = 1500;
 
 // Subjectively chosen.
-constexpr size_t kMaxNumReferenceFrames = 4;
+// Generally use up to 2 reference frames.
+constexpr size_t kMaxNumReferenceFrames = 2;
 constexpr size_t kMaxRefIdxL0Size = kMaxNumReferenceFrames;
 
 // HRD parameters (ch. E.2.2 in H264 spec).
@@ -354,6 +355,7 @@
   current_sps_.max_num_ref_frames = curr_params_.max_num_ref_frames;
 
   current_sps_.frame_mbs_only_flag = true;
+  current_sps_.gaps_in_frame_num_value_allowed_flag = false;
 
   DCHECK_GT(mb_width_, 0u);
   DCHECK_GT(mb_height_, 0u);
@@ -590,6 +592,101 @@
   packed_pps_->FinishNALU();
 }
 
+scoped_refptr<H264BitstreamBuffer>
+H264VaapiVideoEncoderDelegate::GeneratePackedSliceHeader(
+    const VAEncPictureParameterBufferH264& pic_param,
+    const VAEncSliceParameterBufferH264& slice_param,
+    const H264Picture& pic) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  auto packed_slice_header = base::MakeRefCounted<H264BitstreamBuffer>();
+  const bool is_idr = !!pic_param.pic_fields.bits.idr_pic_flag;
+  const bool is_ref = !!pic_param.pic_fields.bits.reference_pic_flag;
+  // IDR:3, Non-IDR I slice:2, P slice:1, non ref frame: 0.
+  size_t nal_ref_idc = 0;
+  H264NALU::Type nalu_type = H264NALU::Type::kUnspecified;
+  if (slice_param.slice_type == H264SliceHeader::kISlice) {
+    nal_ref_idc = is_idr ? 3 : 2;
+    nalu_type = is_idr ? H264NALU::kIDRSlice : H264NALU::kNonIDRSlice;
+  } else {
+    // B frames is not used, so this is P frame.
+    nal_ref_idc = is_ref;
+    nalu_type = H264NALU::kNonIDRSlice;
+  }
+  packed_slice_header->BeginNALU(nalu_type, nal_ref_idc);
+
+  packed_slice_header->AppendUE(
+      slice_param.macroblock_address);  // first_mb_in_slice
+  packed_slice_header->AppendUE(slice_param.slice_type);
+  packed_slice_header->AppendUE(slice_param.pic_parameter_set_id);
+  packed_slice_header->AppendBits(current_sps_.log2_max_frame_num_minus4 + 4,
+                                  pic_param.frame_num);  // frame_num
+
+  DCHECK(current_sps_.frame_mbs_only_flag);
+  if (is_idr)
+    packed_slice_header->AppendUE(slice_param.idr_pic_id);
+
+  DCHECK_EQ(current_sps_.pic_order_cnt_type, 0);
+  packed_slice_header->AppendBits(
+      current_sps_.log2_max_pic_order_cnt_lsb_minus4 + 4,
+      pic_param.CurrPic.TopFieldOrderCnt);
+  DCHECK(!current_pps_.bottom_field_pic_order_in_frame_present_flag);
+  DCHECK(!current_pps_.redundant_pic_cnt_present_flag);
+
+  if (slice_param.slice_type == H264SliceHeader::kPSlice) {
+    packed_slice_header->AppendBits(
+        1, slice_param.num_ref_idx_active_override_flag);
+    if (slice_param.num_ref_idx_active_override_flag)
+      packed_slice_header->AppendUE(slice_param.num_ref_idx_l0_active_minus1);
+  }
+
+  if (slice_param.slice_type != H264SliceHeader::kISlice) {
+    packed_slice_header->AppendBits(1, pic.ref_pic_list_modification_flag_l0);
+    // modification flag for P slice.
+    if (pic.ref_pic_list_modification_flag_l0) {
+      // modification_of_pic_num_idc
+      packed_slice_header->AppendUE(0);
+      // abs_diff_pic_num_minus1
+      packed_slice_header->AppendUE(pic.abs_diff_pic_num_minus1);
+      // modification_of_pic_num_idc
+      packed_slice_header->AppendUE(3);
+    }
+  }
+  DCHECK_NE(slice_param.slice_type, H264SliceHeader::kBSlice);
+  DCHECK(!pic_param.pic_fields.bits.weighted_pred_flag ||
+         !(slice_param.slice_type == H264SliceHeader::kPSlice));
+
+  // dec_ref_pic_marking
+  if (nal_ref_idc != 0) {
+    if (is_idr) {
+      packed_slice_header->AppendBool(false);  // no_output_of_prior_pics_flag
+      packed_slice_header->AppendBool(false);  // long_term_reference_flag
+    } else {
+      packed_slice_header->AppendBool(
+          false);  // adaptive_ref_pic_marking_mode_flag
+    }
+  }
+
+  if (pic_param.pic_fields.bits.entropy_coding_mode_flag &&
+      slice_param.slice_type != H264SliceHeader::kISlice) {
+    packed_slice_header->AppendUE(slice_param.cabac_init_idc);
+  }
+
+  packed_slice_header->AppendSE(slice_param.slice_qp_delta);
+
+  if (pic_param.pic_fields.bits.deblocking_filter_control_present_flag) {
+    packed_slice_header->AppendUE(slice_param.disable_deblocking_filter_idc);
+
+    if (slice_param.disable_deblocking_filter_idc != 1) {
+      packed_slice_header->AppendSE(slice_param.slice_alpha_c0_offset_div2);
+      packed_slice_header->AppendSE(slice_param.slice_beta_offset_div2);
+    }
+  }
+
+  packed_slice_header->Flush();
+  return packed_slice_header;
+}
+
 void H264VaapiVideoEncoderDelegate::SubmitH264BitstreamBuffer(
     scoped_refptr<H264BitstreamBuffer> buffer) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -698,6 +795,11 @@
   slice_param.idr_pic_id = pic->idr_pic_id;
   slice_param.pic_order_cnt_lsb = pic->pic_order_cnt_lsb;
   slice_param.num_ref_idx_active_override_flag = true;
+  if (slice_param.slice_type == H264SliceHeader::kPSlice) {
+    slice_param.num_ref_idx_l0_active_minus1 = ref_pic_list0.size() - 1;
+  } else {
+    slice_param.num_ref_idx_l0_active_minus1 = 0;
+  }
 
   for (VAPictureH264& picture : pic_param.ReferenceFrames)
     InitVAPictureH264(&picture);
@@ -713,7 +815,10 @@
     VAPictureH264 va_pic_h264;
     InitVAPictureH264(&va_pic_h264);
     va_pic_h264.picture_id = ref_pic.AsVaapiH264Picture()->GetVASurfaceID();
-    va_pic_h264.flags = 0;
+    va_pic_h264.flags |= VA_PICTURE_H264_SHORT_TERM_REFERENCE;
+    va_pic_h264.frame_idx = ref_pic.frame_num;
+    va_pic_h264.TopFieldOrderCnt = ref_pic.top_field_order_cnt;
+    va_pic_h264.BottomFieldOrderCnt = ref_pic.bottom_field_order_cnt;
     // Initialize the current entry on slice and picture reference lists to
     // |ref_pic| and advance list pointers.
     pic_param.ReferenceFrames[i] = va_pic_h264;
@@ -737,6 +842,23 @@
                      base::Unretained(this), VAEncPictureParameterBufferType,
                      MakeRefCountedBytes(&pic_param, sizeof(pic_param))));
 
+  scoped_refptr<H264BitstreamBuffer> packed_slice_header =
+      GeneratePackedSliceHeader(pic_param, slice_param, *pic);
+  VAEncPackedHeaderParameterBuffer packed_slice_param_buffer;
+  packed_slice_param_buffer.type = VAEncPackedHeaderSlice;
+  packed_slice_param_buffer.bit_length = packed_slice_header->BitsInBuffer();
+  packed_slice_param_buffer.has_emulation_bytes = 0;
+
+  // Submit packed slice header.
+  job->AddSetupCallback(base::BindOnce(
+      &VaapiVideoEncoderDelegate::SubmitBuffer, base::Unretained(this),
+      VAEncPackedHeaderParameterBufferType,
+      MakeRefCountedBytes(&packed_slice_param_buffer,
+                          sizeof(packed_slice_param_buffer))));
+  job->AddSetupCallback(
+      base::BindOnce(&H264VaapiVideoEncoderDelegate::SubmitH264BitstreamBuffer,
+                     base::Unretained(this), packed_slice_header));
+
   job->AddSetupCallback(
       base::BindOnce(&VaapiVideoEncoderDelegate::SubmitBuffer,
                      base::Unretained(this), VAEncSliceParameterBufferType,
diff --git a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.h b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.h
index 152bf607..a76b5b2 100644
--- a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.h
+++ b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.h
@@ -81,6 +81,12 @@
   void GeneratePackedSPS();
   void GeneratePackedPPS();
 
+  // Generate packed slice header from |pic_param|, |slice_param| and |pic|.
+  scoped_refptr<H264BitstreamBuffer> GeneratePackedSliceHeader(
+      const VAEncPictureParameterBufferH264& pic_param,
+      const VAEncSliceParameterBufferH264& sliice_param,
+      const H264Picture& pic);
+
   // Check if |bitrate| and |framerate| and current coded size are supported by
   // current profile and level.
   bool CheckConfigValidity(uint32_t bitrate, uint32_t framerate);
diff --git a/mojo/public/cpp/base/big_buffer.cc b/mojo/public/cpp/base/big_buffer.cc
index d0883ff12..d5824e3 100644
--- a/mojo/public/cpp/base/big_buffer.cc
+++ b/mojo/public/cpp/base/big_buffer.cc
@@ -11,7 +11,7 @@
 
 namespace internal {
 
-BigBufferSharedMemoryRegion::BigBufferSharedMemoryRegion() = default;
+BigBufferSharedMemoryRegion::BigBufferSharedMemoryRegion() : size_(0) {}
 
 BigBufferSharedMemoryRegion::BigBufferSharedMemoryRegion(
     mojo::ScopedSharedBufferHandle buffer_handle,
diff --git a/remoting/resources/remoting_strings_am.xtb b/remoting/resources/remoting_strings_am.xtb
index fe103f5..c071fb8 100644
--- a/remoting/resources/remoting_strings_am.xtb
+++ b/remoting/resources/remoting_strings_am.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">የሆነ ሰው ልክ ባልሆነ ፒን ከርቀት ኮምፒውተሩ ጋር ለመገናኘት ስለሞከረ ከእሱ ጋር ያሉ ግንኙነቶች ለጊዜው ታግደዋል። እባክዎ ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="6965382102122355670">እሺ</translation>
 <translation id="6985691951107243942">እርግጠኛ ነዎት ከ<ph name="HOSTNAME" /> ጋር ያሉትን የርቀት ግንኙነቶች ማሰናከል ይፈልጋሉ? ሐሳብዎን ከቀየሩ ግንኙነቶችን ዳግም ለማንቃት ያንን ኮምፒውተር መጎብኘት ይኖርብዎታል።</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> የእርስዎን ኮምፒውተር ለማየት እና ለመቆጣጠር መዳረሻን ጠይቋል። እኚህን ሰው የማያውቋቸው ከሆነ ወይም ከማጋራትዎ በፊት ማናቸውንም ለውጦች ማድረግ ከፈለጉ «<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />»ን ይጫኑ።  አለበለዚያ ግንኙነትን ለመፍቀድ «<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />»ን ይምረጡ።</translation>
 <translation id="7019153418965365059">ያልታወቀ የአስተናጋጅ ስህተት፦ <ph name="HOST_OFFLINE_REASON" />።</translation>
 <translation id="701976023053394610">የርቀት እርዳታ</translation>
 <translation id="7026930240735156896">ኮምፒውተርዎን ለርቀት መዳረሻ ለማዋቀር መመሪያዎቹን ይከተሉ</translation>
diff --git a/remoting/resources/remoting_strings_de.xtb b/remoting/resources/remoting_strings_de.xtb
index 4b6f0b5..5a1864e 100644
--- a/remoting/resources/remoting_strings_de.xtb
+++ b/remoting/resources/remoting_strings_de.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Verbindungen zum Remote-Computer sind vorübergehend blockiert, da jemand versucht hat, eine Verbindung mit einer ungültigen PIN herzustellen. Bitte versuchen Sie es später noch einmal.</translation>
 <translation id="6965382102122355670">Ok</translation>
 <translation id="6985691951107243942">Möchten Sie die Remote-Verbindung zu <ph name="HOSTNAME" /> wirklich deaktivieren? Wenn Sie die Verbindung später erneut aktivieren möchten, müssen Sie dies von dem betreffenden Computer aus tun.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> hat Zugriff zum Einsehen und Verwalten Ihres Computers angefordert. Falls Sie diese Person nicht kennen oder vor der Freigabe noch Änderungen vornehmen möchten, drücken Sie auf „<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />“.  Falls Sie den Zugriff zulassen möchten, wählen Sie „<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />“ aus.</translation>
 <translation id="7019153418965365059">Nicht erkannter Hostfehler: <ph name="HOST_OFFLINE_REASON" /></translation>
 <translation id="701976023053394610">Remote-Unterstützung</translation>
 <translation id="7026930240735156896">Folgen Sie der Anleitung, um den Computer für den Remotezugriff einzurichten</translation>
diff --git a/remoting/resources/remoting_strings_kk.xtb b/remoting/resources/remoting_strings_kk.xtb
index 32673122..22850db 100644
--- a/remoting/resources/remoting_strings_kk.xtb
+++ b/remoting/resources/remoting_strings_kk.xtb
@@ -130,7 +130,7 @@
 <translation id="6963936880795878952">Қашықтағы компьютерге жарамсыз PIN кодымен кіру әрекеті жасалғандықтан, оған қосылу уақытша мүмкін емес. Әрекетіңізді кейінірек қайталаңыз.</translation>
 <translation id="6965382102122355670">Жарайды</translation>
 <translation id="6985691951107243942"><ph name="HOSTNAME" /> хостының қашықтағы байланыстарын өшіру қажет пе? Пікіріңізді өзгертсеңіз, байланыстарды қайта қосу үшін айтылған компьютерге кіруіңіз керек.</translation>
-<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> компьютеріңізді көруге және басқаруға рұқсат сұрады. Бұл кісіні танымайтын болсаңыз немесе бөліспес бұрын өзгеріс енгізу керек болса, ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' түймесін басыңыз.  Не болмаса, ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' түймесін басып, қосылуға рұқсат етіңіз.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> компьютеріңізді көруге және басқаруға рұқсат сұрады. Бұл кісіні танымайтын болсаңыз немесе бөліспес бұрын өзгеріс енгізу керек болса, ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' түймесін басыңыз.  Не болмаса ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' түймесін басып, қосылуға рұқсат етіңіз.</translation>
 <translation id="7019153418965365059">Анықталмаған хост қатесі: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Қашықтан көмектесу</translation>
 <translation id="7026930240735156896">Компьютерге қашықтан кіруді реттеу үшін нұсқауларды орындаңыз</translation>
diff --git a/remoting/resources/remoting_strings_te.xtb b/remoting/resources/remoting_strings_te.xtb
index c11a351..3ab1dc3 100644
--- a/remoting/resources/remoting_strings_te.xtb
+++ b/remoting/resources/remoting_strings_te.xtb
@@ -65,7 +65,7 @@
 <translation id="405887016757208221">సెషన్‌ను ప్రారంభించడంలో రిమోట్ కంప్యూటర్ విఫలమైంది. సమస్య కొనసాగితే, దయచేసి హోస్ట్‌ను మళ్లీ కాన్ఫిగర్ చేసి ప్రయత్నించండి.</translation>
 <translation id="4060747889721220580">ఫైల్‌ను డౌన్‌లోడ్ చేయండి</translation>
 <translation id="4126409073460786861">సెటప్ పూర్తయిన తర్వాత, పేజీని రిఫ్రెష్ చేయండి, అప్పుడు మీరు మీ పరికరాన్ని ఎంచుకుని, PINను నమోదు చేయడం ద్వారా మీ కంప్యూటర్‌ను యాక్సెస్ చేయగలుగుతారు</translation>
-<translation id="4145029455188493639"><ph name="EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేసారు.</translation>
+<translation id="4145029455188493639"><ph name="EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేశారు.</translation>
 <translation id="4155497795971509630">కొన్ని ఆవశ్యక అంశాలు లేవు. దయచేసి మీరు తాజా సాఫ్ట్‌వేర్ వెర్షన్‌ను ఇన్‌స్టాల్ చేసారని నిర్ధారించుకొని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="4176825807642096119">యాక్సెస్ కోడ్</translation>
 <translation id="4227991223508142681">హోస్ట్ కేటాయింపు సాధనం</translation>
@@ -106,7 +106,7 @@
 <translation id="5601503069213153581">PIN</translation>
 <translation id="5690427481109656848">Google LLC</translation>
 <translation id="5708869785009007625">మీ డెస్క్‌టాప్ ప్రస్తుతం <ph name="USER" />తో షేర్‌ చేయబడింది.</translation>
-<translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేసారు.</translation>
+<translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేశారు.</translation>
 <translation id="579702532610384533">మళ్ళీ కనెక్ట్ చేయి</translation>
 <translation id="5810269635982033450">స్క్రీన్ ట్రాక్‌ప్యాడ్ లాగా పని చేస్తుంది</translation>
 <translation id="5823658491130719298">మీరు రిమోట్‌గా యాక్సెస్ చేయాలనుకుంటున్న కంప్యూటర్‌లో Chromeను తెరిచి, <ph name="INSTALLATION_LINK" />ను సందర్శించండి</translation>
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 0f142e3..03d9501 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -649,7 +649,7 @@
   restricted_cookie_manager_receivers_.Add(
       std::make_unique<RestrictedCookieManager>(
           role, url_request_context_->cookie_store(),
-          &cookie_manager_->cookie_settings(), origin, isolation_info,
+          cookie_manager_->cookie_settings(), origin, isolation_info,
           std::move(cookie_observer)),
       std::move(receiver));
 }
diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc
index 8e306dde..27baa96 100644
--- a/services/network/restricted_cookie_manager.cc
+++ b/services/network/restricted_cookie_manager.cc
@@ -44,11 +44,11 @@
     const GURL& url,
     const net::SiteForCookies& site_for_cookies,
     const net::IsolationInfo& isolation_info,
-    const CookieSettings* cookie_settings,
+    const CookieSettings& cookie_settings,
     const net::CookieAccessDelegate* cookie_access_delegate) {
   net::CookieOptions options;
   bool force_ignore_site_for_cookies =
-      cookie_settings->ShouldIgnoreSameSiteRestrictions(
+      cookie_settings.ShouldIgnoreSameSiteRestrictions(
           url, site_for_cookies.RepresentativeUrl());
   if (role == mojom::RestrictedCookieManagerRole::SCRIPT) {
     options.set_exclude_httponly();  // Default, but make it explicit here.
@@ -97,12 +97,12 @@
     const GURL& url,
     const net::SiteForCookies& site_for_cookies,
     const net::IsolationInfo& isolation_info,
-    const CookieSettings* cookie_settings,
+    const CookieSettings& cookie_settings,
     const net::CookieAccessDelegate* cookie_access_delegate) {
   // TODO(https://crbug.com/925311): Wire initiator here.
   net::CookieOptions options;
   bool force_ignore_site_for_cookies =
-      cookie_settings->ShouldIgnoreSameSiteRestrictions(
+      cookie_settings.ShouldIgnoreSameSiteRestrictions(
           url, site_for_cookies.RepresentativeUrl());
   if (role == mojom::RestrictedCookieManagerRole::SCRIPT) {
     options.set_exclude_httponly();  // Default, but make it explicit here.
@@ -208,7 +208,7 @@
     // not deleted. This check prevents the site from observing their cookies
     // being deleted at a later time, which can happen due to eviction or due to
     // the user explicitly deleting all cookies.
-    if (!restricted_cookie_manager_->cookie_settings()->IsCookieAccessible(
+    if (!restricted_cookie_manager_->cookie_settings().IsCookieAccessible(
             change.cookie, url_, site_for_cookies_.RepresentativeUrl(),
             top_frame_origin_)) {
       return;
@@ -250,7 +250,7 @@
 RestrictedCookieManager::RestrictedCookieManager(
     const mojom::RestrictedCookieManagerRole role,
     net::CookieStore* cookie_store,
-    const CookieSettings* cookie_settings,
+    const CookieSettings& cookie_settings,
     const url::Origin& origin,
     const net::IsolationInfo& isolation_info,
     mojo::PendingRemote<mojom::CookieAccessObserver> cookie_observer)
@@ -320,7 +320,7 @@
 
   net::CookieAccessResultList maybe_included_cookies = cookie_list;
   net::CookieAccessResultList excluded_cookies = excluded_list;
-  cookie_settings()->AnnotateAndMoveUserBlockedCookies(
+  cookie_settings().AnnotateAndMoveUserBlockedCookies(
       url, site_for_cookies.RepresentativeUrl(), &top_frame_origin,
       maybe_included_cookies, excluded_cookies);
 
@@ -400,7 +400,7 @@
   }
 
   // TODO(morlovich): Try to validate site_for_cookies as well.
-  bool blocked = !cookie_settings_->IsCookieAccessible(
+  bool blocked = !cookie_settings_.IsCookieAccessible(
       cookie, url, site_for_cookies.RepresentativeUrl(), top_frame_origin);
 
   net::CookieInclusionStatus status;
@@ -587,7 +587,7 @@
     return;
   }
 
-  std::move(callback).Run(cookie_settings_->IsFullCookieAccessAllowed(
+  std::move(callback).Run(cookie_settings_.IsFullCookieAccessAllowed(
       url, site_for_cookies.RepresentativeUrl(), top_frame_origin));
 }
 
diff --git a/services/network/restricted_cookie_manager.h b/services/network/restricted_cookie_manager.h
index edad3ff3..73e2260e 100644
--- a/services/network/restricted_cookie_manager.h
+++ b/services/network/restricted_cookie_manager.h
@@ -54,7 +54,7 @@
   RestrictedCookieManager(
       mojom::RestrictedCookieManagerRole role,
       net::CookieStore* cookie_store,
-      const CookieSettings* cookie_settings,
+      const CookieSettings& cookie_settings,
       const url::Origin& origin,
       const net::IsolationInfo& isolation_info,
       mojo::PendingRemote<mojom::CookieAccessObserver> cookie_observer);
@@ -69,7 +69,7 @@
     isolation_info_ = new_isolation_info;
   }
 
-  const CookieSettings* cookie_settings() const { return cookie_settings_; }
+  const CookieSettings& cookie_settings() const { return cookie_settings_; }
 
   void GetAllForUrl(const GURL& url,
                     const net::SiteForCookies& site_for_cookies,
@@ -158,7 +158,7 @@
 
   const mojom::RestrictedCookieManagerRole role_;
   net::CookieStore* const cookie_store_;
-  const CookieSettings* const cookie_settings_;
+  const CookieSettings& cookie_settings_;
 
   url::Origin origin_;
 
diff --git a/services/network/restricted_cookie_manager_unittest.cc b/services/network/restricted_cookie_manager_unittest.cc
index a856249..c22f83e4 100644
--- a/services/network/restricted_cookie_manager_unittest.cc
+++ b/services/network/restricted_cookie_manager_unittest.cc
@@ -187,7 +187,7 @@
         service_(std::make_unique<RestrictedCookieManager>(
             GetParam(),
             &cookie_monster_,
-            &cookie_settings_,
+            cookie_settings_,
             kDefaultOrigin,
             isolation_info_,
             recording_client_.GetRemote())),
diff --git a/storage/browser/quota/quota_database.cc b/storage/browser/quota/quota_database.cc
index 06be36c..62dfc27 100644
--- a/storage/browser/quota/quota_database.cc
+++ b/storage/browser/quota/quota_database.cc
@@ -16,7 +16,7 @@
 #include "base/containers/contains.h"
 #include "base/dcheck_is_on.h"
 #include "base/files/file_util.h"
-#include "base/metrics/histogram_macros.h"
+#include "base/metrics/histogram_functions.h"
 #include "sql/database.h"
 #include "sql/meta_table.h"
 #include "sql/statement.h"
@@ -54,6 +54,10 @@
 
 const int kCommitIntervalMs = 30000;
 
+void RecordDatabaseResetHistogram(const DatabaseResetReason reason) {
+  base::UmaHistogramEnumeration("Quota.QuotaDatabaseReset", reason);
+}
+
 }  // anonymous namespace
 
 const QuotaDatabase::TableSchema QuotaDatabase::kTables[] = {
@@ -681,18 +685,7 @@
 
   db_->set_histogram_tag("Quota");
 
-  bool opened = false;
-  if (in_memory_only) {
-    opened = db_->OpenInMemory();
-  } else if (!base::CreateDirectory(db_file_path_.DirName())) {
-      LOG(ERROR) << "Failed to create quota database directory.";
-  } else {
-    opened = db_->Open(db_file_path_);
-    if (opened)
-      db_->Preload();
-  }
-
-  if (!opened || !EnsureDatabaseVersion()) {
+  if (!OpenDatabase() || !EnsureDatabaseVersion()) {
     LOG(ERROR) << "Could not open the quota database, resetting.";
     if (!ResetSchema()) {
       LOG(ERROR) << "Failed to reset the quota database.";
@@ -709,24 +702,51 @@
   return QuotaError::kNone;
 }
 
+bool QuotaDatabase::OpenDatabase() {
+  // Open in memory database.
+  if (db_file_path_.empty()) {
+    if (db_->OpenInMemory())
+      return true;
+    RecordDatabaseResetHistogram(DatabaseResetReason::kOpenInMemoryDatabase);
+    return false;
+  }
+
+  if (!base::CreateDirectory(db_file_path_.DirName()) ||
+      !db_->Open(db_file_path_)) {
+    RecordDatabaseResetHistogram(DatabaseResetReason::kOpenDatabase);
+    return false;
+  }
+  db_->Preload();
+  return true;
+}
+
 bool QuotaDatabase::EnsureDatabaseVersion() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (!sql::MetaTable::DoesTableExist(db_.get()))
-    return CreateSchema();
+  if (!sql::MetaTable::DoesTableExist(db_.get())) {
+    if (CreateSchema())
+      return true;
+    RecordDatabaseResetHistogram(DatabaseResetReason::kCreateSchema);
+    return false;
+  }
 
   if (!meta_table_->Init(db_.get(), kQuotaDatabaseCurrentSchemaVersion,
-                         kQuotaDatabaseCompatibleVersion))
+                         kQuotaDatabaseCompatibleVersion)) {
+    RecordDatabaseResetHistogram(DatabaseResetReason::kInitMetaTable);
     return false;
+  }
 
   if (meta_table_->GetCompatibleVersionNumber() >
       kQuotaDatabaseCurrentSchemaVersion) {
+    RecordDatabaseResetHistogram(DatabaseResetReason::kDatabaseVersionTooNew);
     LOG(WARNING) << "Quota database is too new.";
     return false;
   }
 
   if (meta_table_->GetVersionNumber() < kQuotaDatabaseCurrentSchemaVersion) {
-    if (!QuotaDatabaseMigrations::UpgradeSchema(*this))
-      return ResetSchema();
+    if (!QuotaDatabaseMigrations::UpgradeSchema(*this)) {
+      RecordDatabaseResetHistogram(DatabaseResetReason::kDatabaseMigration);
+      return false;
+    }
   }
 
 #if DCHECK_IS_ON()
diff --git a/storage/browser/quota/quota_database.h b/storage/browser/quota/quota_database.h
index 0c84e56d..0a96f9cd 100644
--- a/storage/browser/quota/quota_database.h
+++ b/storage/browser/quota/quota_database.h
@@ -37,6 +37,19 @@
 
 class SpecialStoragePolicy;
 
+// These values are logged to UMA. Entries should not be renumbered and numeric
+// values should never be reused. Please keep in sync with "DatabaseResetReason"
+// in tools/metrics/histograms/enums.xml.
+enum class DatabaseResetReason {
+  kOpenDatabase = 0,
+  kOpenInMemoryDatabase = 1,
+  kCreateSchema = 2,
+  kDatabaseMigration = 3,
+  kDatabaseVersionTooNew = 4,
+  kInitMetaTable = 5,
+  kMaxValue = kInitMetaTable
+};
+
 // Stores all quota managed origin bucket data and metadata.
 //
 // Instances are owned by QuotaManagerImpl. There is one instance per
@@ -220,6 +233,7 @@
   void ScheduleCommit();
 
   QuotaError LazyOpen(LazyOpenMode mode);
+  bool OpenDatabase();
   bool EnsureDatabaseVersion();
   bool ResetSchema();
   bool UpgradeSchema(int current_version);
diff --git a/storage/browser/quota/quota_database_unittest.cc b/storage/browser/quota/quota_database_unittest.cc
index 5ae1e14..008b65e4 100644
--- a/storage/browser/quota/quota_database_unittest.cc
+++ b/storage/browser/quota/quota_database_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
@@ -276,10 +277,11 @@
   EXPECT_EQ(result.error(), QuotaError::kNotFound);
 }
 
-// TODO(crbug.com/1216094): Update test to have its behavior on Fuchsia match
-// with other platforms, and enable test on all platforms.
-#if !defined(OS_FUCHSIA)
+// TODO(crbug.com/1216094): Update test to have its behavior on Fuchsia/Win
+// match with other platforms, and enable test on all platforms.
+#if !defined(OS_FUCHSIA) && !defined(OS_WIN)
 TEST_F(QuotaDatabaseTest, GetBucketWithOpenDatabaseError) {
+  base::HistogramTester histograms;
   sql::test::ScopedErrorExpecter expecter;
   expecter.ExpectError(SQLITE_CANTOPEN);
 
@@ -296,8 +298,11 @@
   EXPECT_EQ(result.error(), QuotaError::kDatabaseError);
 
   EXPECT_TRUE(expecter.SawExpectedErrors());
+  histograms.ExpectTotalCount("Quota.QuotaDatabaseReset", 1);
+  histograms.ExpectBucketCount("Quota.QuotaDatabaseReset",
+                               DatabaseResetReason::kOpenDatabase, 1);
 }
-#endif  // !defined(OS_FUCHSIA)
+#endif  // !defined(OS_FUCHSIA) && !defined(OS_WIN)
 
 TEST_P(QuotaDatabaseTest, DeleteStorageKeyInfo) {
   QuotaDatabase db(use_in_memory_db() ? base::FilePath() : DbPath());
@@ -711,6 +716,7 @@
 }
 
 TEST_F(QuotaDatabaseTest, OpenCorruptedDatabase) {
+  base::HistogramTester histograms;
   // Create database, force corruption and close db by leaving scope.
   {
     QuotaDatabase db(DbPath());
@@ -725,6 +731,10 @@
     ASSERT_TRUE(LazyOpen(&db, LazyOpenMode::kFailIfNotFound));
     EXPECT_TRUE(expecter.SawExpectedErrors());
   }
+
+  histograms.ExpectTotalCount("Quota.QuotaDatabaseReset", 1);
+  histograms.ExpectBucketCount("Quota.QuotaDatabaseReset",
+                               DatabaseResetReason::kCreateSchema, 1);
 }
 
 INSTANTIATE_TEST_SUITE_P(All,
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index adf1108..8e9e7ca 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -5687,7 +5687,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5774,7 +5774,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5948,7 +5948,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -6035,7 +6035,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 215279a..baff61b 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -55857,7 +55857,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -55945,7 +55945,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56121,7 +56121,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56209,7 +56209,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56458,7 +56458,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56545,7 +56545,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56719,7 +56719,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -56806,7 +56806,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57055,7 +57055,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57142,7 +57142,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57316,7 +57316,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M92",
-              "revision": "version:92.0.4515.145"
+              "revision": "version:92.0.4515.146"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57403,7 +57403,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M93",
-              "revision": "version:93.0.4577.35"
+              "revision": "version:93.0.4577.37"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/filters/linux-lacros.browser_tests.filter b/testing/buildbot/filters/linux-lacros.browser_tests.filter
index 8dae010..cc0ae1c 100644
--- a/testing/buildbot/filters/linux-lacros.browser_tests.filter
+++ b/testing/buildbot/filters/linux-lacros.browser_tests.filter
@@ -36,7 +36,6 @@
 -BrowserViewTest.DevToolsUpdatesBrowserWindow
 -BrowserViewTest.F6CyclesThroughCaptionBubbleToo
 -BrowserViewTest.GetAccessibleTabModalDialogTitle
--BrowserViewTest.GetAccessibleTabModalDialogTree
 -BrowsingDataRemoverBrowserTest.StorageRemovedFromDisk
 -CaptivePortalBrowserTest.SecureDnsErrorTriggersCheck
 -CaptivePortalBrowserTest.SlowLoadSecureDnsErrorAfterLogin
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 86c4b8d..20df2f4 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -349,7 +349,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M93',
-          'revision': 'version:93.0.4577.35',
+          'revision': 'version:93.0.4577.37',
         }
       ],
     },
@@ -373,7 +373,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M92',
-          'revision': 'version:92.0.4515.145',
+          'revision': 'version:92.0.4515.146',
         }
       ],
     },
@@ -421,7 +421,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M93',
-          'revision': 'version:93.0.4577.35',
+          'revision': 'version:93.0.4577.37',
         }
       ],
     },
@@ -445,7 +445,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M92',
-          'revision': 'version:92.0.4515.145',
+          'revision': 'version:92.0.4515.146',
         }
       ],
     },
@@ -493,7 +493,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M93',
-          'revision': 'version:93.0.4577.35',
+          'revision': 'version:93.0.4577.37',
         }
       ],
     },
@@ -517,7 +517,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M92',
-          'revision': 'version:92.0.4515.145',
+          'revision': 'version:92.0.4515.146',
         }
       ],
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 67e0f6d..3924275d 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -748,6 +748,21 @@
             ]
         }
     ],
+    "ArcEnableThrottlingNotification": [
+        {
+            "platforms": [
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "ArcEnableThrottlingNotification"
+                    ]
+                }
+            ]
+        }
+    ],
     "ArcUseHighMemoryDalvikProfile": [
         {
             "platforms": [
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 12cbc76..460c95460 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -209,6 +209,9 @@
       # The maximum depth at which descendants of the root node should be retrieved.
       # If omitted, the full tree is returned.
       optional integer max_depth
+      # The frame for whose document the AX tree should be retrieved.
+      # If omited, the root frame is used.
+      optional Page.FrameId frameId
     returns
       array of AXNode nodes
 
@@ -217,6 +220,9 @@
   experimental command getChildAXNodes
     parameters
       AXNodeId id
+      # The frame in whose document the node resides.
+      # If omitted, the root frame is used.
+      optional Page.FrameId frameId
     returns
       array of AXNode nodes
 
@@ -7793,6 +7799,7 @@
       CacheControlNoStoreCookieModified
       CacheControlNoStoreHTTPOnlyCookieModified
       NoResponseHead
+      Unknown
       #Blocklisted features
       WebSocket
       WebRTC
@@ -7837,8 +7844,17 @@
       OutstandingNetworkRequestDirectSocket
       IsolatedWorldScript
       InjectedStyleSheet
+      # Disabled for render frame host reasons
       MediaSessionImplOnServiceCreated
-      Unknown
+      SecurityHandler
+      WebAuthenticationAPI
+      FileChooser
+      Serial
+      FileSystemAccess
+      MediaDevicesDispatcherHost
+      WebBluetooth
+      WebUSB
+      MediaSession
 
   # Types of not restored reasons for back-forward cache.
   experimental type BackForwardCacheNotRestoredReasonType extends string
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom
index 2649e5c2..5290eb39 100644
--- a/third_party/blink/public/mojom/web_feature/web_feature.mojom
+++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -3197,7 +3197,7 @@
   kWebAppManifestProtocolHandlers = 3884,
   kRTCPeerConnectionOfferAllowExtmapMixedFalse = 3885,
   kNewCanvas2DAPI = 3886,
-  kServiceWorkerSubresourceFilter = 3887,
+  kServiceWorkerSubresourceFilterBypassedRequest = 3887,
   kWebGPU = 3888,
   kCSSFilterColorMatrix = 3889,
   kHTMLFencedFrameElement = 3890,
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index 95a7591..15df7b8 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -845,6 +845,8 @@
   // Reset TextFinder state for the web test runner in between two tests.
   virtual void ClearActiveFindMatchForTesting() = 0;
 
+  virtual bool ServiceWorkerSubresourceFilterEnabled() = 0;
+
  protected:
   explicit WebLocalFrame(mojom::TreeScopeType scope,
                          const LocalFrameToken& frame_token)
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc
index 7919cb1e..f5185f7d 100644
--- a/third_party/blink/renderer/core/css/media_values.cc
+++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -56,6 +56,22 @@
   }
 }
 
+mojom::blink::PreferredContrast CSSValueIDToPreferredContrast(CSSValueID id) {
+  switch (id) {
+    case CSSValueID::kMore:
+      return mojom::blink::PreferredContrast::kMore;
+    case CSSValueID::kLess:
+      return mojom::blink::PreferredContrast::kLess;
+    case CSSValueID::kNoPreference:
+      return mojom::blink::PreferredContrast::kNoPreference;
+    case CSSValueID::kCustom:
+      return mojom::blink::PreferredContrast::kCustom;
+    default:
+      NOTREACHED();
+      return mojom::blink::PreferredContrast::kNoPreference;
+  }
+}
+
 MediaValues* MediaValues::CreateDynamicIfFrameExists(LocalFrame* frame) {
   if (frame)
     return MediaValuesDynamic::Create(frame);
@@ -239,6 +255,12 @@
     LocalFrame* frame) {
   DCHECK(frame);
   DCHECK(frame->GetSettings());
+  DCHECK(frame->GetPage());
+  if (const auto* overrides = frame->GetPage()->GetMediaFeatureOverrides()) {
+    MediaQueryExpValue value = overrides->GetOverride("prefers-contrast");
+    if (value.IsValid())
+      return CSSValueIDToPreferredContrast(value.id);
+  }
   return frame->GetSettings()->GetPreferredContrast();
 }
 
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index 4244f2e..de18378 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -727,10 +727,14 @@
     // - csswg issue : https://github.com/w3c/csswg-drafts/issues/6399
     if (!depth_fixed) {
       sub_context.relative_leftmost_element =
-          &element->ContainingTreeScope().RootNode();
+          &element->GetTreeScope().RootNode();
     } else if (has_argument_match_context.GetAdjacentDistanceFixed()) {
-      sub_context.relative_leftmost_element =
-          Traversal<Element>::FirstChild(*element->parentNode());
+      if (ContainerNode* parent_node = element->parentNode()) {
+        sub_context.relative_leftmost_element =
+            Traversal<Element>::FirstChild(*parent_node);
+      } else {
+        sub_context.relative_leftmost_element = element;
+      }
     } else {
       sub_context.relative_leftmost_element = element;
     }
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc
index c0ae8fe..cc73e3f 100644
--- a/third_party/blink/renderer/core/css/style_engine_test.cc
+++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -1680,6 +1680,73 @@
                 GetCSSPropertyColor()));
 }
 
+TEST_F(StyleEngineTest, MediaQueriesChangePrefersContrastOverride) {
+  ScopedForcedColorsForTest forced_scoped_feature(true);
+  ScopedPrefersContrastForTest contrast_scoped_feature(true);
+
+  ColorSchemeHelper color_scheme_helper(GetDocument());
+  color_scheme_helper.SetPreferredContrast(
+      mojom::blink::PreferredContrast::kNoPreference);
+
+  GetDocument().body()->setInnerHTML(R"HTML(
+    <style>
+      body { color: red; forced-color-adjust: none; }
+      @media (prefers-contrast: more) {
+        body { color: blue }
+      }
+      @media (prefers-contrast: less) {
+        body { color: orange }
+      }
+      @media (prefers-contrast: custom) {
+        body { color: yellow }
+      }
+    </style>
+    <body></body>
+  )HTML");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(255, 0, 0),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+
+  GetDocument().GetPage()->SetMediaFeatureOverride("prefers-contrast", "more");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(0, 0, 255),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+
+  GetDocument().GetPage()->SetMediaFeatureOverride("prefers-contrast",
+                                                   "no-preference");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(255, 0, 0),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+
+  GetDocument().GetPage()->SetMediaFeatureOverride("prefers-contrast", "less");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(255, 165, 0),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+
+  GetDocument().GetPage()->SetMediaFeatureOverride("prefers-contrast",
+                                                   "custom");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(255, 255, 0),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+
+  GetDocument().GetPage()->ClearMediaFeatureOverrides();
+
+  UpdateAllLifecyclePhases();
+  EXPECT_EQ(MakeRGB(255, 0, 0),
+            GetDocument().body()->GetComputedStyle()->VisitedDependentColor(
+                GetCSSPropertyColor()));
+}
+
 TEST_F(StyleEngineTest, MediaQueriesChangePrefersReducedMotion) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 820fb7fe..93f981f 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -2828,4 +2828,12 @@
   has_scrolled_focused_editable_node_into_rect_ = false;
 }
 
+bool WebLocalFrameImpl::ServiceWorkerSubresourceFilterEnabled() {
+  if (GetFrame() && GetFrame()->GetDocument()) {
+    return RuntimeEnabledFeatures::ServiceWorkerSubresourceFilterEnabled(
+        GetFrame()->GetDocument()->GetExecutionContext());
+  }
+  return false;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index 06498ca..18793042 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -332,6 +332,7 @@
   void UpdateCurrentHistoryItem() override;
   PageState CurrentHistoryItemToPageState() override;
   const WebHistoryItem& GetCurrentHistoryItem() const override;
+  bool ServiceWorkerSubresourceFilterEnabled() override;
 
   // WebNavigationControl overrides:
   bool DispatchBeforeUnloadEvent(bool) override;
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc b/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
index b08e214..ef7e216 100644
--- a/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
+++ b/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
@@ -1125,8 +1125,8 @@
       }
       case kRegionId:
         if (region_map) {
-          region_ = region_map->DeprecatedAtOrEmptyValue(
-              input.ExtractString(value_run));
+          auto it = region_map->find(input.ExtractString(value_run));
+          region_ = it != region_map->end() ? it->value : nullptr;
         }
         break;
       case kNone:
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc
index 80608bb..b4eccf5 100644
--- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc
+++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc
@@ -215,15 +215,14 @@
         placement_cursor.MinorLine(), minor_end_line);
     grid_item->SetSpan(grid_item_span, minor_direction_);
 
-    placed_items->PlaceGridItemAtCursor(*grid_item, major_direction_,
-                                        minor_direction_, &placement_cursor);
+    PlaceGridItemAtCursor(*grid_item, placed_items, &placement_cursor);
   }
 }
 
 void NGGridPlacement::PlaceAutoMajorAxisGridItem(
     GridItemData* grid_item,
     PlacedGridItemsList* placed_items,
-    AutoPlacementCursor* placement_cursor) {
+    AutoPlacementCursor* placement_cursor) const {
   DCHECK(grid_item && placed_items);
   const wtf_size_t major_span_size =
       grid_item->Span(major_direction_).IndefiniteSpanSize();
@@ -239,14 +238,13 @@
       placement_cursor->MajorLine() + major_span_size);
   grid_item->SetSpan(grid_item_span, major_direction_);
 
-  placed_items->PlaceGridItemAtCursor(*grid_item, major_direction_,
-                                      minor_direction_, placement_cursor);
+  PlaceGridItemAtCursor(*grid_item, placed_items, placement_cursor);
 }
 
 void NGGridPlacement::PlaceAutoBothAxisGridItem(
     GridItemData* grid_item,
     PlacedGridItemsList* placed_items,
-    AutoPlacementCursor* placement_cursor) {
+    AutoPlacementCursor* placement_cursor) const {
   DCHECK(grid_item && placed_items && placement_cursor);
 
   const wtf_size_t major_span_size =
@@ -269,8 +267,25 @@
       placement_cursor->MinorLine() + minor_span_size);
   grid_item->SetSpan(grid_item_span, minor_direction_);
 
-  placed_items->PlaceGridItemAtCursor(*grid_item, major_direction_,
-                                      minor_direction_, placement_cursor);
+  PlaceGridItemAtCursor(*grid_item, placed_items, placement_cursor);
+}
+
+void NGGridPlacement::PlaceGridItemAtCursor(
+    const GridItemData& grid_item,
+    PlacedGridItemsList* placed_items,
+    AutoPlacementCursor* placement_cursor) const {
+  DCHECK(placed_items && placement_cursor);
+
+  auto* new_placed_item =
+      new PlacedGridItem(grid_item, major_direction_, minor_direction_);
+  placed_items->item_vector.emplace_back(new_placed_item);
+
+  const auto* next_placed_item = placement_cursor->NextPlacedItem();
+  placed_items->ordered_list.InsertAfter(
+      new_placed_item, next_placed_item ? next_placed_item->Prev()
+                                        : placed_items->ordered_list.Tail());
+
+  placement_cursor->InsertPlacedItemAtCurrentPosition(new_placed_item);
 }
 
 wtf_size_t NGGridPlacement::AutoRepeatTrackCount(
@@ -366,6 +381,9 @@
     return false;
   };
 
+  if (current_position_.minor_line > minor_max_start_line)
+    MoveToNextMajorLine(allow_minor_line_movement);
+
   while (true) {
     UpdateItemsOverlappingMajorLine();
     next_minor_line = current_position_.minor_line;
@@ -478,18 +496,21 @@
   has_new_item_overlapping_major_line_ = false;
 }
 
-void NGGridPlacement::AutoPlacementCursor::UpdateNextPlacedItem(
-    const PlacedGridItem* next_placed_item) {
+void NGGridPlacement::AutoPlacementCursor::InsertPlacedItemAtCurrentPosition(
+    const PlacedGridItem* new_placed_item) {
   // This update must happen after the doubly linked list already updated its
   // element links to keep the necessary order for the cursor's logic.
 #if DCHECK_IS_ON()
   if (next_placed_item_) {
-    DCHECK_EQ(next_placed_item_->Prev(), next_placed_item);
-    DCHECK(*next_placed_item < *next_placed_item_);
+    DCHECK_EQ(next_placed_item_->Prev(), new_placed_item);
+    DCHECK(*new_placed_item < *next_placed_item_);
   }
 #endif
-  DCHECK_EQ(next_placed_item->Next(), next_placed_item_);
-  next_placed_item_ = next_placed_item;
+  DCHECK_EQ(new_placed_item->Next(), next_placed_item_);
+  next_placed_item_ = new_placed_item;
+
+  MoveToMinorLine(new_placed_item->MinorEndLine());
+  has_new_item_overlapping_major_line_ = true;
 }
 
 void NGGridPlacement::PlacedGridItemsList::AppendCurrentItemsToOrderedList() {
@@ -510,27 +531,6 @@
     ordered_list.Append(placed_item.get());
 }
 
-void NGGridPlacement::PlacedGridItemsList::PlaceGridItemAtCursor(
-    const GridItemData& grid_item,
-    const GridTrackSizingDirection major_direction,
-    const GridTrackSizingDirection minor_direction,
-    AutoPlacementCursor* placement_cursor) {
-  auto* new_placed_item =
-      new PlacedGridItem(grid_item, major_direction, minor_direction);
-  item_vector.emplace_back(new_placed_item);
-
-  const auto* next_placed_item = placement_cursor->NextPlacedItem();
-  ordered_list.InsertAfter(new_placed_item, next_placed_item
-                                                ? next_placed_item->Prev()
-                                                : ordered_list.Tail());
-
-  placement_cursor->MoveToMinorLine(new_placed_item->MinorEndLine());
-  // Even though the cursor's position moved past the new placed item's start
-  // position, we must update its |next_placed_item_| since we need it to do
-  // some updates to the state of the cursor in |MoveCursorToFitGridSpan|.
-  placement_cursor->UpdateNextPlacedItem(new_placed_item);
-}
-
 namespace {
 
 bool IsStartLineAuto(const GridTrackSizingDirection track_direction,
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.h b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.h
index c7d79b9..4fff6a1 100644
--- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.h
+++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.h
@@ -88,7 +88,8 @@
   class AutoPlacementCursor {
    public:
     explicit AutoPlacementCursor(const PlacedGridItem* first_placed_item)
-        : next_placed_item_(first_placed_item) {}
+        : has_new_item_overlapping_major_line_(false),
+          next_placed_item_(first_placed_item) {}
 
     void MoveCursorToFitGridSpan(
         const wtf_size_t major_span_size,
@@ -98,11 +99,13 @@
     void MoveToMajorLine(const wtf_size_t major_line);
     void MoveToMinorLine(const wtf_size_t minor_line);
 
+    void InsertPlacedItemAtCurrentPosition(
+        const PlacedGridItem* new_placed_item);
+
     wtf_size_t MajorLine() const { return current_position_.major_line; }
     wtf_size_t MinorLine() const { return current_position_.minor_line; }
 
     const PlacedGridItem* NextPlacedItem() const { return next_placed_item_; }
-    void UpdateNextPlacedItem(const PlacedGridItem* next_placed_item);
 
    private:
     // Comparer needed to use |items_overlapping_major_line_| as a heap.
@@ -117,18 +120,13 @@
     void UpdateItemsOverlappingMajorLine();
 
     Vector<const PlacedGridItem*, 16> items_overlapping_major_line_;
-    bool has_new_item_overlapping_major_line_{false};
+    bool has_new_item_overlapping_major_line_ : 1;
     const PlacedGridItem* next_placed_item_;
     GridPosition current_position_;
   };
 
   struct PlacedGridItemsList {
     void AppendCurrentItemsToOrderedList();
-    void PlaceGridItemAtCursor(const GridItemData& grid_item,
-                               const GridTrackSizingDirection major_direction,
-                               const GridTrackSizingDirection minor_direction,
-                               AutoPlacementCursor* placement_cursor);
-
     PlacedGridItem* FirstPlacedItem() { return ordered_list.Head(); }
 
     Vector<std::unique_ptr<PlacedGridItem>, 16> item_vector;
@@ -151,11 +149,16 @@
   // auto-placement on the major axis.
   void PlaceAutoMajorAxisGridItem(GridItemData* grid_item,
                                   PlacedGridItemsList* placed_items,
-                                  AutoPlacementCursor* placement_cursor);
+                                  AutoPlacementCursor* placement_cursor) const;
   // Place an item that needs auto-placement on both the major and minor axis.
   void PlaceAutoBothAxisGridItem(GridItemData* grid_item,
                                  PlacedGridItemsList* placed_items,
-                                 AutoPlacementCursor* placement_cursor);
+                                 AutoPlacementCursor* placement_cursor) const;
+  // Update the list of placed grid items and auto-placement cursor using the
+  // resolved position of the specified grid item.
+  void PlaceGridItemAtCursor(const GridItemData& grid_item,
+                             PlacedGridItemsList* placed_items,
+                             AutoPlacementCursor* placement_cursor) const;
 
   bool HasSparsePacking() const;
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc
index 34da34a..748cf6c 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items.cc
@@ -229,9 +229,6 @@
     if (item.Type() != NGFragmentItem::kLine)
       return &item;
 
-    const NGPhysicalLineBoxFragment* line_box_fragment = item.LineBoxFragment();
-    DCHECK(line_box_fragment);
-
     // If there is a dirty item in the middle of a line, its previous line is
     // not reusable, because the dirty item may affect the previous line to wrap
     // differently.
@@ -239,9 +236,17 @@
     if (!CanReuseAll(&line))
       return last_line_start;
 
+    const NGPhysicalLineBoxFragment& line_box_fragment =
+        *item.LineBoxFragment();
+
     // Abort if the line propagated its descendants to outside of the line.
     // They are propagated through NGLayoutResult, which we don't cache.
-    if (line_box_fragment->HasPropagatedDescendants())
+    if (line_box_fragment.HasPropagatedDescendants())
+      return &item;
+
+    // Abort if we are an empty line-box. We don't have any content, and might
+    // resolve the BFC block-offset at the incorrect position.
+    if (line_box_fragment.IsEmptyLineBox())
       return &item;
 
     // TODO(kojii): Running the normal layout code at least once for this
@@ -249,7 +254,7 @@
     // partial. Remove the last fragment if it is the end of the
     // fragmentation to do so, but we should figure out how to setup the
     // states without doing this.
-    if (!line_box_fragment->BreakToken())
+    if (!line_box_fragment.BreakToken())
       return &item;
 
     last_line_start = &item;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index 0a4e95e..0246dcc 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -627,8 +627,10 @@
     container_builder_.SetInlineSize(fragment.InlineSize());
     // Block-in-inline is wrapped in an anonymous block that has no margins.
     DCHECK(layout_object->IsAnonymous());
-    container_builder_.SetMetrics(fragment.BaselineMetrics(
-        /* margins */ NGLineBoxStrut(), baseline_type_));
+    const FontHeight metrics = fragment.BaselineMetrics(
+        /* margins */ NGLineBoxStrut(), baseline_type_);
+    container_builder_.SetMetrics(metrics);
+    line_box->MoveInBlockDirection(metrics.ascent);
 
     // If a spanner was found inside the child, we need to finish up and
     // propagate the spanner to the column layout algorithm, so that it can take
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
index cfddbb0..6a7e4d8 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -369,7 +369,8 @@
       has_cloned_box_decorations_ = true;
       ++cloned_box_decorations_count_;
       NGInlineItemResult item_result;
-      ComputeOpenTagResult(*item, constraint_space_, &item_result);
+      if (!is_svg_text_)
+        ComputeOpenTagResult(*item, constraint_space_, &item_result);
       cloned_box_decorations_initial_size_ += item_result.inline_size;
       cloned_box_decorations_end_size_ += item_result.margins.inline_end +
                                           item_result.borders.inline_end +
@@ -2202,7 +2203,8 @@
   NGInlineItemResult* item_result = AddItem(item, line_info);
   DCHECK(item.Style());
   const ComputedStyle& style = *item.Style();
-  if (ComputeOpenTagResult(item, constraint_space_, item_result)) {
+  if (!is_svg_text_ &&
+      ComputeOpenTagResult(item, constraint_space_, item_result)) {
     // Negative margins on open tags may bring the position back. Update
     // |state_| if that happens.
     if (UNLIKELY(item_result->inline_size < 0 &&
@@ -2250,7 +2252,7 @@
   NGInlineItemResult* item_result = AddItem(item, line_info);
 
   item_result->has_edge = item.HasEndEdge();
-  if (item_result->has_edge) {
+  if (item_result->has_edge && !is_svg_text_) {
     DCHECK(item.Style());
     const ComputedStyle& style = *item.Style();
     item_result->inline_size = ComputeInlineEndSize(constraint_space_, &style);
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 0430d266..149ff3a1 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
@@ -989,10 +989,6 @@
     NGPreviousInflowPosition* previous_inflow_position,
     scoped_refptr<const NGInlineBreakToken>* inline_break_token_out) {
   DCHECK(previous_result_);
-  DCHECK(!inline_node.IsEmptyInline());
-  DCHECK(container_builder_.BfcBlockOffset());
-  DCHECK(previous_inflow_position->margin_strut.IsEmpty());
-  DCHECK(!previous_inflow_position->self_collapsing_child_had_clearance);
 
   const auto& previous_fragment =
       To<NGPhysicalBoxFragment>(previous_result_->PhysicalFragment());
@@ -1033,6 +1029,13 @@
     return false;
   }
 
+  // To reach here we mustn't have any adjoining objects, and the first line
+  // must have content. Resolving the BFC block-offset here should never fail.
+  DCHECK(!abort_when_bfc_block_offset_updated_);
+  bool success = ResolveBfcBlockOffset(previous_inflow_position);
+  DCHECK(success);
+  DCHECK(container_builder_.BfcBlockOffset());
+
   DCHECK_GT(result.line_count, 0u);
   DCHECK(!max_lines || result.line_count <= max_lines);
   if (lines_until_clamp_) {
@@ -1599,11 +1602,8 @@
     is_non_empty_inline = !child_inline_node->IsEmptyInline();
 
     // Add reusable line boxes from |previous_result_| if any.
-    if (is_non_empty_inline && !child_break_token && previous_result_) {
-      if (!ResolveBfcBlockOffset(previous_inflow_position))
-        return NGLayoutResult::kBfcBlockOffsetResolved;
-      DCHECK(container_builder_.BfcBlockOffset());
-
+    if (!abort_when_bfc_block_offset_updated_ && !child_break_token &&
+        previous_result_) {
       DCHECK(!*previous_inline_break_token);
       if (TryReuseFragmentsFromCache(*child_inline_node,
                                      previous_inflow_position,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
index ee381ebd..1fef65a 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
@@ -15,6 +15,7 @@
 #include "third_party/blink/renderer/core/highlight/highlight.h"
 #include "third_party/blink/renderer/core/layout/layout_object.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h"
+#include "third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h"
 #include "third_party/blink/renderer/core/paint/document_marker_painter.h"
 #include "third_party/blink/renderer/core/paint/highlight_painting_utils.h"
 #include "third_party/blink/renderer/core/paint/inline_text_box_painter.h"
@@ -319,9 +320,21 @@
           break;
         }
 
-        const TextPaintStyle text_style =
-            DocumentMarkerPainter::ComputeTextPaintStyleFrom(
-                document, node_, style_, text_marker, paint_info_);
+        TextPaintStyle text_style;
+        if (fragment_item_->Type() != NGFragmentItem::kSvgText) {
+          text_style = DocumentMarkerPainter::ComputeTextPaintStyleFrom(
+              document, node_, style_, text_marker, paint_info_);
+        } else {
+          // DocumentMarkerPainter::ComputeTextPaintStyleFrom() doesn't work
+          // well with SVG <text>, which doesn't apply 'color' CSS property.
+          const Color platform_matched_color =
+              LayoutTheme::GetTheme().PlatformTextSearchColor(
+                  text_marker.IsActiveMatch(), style_.UsedColorScheme());
+          text_painter_.SetSvgState(
+              *To<LayoutSVGInlineText>(fragment_item_->GetLayoutObject()),
+              style_, platform_matched_color);
+          text_style.current_color = platform_matched_color;
+        }
         if (text_style.current_color == Color::kTransparent)
           break;
         text_painter_.Paint(paint_start_offset, paint_end_offset,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc
index 7f9664c..e08bf38 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc
@@ -58,7 +58,8 @@
 
   const PhysicalOffset adjusted_paint_offset =
       paint_offset + inline_box_item_.OffsetInContainerFragment();
-  if (paint_info.phase == PaintPhase::kForeground)
+  if (paint_info.phase == PaintPhase::kForeground &&
+      !layout_object.IsSVGInline())
     PaintBackgroundBorderShadow(paint_info, adjusted_paint_offset);
 
   const bool suppress_box_decoration_background = true;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
index 69a63b7..237bcf2b 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
@@ -325,6 +325,31 @@
 
 void NGTextPainter::PaintSvgTextFragment(DOMNodeId node_id) {
   const NGTextPainter::SvgTextPaintState& state = *svg_text_paint_state_;
+  if (state.IsPaintingTextMatch()) {
+    PaintFlags fill_flags;
+    fill_flags.setColor(state.TextMatchColor().Rgb());
+    fill_flags.setAntiAlias(true);
+
+    PaintFlags stroke_flags;
+    bool should_paint_stroke = false;
+    if (SetupPaintForSvgText(state.InlineText(), graphics_context_,
+                             state.IsRenderingClipPathAsMaskImage(),
+                             state.Style(), state.GetShaderTransform(),
+                             kApplyToStrokeMode, stroke_flags)) {
+      should_paint_stroke = true;
+      stroke_flags.setLooper(nullptr);
+      stroke_flags.setColor(state.TextMatchColor().Rgb());
+    }
+    graphics_context_.DrawText(font_, fragment_paint_info_,
+                               FloatPoint(text_origin_), fill_flags, node_id);
+    if (should_paint_stroke) {
+      graphics_context_.DrawText(font_, fragment_paint_info_,
+                                 FloatPoint(text_origin_), stroke_flags,
+                                 node_id);
+    }
+    return;
+  }
+
   absl::optional<SelectionStyleScope> selection_style_scope;
   bool has_fill = state.Style().HasFill();
   bool has_visible_stroke = state.Style().HasVisibleStroke();
@@ -392,6 +417,14 @@
                                        is_rendering_clip_path_as_mask_image);
 }
 
+NGTextPainter::SvgTextPaintState& NGTextPainter::SetSvgState(
+    const LayoutSVGInlineText& svg_inline_text,
+    const ComputedStyle& style,
+    Color text_match_color) {
+  return svg_text_paint_state_.emplace(svg_inline_text, style,
+                                       text_match_color);
+}
+
 NGTextPainter::SvgTextPaintState* NGTextPainter::GetSvgState() {
   return base::OptionalOrNullptr(svg_text_paint_state_);
 }
@@ -405,6 +438,14 @@
       is_rendering_clip_path_as_mask_image_(
           is_rendering_clip_path_as_mask_image) {}
 
+NGTextPainter::SvgTextPaintState::SvgTextPaintState(
+    const LayoutSVGInlineText& layout_svg_inline_text,
+    const ComputedStyle& style,
+    Color text_match_color)
+    : layout_svg_inline_text_(layout_svg_inline_text),
+      style_(style),
+      text_match_color_(text_match_color) {}
+
 const LayoutSVGInlineText& NGTextPainter::SvgTextPaintState::InlineText()
     const {
   return layout_svg_inline_text_;
@@ -422,6 +463,14 @@
   return is_rendering_clip_path_as_mask_image_;
 }
 
+bool NGTextPainter::SvgTextPaintState::IsPaintingTextMatch() const {
+  return text_match_color_.has_value();
+}
+
+Color NGTextPainter::SvgTextPaintState::TextMatchColor() const {
+  return *text_match_color_;
+}
+
 AffineTransform& NGTextPainter::SvgTextPaintState::EnsureShaderTransform() {
   return shader_transform_ ? shader_transform_.value()
                            : shader_transform_.emplace();
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
index 26b4bb67..1b9a465 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
@@ -30,11 +30,17 @@
     SvgTextPaintState(const LayoutSVGInlineText&,
                       const ComputedStyle&,
                       bool is_rendering_clip_path_as_mask_image);
+    SvgTextPaintState(const LayoutSVGInlineText&,
+                      const ComputedStyle&,
+                      Color text_match_color);
 
     const LayoutSVGInlineText& InlineText() const;
     const ComputedStyle& Style() const;
     bool IsPaintingSelection() const;
     bool IsRenderingClipPathAsMaskImage() const;
+    bool IsPaintingTextMatch() const;
+    // This is callable only if IsPaintingTextMatch().
+    Color TextMatchColor() const;
 
     AffineTransform& EnsureShaderTransform();
     const AffineTransform* GetShaderTransform() const;
@@ -43,6 +49,7 @@
     const LayoutSVGInlineText& layout_svg_inline_text_;
     const ComputedStyle& style_;
     absl::optional<AffineTransform> shader_transform_;
+    absl::optional<Color> text_match_color_;
     bool is_painting_selection_ = false;
     bool is_rendering_clip_path_as_mask_image_ = false;
     friend class NGTextPainter;
@@ -102,6 +109,9 @@
   SvgTextPaintState& SetSvgState(const LayoutSVGInlineText&,
                                  const ComputedStyle&,
                                  bool is_rendering_clip_path_as_mask_image);
+  SvgTextPaintState& SetSvgState(const LayoutSVGInlineText& svg_inline_text,
+                                 const ComputedStyle& style,
+                                 Color text_match_color);
   SvgTextPaintState* GetSvgState();
 
  private:
diff --git a/third_party/blink/renderer/core/paint/outline_painter.cc b/third_party/blink/renderer/core/paint/outline_painter.cc
index 9626b3b5..5b9ae40 100644
--- a/third_party/blink/renderer/core/paint/outline_painter.cc
+++ b/third_party/blink/renderer/core/paint/outline_painter.cc
@@ -105,59 +105,99 @@
   return std::max(offset, -rect.Height() / 2);
 }
 
-void ApplyOutlineOffset(IntRect& rect, int offset) {
-  rect.InflateX(AdjustedOutlineOffsetX(rect, offset));
-  rect.InflateY(AdjustedOutlineOffsetY(rect, offset));
-}
-
-void PaintComplexOutline(GraphicsContext& graphics_context,
-                         const Vector<IntRect> rects,
-                         const ComputedStyle& style) {
-  DCHECK(!style.OutlineStyleIsAuto());
-
-  // Construct a clockwise path along the outer edge of the outline.
+// Construct a clockwise path along the outer edge of the region covered by
+// |rects| expanded by |outline_offset| (which can be negative and clamped by
+// the rect size) and |additional_outset| (which should be non-negative).
+bool ComputeRightAnglePath(SkPath& path,
+                           const Vector<IntRect>& rects,
+                           int outline_offset,
+                           int additional_outset) {
+  DCHECK_GE(additional_outset, 0);
   SkRegion region;
-  uint16_t width = style.OutlineWidthInt();
-  int offset = style.OutlineOffsetInt();
   for (auto& r : rects) {
     IntRect rect = r;
-    ApplyOutlineOffset(rect, offset);
-    rect.Inflate(width);
+    rect.InflateX(AdjustedOutlineOffsetX(rect, outline_offset));
+    rect.InflateY(AdjustedOutlineOffsetY(rect, outline_offset));
+    rect.Inflate(additional_outset);
     region.op(rect, SkRegion::kUnion_Op);
   }
-  SkPath path;
-  if (!region.getBoundaryPath(&path))
-    return;
+  return region.getBoundaryPath(&path);
+}
 
-  Vector<OutlineEdgeInfo, 4> edges;
+struct Line {
+  SkPoint start;
+  SkPoint end;
+};
 
-  SkPath::RawIter iter(path);
-  SkPoint points[4], first_point, last_point;
-  wtf_size_t count = 0;
+// Merge line2 into line1 if they are in the same straight line.
+bool MergeLineIfPossible(Line& line1, const Line& line2) {
+  DCHECK(line1.end == line2.start);
+  if ((line1.start.x() == line1.end.x() && line1.start.x() == line2.end.x()) ||
+      (line1.start.y() == line1.end.y() && line1.start.y() == line2.end.y())) {
+    line1.end = line2.end;
+    return true;
+  }
+  return false;
+}
+
+// Iterate a right angle |path| by running |contour_action| on each contour.
+// The path contains one or more contours each of which is like (kMove_Verb,
+// kLine_Verb, ..., kClose_Verb). Each line must be either horizontal or
+// vertical. Each pair of adjacent lines (including the last and the first)
+// should either create a right angle or be in the same straight line.
+template <typename Action>
+void IterateRightAnglePath(const SkPath& path, const Action& contour_action) {
+  SkPath::Iter iter(path, /*forceClose*/ true);
+  SkPoint points[4];
+  Vector<Line> lines;
   for (SkPath::Verb verb = iter.next(points); verb != SkPath::kDone_Verb;
        verb = iter.next(points)) {
-    // Keep track of the first and last point of each contour (started with
-    // kMove_Verb) so we can add the closing-line on kClose_Verb.
-    if (verb == SkPath::kMove_Verb) {
-      first_point = points[0];
-      last_point = first_point;  // this gets reset after each line, but we
-                                 // initialize it here
-    } else if (verb == SkPath::kClose_Verb) {
-      // create an artificial line to close the contour
-      verb = SkPath::kLine_Verb;
-      points[0] = last_point;
-      points[1] = first_point;
+    switch (verb) {
+      case SkPath::kMove_Verb:
+        DCHECK(lines.IsEmpty());
+        break;
+      case SkPath::kLine_Verb:
+        if (points[0] != points[1]) {
+          Line new_line{points[0], points[1]};
+          if (lines.IsEmpty() || !MergeLineIfPossible(lines.back(), new_line)) {
+            lines.push_back(new_line);
+            DCHECK(lines.size() == 1 ||
+                   lines.back().start == lines[lines.size() - 2].end);
+          }
+        }
+        break;
+      case SkPath::kClose_Verb: {
+        if (lines.size() >= 4u) {
+          if (MergeLineIfPossible(lines.back(), lines.front())) {
+            lines.front() = lines.back();
+            lines.pop_back();
+          }
+          DCHECK(lines.front().start == lines.back().end);
+          DCHECK_GE(lines.size(), 4u);
+          contour_action(lines);
+        }
+        lines.clear();
+        break;
+      }
+      default:
+        NOTREACHED();
     }
-    if (verb != SkPath::kLine_Verb)
-      continue;
-    last_point = points[1];
+  }
+}
 
-    edges.Grow(++count);
-    OutlineEdgeInfo& edge = edges.back();
-    edge.x1 = SkScalarTruncToInt(points[0].x());
-    edge.y1 = SkScalarTruncToInt(points[0].y());
-    edge.x2 = SkScalarTruncToInt(points[1].x());
-    edge.y2 = SkScalarTruncToInt(points[1].y());
+void PaintComplexRightAngleOutlineContour(GraphicsContext& context,
+                                          const Vector<Line>& lines,
+                                          const ComputedStyle& style,
+                                          Color color) {
+  int width = style.OutlineWidthInt();
+  Vector<OutlineEdgeInfo> edges;
+  edges.ReserveInitialCapacity(lines.size());
+  for (auto& line : lines) {
+    auto& edge = edges.emplace_back();
+    edge.x1 = SkScalarTruncToInt(line.start.x());
+    edge.y1 = SkScalarTruncToInt(line.start.y());
+    edge.x2 = SkScalarTruncToInt(line.end.x());
+    edge.y2 = SkScalarTruncToInt(line.end.y());
     if (edge.x1 == edge.x2) {
       if (edge.y1 < edge.y2) {
         edge.x1 -= width;
@@ -180,26 +220,14 @@
     }
   }
 
-  if (!count)
-    return;
-
-  Color color = style.VisitedDependentColor(GetCSSPropertyOutlineColor());
-  bool use_transparency_layer = color.HasAlpha();
-  if (use_transparency_layer) {
-    graphics_context.BeginLayer(static_cast<float>(color.Alpha()) / 255);
-    color.SetRGB(color.Red(), color.Green(), color.Blue());
-  }
-
-  DCHECK(count >= 4 && edges.size() == count);
   int first_adjacent_width = AdjustJoint(width, edges.back(), edges.front());
-
   // The width of the angled part of starting and ending joint of the current
   // edge.
   int adjacent_width_start = first_adjacent_width;
   int adjacent_width_end;
-  for (wtf_size_t i = 0; i < count; ++i) {
+  for (wtf_size_t i = 0; i < edges.size(); ++i) {
     OutlineEdgeInfo& edge = edges[i];
-    adjacent_width_end = i == count - 1
+    adjacent_width_end = i == edges.size() - 1
                              ? first_adjacent_width
                              : AdjustJoint(width, edge, edges[i + 1]);
     int adjacent_width1 = adjacent_width_start;
@@ -207,16 +235,328 @@
     if (edge.side == BoxSide::kLeft || edge.side == BoxSide::kBottom)
       std::swap(adjacent_width1, adjacent_width2);
     BoxBorderPainter::DrawLineForBoxSide(
-        graphics_context, edge.x1, edge.y1, edge.x2, edge.y2, edge.side, color,
+        context, edge.x1, edge.y1, edge.x2, edge.y2, edge.side, color,
         style.OutlineStyle(), adjacent_width1, adjacent_width2,
         /*antialias*/ false);
     adjacent_width_start = adjacent_width_end;
   }
+}
+
+void PaintComplexRightAngleOutline(GraphicsContext& context,
+                                   const Vector<IntRect>& rects,
+                                   const ComputedStyle& style) {
+  DCHECK(!style.OutlineStyleIsAuto());
+
+  SkPath path;
+  if (!ComputeRightAnglePath(path, rects, style.OutlineOffsetInt(),
+                             style.OutlineWidthInt())) {
+    return;
+  }
+
+  Color color = style.VisitedDependentColor(GetCSSPropertyOutlineColor());
+  bool use_transparency_layer = color.HasAlpha();
+  if (use_transparency_layer) {
+    context.BeginLayer(static_cast<float>(color.Alpha()) / 255);
+    color.SetRGB(color.Red(), color.Green(), color.Blue());
+  }
+
+  IterateRightAnglePath(path, [&](const Vector<Line>& lines) {
+    PaintComplexRightAngleOutlineContour(context, lines, style, color);
+  });
 
   if (use_transparency_layer)
-    graphics_context.EndLayer();
+    context.EndLayer();
 }
 
+// Given 3 points defining a right angle corner, returns |p2| shifted to make
+// the containing path shrink by |inset|.
+SkPoint ShrinkCorner(const SkPoint& p1,
+                     const SkPoint& p2,
+                     const SkPoint& p3,
+                     int inset) {
+  if (p1.x() == p2.x()) {
+    if (p1.y() < p2.y()) {
+      return p2.x() < p3.x() ? p2 + SkVector::Make(-inset, inset)
+                             : p2 + SkVector::Make(-inset, -inset);
+    }
+    return p2.x() < p3.x() ? p2 + SkVector::Make(inset, inset)
+                           : p2 + SkVector::Make(inset, -inset);
+  }
+  if (p1.x() < p2.x()) {
+    return p2.y() < p3.y() ? p2 + SkVector::Make(-inset, inset)
+                           : p2 + SkVector::Make(inset, inset);
+  }
+  return p2.y() < p3.y() ? p2 + SkVector::Make(-inset, -inset)
+                         : p2 + SkVector::Make(inset, -inset);
+}
+
+void ShrinkRightAnglePath(SkPath& path, int inset) {
+  SkPath input;
+  std::swap(input, path);
+  IterateRightAnglePath(input, [&path, inset](const Vector<Line>& lines) {
+    for (wtf_size_t i = 0; i < lines.size(); i++) {
+      const SkPoint& prev_point =
+          lines[i == 0 ? lines.size() - 1 : i - 1].start;
+      SkPoint new_point =
+          ShrinkCorner(prev_point, lines[i].start, lines[i].end, inset);
+      if (i == 0) {
+        path.moveTo(new_point);
+      } else {
+        path.lineTo(new_point);
+      }
+    }
+    path.close();
+  });
+}
+
+FloatRoundedRect::Radii ComputeCornerRadii(
+    const ComputedStyle& style,
+    const PhysicalRect& reference_border_rect,
+    float offset) {
+  return RoundedBorderGeometry::PixelSnappedRoundedBorderWithOutsets(
+             style, reference_border_rect,
+             LayoutRectOutsets(offset, offset, offset, offset))
+      .GetRadii();
+}
+
+// Given 3 points defining a right angle corner, returns the corresponding
+// corner in |convex_radii| or |concave_radii|.
+FloatSize GetRadiiCorner(const FloatRoundedRect::Radii& convex_radii,
+                         const FloatRoundedRect::Radii& concave_radii,
+                         const SkPoint& p1,
+                         const SkPoint& p2,
+                         const SkPoint& p3) {
+  if (p1.x() == p2.x()) {
+    DCHECK_NE(p1.y(), p2.y());
+    DCHECK_NE(p2.x(), p3.x());
+    DCHECK_EQ(p2.y(), p3.y());
+    if (p1.y() < p2.y()) {
+      return p2.x() < p3.x() ? concave_radii.BottomLeft()
+                             : convex_radii.BottomRight();
+    }
+    return p2.x() < p3.x() ? convex_radii.TopLeft() : concave_radii.TopRight();
+  }
+  DCHECK_EQ(p1.y(), p2.y());
+  DCHECK_EQ(p2.x(), p3.x());
+  DCHECK_NE(p2.y(), p3.y());
+  if (p1.x() < p2.x()) {
+    return p2.y() < p3.y() ? convex_radii.TopRight()
+                           : concave_radii.BottomRight();
+  }
+  return p2.y() < p3.y() ? concave_radii.TopLeft() : convex_radii.BottomLeft();
+}
+
+// Shorten |line| between rounded corners.
+void AdjustLineBetweenCorners(Line& line,
+                              const FloatRoundedRect::Radii& convex_radii,
+                              const FloatRoundedRect::Radii& concave_radii,
+                              const SkPoint& prev_point,
+                              const SkPoint& next_point) {
+  FloatSize corner1 = GetRadiiCorner(convex_radii, concave_radii, prev_point,
+                                     line.start, line.end);
+  FloatSize corner2 = GetRadiiCorner(convex_radii, concave_radii, line.start,
+                                     line.end, next_point);
+  if (line.start.x() == line.end.x()) {
+    // |line| is vertical, and adjacent lines are horizontal.
+    float height = std::abs(line.end.y() - line.start.y());
+    float corner1_height = corner1.Height();
+    float corner2_height = corner2.Height();
+    if (corner1_height + corner2_height > height) {
+      // Scale down the corner heights to make the corners fit in |height|.
+      float scale = height / (corner1_height + corner2_height);
+      corner1_height = floorf(corner1_height * scale);
+      corner2_height = floorf(corner2_height * scale);
+    }
+    if (line.start.y() < line.end.y()) {
+      line.start.offset(0, corner1_height);
+      line.end.offset(0, -corner2_height);
+    } else {
+      line.start.offset(0, -corner1_height);
+      line.end.offset(0, corner2_height);
+    }
+  } else {
+    // |line| is horizontal, and adjacent lines are vertical.
+    float width = std::abs(line.end.x() - line.start.x());
+    float corner1_width = corner1.Width();
+    float corner2_width = corner2.Width();
+    if (corner1_width + corner2_width > width) {
+      // Scale down the corner widths to make the corners fit in |width|.
+      float scale = width / (corner1_width + corner2_width);
+      corner1_width = floorf(corner1_width * scale);
+      corner2_width = floorf(corner2_width * scale);
+    }
+    if (line.start.x() < line.end.x()) {
+      line.start.offset(corner1_width, 0);
+      line.end.offset(-corner2_width, 0);
+    } else {
+      line.start.offset(-corner1_width, 0);
+      line.end.offset(corner2_width, 0);
+    }
+  }
+}
+
+// Create a rounded path from a right angle |path| by
+// - inserting arc segments for corners;
+// - adjusting length of the lines.
+void AddCornerRadiiToPath(SkPath& path,
+                          const FloatRoundedRect::Radii& convex_radii,
+                          const FloatRoundedRect::Radii& concave_radii) {
+  SkPath input;
+  input.swap(path);
+  IterateRightAnglePath(input, [&](const Vector<Line>& lines) {
+    auto new_lines = lines;
+    for (wtf_size_t i = 0; i < lines.size(); i++) {
+      const SkPoint& prev_point =
+          lines[i == 0 ? lines.size() - 1 : i - 1].start;
+      const SkPoint& next_point = lines[i == lines.size() - 1 ? 0 : i + 1].end;
+      AdjustLineBetweenCorners(new_lines[i], convex_radii, concave_radii,
+                               prev_point, next_point);
+    }
+    // Generate the new contour into |path|.
+    DCHECK_EQ(lines.size(), new_lines.size());
+    path.moveTo(new_lines[0].start);
+    for (wtf_size_t i = 0; i < new_lines.size(); i++) {
+      const Line& line = new_lines[i];
+      if (line.end != line.start)
+        path.lineTo(line.end);
+      const Line& next_line = new_lines[i == lines.size() - 1 ? 0 : i + 1];
+      if (line.end != next_line.start) {
+        constexpr float kCornerConicWeight = 0.707106781187;  // 1/sqrt(2)
+        // This produces a 90 degree arc from line.end towards lines[i].end
+        // to next_line.start.
+        path.conicTo(lines[i].end, next_line.start, kCornerConicWeight);
+      }
+    }
+    path.close();
+  });
+}
+
+class ComplexRoundedOutlinePainter {
+ public:
+  ComplexRoundedOutlinePainter(GraphicsContext& context,
+                               const Vector<IntRect>& rects,
+                               const PhysicalRect& reference_border_rect,
+                               const ComputedStyle& style)
+      : context_(context),
+        rects_(rects),
+        reference_border_rect_(reference_border_rect),
+        style_(style),
+        outline_style_(style.OutlineStyle()),
+        offset_(style.OutlineOffsetInt()),
+        width_(style.OutlineWidthInt()),
+        color_(style.VisitedDependentColor(GetCSSPropertyOutlineColor())) {
+    DCHECK(!style.OutlineStyleIsAuto());
+    if (width_ <= 2 && outline_style_ == EBorderStyle::kDouble) {
+      outline_style_ = EBorderStyle::kSolid;
+    } else if (width_ == 1 && (outline_style_ == EBorderStyle::kRidge ||
+                               outline_style_ == EBorderStyle::kGroove)) {
+      outline_style_ = EBorderStyle::kSolid;
+      Color dark = color_.Dark();
+      color_ = Color((color_.Red() + dark.Red()) / 2,
+                     (color_.Green() + dark.Green()) / 2,
+                     (color_.Blue() + dark.Blue()) / 2, color_.Alpha());
+    }
+  }
+
+  bool Paint() {
+    if (width_ == 0)
+      return true;
+
+    if (!ComputeRightAnglePath(right_angle_outer_path_, rects_, offset_,
+                               width_)) {
+      return true;
+    }
+
+    SkPath outer_path = right_angle_outer_path_;
+    SkPath inner_path = right_angle_outer_path_;
+    ShrinkRightAnglePath(inner_path, width_);
+    auto inner_radii = ComputeRadii(0);
+    auto outer_radii = ComputeRadii(width_);
+    AddCornerRadiiToPath(outer_path, outer_radii, inner_radii);
+    AddCornerRadiiToPath(inner_path, inner_radii, outer_radii);
+
+    GraphicsContextStateSaver saver(context_);
+    context_.ClipPath(outer_path, kAntiAliased);
+    context_.ClipOut(inner_path);
+    context_.SetFillColor(color_);
+
+    switch (outline_style_) {
+      case EBorderStyle::kSolid:
+        context_.FillRect(outer_path.getBounds());
+        break;
+      case EBorderStyle::kDouble:
+        PaintDoubleOutline();
+        break;
+      case EBorderStyle::kDotted:
+      case EBorderStyle::kDashed:
+        PaintDottedOrDashedOutline();
+        break;
+      default:
+        // TODO(wangxianzhu): Draw kRidge, kGroove, kInset, kOutset by calling
+        // BoxBorderPainter::DrawBoxSideFromPath() for each segment of the path.
+        return false;
+    }
+    return true;
+  }
+
+ private:
+  void PaintDoubleOutline() {
+    SkPath inner_third_path = right_angle_outer_path_;
+    SkPath outer_third_path = right_angle_outer_path_;
+    int stroke_width = std::round(width_ / 3.0);
+    ShrinkRightAnglePath(inner_third_path, width_ - stroke_width);
+    ShrinkRightAnglePath(outer_third_path, stroke_width);
+    auto inner_third_radii = ComputeRadii(stroke_width);
+    auto outer_third_radii = ComputeRadii(width_ - stroke_width);
+    AddCornerRadiiToPath(inner_third_path, inner_third_radii,
+                         outer_third_radii);
+    AddCornerRadiiToPath(outer_third_path, outer_third_radii,
+                         inner_third_radii);
+    {
+      GraphicsContextStateSaver saver(context_);
+      context_.ClipOut(outer_third_path);
+      context_.FillRect(right_angle_outer_path_.getBounds());
+    }
+    context_.FillPath(inner_third_path);
+  }
+
+  void PaintDottedOrDashedOutline() {
+    SkPath center_path = right_angle_outer_path_;
+    int center_outset = width_ / 2;
+    ShrinkRightAnglePath(center_path, width_ - center_outset);
+    auto center_radii = ComputeRadii(center_outset);
+    AddCornerRadiiToPath(center_path, center_radii, center_radii);
+    context_.SetStrokeColor(color_);
+    auto stroke_style =
+        outline_style_ == EBorderStyle::kDashed ? kDashedStroke : kDottedStroke;
+    context_.SetStrokeStyle(stroke_style);
+    if (StrokeData::StrokeIsDashed(width_, stroke_style)) {
+      // Draw wider to fill the clip area between inner_path_ and outer_path_,
+      // to get smoother edges, and even stroke thickness when the outline is
+      // thin.
+      context_.SetStrokeThickness(width_ + 2);
+    } else {
+      context_.SetStrokeThickness(width_);
+      context_.SetLineCap(kRoundCap);
+    }
+    context_.StrokePath(center_path, Path(center_path).length(), width_);
+  }
+
+  FloatRoundedRect::Radii ComputeRadii(int outset) const {
+    return ComputeCornerRadii(style_, reference_border_rect_, offset_ + outset);
+  }
+
+  GraphicsContext& context_;
+  const Vector<IntRect>& rects_;
+  const PhysicalRect& reference_border_rect_;
+  const ComputedStyle& style_;
+  EBorderStyle outline_style_;
+  int offset_;
+  int width_;
+  Color color_;
+  SkPath right_angle_outer_path_;
+};
+
 float DefaultFocusRingCornerRadius(const ComputedStyle& style) {
   // Default style is corner radius equal to outline width.
   return style.FocusRingStrokeWidth();
@@ -227,12 +567,8 @@
     const PhysicalRect& reference_border_rect) {
   if (style.HasBorderRadius() &&
       (!style.HasEffectiveAppearance() || style.HasAuthorBorderRadius())) {
-    int outset = style.OutlineOffsetInt();
-    FloatRoundedRect rect =
-        RoundedBorderGeometry::PixelSnappedRoundedBorderWithOutsets(
-            style, reference_border_rect,
-            LayoutRectOutsets(outset, outset, outset, outset));
-    auto radii = rect.GetRadii();
+    auto radii = ComputeCornerRadii(style, reference_border_rect,
+                                    style.OutlineOffsetInt());
     radii.SetMinimumRadius(DefaultFocusRingCornerRadius(style));
     return radii;
   }
@@ -277,190 +613,24 @@
   return FloatRoundedRect::Radii(DefaultFocusRingCornerRadius(style));
 }
 
-// Given 3 points defining a corner, returns the corresponding corner in
-// |radii|.
-FloatSize GetRadiiCorner(const FloatRoundedRect::Radii& radii,
-                         const SkPoint& p1,
-                         const SkPoint& p2,
-                         const SkPoint& p3) {
-  if (p1.x() == p2.x()) {
-    DCHECK_NE(p1.y(), p2.y());
-    DCHECK_NE(p2.x(), p3.x());
-    DCHECK_EQ(p2.y(), p3.y());
-    if (p1.y() < p2.y())
-      return p2.x() < p3.x() ? radii.BottomLeft() : radii.BottomRight();
-    return p2.x() < p3.x() ? radii.TopLeft() : radii.TopRight();
-  }
-  DCHECK_EQ(p1.y(), p2.y());
-  DCHECK_EQ(p2.x(), p3.x());
-  DCHECK_NE(p2.y(), p3.y());
-  if (p1.x() < p2.x())
-    return p2.y() < p3.y() ? radii.TopRight() : radii.BottomRight();
-  return p2.y() < p3.y() ? radii.TopLeft() : radii.BottomLeft();
-}
-
-struct Line {
-  SkPoint start;
-  SkPoint end;
-};
-
-// Merge line2 into line1 if they are in the same straight line.
-bool MergeLineIfPossible(Line& line1, const Line& line2) {
-  DCHECK(line1.end == line2.start);
-  if ((line1.start.x() == line1.end.x() && line1.start.x() == line2.end.x()) ||
-      (line1.start.y() == line1.end.y() && line1.start.y() == line2.end.y())) {
-    line1.end = line2.end;
-    return true;
-  }
-  return false;
-}
-
-// Shorten |line| between rounded corners.
-void AdjustLineBetweenCorners(Line& line,
-                              const FloatRoundedRect::Radii& radii,
-                              const SkPoint& prev_point,
-                              const SkPoint& next_point) {
-  FloatSize corner1 = GetRadiiCorner(radii, prev_point, line.start, line.end);
-  FloatSize corner2 = GetRadiiCorner(radii, line.start, line.end, next_point);
-  if (line.start.x() == line.end.x()) {
-    // |line| is vertical, and adjacent lines are horizontal.
-    float height = std::abs(line.end.y() - line.start.y());
-    float corner1_height = corner1.Height();
-    float corner2_height = corner2.Height();
-    if (corner1_height + corner2_height > height) {
-      // Scale down the corner heights to make the corners fit in |height|.
-      float scale = height / (corner1_height + corner2_height);
-      corner1_height = floorf(corner1_height * scale);
-      corner2_height = floorf(corner2_height * scale);
-    }
-    if (line.start.y() < line.end.y()) {
-      line.start.offset(0, corner1_height);
-      line.end.offset(0, -corner2_height);
-    } else {
-      line.start.offset(0, -corner1_height);
-      line.end.offset(0, corner2_height);
-    }
-  } else {
-    // |line| is horizontal, and adjacent lines are vertical.
-    float width = std::abs(line.end.x() - line.start.x());
-    float corner1_width = corner1.Width();
-    float corner2_width = corner2.Width();
-    if (corner1_width + corner2_width > width) {
-      // Scale down the corner widths to make the corners fit in |width|.
-      float scale = width / (corner1_width + corner2_width);
-      corner1_width = floorf(corner1_width * scale);
-      corner2_width = floorf(corner2_width * scale);
-    }
-    if (line.start.x() < line.end.x()) {
-      line.start.offset(corner1_width, 0);
-      line.end.offset(-corner2_width, 0);
-    } else {
-      line.start.offset(-corner1_width, 0);
-      line.end.offset(corner2_width, 0);
-    }
-  }
-}
-
-// Create a rounded path from |path| containing right angle lines by
-// - inserting arc segments for corners;
-// - adjusting length of the lines.
-void AddCornerRadiiToPath(SkPath& path, const FloatRoundedRect::Radii& radii) {
-  SkPath input;
-  input.swap(path);
-
-  // The path may contain multiple contours each of which is like (kMove_Verb,
-  // kLine_Verb, ..., kClose_Verb). Each line must be either horizontal or
-  // vertical. Two adjacent lines create a right angle.
-  SkPath::Iter iter(input, /*forceClose*/ true);
-  SkPoint points[4];  // for iter.next().
-  Vector<Line> lines;
-  for (SkPath::Verb verb = iter.next(points); verb != SkPath::kDone_Verb;
-       verb = iter.next(points)) {
-    switch (verb) {
-      case SkPath::kMove_Verb:
-        DCHECK(lines.IsEmpty());
-        break;
-      case SkPath::kLine_Verb:
-        if (points[0] != points[1]) {
-          Line new_line{points[0], points[1]};
-          if (lines.IsEmpty() || !MergeLineIfPossible(lines.back(), new_line)) {
-            lines.push_back(new_line);
-            DCHECK(lines.size() == 1 ||
-                   lines.back().start == lines[lines.size() - 2].end);
-          }
-        }
-        break;
-      case SkPath::kClose_Verb: {
-        DCHECK_GE(lines.size(), 4u);
-        if (MergeLineIfPossible(lines.back(), lines.front())) {
-          lines.front() = lines.back();
-          lines.pop_back();
-        }
-        DCHECK(lines.front().start == lines.back().end);
-        auto new_lines = lines;
-        for (wtf_size_t i = 0; i < lines.size(); i++) {
-          const SkPoint& prev_point =
-              lines[i == 0 ? lines.size() - 1 : i - 1].start;
-          const SkPoint& next_point =
-              lines[i == lines.size() - 1 ? 0 : i + 1].end;
-          AdjustLineBetweenCorners(new_lines[i], radii, prev_point, next_point);
-        }
-        // Generate the new contour into |path|.
-        path.moveTo(new_lines[0].start);
-        for (wtf_size_t i = 0; i < new_lines.size(); i++) {
-          const Line& line = new_lines[i];
-          if (line.end != line.start)
-            path.lineTo(line.end);
-          const Line& next_line = new_lines[i == lines.size() - 1 ? 0 : i + 1];
-          if (line.end != next_line.start) {
-            constexpr float kCornerConicWeight = 0.707106781187;  // 1/sqrt(2)
-            // This produces a 90 degree arc from line.end towards lines[i].end
-            // to next_line.start.
-            path.conicTo(lines[i].end, next_line.start, kCornerConicWeight);
-          }
-        }
-        lines.clear();
-        path.close();
-        break;
-      }
-      default:
-        NOTREACHED();
-    }
-  }
-}
-
 void PaintSingleFocusRing(GraphicsContext& context,
                           const Vector<IntRect>& rects,
                           float width,
                           int offset,
                           const FloatRoundedRect::Radii& corner_radii,
                           const Color& color) {
-  unsigned rect_count = rects.size();
-  if (!rect_count)
-    return;
-
-  SkRegion focus_ring_region;
-  for (unsigned i = 0; i < rect_count; i++) {
-    SkIRect r = rects[i];
-    if (r.isEmpty())
-      continue;
-    r.outset(offset, offset);
-    focus_ring_region.op(r, SkRegion::kUnion_Op);
-  }
-
-  if (focus_ring_region.isEmpty())
-    return;
-
-  if (focus_ring_region.isRect()) {
-    context.DrawFocusRingRect(
-        FloatRoundedRect(IntRect(focus_ring_region.getBounds()), corner_radii),
-        color, width);
-    return;
-  }
-
+  DCHECK(!rects.IsEmpty());
   SkPath path;
-  if (!focus_ring_region.getBoundaryPath(&path))
+  if (!ComputeRightAnglePath(path, rects, offset, 0))
     return;
+
+  SkRect rect;
+  if (path.isRect(&rect)) {
+    context.DrawFocusRingRect(FloatRoundedRect(rect, corner_radii), color,
+                              width);
+    return;
+  }
+
   absl::optional<float> corner_radius = corner_radii.UniformRadius();
   if (corner_radius.has_value()) {
     context.DrawFocusRingPath(path, color, width, *corner_radius);
@@ -469,7 +639,7 @@
 
   // Bake non-uniform radii into the path, and draw the path with 0 corner
   // radius as the path already has rounded corners.
-  AddCornerRadiiToPath(path, corner_radii);
+  AddCornerRadiiToPath(path, corner_radii, corner_radii);
   context.DrawFocusRingPath(path, color, width, 0);
 }
 
@@ -506,8 +676,14 @@
     const Vector<PhysicalRect>& outline_rects,
     const ComputedStyle& style) {
   Vector<IntRect> pixel_snapped_outline_rects;
-  for (auto& r : outline_rects)
-    pixel_snapped_outline_rects.push_back(PixelSnappedIntRect(r));
+  for (auto& r : outline_rects) {
+    IntRect pixel_snapped_rect = PixelSnappedIntRect(r);
+    // Keep empty rect for normal outline, but not for focus rings.
+    if (!pixel_snapped_rect.IsEmpty() || !style.OutlineStyleIsAuto())
+      pixel_snapped_outline_rects.push_back(pixel_snapped_rect);
+  }
+  if (pixel_snapped_outline_rects.IsEmpty())
+    return;
 
   if (style.OutlineStyleIsAuto()) {
     auto corner_radii = GetFocusRingCornerRadii(style, outline_rects[0]);
@@ -523,15 +699,23 @@
         AdjustedOutlineOffsetY(united_outline_rect, style.OutlineOffsetInt()));
     return;
   }
-  PaintComplexOutline(context, pixel_snapped_outline_rects, style);
+
+  if (style.HasBorderRadius() &&
+      ComplexRoundedOutlinePainter(context, pixel_snapped_outline_rects,
+                                   outline_rects[0], style)
+          .Paint()) {
+    return;
+  }
+
+  PaintComplexRightAngleOutline(context, pixel_snapped_outline_rects, style);
 }
 
 void OutlinePainter::PaintFocusRingPath(GraphicsContext& context,
                                         const Path& focus_ring_path,
                                         const ComputedStyle& style) {
-  // TODO(wangxianzhu):
-  // 1. Implement support for offset.
-  // 2. Implement double focus rings like rectangular focus rings.
+  // TODO(crbug/251206): Implement outline-offset and double focus rings like
+  // right angle focus rings, which requires SkPathOps to support expanding and
+  // shrinking generic paths.
   context.DrawFocusRingPath(
       focus_ring_path.GetSkPath(),
       style.VisitedDependentColor(GetCSSPropertyOutlineColor()),
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
index 346c1e3..ee82ead 100644
--- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
+++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
@@ -741,12 +741,28 @@
   return node_object;
 }
 
+LocalFrame* InspectorAccessibilityAgent::FrameFromIdOrRoot(
+    const protocol::Maybe<String>& frame_id) {
+  if (frame_id.isJust()) {
+    return IdentifiersFactory::FrameById(inspected_frames_,
+                                         frame_id.fromJust());
+  }
+  return inspected_frames_->Root();
+}
+
 Response InspectorAccessibilityAgent::getFullAXTree(
     protocol::Maybe<int> max_depth,
+    Maybe<String> frame_id,
     std::unique_ptr<protocol::Array<AXNode>>* nodes) {
-  Document* document = inspected_frames_->Root()->GetDocument();
+  LocalFrame* frame = FrameFromIdOrRoot(frame_id);
+  if (!frame) {
+    return Response::InvalidParams(
+        "Frame with the given frameId is not found.");
+  }
+
+  Document* document = frame->GetDocument();
   if (!document)
-    return Response::ServerError("No document.");
+    return Response::InternalError();
   if (document->View()->NeedsLayout() || document->NeedsLayoutTreeUpdate())
     document->UpdateStyleAndLayout(DocumentUpdateReason::kInspector);
 
@@ -794,16 +810,21 @@
 
 protocol::Response InspectorAccessibilityAgent::getChildAXNodes(
     const String& in_id,
+    Maybe<String> frame_id,
     std::unique_ptr<protocol::Array<protocol::Accessibility::AXNode>>*
         out_nodes) {
   if (!enabled_.Get())
     return Response::ServerError("Accessibility has not been enabled.");
 
-  // FIXME(aboxhall): specify a document to this and getRootAXNode().
-  LocalFrame* frame = inspected_frames_->Root();
+  LocalFrame* frame = FrameFromIdOrRoot(frame_id);
+  if (!frame) {
+    return Response::InvalidParams(
+        "Frame with the given frameId is not found.");
+  }
+
   Document* document = frame->GetDocument();
   if (!document)
-    return Response::ServerError("No document.");
+    return Response::InternalError();
 
   if (document->View()->NeedsLayout() || document->NeedsLayoutTreeUpdate())
     document->UpdateStyleAndLayout(DocumentUpdateReason::kInspector);
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h
index 23e1768..7ead61a 100644
--- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h
+++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h
@@ -45,10 +45,12 @@
       override;
   protocol::Response getFullAXTree(
       protocol::Maybe<int> max_depth,
+      protocol::Maybe<String> frame_id,
       std::unique_ptr<protocol::Array<protocol::Accessibility::AXNode>>*)
       override;
   protocol::Response getChildAXNodes(
       const String& in_id,
+      protocol::Maybe<String> frame_id,
       std::unique_ptr<protocol::Array<protocol::Accessibility::AXNode>>*
           out_nodes) override;
   protocol::Response queryAXTree(
@@ -115,6 +117,7 @@
                    std::unique_ptr<protocol::Array<AXNodeId>>& child_ids,
                    std::unique_ptr<protocol::Array<AXNode>>& nodes,
                    AXObjectCacheImpl&) const;
+  LocalFrame* FrameFromIdOrRoot(const protocol::Maybe<String>& frame_id);
   void RetainAXContextForDocument(Document* document);
 
   Member<InspectedFrames> inspected_frames_;
diff --git a/third_party/blink/renderer/modules/mediastream/OWNERS b/third_party/blink/renderer/modules/mediastream/OWNERS
index 947c899..7a52048 100644
--- a/third_party/blink/renderer/modules/mediastream/OWNERS
+++ b/third_party/blink/renderer/modules/mediastream/OWNERS
@@ -3,3 +3,6 @@
 tommi@chromium.org
 
 per-file media_stream_audio_processor*=olka@chromium.org
+per-file low_latency_video*=kron@chromium.org
+per-file webmediaplayer_ms*=kron@chromium.org
+per-file video_renderer_algorithm*=kron@chromium.org
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index afcf1dab6..e1baae2 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1989,6 +1989,11 @@
       status: "experimental",
     },
     {
+      name: "ServiceWorkerSubresourceFilter",
+      origin_trial_feature_name: "ServiceWorkerSubresourceFilter",
+      status: "experimental",
+    },
+    {
       name: "SharedArrayBuffer",
     },
     {
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index fb5d3e8..7619e8d 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -4110,15 +4110,11 @@
 crbug.com/618969 external/wpt/css/css-grid/subgrid/* [ Skip ]
 
 ### Tests failing with SVGTextNG enabled:
-crbug.com/1179585 virtual/layout_ng_svg_text/external/wpt/svg/text/reftests/no-background.svg [ Failure ]
-crbug.com/1179585 virtual/layout_ng_svg_text/external/wpt/svg/text/reftests/no-margin-border-padding.svg [ Failure ]
-crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-match-svg.html [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/batik/text/smallFonts.svg [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/batik/text/textDecoration.svg [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/batik/text/textDecoration2.svg [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/batik/text/textFeatures.svg [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/batik/text/textProperties.svg [ Failure ]
-crbug.com/1179585 virtual/layout_ng_svg_text/svg/custom/text-match-highlight.html [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/custom/visibility-collapse.html [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/dynamic-updates/SVGTextElement-dom-lengthAdjust-attr.html [ Failure ]
 crbug.com/1179585 virtual/layout_ng_svg_text/svg/dynamic-updates/SVGTextElement-svgdom-lengthAdjust-prop.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/placement/grid-placement-items-spanning-multiple-rows.html b/third_party/blink/web_tests/external/wpt/css/css-grid/placement/grid-placement-items-spanning-multiple-rows.html
new file mode 100644
index 0000000..f03c5f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/placement/grid-placement-items-spanning-multiple-rows.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Placement of grid items spanning multiple rows</title>
+<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1237036">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<style>
+.grid {
+  display: grid;
+  grid-template-columns: 50px 50px;
+}
+.grid > div {
+  background: green;
+  min-height: 25px;
+}
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="grid">
+  <div style="grid-row: span 4"></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/has-matches-to-uninserted-elements.html b/third_party/blink/web_tests/external/wpt/css/selectors/has-matches-to-uninserted-elements.html
new file mode 100644
index 0000000..4d6c8cf2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/has-matches-to-uninserted-elements.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Matches :has pseudo class to uninserted elements</title>
+<link rel="author" title="Byungwoo Lee" href="mailto:blee@igalia.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://drafts.csswg.org/selectors/#relational">
+
+<script>
+  // Test that |selector| returns matching status.
+  function test_matches(node, selector, expected) {
+    test(function() {
+      assert_equals(node.matches(selector), expected);
+    }, `${selector} matches expectedly`);
+  }
+
+  subject = document.createElement('subject');
+
+  subject.innerHTML = '<child></child>';
+  test_matches(subject, ':has(child)', true);
+  test_matches(subject, ':has(> child)', true);
+
+  subject.innerHTML = '<child><descendant></descendant></child>';
+  test_matches(subject, ':has(descendant)', true);
+  test_matches(subject, ':has(> descendant)', false);
+
+  subject.innerHTML = '<child></child><direct_sibling></direct_sibling><indirect_sibling></indirect_sibling>';
+  test_matches(subject.firstChild, ':has(~ direct_sibling)', true);
+  test_matches(subject.firstChild, ':has(+ direct_sibling)', true);
+  test_matches(subject.firstChild, ':has(~ indirect_sibling)', true);
+  test_matches(subject.firstChild, ':has(+ indirect_sibling)', false);
+
+  test_matches(subject, ':has(*)', true);
+  test_matches(subject, ':has(> *)', true);
+  test_matches(subject, ':has(~ *)', false);
+  test_matches(subject, ':has(+ *)', false);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/signed-exchange/resources/sxg-util.js b/third_party/blink/web_tests/external/wpt/signed-exchange/resources/sxg-util.js
index 22c7ec8..fa2d200 100644
--- a/third_party/blink/web_tests/external/wpt/signed-exchange/resources/sxg-util.js
+++ b/third_party/blink/web_tests/external/wpt/signed-exchange/resources/sxg-util.js
@@ -1,12 +1,12 @@
 // Opens |url| in an iframe, establish a message channel with it, and waits for
 // a message from the frame content. Returns a promise that resolves with the
-// data of the message, or rejects on 10000ms timeout.
+// data of the message, or rejects on 15000ms timeout.
 // If the iframe load is expected to fail, the test should have
 // <meta name="timeout" content="long"> tag.
 function openSXGInIframeAndWaitForMessage(test_object, url, referrerPolicy) {
   return new Promise(async (resolve, reject) => {
     // We can't catch the network error on iframe. So we use the timer.
-    test_object.step_timeout(() => reject('timeout'), 10000);
+    test_object.step_timeout(() => reject('timeout'), 15000);
 
     const frame = await withIframe(url, 'sxg_iframe', referrerPolicy);
     const channel = new MessageChannel();
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed-expected.png
new file mode 100644
index 0000000..5325129
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed.html
new file mode 100644
index 0000000..24105f0
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dashed.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: dashed;
+  outline-color: green;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted-expected.png
new file mode 100644
index 0000000..bd9d46c7
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted.html
new file mode 100644
index 0000000..9e43192
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-dotted.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: dotted;
+  outline-color: green;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double-expected.png
new file mode 100644
index 0000000..b31593ef
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double.html
new file mode 100644
index 0000000..23f3a94ff
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-double.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: double;
+  outline-color: green;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove-expected.png
new file mode 100644
index 0000000..7c38741
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove.html
new file mode 100644
index 0000000..dad7ead
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-groove.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: groove;
+  outline-color: lime;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset-expected.png
new file mode 100644
index 0000000..34af25f
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset.html
new file mode 100644
index 0000000..49f829a3
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-inset.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: inset;
+  outline-color: lime;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset-expected.png
new file mode 100644
index 0000000..ce0ec87
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset.html
new file mode 100644
index 0000000..24eb8c3
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-outset.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: outset;
+  outline-color: lime;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge-expected.png
new file mode 100644
index 0000000..e2d47d4
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge.html
new file mode 100644
index 0000000..cc79498
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-ridge.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: ridge;
+  outline-color: lime;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid-expected.png b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid-expected.png
new file mode 100644
index 0000000..cb696613
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid.html b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid.html
new file mode 100644
index 0000000..3e2b4e30
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/inline-outline-with-border-radius-solid.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+div {
+  display: inline-block;
+  text-align: center;
+  width: 150px;
+  margin: 30px 0;
+}
+span {
+  outline-style: solid;
+  outline-color: green;
+  border-radius: 30px 10px 20px 50px / 10px 30px 20px 50px;
+  font-size: 40px;
+  font-family: ahem;
+  color: yellow;
+}
+</style>
+<div><span style="outline-width: 1px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: -5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 1px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 2px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 3px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 5px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
+<div><span style="outline-width: 15px; outline-offset: 5px">A<br>ABC<br>AB</span></div>
diff --git a/third_party/blink/web_tests/flag-specific/back-forward-cache/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt b/third_party/blink/web_tests/flag-specific/back-forward-cache/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt
new file mode 100644
index 0000000..4b939191
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/back-forward-cache/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt
@@ -0,0 +1,45 @@
+Test that back/forward navigations report the bfcache status
+{
+    frameId : <string>
+    loaderId : <string>
+    notRestoredExplanations : [
+        [0] : {
+            reason : RelatedActiveContentsExist
+            type : Circumstantial
+        }
+        [1] : {
+            reason : MediaSessionImplOnServiceCreated
+            type : Circumstantial
+        }
+        [2] : {
+            reason : MediaSession
+            type : Circumstantial
+        }
+        [3] : {
+            reason : BrowsingInstanceNotSwapped
+            type : Circumstantial
+        }
+    ]
+}
+{
+    frameId : <string>
+    loaderId : <string>
+    notRestoredExplanations : [
+        [0] : {
+            reason : RelatedActiveContentsExist
+            type : Circumstantial
+        }
+        [1] : {
+            reason : HTTPStatusNotOK
+            type : Circumstantial
+        }
+        [2] : {
+            reason : BrowsingInstanceNotSwapped
+            type : Circumstantial
+        }
+        [3] : {
+            reason : NoResponseHead
+            type : Circumstantial
+        }
+    ]
+}
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
deleted file mode 100644
index 8937ca1..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/borders/outline-alpha-inline-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/borders/outline-alpha-inline-expected.png
index 608491ad..8d24fbce 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/block-focus-ring-with-border-radius-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/block-focus-ring-with-border-radius-expected.png
index e0ea8f30..860474b 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/block-focus-ring-with-border-radius-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/block-focus-ring-with-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-focus-ring-with-non-uniform-border-radius-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-focus-ring-with-non-uniform-border-radius-expected.png
index a5886f3e..a97bd59 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-focus-ring-with-non-uniform-border-radius-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-focus-ring-with-non-uniform-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dashed-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dashed-expected.png
new file mode 100644
index 0000000..427d009d
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dashed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dotted-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dotted-expected.png
new file mode 100644
index 0000000..211c7ae7
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-dotted-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-double-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-double-expected.png
new file mode 100644
index 0000000..75c8fd3
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-double-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-groove-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-groove-expected.png
new file mode 100644
index 0000000..68dcfc2
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-groove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-inset-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-inset-expected.png
new file mode 100644
index 0000000..e804fc2
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-inset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-outset-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-outset-expected.png
new file mode 100644
index 0000000..82295ea
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-outset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-ridge-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-ridge-expected.png
new file mode 100644
index 0000000..c97fda6
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-ridge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-solid-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-solid-expected.png
new file mode 100644
index 0000000..50e661da
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/css/inline-outline-with-border-radius-solid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes-expected.txt
index 4e88d2c..2dceec9 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes-expected.txt
@@ -4,6 +4,7 @@
 RootWebArea
   main
     article
+    Iframe
 
 After getChildAXNodes:
 RootWebArea
@@ -11,4 +12,15 @@
     article
       heading "Article"
       paragraph
+    Iframe
+
+getChildAXNodes iframe:
+RootWebArea
+  main
+    article
+      heading "Article"
+      paragraph
+    Iframe
+      RootWebArea "Iframe with accessible name"
+        heading "accessible name"
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes.js b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes.js
index c4e1da33..04a1503 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getChildAXNodes.js
@@ -27,10 +27,20 @@
       <h1>Article</h1>
       <p>First paragraph</p>
     </article>
+    <iframe src="${testRunner.url('../resources/iframe-accessible-name.html')}"></iframe>
   </main>
   `, 'Tests Accessibility.getChildAXNodes');
   await dp.Accessibility.enable();
+
   let {result} = await dp.Accessibility.getFullAXTree({max_depth: 2});
+  let iframeNode;
+  for (const node of result.nodes) {
+    if (node.role?.value === 'Iframe') {
+      iframeNode = node;
+      break;
+    }
+  }
+
   const nodeMap = new Map();
 
   for (const node of result.nodes)
@@ -67,5 +77,31 @@
   }
 
   testRunner.log("\nAfter getChildAXNodes:\n" + printNodeAndChildren(rootNode));
+
+  const iframeDescribeResp = await dp.DOM.describeNode({backendNodeId: iframeNode.backendDOMNodeId});
+  const frameId = iframeDescribeResp.result.node.frameId;
+  // We retrieve the root node of the child frame using `getFullAXTree` with depth = 0 to omit its children.
+  const iframeResult = await dp.Accessibility.getFullAXTree({max_depth: 0, frameId});
+  const rootWebArea = iframeResult.result.nodes;
+  // To test that frameIds are handled correctly, we can now fetch the children of the iframe root using
+  // `getChildAXNodes` with the frameId of the iframe.
+  const heading = await dp.Accessibility.getChildAXNodes({id: rootWebArea[0].nodeId, frameId});
+
+  iframeNode.childIds = [rootWebArea[0].nodeId];
+  for (const node of [...rootWebArea, ...heading.result.nodes])
+    nodeMap.set(node.nodeId, node);
+  for (const [nodeId, node] of nodeMap.entries()) {
+    node.children = [];
+    for (const childId of node.childIds || []) {
+      const child = nodeMap.get(childId);
+      if (!child)
+        continue;
+      child.parent = node;
+      node.children.push(child);
+    }
+  }
+
+  testRunner.log("\ngetChildAXNodes iframe:\n" + printNodeAndChildren(rootNode));
+
   testRunner.completeTest();
 });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
index b4a6d733..120ccf1 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
@@ -10,4 +10,10 @@
   button "Hello Button"
     StaticText "Hello Button"
       InlineTextBox
+  Iframe
+
+RootWebArea "Iframe with accessible name"
+  heading "accessible name"
+    StaticText "accessible name"
+      InlineTextBox
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree.js b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree.js
index 9c4cf0f..6c36c2e2 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/accessibility/accessibility-getFullAXTree.js
@@ -2,10 +2,19 @@
   var {page, session, dp} = await testRunner.startHTML(`
     <div>Some text in a div, also a <a href='https://www.example.com'>link</a></div>
     <button>Hello Button</button>
+    <iframe src="${testRunner.url('../resources/iframe-accessible-name.html')}"></iframe>
   `, 'Tests Accessibility.getFullAXTree');
   const {result} = await dp.Accessibility.getFullAXTree();
   printNodes(result.nodes);
 
+  const iframeNodeQueryResp = await dp.Accessibility.queryAXTree(
+    {backendNodeId: result.nodes[0].backendDOMNodeId, role: 'Iframe'});
+  const iframeNode = iframeNodeQueryResp.result.nodes[0];
+  const iframeDescribeResp = await dp.DOM.describeNode({backendNodeId: iframeNode.backendDOMNodeId});
+  const frameId = iframeDescribeResp.result.node.frameId;
+  const iframeResult = await dp.Accessibility.getFullAXTree({frameId});
+  printNodes(iframeResult.result.nodes);
+
   testRunner.completeTest();
 
   function printNodes(nodes) {
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt
new file mode 100644
index 0000000..53313311
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host-expected.txt
@@ -0,0 +1,46 @@
+Test that back/forward navigations report the bfcache status
+{
+    frameId : <string>
+    loaderId : <string>
+    notRestoredExplanations : [
+        [0] : {
+            reason : RelatedActiveContentsExist
+            type : Circumstantial
+        }
+        [1] : {
+            reason : MediaSessionImplOnServiceCreated
+            type : Circumstantial
+        }
+        [2] : {
+            reason : MediaSession
+            type : Circumstantial
+        }
+        [3] : {
+            reason : BrowsingInstanceNotSwapped
+            type : Circumstantial
+        }
+    ]
+}
+{
+    frameId : <string>
+    loaderId : <string>
+    notRestoredExplanations : [
+        [0] : {
+            reason : RelatedActiveContentsExist
+            type : Circumstantial
+        }
+        [1] : {
+            reason : HTTPStatusNotOK
+            type : Circumstantial
+        }
+        [2] : {
+            reason : BrowsingInstanceNotSwapped
+            type : Circumstantial
+        }
+        [3] : {
+            reason : NoResponseHead
+            type : Circumstantial
+        }
+    ]
+}
+
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host.js b/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host.js
new file mode 100644
index 0000000..5824ae0
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/bfcache/report-back-forward-cache-status-disabled-for-render-frame-host.js
@@ -0,0 +1,39 @@
+(async function(testRunner) {
+  const {page, session, dp} = await testRunner.startBlank(
+      `Test that back/forward navigations report the bfcache status`);
+
+  await dp.Page.enable();
+
+  // Navigate to Page A.
+  await page.navigate(
+      'https://devtools.test:8443/inspector-protocol/resources/empty.html');
+
+  // Request media playback.
+  await session.evaluate("navigator.mediaSession.playbackState = 'playing'");
+
+  // Navigate to Page B.
+  await page.navigate(
+      'https://devtools.test:8000/inspector-protocol/resources/empty.html');
+
+  const {result: history} = await dp.Page.getNavigationHistory();
+
+  // Enable for printing the history.
+  // testRunner.log(history);
+
+  // Do a 'back' navigation.
+  const previous = history.entries[history.currentIndex - 1];
+  await historyNavigate(previous.id);
+
+  // Do a 'forward' navigation.
+  const current = history.entries[history.currentIndex];
+  await historyNavigate(current.id);
+
+  testRunner.completeTest();
+
+  async function historyNavigate(entryId) {
+    const statusReportPromise = dp.Page.onceBackForwardCacheNotUsed();
+    await dp.Page.navigateToHistoryEntry({entryId});
+    const {params: statusReport} = await statusReportPromise;
+    testRunner.log(statusReport);
+  }
+});
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js
index f2a75b2..a5d1744a 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js
@@ -2,6 +2,17 @@
   var {page, session, dp} = await testRunner.startBlank('Tests that isolation status is reported correctly');
 
   await dp.Page.enable();
+
+  let recordFameNavigated;
+  const frameNavigatedPromise = new Promise(resolve => {
+    let numberOfFrameNavigated = 0;
+    recordFameNavigated = () => {
+      if (++numberOfFrameNavigated === 4) {
+        resolve();
+      }
+    }
+  });
+
   async function onFrameNavigated(event) {
     const frameId = event.params.frame.id;
     const {result} = await session.protocol.Network.getSecurityIsolationStatus({frameId});
@@ -10,6 +21,7 @@
     testRunner.log(result.status.coep);
     testRunner.log(`COOP status`);
     testRunner.log(result.status.coop);
+    recordFameNavigated();
   }
   dp.Page.onFrameNavigated(onFrameNavigated);
 
@@ -27,6 +39,8 @@
   await session.navigate(`${url}?coep-rpt&corp=same-site&coop-rpt`);
   await session.navigate(`${url}?coep-rpt=require-corp;report-to="endpoint-1"&corp=same-origin&coop-rpt=same-origin-allow-popups;report-to="endpoint-2"`);
 
+  await frameNavigatedPromise;
+
   testRunner.completeTest();
 })
 
diff --git a/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override-expected.txt b/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override-expected.txt
index ea74340c..1e21354 100644
--- a/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override-expected.txt
@@ -1,40 +1,52 @@
 Tests that CSS media features can be overridden.
 matchMedia("(prefers-color-scheme: __invalid__)").matches: false
-matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px
+matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: no-preference)").matches: false
-matchMedia("(prefers-color-scheme: no-preference)").matches applied: 3px x 2px
+matchMedia("(prefers-color-scheme: no-preference)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: light)").matches: true
-matchMedia("(prefers-color-scheme: light)").matches applied: 3px x 2px
+matchMedia("(prefers-color-scheme: light)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: dark)").matches: true
-matchMedia("(prefers-color-scheme: dark)").matches applied: 4px x 2px
+matchMedia("(prefers-color-scheme: dark)").matches applied: 4px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: __invalid__)").matches: false
-matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px
+matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-reduced-motion: __invalid__)").matches: false
-matchMedia("(prefers-reduced-motion: __invalid__)").matches applied: 3px x 2px
+matchMedia("(prefers-reduced-motion: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-reduced-motion: no-preference)").matches: true
-matchMedia("(prefers-reduced-motion: no-preference)").matches applied: 3px x 2px
+matchMedia("(prefers-reduced-motion: no-preference)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-reduced-motion: reduce)").matches: true
-matchMedia("(prefers-reduced-motion: reduce)").matches applied: 3px x 3px
+matchMedia("(prefers-reduced-motion: reduce)").matches applied: 3px x 3px, rgb(255, 0, 0)
 matchMedia("(prefers-reduced-motion: __invalid__)").matches: false
-matchMedia("(prefers-reduced-motion: __invalid__)").matches applied: 3px x 2px
+matchMedia("(prefers-reduced-motion: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: __invalid__)").matches: false
+matchMedia("(prefers-contrast: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: no-preference)").matches: false
+matchMedia("(prefers-contrast: no-preference)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: more)").matches: false
+matchMedia("(prefers-contrast: more)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: less)").matches: false
+matchMedia("(prefers-contrast: less)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: custom)").matches: false
+matchMedia("(prefers-contrast: custom)").matches applied: 3px x 2px, rgb(255, 0, 0)
+matchMedia("(prefers-contrast: __invalid__)").matches: false
+matchMedia("(prefers-contrast: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(color-gamut: __invalid__)").matches: false
-matchMedia("(color-gamut: __invalid__)").matches applied: 3px x 2px
+matchMedia("(color-gamut: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(color-gamut: p3)").matches: true
-matchMedia("(color-gamut: p3)").matches applied: 6px x 6px
+matchMedia("(color-gamut: p3)").matches applied: 6px x 6px, rgb(255, 0, 0)
 matchMedia("(color-gamut: rec2020)").matches: true
-matchMedia("(color-gamut: rec2020)").matches applied: 7px x 7px
+matchMedia("(color-gamut: rec2020)").matches applied: 7px x 7px, rgb(255, 0, 0)
 matchMedia("(color-gamut: __invalid__)").matches: false
-matchMedia("(color-gamut: __invalid__)").matches applied: 3px x 2px
+matchMedia("(color-gamut: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(forced-colors: __invalid__)").matches: false
-matchMedia("(forced-colors: __invalid__)").matches applied: 3px x 2px
+matchMedia("(forced-colors: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(forced-colors: active)").matches: true
-matchMedia("(forced-colors: active)").matches applied: 3px x 2px
+matchMedia("(forced-colors: active)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(forced-colors: none)").matches: true
-matchMedia("(forced-colors: none)").matches applied: 3px x 2px
+matchMedia("(forced-colors: none)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(forced-colors: __invalid__)").matches: false
-matchMedia("(forced-colors: __invalid__)").matches applied: 3px x 2px
+matchMedia("(forced-colors: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: dark) and (prefers-reduced-motion: reduce)").matches: true
-matchMedia("(prefers-color-scheme: dark) and (prefers-reduced-motion: reduce)").matches applied: 999px x 999px
+matchMedia("(prefers-color-scheme: dark) and (prefers-reduced-motion: reduce)").matches applied: 999px x 999px, rgb(255, 0, 0)
 matchMedia("(prefers-color-scheme: __invalid__)").matches: false
-matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px
+matchMedia("(prefers-color-scheme: __invalid__)").matches applied: 3px x 2px, rgb(255, 0, 0)
 
diff --git a/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override.js b/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override.js
index 14ac8946..eef1b0d 100644
--- a/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override.js
+++ b/third_party/blink/web_tests/inspector-protocol/emulation/set-css-media-feature-override.js
@@ -19,7 +19,8 @@
     testRunner.log(`${code}: ${result}`);
     const width = await session.evaluate('getComputedStyle(p).width');
     const height = await session.evaluate('getComputedStyle(p).height');
-    testRunner.log(`${code} applied: ${width} x ${height}`);
+    const color = await session.evaluate('getComputedStyle(p).color');
+    testRunner.log(`${code} applied: ${width} x ${height}, ${color}`);
   }
 
   async function setEmulatedMediaFeatures({ features, mediaQuery }) {
@@ -31,7 +32,8 @@
     testRunner.log(`${code}: ${result}`);
     const width = await session.evaluate('getComputedStyle(p).width');
     const height = await session.evaluate('getComputedStyle(p).height');
-    testRunner.log(`${code} applied: ${width} x ${height}`);
+    const color = await session.evaluate('getComputedStyle(p).color');
+    testRunner.log(`${code} applied: ${width} x ${height}, ${color}`);
   }
 
   // Test `prefers-color-scheme`.
@@ -49,6 +51,15 @@
   await setEmulatedMediaFeature('prefers-reduced-motion', 'reduce');
   await setEmulatedMediaFeature('prefers-reduced-motion', '__invalid__');
 
+  // Test `prefers-contrast`.
+  // https://drafts.csswg.org/mediaqueries-5/#prefers-contrast
+  await setEmulatedMediaFeature('prefers-contrast', '__invalid__');
+  await setEmulatedMediaFeature('prefers-contrast', 'no-preference');
+  await setEmulatedMediaFeature('prefers-contrast', 'more');
+  await setEmulatedMediaFeature('prefers-contrast', 'less');
+  await setEmulatedMediaFeature('prefers-contrast', 'custom');
+  await setEmulatedMediaFeature('prefers-contrast', '__invalid__');
+
   // Test `color-gamut`.
   // https://drafts.csswg.org/mediaqueries-5/#color-gamut
   await setEmulatedMediaFeature('color-gamut', '__invalid__');
diff --git a/third_party/blink/web_tests/inspector-protocol/resources/css-media-features.html b/third_party/blink/web_tests/inspector-protocol/resources/css-media-features.html
index 44f985d..179f38c 100644
--- a/third_party/blink/web_tests/inspector-protocol/resources/css-media-features.html
+++ b/third_party/blink/web_tests/inspector-protocol/resources/css-media-features.html
@@ -1,11 +1,15 @@
 <!DOCTYPE html>
 <style>
-  p { width: 1px; height: 1px; }
+  p { width: 1px; height: 1px; color: red; }
   @media (prefers-color-scheme: no-preference) { p { width: 2px; } }
   @media (prefers-color-scheme: light) { p { width: 3px; } }
   @media (prefers-color-scheme: dark) { p { width: 4px; } }
   @media (prefers-reduced-motion: no-preference) { p { height: 2px; } }
   @media (prefers-reduced-motion: reduce) { p { height: 3px; } }
+  @media (prefers-contrast: no-preference) { p { color: blue; } }
+  @media (prefers-contrast: more) { p { color: green; } }
+  @media (prefers-contrast: less) { p { color: yellow; } }
+  @media (prefers-contrast: custom) { p { color: orange; } }
   @media (prefers-color-scheme: dark) and (prefers-reduced-motion: reduce) { p { width: 999px; height: 999px; } }
   @media (color-gamut: p3) { p { width: 6px; height: 6px; } }
   @media (color-gamut: rec2020) { p { width: 7px; height: 7px; } }
diff --git a/third_party/blink/web_tests/platform/linux/fast/borders/outline-alpha-inline-expected.png b/third_party/blink/web_tests/platform/linux/fast/borders/outline-alpha-inline-expected.png
index a8a4577..f636968 100644
--- a/third_party/blink/web_tests/platform/linux/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png b/third_party/blink/web_tests/platform/linux/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
index 8937ca1..5835529 100644
--- a/third_party/blink/web_tests/platform/linux/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
new file mode 100644
index 0000000..ba8d8e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/borders/outline-alpha-inline-expected.png b/third_party/blink/web_tests/platform/mac/fast/borders/outline-alpha-inline-expected.png
index a482500..83c8f01 100644
--- a/third_party/blink/web_tests/platform/mac/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png b/third_party/blink/web_tests/platform/mac/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
index f8fb7e9..ff65475 100644
--- a/third_party/blink/web_tests/platform/mac/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
new file mode 100644
index 0000000..1bc4ea2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/borders/outline-alpha-inline-expected.png b/third_party/blink/web_tests/platform/win/fast/borders/outline-alpha-inline-expected.png
index 4b8efed..5f60111 100644
--- a/third_party/blink/web_tests/platform/win/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png b/third_party/blink/web_tests/platform/win/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
index 95b77d8..752d21cb 100644
--- a/third_party/blink/web_tests/platform/win/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/multicol/outline/outline-inline-continuation-across-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
new file mode 100644
index 0000000..4d2c5a8d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/custom/text-match-highlight-expected.png
Binary files differ
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js
index 62ef55a..3ede7b7 100644
--- a/third_party/closure_compiler/externs/file_manager_private.js
+++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -941,7 +941,9 @@
  *     too.
  * @param {string} destName Name of the destination ZIP file. The ZIP file will
  *     be created in the directory specified by |parentEntry|.
- * @param {function((boolean|undefined))} callback Called on completion.
+ * @param {function(number, number)} callback called with (zipId, totalBytes)
+ *     where |zipId| is the ID of the ZIP operation, and |totalBytes| is the
+ *     total number of bytes in all the files that are going to be zipped.
  */
 chrome.fileManagerPrivate.zipSelection = function(
     entries, parentEntry, destName, callback) {};
@@ -949,11 +951,20 @@
 /**
  * Cancels an ongoing ZIP operation.
  * Does nothing if there is no matching ongoing ZIP operation.
- * @param {!DirectoryEntry} parentEntry Entry of the directory where the ZIP
- *     file is being created.
- * @param {string} destName Name of the ZIP file to cancel.
+ * @param {number} zipId ID of the ZIP operation.
  */
-chrome.fileManagerPrivate.cancelZip = function(parentEntry, destName) {};
+chrome.fileManagerPrivate.cancelZip = function(zipId) {};
+
+/**
+ * Gets the progress of an ongoing ZIP operation.
+ * @param {number} zipId ID of the ZIP operation.
+ * @param {function(number, number)} callback called with progress information
+ *     (result, bytes), where |result| is less than 0 if the operation is still
+ *     in progress, 0 if the operation finished successfully, or greater than 0
+ *     if the operation finished with an error, and |bytes| is the total number
+ *     of bytes having been zipped so far.
+ */
+chrome.fileManagerPrivate.getZipProgress = function(zipId, callback) {};
 
 /**
  * Retrieves the state of the current drive connection. |callback|
diff --git a/third_party/harfbuzz-ng/README.chromium b/third_party/harfbuzz-ng/README.chromium
index 618b5d62..7501d9b 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.8.2-160
+Version: 2.8.2-201
 CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:2.8.2
-Date: 20210807
-Revision: 8c0c217b5a1ded98ce62a3c7394942bcb3b95396
+Date: 20210810
+Revision: c08f1b89037b9a0277b8cef67ff2f38bcf253dfd
 Security Critical: yes
 License: MIT
 License File: src/COPYING
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 7c36fe67..db26936 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -28876,7 +28876,7 @@
   <int value="1552" label="AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION"/>
   <int value="1553" label="TTSENGINE_SENDTTSAUDIO"/>
   <int value="1554" label="AUTOTESTPRIVATE_ACTIVATEAPPWINDOW"/>
-  <int value="1555" label="FILEMANAGERPRIVATEINTERNAL_CANCELZIP"/>
+  <int value="1555" label="FILEMANAGERPRIVATE_CANCELZIP"/>
   <int value="1556"
       label="ACCESSIBILITY_PRIVATE_GETLOCALIZEDDOMKEYSTRINGFORKEYCODE"/>
   <int value="1557" label="SCRIPTING_REGISTERCONTENTSCRIPTS"/>
@@ -28892,6 +28892,7 @@
   <int value="1567" label="STORAGE_SETACCESSLEVEL"/>
   <int value="1568" label="OS_TELEMETRY_GETOEMDATA"/>
   <int value="1569" label="SCRIPTING_UNREGISTERCONTENTSCRIPTS"/>
+  <int value="1570" label="FILEMANAGERPRIVATE_GETZIPPROGRESS"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -34026,7 +34027,7 @@
   <int value="3884" label="WebAppManifestProtocolHandlers"/>
   <int value="3885" label="RTCPeerConnectionOfferAllowExtmapMixedFalse"/>
   <int value="3886" label="NewCanvas2DAPI"/>
-  <int value="3887" label="ServiceWorkerSubresourceFilter"/>
+  <int value="3887" label="ServiceWorkerSubresourceFilterBypassedRequest"/>
   <int value="3888" label="WebGPU"/>
   <int value="3889" label="CSSFilterColorMatrix"/>
   <int value="3890" label="HTMLFencedFrameElement"/>
@@ -69397,6 +69398,15 @@
   <int value="3" label="WRITE_STATUS_MSG_TOO_BIG"/>
 </enum>
 
+<enum name="QuotaDatabaseResetReason">
+  <int value="0" label="Failed to open database for directory path"/>
+  <int value="1" label="Failed to create in-memory database"/>
+  <int value="2" label="Failed to create schema"/>
+  <int value="3" label="Database migration failed"/>
+  <int value="4" label="Database version is too new"/>
+  <int value="5" label="Failed to initialize meta table"/>
+</enum>
+
 <enum name="QuotaOriginTypes">
   <obsolete>
     Removed from code July 2018.
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 057832c..c1c9695 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -920,7 +920,7 @@
 </histogram>
 
 <histogram name="IOS.PageLoadTiming.OmnibarToPageLoaded" units="ms"
-    expires_after="2021-09-22">
+    expires_after="2022-09-22">
   <owner>ajuma@chromium.org</owner>
   <owner>gambard@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
index f3ed748..23efa6072 100644
--- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
+++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -1825,7 +1825,7 @@
 </histogram>
 
 <histogram name="NewTabPage.TasksSurface.TimeSpentBeforeDismissLens" units="ms"
-    expires_after="M94">
+    expires_after="M97">
   <owner>yusuyoutube@google.com</owner>
   <owner>benwgold@google.com</owner>
   <owner>fgorski@chromium.org</owner>
@@ -1943,7 +1943,7 @@
 </histogram>
 
 <histogram name="NewTabPage.TimeSpentBeforeDismissLens" units="ms"
-    expires_after="M94">
+    expires_after="M97">
   <owner>yusuyoutube@google.com</owner>
   <owner>benwgold@google.com</owner>
   <owner>fgorski@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/offline/histograms.xml b/tools/metrics/histograms/metadata/offline/histograms.xml
index 67da941c..7d17445b 100644
--- a/tools/metrics/histograms/metadata/offline/histograms.xml
+++ b/tools/metrics/histograms/metadata/offline/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="Offline.Measurements.HttpProbeResult"
-    enum="OfflineMeasurementsHttpProbeResult" expires_after="M94">
+    enum="OfflineMeasurementsHttpProbeResult" expires_after="M100">
   <owner>curranmax@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -728,7 +728,7 @@
 </histogram>
 
 <histogram name="OfflinePages.DidNavigationThrottleCancelNavigation"
-    enum="Boolean" expires_after="M94">
+    enum="Boolean" expires_after="M100">
   <owner>curranmax@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -739,7 +739,7 @@
 
     This histogram is recorded each time Chrome tries to create an
     OfflinePageNavigationThrottle, which only happens on Android (since Offline
-    Pages is on enabled there).
+    Pages is only enabled there).
   </summary>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml
index 739b46a..a1cc22c 100644
--- a/tools/metrics/histograms/metadata/omnibox/histograms.xml
+++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -1034,7 +1034,7 @@
 </histogram>
 
 <histogram name="Omnibox.TimeSpentBeforeDismissLens" units="ms"
-    expires_after="M94">
+    expires_after="M97">
   <owner>yusuyoutube@google.com</owner>
   <owner>benwgold@google.com</owner>
   <owner>fgorski@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 9d318e1e..14ad0af 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -6357,7 +6357,7 @@
   </summary>
 </histogram>
 
-<histogram name="Feedback.TrustSafetySentiment.TriggerOccured"
+<histogram name="Feedback.TrustSafetySentiment.TriggerOccurred"
     enum="TrustSafetySentimentFeatureArea" expires_after="M98">
   <owner>sauski@google.com</owner>
   <owner>chrome-hats-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/quota/histograms.xml b/tools/metrics/histograms/metadata/quota/histograms.xml
index 62e34c9..04da8244 100644
--- a/tools/metrics/histograms/metadata/quota/histograms.xml
+++ b/tools/metrics/histograms/metadata/quota/histograms.xml
@@ -272,6 +272,17 @@
   </summary>
 </histogram>
 
+<histogram name="Quota.QuotaDatabaseReset" enum="QuotaDatabaseResetReason"
+    expires_after="2022-08-07">
+  <owner>ayui@chromium.org</owner>
+  <owner>chrome-owp-storage@google.com</owner>
+  <summary>
+    Records the reason the QuotaDatabase was reset to understand how frequently
+    and why this happens. This will inform us on how we should implement data
+    recovery for storage data when the QuotaDatabase is reset.
+  </summary>
+</histogram>
+
 <histogram name="Quota.QuotaForOrigin" units="MB" expires_after="2022-01-18">
   <owner>jarrydg@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml
index 84a64e0..9aa4565 100644
--- a/tools/metrics/histograms/metadata/translate/histograms.xml
+++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -1200,7 +1200,7 @@
 </histogram>
 
 <histogram name="Translate.Translation.TimeToBeReady" units="ms"
-    expires_after="M94">
+    expires_after="M106">
   <owner>curranmax@google.com</owner>
   <owner>megjablon@google.com</owner>
   <owner>chrome-language@google.com</owner>
@@ -1213,7 +1213,7 @@
 </histogram>
 
 <histogram name="Translate.Translation.TimeToLoad" units="ms"
-    expires_after="M94">
+    expires_after="M106">
   <owner>curranmax@google.com</owner>
   <owner>megjablon@google.com</owner>
   <owner>chrome-language@google.com</owner>
@@ -1226,7 +1226,7 @@
 </histogram>
 
 <histogram name="Translate.Translation.TimeToTranslate" units="ms"
-    expires_after="M94">
+    expires_after="M106">
   <owner>curranmax@google.com</owner>
   <owner>megjablon@google.com</owner>
   <owner>chrome-language@google.com</owner>
diff --git a/tools/metrics/structured/codegen.py b/tools/metrics/structured/codegen.py
index a926ab3..15d7c8f 100644
--- a/tools/metrics/structured/codegen.py
+++ b/tools/metrics/structured/codegen.py
@@ -77,6 +77,7 @@
     self.namespace = Util.camel_to_snake(self.name)
     self.name_hash = Util.hash_name(self.name)
 
+    # Set ID type.
     if project.id == 'uma':
       self.id_type = 'kUmaId'
     elif project.id == 'per-project':
@@ -86,6 +87,7 @@
     else:
       raise ValueError('Invalid id type.')
 
+    # Set ID scope
     if project.scope == 'profile':
       self.id_scope = 'kPerProfile'
     elif project.scope == 'device':
@@ -93,6 +95,16 @@
     else:
       raise ValueError('Invalid id scope.')
 
+    # Set event type. This is inferred by checking all metrics within the
+    # project. If any of a project's metrics is a raw string, then its events
+    # are considered raw string events, even if they also contain non-strings.
+    self.event_type = 'REGULAR'
+    for event in project.events:
+      for metric in event.metrics:
+        if metric.type == 'raw-string':
+          self.event_type = 'RAW_STRING'
+          break
+
 
 class EventInfo:
   """Codegen-related info about an event."""
@@ -111,10 +123,13 @@
 
     if metric.type == 'hmac-string':
       self.type = 'std::string&'
-      self.setter = 'AddStringMetric'
+      self.setter = 'AddHmacMetric'
     elif metric.type == 'int':
       self.type = 'int64_t'
       self.setter = 'AddIntMetric'
+    elif metric.type == 'raw-string':
+      self.type = 'std::string&'
+      self.setter = 'AddRawStringMetric'
     else:
       raise ValueError('Invalid metric type.')
 
diff --git a/tools/metrics/structured/model.py b/tools/metrics/structured/model.py
index f95e760..22c1b25 100644
--- a/tools/metrics/structured/model.py
+++ b/tools/metrics/structured/model.py
@@ -72,7 +72,7 @@
 
   OWNER_REGEX = r'^.+@(chromium\.org|google\.com)$'
   NAME_REGEX = r'^[A-Za-z0-9_.]+$'
-  TYPE_REGEX = r'^(hmac-string|int)$'
+  TYPE_REGEX = r'^(hmac-string|raw-string|int)$'
   ID_REGEX = r'^(none|per-project|uma)$'
   SCOPE_REGEX = r'^(profile|device)$'
 
@@ -130,7 +130,9 @@
     self.summary = util.get_text_child(elem, 'summary')
     self.owners = util.get_text_children(elem, 'owner', Model.OWNER_REGEX)
 
-    self.events = [Event(e) for e in util.get_compound_children(elem, 'event')]
+    self.events = [
+        Event(e, self) for e in util.get_compound_children(elem, 'event')
+    ]
 
   def __repr__(self):
     events = '\n\n'.join(str(e) for e in self.events)
@@ -172,7 +174,7 @@
   Calling str(event) will return a canonically formatted XML string.
   """
 
-  def __init__(self, elem):
+  def __init__(self, elem, project):
     util.check_attributes(elem, {'name'})
     util.check_children(elem, {'summary', 'metric'})
     util.check_child_names_unique(elem, 'metric')
@@ -180,7 +182,7 @@
     self.name = util.get_attr(elem, 'name', Model.NAME_REGEX)
     self.summary = util.get_text_child(elem, 'summary')
     self.metrics = [
-        Metric(m) for m in util.get_compound_children(elem, 'metric')
+        Metric(m, project) for m in util.get_compound_children(elem, 'metric')
     ]
 
   def __repr__(self):
@@ -209,7 +211,7 @@
   Calling str(metric) will return a canonically formatted XML string.
   """
 
-  def __init__(self, elem):
+  def __init__(self, elem, project):
     util.check_attributes(elem, {'name', 'type'})
     util.check_children(elem, {'summary'})
 
@@ -217,6 +219,11 @@
     self.type = util.get_attr(elem, 'type', Model.TYPE_REGEX)
     self.summary = util.get_text_child(elem, 'summary')
 
+    if self.type == 'raw-string' and project.id != 'none':
+      util.error(
+          elem, "raw-string metrics must be in a project with id type "
+          "'none', but {} has id type '{}'".format(project.name, project.id))
+
   def __repr__(self):
     summary = wrap(self.summary, indent='    ')
     result = tw.dedent("""\
diff --git a/tools/metrics/structured/model_util.py b/tools/metrics/structured/model_util.py
index af1afc4..353b87e 100644
--- a/tools/metrics/structured/model_util.py
+++ b/tools/metrics/structured/model_util.py
@@ -20,7 +20,7 @@
   """Raise a nicely formatted error with some context."""
   name = elem.attrib.get('name', None)
   name = name + ' ' if name else ''
-  msg = 'Structured metrics error, {} node {}{}.'.format(elem.tag, name, msg)
+  msg = 'Structured metrics error, {} node {}: {}.'.format(elem.tag, name, msg)
   raise ValueError(msg)
 
 
diff --git a/tools/metrics/structured/structured.xml b/tools/metrics/structured/structured.xml
index bb092d20..d868ab6 100644
--- a/tools/metrics/structured/structured.xml
+++ b/tools/metrics/structured/structured.xml
@@ -344,7 +344,27 @@
     </summary>
     <metric name="TestMetricFive" type="hmac-string">
       <summary>
-        An per-device keyed hashed value.
+        A per-device keyed hashed value.
+      </summary>
+    </metric>
+  </event>
+</project>
+
+<project name="TestProjectFive">
+  <owner>tby@chromium.org</owner>
+  <id>none</id>
+  <scope>profile</scope>
+  <summary>
+    Project for unit testing, do not use.
+  </summary>
+
+  <event name="TestEventSix">
+    <summary>
+      Event for unit testing, do not use.
+    </summary>
+    <metric name="TestMetricSix" type="raw-string">
+      <summary>
+        A unhashed string value.
       </summary>
     </metric>
   </event>
diff --git a/tools/metrics/structured/templates.py b/tools/metrics/structured/templates.py
index 5a82935d..3d8f86d 100644
--- a/tools/metrics/structured/templates.py
+++ b/tools/metrics/structured/templates.py
@@ -47,6 +47,8 @@
   static constexpr uint64_t kProjectNameHash = UINT64_C({project.name_hash});
   static constexpr IdType kIdType = IdType::{project.id_type};
   static constexpr IdScope kIdScope = IdScope::{project.id_scope};
+  static constexpr StructuredEventProto_EventType kEventType =
+      StructuredEventProto_EventType_{project.event_type};
 
 {metric_code}\
 }};
@@ -86,7 +88,7 @@
 IMPL_EVENT_TEMPLATE = """\
 {event.name}::{event.name}() :
   ::metrics::structured::EventBase(kEventNameHash, kProjectNameHash,
-    kIdType, kIdScope) {{}}
+    kIdType, kIdScope, kEventType) {{}}
 {event.name}::~{event.name}() = default;
 {metric_code}\
 """
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc
index f6b96e9..b96957dc 100644
--- a/ui/accessibility/accessibility_features.cc
+++ b/ui/accessibility/accessibility_features.cc
@@ -141,15 +141,6 @@
       ::features::kEnableSwitchAccessPointScanning);
 }
 
-const base::Feature kExperimentalAccessibilityDictationListening{
-    "ExperimentalAccessibilityDictationListening",
-    base::FEATURE_ENABLED_BY_DEFAULT};
-
-bool IsExperimentalAccessibilityDictationListeningEnabled() {
-  return base::FeatureList::IsEnabled(
-      ::features::kExperimentalAccessibilityDictationListening);
-}
-
 const base::Feature kExperimentalAccessibilityDictationOffline{
     "ExperimentalAccessibilityDictationOffline",
     base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ui/accessibility/accessibility_features.h b/ui/accessibility/accessibility_features.h
index 23f8220..305ab737 100644
--- a/ui/accessibility/accessibility_features.h
+++ b/ui/accessibility/accessibility_features.h
@@ -116,16 +116,6 @@
 // enabled.
 AX_BASE_EXPORT bool IsSwitchAccessPointScanningEnabled();
 
-// Enables dictation using web speech to listen for a longer duration and
-// allow profanity, and for dictation with web speech or on-device speech
-// to continue listening after speech is finalized.
-AX_BASE_EXPORT extern const base::Feature
-    kExperimentalAccessibilityDictationListening;
-
-// Returns true if the feature to allow experimental listening features for
-// Dictation is enabled.
-AX_BASE_EXPORT bool IsExperimentalAccessibilityDictationListeningEnabled();
-
 // Enables dictation to use on-device speech recognition when available.
 AX_BASE_EXPORT extern const base::Feature
     kExperimentalAccessibilityDictationOffline;
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index f22785f..b016cae8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -316,7 +316,7 @@
 <translation id="3811494700605067549">1 ఫైల్ ఎంచుకోబడింది</translation>
 <translation id="3817579325494460411">అందించబడలేదు</translation>
 <translation id="3819448694985509187">పిన్ తప్పు. మీకు 1 ప్రయత్నం మిగిలి ఉంది.</translation>
-<translation id="3822559385185038546">ఈ ప్రాక్సీని మీ నిర్వాహకులు అమలు చేసారు</translation>
+<translation id="3822559385185038546">ఈ ప్రాక్సీని మీ నిర్వాహకులు అమలు చేశారు</translation>
 <translation id="3830674330436234648">ప్లేబ్యాక్ అందుబాటులో లేదు</translation>
 <translation id="383652340667548381">సెర్బియన్</translation>
 <translation id="385051799172605136">వెనుకకు</translation>
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager_unittest.m.js b/ui/file_manager/file_manager/background/js/file_operation_manager_unittest.m.js
index 0e69123..fbf0de0 100644
--- a/ui/file_manager/file_manager/background/js/file_operation_manager_unittest.m.js
+++ b/ui/file_manager/file_manager/background/js/file_operation_manager_unittest.m.js
@@ -1136,13 +1136,22 @@
     resolveTestFileSystemURL(fileSystem, url, success, failure);
   };
 
-  mockChrome.fileManagerPrivate.zipSelection = function(
-      sources, parent, newName, success, error) {
-    const newPath = joinPath('/', newName);
-    const newEntry = MockFileEntry.create(
-        fileSystem, newPath, /** @type {!Metadata} */ ({size: 10}));
-    fileSystem.entries[newPath] = newEntry;
-    success(newEntry);
+  const destSize = 10;
+  const wantZipId = 42;
+
+  mockChrome.fileManagerPrivate.zipSelection =
+      (sources, parent, newName, callback) => {
+        const newPath = joinPath('/', newName);
+        const newEntry = MockFileEntry.create(
+            fileSystem, newPath, /** @type {!Metadata} */ ({size: destSize}));
+        fileSystem.entries[newPath] = newEntry;
+        callback(wantZipId, destSize);
+      };
+
+  mockChrome.fileManagerPrivate.getZipProgress = (zipId, callback) => {
+    assertEquals(wantZipId, zipId);
+    const result = 0;  // Success
+    callback(result, destSize);
   };
 
   volumeManager = new FakeVolumeManager();
@@ -1159,8 +1168,8 @@
         const lastEvent = events[events.length - 1];
         assertEquals('copy-progress', lastEvent.type);
         assertEquals('SUCCESS', lastEvent.reason);
-        assertEquals(1, lastEvent.status.totalBytes);
-        assertEquals(1, lastEvent.status.processedBytes);
+        assertEquals(destSize, lastEvent.status.totalBytes);
+        assertEquals(destSize, lastEvent.status.processedBytes);
 
         assertFalse(events.some(event => {
           return event.type === 'delete';
diff --git a/ui/file_manager/file_manager/background/js/file_operation_util.js b/ui/file_manager/file_manager/background/js/file_operation_util.js
index db25512..30a9082 100644
--- a/ui/file_manager/file_manager/background/js/file_operation_util.js
+++ b/ui/file_manager/file_manager/background/js/file_operation_util.js
@@ -1152,9 +1152,6 @@
   constructor(taskId, sourceEntries, targetDirEntry, zipBaseDirEntry) {
     super(taskId, util.FileOperationType.ZIP, sourceEntries, targetDirEntry);
     this.zipBaseDirEntry = zipBaseDirEntry;
-
-    /** @type {boolean} */
-    this.zip = true;
   }
 
 
@@ -1181,13 +1178,7 @@
   run(entryChangedCallback, progressCallback, successCallback, errorCallback) {
     const f = async () => {
       try {
-        // TODO(fdegros) Per-entry zip progress update with accurate byte count.
-        // For now just set processedBytes to 0 so that it is not full until
-        // the zip operation is done.
-        this.processedBytes = 0;
-        progressCallback();
-
-        // TODO(fdegros) Localize the name.
+        // TODO(crbug.com/1238237) Localize the name.
         let destName = 'Archive';
 
         // If there is only one entry to zip, use this entry's name for the ZIP
@@ -1201,22 +1192,47 @@
         const destPath = await fileOperationUtil.deduplicatePath(
             this.targetDirEntry, destName + '.zip');
 
-        this.cancelCallback_ = () => {
-          console.log('Cancelling ZIP task...');
-          chrome.fileManagerPrivate.cancelZip(this.zipBaseDirEntry, destPath);
-        };
-
-        const success = await new Promise(
-            resolve => chrome.fileManagerPrivate.zipSelection(
+        // Start ZIP operation.
+        const {zipId, totalBytes} = await new Promise(
+            (resolve, reject) => chrome.fileManagerPrivate.zipSelection(
                 assert(this.sourceEntries), this.zipBaseDirEntry, destPath,
-                resolve));
+                (zipId, totalBytes) => chrome.runtime.lastError ?
+                    reject(chrome.runtime.lastError) :
+                    resolve({zipId, totalBytes})));
 
-        if (!success) {
-          // Cannot create ZIP archive.
-          throw util.createDOMError(util.FileError.INVALID_MODIFICATION_ERR);
+        this.totalBytes = totalBytes;
+        this.speedometer_.setTotalBytes(this.totalBytes);
+
+        // Set up cancellation callback.
+        this.cancelCallback_ = () => chrome.fileManagerPrivate.cancelZip(zipId);
+
+        // Monitor progress.
+        while (true) {
+          const {result, bytes} = await new Promise(
+              (resolve, reject) => chrome.fileManagerPrivate.getZipProgress(
+                  zipId, (result, bytes) => {
+                    if (chrome.runtime.lastError) {
+                      reject(chrome.runtime.lastError);
+                    } else {
+                      resolve({result, bytes});
+                    }
+                  }));
+
+          // Check for error.
+          if (result > 0) {
+            throw util.createDOMError(util.FileError.INVALID_MODIFICATION_ERR);
+          }
+
+          // Report progress.
+          this.processedBytes = bytes;
+          this.speedometer_.update(this.processedBytes);
+          progressCallback();
+
+          // Check for success.
+          if (result == 0) {
+            break;
+          }
         }
-
-        this.processedBytes = this.totalBytes;
       } catch (error) {
         // Don't display any error message if the task was cancelled.
         if (!this.cancelRequested_) {
diff --git a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
index 353b7fd3..b67bfb2 100644
--- a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
@@ -300,10 +300,8 @@
 void GbmSurfaceless::OnSubmission(gfx::SwapResult result,
                                   gfx::GpuFenceHandle release_fence) {
   submitted_frame_->swap_result = result;
-  if (!release_fence.is_null()) {
-    std::move(submitted_frame_->completion_callback)
-        .Run(gfx::SwapCompletionResult(result, std::move(release_fence)));
-  }
+  // TODO(edcourtney): Re-enable fences here after fixing performance
+  // regression.
 }
 
 void GbmSurfaceless::OnPresentation(const gfx::PresentationFeedback& feedback) {
diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc
index da39df7..2ac8178 100644
--- a/ui/views/corewm/tooltip_controller.cc
+++ b/ui/views/corewm/tooltip_controller.cc
@@ -20,6 +20,7 @@
 #include "ui/views/corewm/tooltip.h"
 #include "ui/views/corewm/tooltip_state_manager.h"
 #include "ui/views/widget/tooltip_manager.h"
+#include "ui/wm/public/activation_client.h"
 
 namespace views {
 namespace corewm {
@@ -111,13 +112,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 // TooltipController public:
 
-TooltipController::TooltipController(std::unique_ptr<Tooltip> tooltip)
-    : state_manager_(
-          std::make_unique<TooltipStateManager>(std::move(tooltip))) {}
+TooltipController::TooltipController(std::unique_ptr<Tooltip> tooltip,
+                                     wm::ActivationClient* activation_client)
+    : activation_client_(activation_client),
+      state_manager_(
+          std::make_unique<TooltipStateManager>(std::move(tooltip))) {
+  if (activation_client_)
+    activation_client_->AddObserver(this);
+}
 
 TooltipController::~TooltipController() {
   if (observed_window_)
     observed_window_->RemoveObserver(this);
+  if (activation_client_)
+    activation_client_->RemoveObserver(this);
 }
 
 int TooltipController::GetMaxWidth(const gfx::Point& location) const {
@@ -304,6 +312,14 @@
   }
 }
 
+void TooltipController::OnWindowActivated(ActivationReason reason,
+                                          aura::Window* gained_active,
+                                          aura::Window* lost_active) {
+  // We want to hide tooltips whenever the client is losing user focus.
+  if (lost_active)
+    HideAndReset();
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // TooltipController private:
 
diff --git a/ui/views/corewm/tooltip_controller.h b/ui/views/corewm/tooltip_controller.h
index 91877cf..04a42f91d 100644
--- a/ui/views/corewm/tooltip_controller.h
+++ b/ui/views/corewm/tooltip_controller.h
@@ -14,12 +14,16 @@
 #include "ui/events/event_handler.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/views/views_export.h"
+#include "ui/wm/public/activation_change_observer.h"
 #include "ui/wm/public/tooltip_client.h"
 
 namespace aura {
 class Window;
 }
 
+namespace wm {
+class ActivationClient;
+}
 namespace views {
 namespace corewm {
 
@@ -41,9 +45,11 @@
     : public wm::TooltipClient,
       public ui::EventHandler,
       public aura::client::CursorClientObserver,
-      public aura::WindowObserver {
+      public aura::WindowObserver,
+      public wm::ActivationChangeObserver {
  public:
-  explicit TooltipController(std::unique_ptr<Tooltip> tooltip);
+  TooltipController(std::unique_ptr<Tooltip> tooltip,
+                    wm::ActivationClient* activation_client);
   ~TooltipController() override;
 
   // Overridden from wm::TooltipClient.
@@ -72,6 +78,11 @@
                                const void* key,
                                intptr_t old) override;
 
+  // Overridden from wm::ActivationChangeObserver.
+  void OnWindowActivated(ActivationReason reason,
+                         aura::Window* gained_active,
+                         aura::Window* lost_active) override;
+
  private:
   friend class test::TooltipControllerTestHelper;
 
@@ -151,6 +162,11 @@
   // "disabled_hide_timeout_views_set_" or something like that.
   std::map<aura::Window*, base::TimeDelta> hide_tooltip_timeout_map_;
 
+  // We want to hide tooltips whenever our client window loses focus. This will
+  // ensure that no tooltip stays visible when the user navigated away from
+  // our client.
+  wm::ActivationClient* activation_client_;
+
   // The TooltipStateManager is responsible for keeping track of the current
   // tooltip state (its text, position, id, etc.) and to modify it when asked
   // by the TooltipController or the show/hide timers.
diff --git a/ui/views/corewm/tooltip_controller_test_helper.cc b/ui/views/corewm/tooltip_controller_test_helper.cc
index 6d738bd..d74da41 100644
--- a/ui/views/corewm/tooltip_controller_test_helper.cc
+++ b/ui/views/corewm/tooltip_controller_test_helper.cc
@@ -5,6 +5,7 @@
 #include "ui/views/corewm/tooltip_controller_test_helper.h"
 
 #include "ui/aura/window.h"
+#include "ui/wm/public/activation_change_observer.h"
 
 namespace views {
 namespace corewm {
@@ -61,6 +62,15 @@
       tooltip_show_delay);
 }
 
+void TooltipControllerTestHelper::MockWindowActivated(aura::Window* window,
+                                                      bool active) {
+  aura::Window* gained_active = active ? window : nullptr;
+  aura::Window* lost_active = active ? nullptr : window;
+  controller_->OnWindowActivated(
+      wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
+      gained_active, lost_active);
+}
+
 TooltipTestView::TooltipTestView() = default;
 
 TooltipTestView::~TooltipTestView() = default;
diff --git a/ui/views/corewm/tooltip_controller_test_helper.h b/ui/views/corewm/tooltip_controller_test_helper.h
index c2da2c1..be5fadd 100644
--- a/ui/views/corewm/tooltip_controller_test_helper.h
+++ b/ui/views/corewm/tooltip_controller_test_helper.h
@@ -47,6 +47,7 @@
   bool IsHideTooltipTimerRunning();
   bool IsTooltipVisible();
   void SetTooltipShowDelayEnable(bool tooltip_show_delay);
+  void MockWindowActivated(aura::Window* window, bool active);
 
  private:
   TooltipController* controller_;
diff --git a/ui/views/corewm/tooltip_controller_unittest.cc b/ui/views/corewm/tooltip_controller_unittest.cc
index b6429ad..c8cdcd7 100644
--- a/ui/views/corewm/tooltip_controller_unittest.cc
+++ b/ui/views/corewm/tooltip_controller_unittest.cc
@@ -38,6 +38,7 @@
 #include "ui/views/view.h"
 #include "ui/views/widget/tooltip_manager.h"
 #include "ui/views/widget/widget.h"
+#include "ui/wm/public/activation_client.h"
 #include "ui/wm/public/tooltip_client.h"
 
 #if defined(OS_WIN)
@@ -92,7 +93,8 @@
     if (root_window) {
       tooltip_aura_ = new views::corewm::TooltipAura();
       controller_ = std::make_unique<TooltipController>(
-          std::unique_ptr<views::corewm::Tooltip>(tooltip_aura_));
+          std::unique_ptr<views::corewm::Tooltip>(tooltip_aura_),
+          /* activation_client */ nullptr);
       root_window->AddPreTargetHandler(controller_.get());
       SetTooltipClient(root_window, controller_.get());
     }
@@ -908,6 +910,33 @@
   helper_->SetTooltipShowDelayEnable(false);
 }
 
+// This test validates that tooltips are hidden when the currently active window
+// loses focus to another window.
+TEST_F(TooltipControllerTest, TooltipHiddenWhenWindowDeactivated) {
+  EXPECT_EQ(nullptr, helper_->state_manager()->tooltip_parent_window());
+  EXPECT_EQ(std::u16string(), helper_->state_manager()->tooltip_text());
+
+  view_->set_tooltip_text(u"Tooltip text 1");
+
+  // Start by showing the tooltip.
+  gfx::Point in_view_point = view_->bounds().CenterPoint();
+  generator_->MoveMouseRelativeTo(GetWindow(), in_view_point);
+  EXPECT_TRUE(helper_->IsTooltipVisible());
+  EXPECT_EQ(helper_->state_manager()->tooltip_trigger(),
+            TooltipTrigger::kCursor);
+
+  // Then mock a window deactivation event.
+  helper_->MockWindowActivated(GetWindow(), /* active */ false);
+
+  // The previously visible tooltip should have been closed by that event.
+  EXPECT_FALSE(helper_->IsTooltipVisible());
+
+  // The tooltip should show up again if we move the cursor again.
+  view_->set_tooltip_text(u"Tooltip text 2");
+  generator_->MoveMouseBy(1, 1);
+  EXPECT_TRUE(helper_->IsTooltipVisible());
+}
+
 namespace {
 
 class TestTooltip : public Tooltip {
@@ -950,7 +979,8 @@
     at_exit_manager_ = std::make_unique<base::ShadowingAtExitManager>();
     aura::test::AuraTestBase::SetUp();
     controller_ = std::make_unique<TooltipController>(
-        std::unique_ptr<corewm::Tooltip>(test_tooltip_));
+        std::unique_ptr<corewm::Tooltip>(test_tooltip_),
+        /* activation_client */ nullptr);
     root_window()->AddPreTargetHandler(controller_.get());
     SetTooltipClient(root_window(), controller_.get());
     helper_ = std::make_unique<TooltipControllerTestHelper>(controller_.get());
@@ -1040,7 +1070,8 @@
     generator_ = std::make_unique<ui::test::EventGenerator>(GetRootWindow());
     auto tooltip = std::make_unique<TestTooltip>();
     test_tooltip_ = tooltip.get();
-    controller_ = std::make_unique<TooltipController>(std::move(tooltip));
+    controller_ = std::make_unique<TooltipController>(
+        std::move(tooltip), /* activation_client */ nullptr);
     auto* tooltip_controller = static_cast<TooltipController*>(
         wm::GetTooltipClient(widget_->GetNativeWindow()->GetRootWindow()));
     if (tooltip_controller)
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index 2bef0c75..323a92d 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -590,8 +590,8 @@
   if (params.type != Widget::InitParams::TYPE_TOOLTIP) {
     tooltip_manager_ = std::make_unique<TooltipManagerAura>(GetWidget());
     tooltip_controller_ = std::make_unique<corewm::TooltipController>(
-
-        desktop_window_tree_host_->CreateTooltip());
+        desktop_window_tree_host_->CreateTooltip(),
+        wm::GetActivationClient(host_->window()));
     wm::SetTooltipClient(host_->window(), tooltip_controller_.get());
     host_->window()->AddPreTargetHandler(tooltip_controller_.get());
   }
diff --git a/ui/webui/resources/cr_elements/cr_tabs/cr_tabs.html b/ui/webui/resources/cr_elements/cr_tabs/cr_tabs.html
index a3cb926..9c6403ae 100644
--- a/ui/webui/resources/cr_elements/cr_tabs/cr_tabs.html
+++ b/ui/webui/resources/cr_elements/cr_tabs/cr_tabs.html
@@ -22,6 +22,10 @@
         transition: opacity 100ms cubic-bezier(.4, 0, 1, 1);
       }
 
+      .tab:focus-visible:focus {
+        outline: var(--cr-tabs-focus-outline, auto);
+      }
+
       :host(:not(.keyboard-focus)) .tab {
         outline: none;
       }
@@ -38,7 +42,7 @@
       }
 
       .selected:focus {
-        font-weight: 700;
+        font-weight: var(--cr-tabs-selected-tab-focused-font-weight, 700);
       }
 
       .tab-indicator {