diff --git a/DEPS b/DEPS
index ee9f190..4696633 100644
--- a/DEPS
+++ b/DEPS
@@ -282,11 +282,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '8a93b289c2ed8e7b4e80417f7119b6a9adadc3cc',
+  'skia_revision': '148ebc0596b7fd2561fce3c0df58f7d8772b7ac2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '6c81e9a6e01c603e3278e7757f53eae81e357aff',
+  'v8_revision': '30a85278fc898008c1146e6e6806f4b9ea6ae3f2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -369,7 +369,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': 'da207fd8a6aaf15d21de891af314898296a17d3e',
+  'devtools_frontend_revision': '445271a455863688be13fed8368255760213d8fb',
   # 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.
@@ -409,7 +409,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': 'c5135379f5c7c249506c8cadcb75d2566f40fb4e',
+  'dawn_revision': '53e721afe0c58f2e38e0671ac0c6524a80f4c1ae',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -453,11 +453,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'libcxxabi_revision':    '82063d591566ab31b492c3bcd7caaf789c75a802',
+  'libcxxabi_revision':    'd5e79e117ce9adfdcfdc5dde56ee8cddd7742854',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'libunwind_revision':    '9a92f3b6925b1e4418c4993b10f0c86acee8b16d',
+  'libunwind_revision':    '229ff3e23223299d50a33caa1b90e89b78fdd84b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -769,7 +769,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '34c8db3ba34044f2fc92c6166ceab1f6ef7ce908',
+    'fb695811743a1bd0dc859c631f72d2827a4a4528',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -868,7 +868,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'O9IpWbr0xEC8j-Fm1ho-LA-1OpIQFdoqifYRAp5IMSYC',
+          'version': 'pK_Dv-oRMQY_driQ838EdYME-nua7rkDGBIiuVK3ANoC',
         },
       ],
       'dep_type': 'cipd',
@@ -879,7 +879,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': '35sNvZx7N9bzssNn3xIvQubPN3ZAnCbwUqJPhjZp--cC',
+          'version': 'qlIqnaF50wmO_NDGzs4QOnpDKK-i0dzXe5BSSQnAigIC',
         },
       ],
       'dep_type': 'cipd',
@@ -890,7 +890,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'lEuYck_Moeak7KD7qLOSDqwYHqKQDd7Z1vmUwA_uJAAC',
+          'version': 'CxVQJy6cSGKToMBrSGgAX0aiP9uwukz-ZFLWXRHQRMoC',
         },
       ],
       'dep_type': 'cipd',
@@ -1193,13 +1193,13 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '7ee8e6c7cb54a9f6ece482f92d055e3e1ba3cfbe',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '4931c18599bd1a22ffb4fb6f161fae30dc6b5eb4',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'e3187c6dff1f7fc172abc9f2a56ab5ee4d60c68f',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '0c464e999c53b107d110aa3eebbfd19681cefb1c',
     'condition': 'checkout_src_internal',
   },
 
@@ -1703,7 +1703,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': '7t2iD2LR8UiTBVZsqwRr_PcMqF4RwBlPgwYziDOt-xQC',
+              'version': '_FuL1VmaJnETpwNIaiuiSLxVNzzt0qXGmsfAck4CPCkC',
           },
       ],
       'condition': 'checkout_android',
@@ -1848,7 +1848,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'a3359a3e7063a9f3ad987c3e5e064ea0042288f6',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '11fdbc3b2f7f358521ae71c89bdc7bcc9dd0c009',
+    Var('webrtc_git') + '/src.git' + '@' + '0a4f0a21e2e436675df5724f1b465c146deeeffb',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1938,7 +1938,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': Var('chrome_git') + '/chrome/src-internal.git@92ac7fd4b6d34f758f51aebf0ec1055ada8014d1',
+    'url': Var('chrome_git') + '/chrome/src-internal.git@6dae69666a5ddab00ff9e078fd4d54a66d5bc45a',
     'condition': 'checkout_src_internal',
   },
 
@@ -1968,7 +1968,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'e5hTQjUz5lCIJTJuEeuxy51mUbx6K8_2PDdYSY5FPBwC',
+        'version': 'yRGDYcuSNcPK4Namo1SN0RvgfJf0ETDE7KxTqGN6xxYC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1979,7 +1979,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'W0Ujf-sTvMNZqxFyjInicFrAyVFQUNNJ6LDaCEkzWkAC',
+        'version': 'AdkvfRcY9Se5qfTBb08GDOPgU5Jwj4jGmWklIxH1aHUC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2001,7 +2001,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'jvHzTRMekqqAmcfyStTWep28PnA2RMZ4Wssieixvw2MC',
+        'version': 'F4LQWOHvrkLWzBrUu73BiRUx7ex4H3ScwfwTW-92hbEC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/accelerometer/OWNERS b/ash/accelerometer/OWNERS
index 6798725..52c8877d 100644
--- a/ash/accelerometer/OWNERS
+++ b/ash/accelerometer/OWNERS
@@ -1,3 +1,3 @@
-chenghaoyang@chromium.com
+chenghaoyang@chromium.org
 gwendal@chromium.org
 afakhry@chromium.org
\ No newline at end of file
diff --git a/ash/clipboard/clipboard_history_util.cc b/ash/clipboard/clipboard_history_util.cc
index 2f1e4fb..c7c7578 100644
--- a/ash/clipboard/clipboard_history_util.cc
+++ b/ash/clipboard/clipboard_history_util.cc
@@ -240,8 +240,8 @@
 GetItemDescriptorsFrom(const std::list<ClipboardHistoryItem>& items) {
   std::vector<crosapi::mojom::ClipboardHistoryItemDescriptor> item_descriptors;
   for (const auto& item : items) {
-    item_descriptors.emplace_back(item.display_text(), item.display_format(),
-                                  item.id().ToString());
+    item_descriptors.emplace_back(item.id(), item.display_format(),
+                                  item.display_text());
   }
   return item_descriptors;
 }
diff --git a/ash/session/fullscreen_controller.cc b/ash/session/fullscreen_controller.cc
index 1c431e4..082152b0 100644
--- a/ash/session/fullscreen_controller.cc
+++ b/ash/session/fullscreen_controller.cc
@@ -17,10 +17,8 @@
 #include "ash/wm/window_state.h"
 #include "ash/wm/wm_event.h"
 #include "base/check.h"
-#include "base/strings/string_util.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "chromeos/dbus/power_manager/idle.pb.h"
-#include "chromeos/ui/base/window_properties.h"
 #include "chromeos/ui/wm/fullscreen/keep_fullscreen_for_url_checker.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -102,20 +100,6 @@
     return;
   }
 
-  // Do not exit fullscreen for a Borealis window. We do additional checks here
-  // to avoid entering a screen lock with a window which has a not-allowed
-  // property combination. We use CHECKs as those combination should never
-  // happen.
-  if (active_window_state->window()->GetProperty(
-          chromeos::kNoExitFullscreenOnLock)) {
-    CHECK(active_window_state->window()->GetProperty(
-        chromeos::kUseOverviewToExitFullscreen))
-        << "Property combination not allowed. kUseOverviewToExitFullscreen "
-           "must be true if kNoExitFullscreenOnLock is true.";
-    std::move(callback).Run();
-    return;
-  }
-
   if (!keep_fullscreen_checker_) {
     keep_fullscreen_checker_ =
         std::make_unique<chromeos::KeepFullscreenForUrlChecker>(
diff --git a/ash/session/fullscreen_controller_unittest.cc b/ash/session/fullscreen_controller_unittest.cc
index cc9ef5e..72a94aa 100644
--- a/ash/session/fullscreen_controller_unittest.cc
+++ b/ash/session/fullscreen_controller_unittest.cc
@@ -14,7 +14,6 @@
 #include "ash/wm/window_state.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
-#include "chromeos/ui/base/window_properties.h"
 #include "chromeos/ui/wm/fullscreen/pref_names.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/aura/client/aura_constants.h"
@@ -30,15 +29,15 @@
 constexpr char kMatchingPattern[] = "test.com";
 constexpr char kWildcardPattern[] = "*";
 
-class FullscreenControllerTestBase : public AshTestBase {
+class FullscreenControllerTest : public AshTestBase,
+                                 public testing::WithParamInterface<bool> {
  public:
-  FullscreenControllerTestBase() = default;
+  FullscreenControllerTest() {}
 
-  FullscreenControllerTestBase(const FullscreenControllerTestBase&) = delete;
-  FullscreenControllerTestBase& operator=(const FullscreenControllerTestBase&) =
-      delete;
+  FullscreenControllerTest(const FullscreenControllerTest&) = delete;
+  FullscreenControllerTest& operator=(const FullscreenControllerTest&) = delete;
 
-  ~FullscreenControllerTestBase() override = default;
+  ~FullscreenControllerTest() override {}
 
   // AshTestBase:
   void SetUp() override {
@@ -56,17 +55,17 @@
     AshTestBase::TearDown();
   }
 
- protected:
   void CreateFullscreenWindow() {
     window_ = CreateTestWindow();
     window_->SetProperty(aura::client::kShowStateKey,
                          ui::SHOW_STATE_FULLSCREEN);
-    SetPropertiesForNewFullscreenWindow(window_.get());
+    if (is_lacros_window_) {
+      window_->SetProperty(aura::client::kAppType,
+                           static_cast<int>(AppType::LACROS));
+    }
     window_state_ = WindowState::Get(window_.get());
   }
 
-  virtual void SetPropertiesForNewFullscreenWindow(aura::Window* window) {}
-
   void SetKeepFullscreenWithoutNotificationAllowList(
       const std::string& pattern) {
     base::Value::List list;
@@ -76,21 +75,6 @@
         std::move(list));
   }
 
-  std::unique_ptr<aura::Window> window_;
-  raw_ptr<WindowState, ExperimentalAsh> window_state_ = nullptr;
-  raw_ptr<TestShellDelegate> test_shell_delegate_ = nullptr;
-};
-
-class FullscreenControllerTest : public FullscreenControllerTestBase,
-                                 public testing::WithParamInterface<bool> {
- protected:
-  void SetPropertiesForNewFullscreenWindow(aura::Window* window) override {
-    if (is_lacros_window_) {
-      window->SetProperty(aura::client::kAppType,
-                          static_cast<int>(AppType::LACROS));
-    }
-  }
-
   void SetUpShellDelegate(bool should_exit_fullscreen, GURL url = kActiveUrl) {
     // The shell delegate will only retrieve the active URL for ash-chrome
     // windows and return the empty URL for lacros-chrome windows.
@@ -103,7 +87,14 @@
     }
   }
 
+ protected:
   bool is_lacros_window_ = GetParam();
+
+  std::unique_ptr<aura::Window> window_;
+
+  raw_ptr<WindowState, ExperimentalAsh> window_state_ = nullptr;
+
+  raw_ptr<TestShellDelegate> test_shell_delegate_ = nullptr;
 };
 
 // Test that full screen is exited after session unlock if the allow list pref
@@ -221,42 +212,5 @@
 
 INSTANTIATE_TEST_SUITE_P(All, FullscreenControllerTest, testing::Bool());
 
-using FullscreenControllerNotLacrosRelatedTest = FullscreenControllerTestBase;
-
-TEST_F(FullscreenControllerNotLacrosRelatedTest,
-       KeepFullscreenIfNoExitPropertySet) {
-  window_->SetProperty(chromeos::kUseOverviewToExitFullscreen, true);
-  window_->SetProperty(chromeos::kNoExitFullscreenOnLock, true);
-  window_->SetProperty(aura::client::kAppType,
-                       static_cast<int>(AppType::CROSTINI_APP));
-
-  ASSERT_TRUE(window_state_->IsFullscreen());
-
-  base::RunLoop run_loop;
-  Shell::Get()->session_controller()->PrepareForLock(run_loop.QuitClosure());
-  GetSessionControllerClient()->LockScreen();
-  EXPECT_TRUE(window_state_->IsFullscreen());
-  GetSessionControllerClient()->UnlockScreen();
-  run_loop.Run();
-  EXPECT_TRUE(window_state_->IsFullscreen());
-}
-
-TEST_F(FullscreenControllerNotLacrosRelatedTest,
-       NoExitPropertyNotAllowedIfOverviewPropertyIsNotSet) {
-  EXPECT_DEATH(
-      {
-        window_->SetProperty(chromeos::kUseOverviewToExitFullscreen, false);
-        window_->SetProperty(chromeos::kNoExitFullscreenOnLock, true);
-
-        ASSERT_TRUE(window_state_->IsFullscreen());
-
-        base::RunLoop run_loop;
-        Shell::Get()->session_controller()->PrepareForLock(
-            run_loop.QuitClosure());
-        GetSessionControllerClient()->LockScreen();
-      },
-      "Property combination not allowed");
-}
-
 }  // namespace
 }  // namespace ash
diff --git a/ash/shell.cc b/ash/shell.cc
index 2292bd0..ed1437e 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -1673,10 +1673,10 @@
       clipboard_history_controller_.get()));
   chromeos::clipboard_history::SetPasteClipboardItemByIdImpl(
       base::BindRepeating(
-          [](const std::string& id, int event_flags,
+          [](const base::UnguessableToken& id, int event_flags,
              crosapi::mojom::ClipboardHistoryControllerShowSource show_source) {
             ClipboardHistoryController::Get()->PasteClipboardItemById(
-                id, event_flags, show_source);
+                id.ToString(), event_flags, show_source);
           }));
 
   for (auto& observer : shell_observers_) {
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 9e73618..61015184 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -460,6 +460,7 @@
 <translation id="316086887565479535">يحتوي النموذج على تطبيقات غير متوافقة.</translation>
 <translation id="3161500364292033097">إغلاق سطح المكتب والنوافذ</translation>
 <translation id="316356270129335934">يعمل <ph name="MANAGER" /> على إعادة جهاز <ph name="DEVICE_TYPE" /> إلى الإصدار السابق. ستتم إعادة ضبط جهازك ويتم حذف كل البيانات المتوفّرة عليه.</translation>
+<translation id="3171170659304083361">إعدادات أساليب الإدخال</translation>
 <translation id="3181441307743005334">قد تستغرق إعادة التشغيل بعض الوقت</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{تم الاتصال بجهاز واحد}zero{تم الاتصال بـ # جهاز}two{تم الاتصال بجهازين (#)}few{تم الاتصال بـ # أجهزة}many{تم الاتصال بـ # جهازًا}other{تم الاتصال بـ # جهاز}}</translation>
 <translation id="320207200541803018">ضبط موقِّت</translation>
@@ -1112,6 +1113,7 @@
 <translation id="6074087755403037157">قناة تجريبية</translation>
 <translation id="6093867385179428431">أوقف المشرف هذه الإعدادات</translation>
 <translation id="6095008505822982596">معدّل سرعة الكلام</translation>
+<translation id="6095425951508823973">إضافة اتصال باستخدام "<ph name="PROVIDER" />"</translation>
 <translation id="6099678161144790572">تم تعديله الشهر الماضي.</translation>
 <translation id="6103838137565245112">النظام</translation>
 <translation id="6114505516289286752">تم تنزيل ملفات اللغة <ph name="LANGUAGE" /> في ميزة "التعرّف على الكلام"</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index ed180f6..3b238feb 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -459,6 +459,7 @@
 <translation id="316086887565479535">Шаблонът съдържа неподдържани приложения</translation>
 <translation id="3161500364292033097">Затваряне на работния кът и прозорците</translation>
 <translation id="316356270129335934"><ph name="MANAGER" /> връща устройството ви <ph name="DEVICE_TYPE" /> към по-стара версия. То ще бъде нулирано и всички данни ще бъдат изтрити.</translation>
+<translation id="3171170659304083361">Настройки на методите на въвеждане</translation>
 <translation id="3181441307743005334">Рестартирането може да отнеме известно време</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Установена е връзка с едно устройство}other{Установена е връзка с # устройства}}</translation>
 <translation id="320207200541803018">Set timer</translation>
@@ -1110,6 +1111,7 @@
 <translation id="6074087755403037157">Бета-канал</translation>
 <translation id="6093867385179428431">Деактивирано от администратора</translation>
 <translation id="6095008505822982596">Скорост на говора</translation>
+<translation id="6095425951508823973">Добавяне на връзка с(ъс) <ph name="PROVIDER" /></translation>
 <translation id="6099678161144790572">Редактирано през миналия месец</translation>
 <translation id="6103838137565245112">система</translation>
 <translation id="6114505516289286752">Файловете за говор на <ph name="LANGUAGE" /> бяха изтеглени</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index 8ecf2e85c..7ed133e 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -1060,6 +1060,7 @@
 <translation id="5881540930187678962">ਫ਼ੋਨ ਹੱਬ ਦਾ ਬਾਅਦ ਵਿੱਚ ਸੈੱਟਅੱਪ ਕਰੋ</translation>
 <translation id="5881663018261910378">ਬੰਦ ਹੈ</translation>
 <translation id="5887954372087850114">ਵਿੰਡੋ <ph name="WINDOW_TITLE" /> ਨੂੰ <ph name="DESK_TITLE" /> ਦੇ ਜ਼ਿੰਮੇ ਲਗਾਇਆ ਗਿਆ ਅਤੇ ਹੋਰ ਸਾਰੇ ਡੈਸਕਾਂ ਦੇ ਜ਼ਿੰਮੇ ਤੋਂ ਹਟਾਇਆ ਗਿਆ</translation>
+<translation id="588817334757907802">Chrome ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਫ਼ਾਈਲ ਖੋਲ੍ਹੋ</translation>
 <translation id="5895138241574237353">ਰੀਸਟਾਰਟ ਕਰੋ</translation>
 <translation id="589817443623831496">ਪੁਆਇੰਟ ਸਕੈਨਿੰਗ</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 827a2c84..fc5d9aa7 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -56,6 +56,7 @@
 <translation id="121097972571826261">Tiến một từ</translation>
 <translation id="1217633719248931900">Chuyển tới ứng dụng</translation>
 <translation id="1218444235442067213"><ph name="APP_NAME" />, Ứng dụng Cửa hàng Play</translation>
+<translation id="1219309685806246869">Quay lại <ph name="APP_TITLE" />.</translation>
 <translation id="1225748608451425081">Chromebook của bạn đã bị khóa do một vấn đề đã biết. Bạn có thể đăng nhập sau: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Dừng chọn</translation>
 <translation id="1235458158152011030">Mạng đã biết</translation>
@@ -1592,6 +1593,7 @@
 <translation id="8349964124165471584">Mở đường liên kết trong cửa sổ mới</translation>
 <translation id="8351131234907093545">Tạo ghi chú</translation>
 <translation id="8364673525741149932">Bật/tắt chế độ Shelf Party. <ph name="STATE_TEXT" /></translation>
+<translation id="8367948981300340152">Đang sử dụng <ph name="CAPTURE_MEDIUM" />.</translation>
 <translation id="8369166482916924789">Không gian làm việc đã lưu, <ph name="SAVE_AND_RECALL_DESK_NAME" /></translation>
 <translation id="8371779926711439835">Tiến một ký tự</translation>
 <translation id="8371991222807690464">Hiệu suất của thiết bị ngoại vi có thể bị hạn chế khi ở Chế độ khách</translation>
diff --git a/chrome/VERSION b/chrome/VERSION
index b1b28a2..b170810f 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=115
 MINOR=0
-BUILD=5757
+BUILD=5759
 PATCH=0
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt
index 742ab7a..c0df02b1 100644
--- a/chrome/android/profiles/arm.newest.txt
+++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-115.0.5754.0_rc-r1-merged.afdo.bz2
+chromeos-chrome-arm-115.0.5755.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 8a768a2..b7e5578 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-115.0.5754.0_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-115.0.5755.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb
index 3c1a900..7ab7e77 100644
--- a/chrome/app/resources/chromium_strings_da.xtb
+++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -85,7 +85,7 @@
 <translation id="3032787606318309379">Føjer til Chromium...</translation>
 <translation id="3038232873781883849">Venter på at installere…</translation>
 <translation id="3068515742935458733">Hjælp med at gøre Chromium bedre ved at sende fejlrapporter og <ph name="UMA_LINK" /> til Google</translation>
-<translation id="3101560983689755071">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chromium automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
+<translation id="3101560983689755071">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chromium automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
 <translation id="3103660991484857065">Installationsprogrammet kunne ikke pakke arkivet ud. Download Chromium igen.</translation>
 <translation id="3130323860337406239">Chromium bruger din mikrofon.</translation>
 <translation id="3155163173539279776">Genstart Chromium</translation>
@@ -108,7 +108,7 @@
 <translation id="3474745554856756813">Denne handling sletter <ph name="ITEMS_COUNT" /> elementer på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chromium som <ph name="USER_EMAIL" />.</translation>
 <translation id="3497319089134299931"><ph name="SHORTCUT" /> kan skifte mellem Chromium-profiler</translation>
 <translation id="3509308970982693815">Luk alle Chromium-vinduer, og prøv igen.</translation>
-<translation id="3533435340678213462">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chromium skal tage med i betragtning.</translation>
+<translation id="3533435340678213462">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chromium skal tage med i betragtning.</translation>
 <translation id="3567254597502212821">Din browserhistorik, dvs. en oversigt over, hvilke websites du har besøgt i Chromium på denne enhed</translation>
 <translation id="3575459661164320785">Der er skadelig software på din computer. Chromium kan fjerne den, gendanne dine indstillinger og deaktivere udgivelser, så din browser fungerer normalt igen.</translation>
 <translation id="3593091352817399191">En anden konto er allerede logget ind. Hvis du vil holde din browsing adskilt, kan Chromium oprette en ny profil til dig.</translation>
@@ -179,7 +179,7 @@
 <translation id="5224391634244552924">Der er ingen gemte adgangskoder. Chromium kan tjekke dine adgangskoder, når du gemmer dem.</translation>
 <translation id="5252179775517634216"><ph name="EXISTING_USER" /> er allerede logget ind på denne Chromium-profil. Denne handling vil oprette en ny Chromium-profil til <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="5277894862589591112">Åbn Chromium igen for at anvende ændringerne</translation>
-<translation id="5296845517486664001">Når prøven er aktiveret, og hvis Chromium har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chromium dine interesser en gang om måneden.</translation>
+<translation id="5296845517486664001">Når prøven er aktiveret, og hvis Chromium har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chromium dine interesser en gang om måneden.</translation>
 <translation id="5358375970380395591">Du er ved at logge ind med en managerstyret konto og giver dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via kontrolpanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation>
 <translation id="5386450000063123300">Opdaterer Chromium (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="538767207339317086">Tillad login via Chromium</translation>
@@ -189,7 +189,7 @@
 <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> – Chromium beta</translation>
 <translation id="5473971139929175403">Chromium fungerer muligvis ikke korrekt, da det ikke længere understøttes af denne Linux-distribution</translation>
 <translation id="5480860683791598150">Chromium skal have adgang til din lokation for at dele din lokation med dette website</translation>
-<translation id="5487574057737591516">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Hvis Chromium tager fejl, eller du ikke vil se visse annoncer, kan du fjerne en interesse.</translation>
+<translation id="5487574057737591516">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Hvis Chromium tager fejl, eller du ikke vil se visse annoncer, kan du fjerne en interesse.</translation>
 <translation id="549669000822060376">Vent, mens Chromium installerer de nyeste systemopdateringer.</translation>
 <translation id="5496810170689441661">Chromium forsøger at redigere adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation>
 <translation id="5527463683072221100">Åbn PDF-filer i Chromium</translation>
@@ -204,7 +204,7 @@
 <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Login på netværk</translation>
 <translation id="5924017743176219022">Opretter forbindelse til internettet…</translation>
 <translation id="5941711191222866238">Minimer</translation>
-<translation id="5972142260211327093">Hvis Chromium har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chromium dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
+<translation id="5972142260211327093">Hvis Chromium har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chromium dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
 <translation id="5987687638152509985">Opdater Chromium for at starte synkronisering</translation>
 <translation id="5988505247484123880">Det er almindeligt, at de websites, du besøger, husker ting, du er interesseret i, så din oplevelse tilpasses. Websites kan også gemme oplysninger med Chromium om dine interesser.</translation>
 <translation id="6003112304606738118">Downloader… Der er <ph name="HOURS" /> timer tilbage</translation>
@@ -325,7 +325,7 @@
 <translation id="7859018312476869945">Når du indtaster noget i adresselinjen eller søgefeltet, sender Chromium det, du skriver, til din standardsøgemaskine for at få bedre forslag. Dette er deaktiveret i inkognitotilstand.</translation>
 <translation id="7867198900892795913">Chromium kunne ikke opdatere til den nyeste version, så du går glip af nye funktioner og sikkerhedsrettelser.</translation>
 <translation id="7872446069773932638">Downloader… Der er <ph name="SECONDS" /> sekunder tilbage</translation>
-<translation id="7877292582355102282"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chromium skal tage med i betragtning.</translation>
+<translation id="7877292582355102282"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chromium skal tage med i betragtning.</translation>
 <translation id="7937630085815544518">Du loggede ind på Chromium som <ph name="USER_EMAIL_ADDRESS" />. Brug den samme konto til at logge ind igen.</translation>
 <translation id="7975919845073681630">Dette er en sekundær installation af Chromium, og den kan ikke gøres til din standardbrowser.</translation>
 <translation id="7997934263947464652">Udvidelser, apps og temaer fra ukendte kilder kan skade din enhed. Chromium anbefaler, at de kun installeres via <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /></translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index def13cd..20804a1 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1994,6 +1994,7 @@
 <translation id="2682498795777673382">تحديث من أحد والديك</translation>
 <translation id="2683638487103917598">تم تصنيف المجلد</translation>
 <translation id="2684004000387153598">للمتابعة، انقر على "موافقة" ثم انقر على "إضافة شخص" لإنشاء ملف شخصي جديد لعنوان بريدك الإلكتروني.</translation>
+<translation id="2685193395980129388">مسموح به – <ph name="PERMISSION_DETAILS" /></translation>
 <translation id="2687403674020088961">حظر كل ملفات تعريف الارتباط (لا ننصح بهذا الخيار)</translation>
 <translation id="2687407218262674387">‏بنود خدمة Google</translation>
 <translation id="2687621393791886981">اسألني لاحقًا</translation>
@@ -3200,7 +3201,7 @@
 <translation id="3760460896538743390">فحص &amp;صفحة الخلفية</translation>
 <translation id="37613671848467444">فتح في &amp;نافذة التصفح المتخفي</translation>
 <translation id="3761556954875533505">هل تريد السماح للموقع الإلكتروني بتعديل الملفات؟</translation>
-<translation id="3763433740586298940">‏يمكنك حظر المواقع الإلكترونية التي لا تريدها أن تقدِّم اقتراحات. يحذف Chrome أيضًا تلقائيًا المواقع الإلكترونية التي يمر أكثر من 30 يومًا على إضافتها إلى قائمة "المواقع الإلكترونية التي تقترح الإعلانات".</translation>
+<translation id="3763433740586298940">‏يمكنك حظر المواقع الإلكترونية التي لا تريدها. بالإضافة إلى ذلك، يحذف Chrome تلقائيًا المواقع الإلكترونية التي يمر أكثر من 30 يومًا على إضافتها إلى قائمة "المواقع الإلكترونية التي تقترح الإعلانات".</translation>
 <translation id="3763549179847864476">زر الرجوع في "دليل الخصوصية"</translation>
 <translation id="3764314093345384080">معلومات الإصدار التفصيلية</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏الاتصال بجهاز USB}zero{‏الاتصال بـ # من أجهزة USB}two{‏الاتصال بجهازي USB (#)}few{‏الاتصال بـ # أجهزة USB}many{‏ الاتصال بـ # جهاز USB}other{‏ الاتصال بـ # من أجهزة USB}}</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index e85b670..5782785d 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -577,7 +577,7 @@
 <translation id="1485015260175968628">То вече има възможност за:</translation>
 <translation id="1485141095922496924">Версия <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />), <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Търсене в паролите</translation>
-<translation id="1486486872607808064">Сканирайте този QR код с камерата на устройството, на което искате да създадете код за достъп за <ph name="APP_NAME" /></translation>
+<translation id="1486486872607808064">Сканирайте този QR код с камерата на устройството, на което искате да създадете ключ за достъп за <ph name="APP_NAME" /></translation>
 <translation id="1487335504823219454">Включено – персонализирани настройки</translation>
 <translation id="1493892686965953381">Изчаква се <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1494349716233667318">Сайтовете могат да искат разрешение да използват шрифтовете, инсталирани на устройството ви</translation>
@@ -889,7 +889,7 @@
 <translation id="1744108098763830590">фонова страница</translation>
 <translation id="1745732479023874451">Управление на контактите</translation>
 <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Искате ли да отворите и редактирате # файла в това уеб приложение?}}</translation>
-<translation id="1748329107062243374">Използване на код за достъп от <ph name="DEVICE_NAME" /> за влизане в(ъв) <ph name="WEBSITE" /></translation>
+<translation id="1748329107062243374">Използване на ключа за достъп от <ph name="DEVICE_NAME" /> за влизане в(ъв) <ph name="WEBSITE" /></translation>
 <translation id="1748563609363301860">Можете да запазите тази парола в профила си в Google или само на това устройство</translation>
 <translation id="1749733017156547309">Изисква се парола</translation>
 <translation id="1750172676754093297">В ключа ви за сигурност не могат да се съхраняват отпечатъци</translation>
@@ -2000,6 +2000,7 @@
 <translation id="2682498795777673382">Актуализация от родителя ви</translation>
 <translation id="2683638487103917598">Папката е сортирана</translation>
 <translation id="2684004000387153598">За да продължите, кликнете върху „OK“ и след това – върху „Добавяне на човек“, така че да създадете нов потребителски профил за имейл адреса си.</translation>
+<translation id="2685193395980129388">Разрешено – <ph name="PERMISSION_DETAILS" /></translation>
 <translation id="2687403674020088961">Блокиране на всички „бисквитки“ (не се препоръчва)</translation>
 <translation id="2687407218262674387">Общи условия на Google</translation>
 <translation id="2687621393791886981">Попитайте ме по-късно</translation>
@@ -4383,7 +4384,7 @@
 <translation id="481574578487123132">Свързани устройства</translation>
 <translation id="4816097470512964351"><ph name="DEVICE" />, подробности</translation>
 <translation id="4816336393325437908">{COUNT,plural, =1{Изтрихте 1 отметка}other{Изтрихте {COUNT} отметки}}</translation>
-<translation id="4816900689218414104">Създаване на код за достъп на телефон или таблет</translation>
+<translation id="4816900689218414104">Създаване на ключ за достъп на телефон или таблет</translation>
 <translation id="4819323978093861656">{0,plural, =0{Затваря се сега.}=1{Затваря се след 1 секунда}other{Затваря се след # секунди}}</translation>
 <translation id="4819607494758673676">Известия от Google Асистент</translation>
 <translation id="4820236583224459650">Задаване като активен пропуск</translation>
@@ -6551,7 +6552,7 @@
 <translation id="6790497603648687708">Разширението <ph name="EXTENSION_NAME" /> бе добавено отдалечено</translation>
 <translation id="6790820461102226165">Добавяне на човек...</translation>
 <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation>
-<translation id="679486139907144816">За да влезете в този сайт посредством код за достъп, трябва да включите Windows Hello от настройките. След това се върнете на този сайт и опитайте отново.</translation>
+<translation id="679486139907144816">За да влезете в този сайт посредством ключ за достъп, трябва да включите Windows Hello от настройките. След това се върнете на този сайт и опитайте отново.</translation>
 <translation id="6795371939514004514">Автоматичното сканиране позволява да се придвижвате автоматично през елементите на екрана. Когато даден елемент бъде откроен, натиснете „Избор“, за да го активирате.</translation>
 <translation id="6795884519221689054">Панда</translation>
 <translation id="6796509790850723820">Рендериране</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 2be33ca..2a8f7fe 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -193,7 +193,7 @@
 <translation id="1155816283571436363">Opretter forbindelse til din telefon</translation>
 <translation id="1158080958325422608">Anvend store bogstaver</translation>
 <translation id="1158238185437008462">Se minder</translation>
-<translation id="1160842321113409343">Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dine personlige oplysninger. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
+<translation id="1160842321113409343">Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dit privatliv. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
 <translation id="1161575384898972166">Log ind på <ph name="TOKEN_NAME" /> for at eksportere klientcertifikatet.</translation>
 <translation id="116173250649946226">Din administrator har indstillet et standardtema, der ikke kan ændres.</translation>
 <translation id="1162213688509394031">Skjul titellinjen</translation>
@@ -389,7 +389,7 @@
 <translation id="1327495825214193325">Hvis du vil aktivere ADB-fejlretning, skal du genstarte denne <ph name="DEVICE_TYPE" />. Du skal gendanne fabriksindstillingerne på den for at deaktivere det.</translation>
 <translation id="1327527584824210101">Brug din adgangsnøgle</translation>
 <translation id="1327794256477341646">Funktioner, der skal bruge din lokation, fungerer ikke</translation>
-<translation id="1329466763986822896">Gør beskyttelsen af personlige oplysninger bedre for dette hotspot</translation>
+<translation id="1329466763986822896">Gør privatlivsbeskyttelsen bedre for dette hotspot</translation>
 <translation id="1331977651797684645">Det var mig.</translation>
 <translation id="1333489022424033687">Visse funktioner på <ph name="ORIGIN" /> fungerer muligvis ikke, før du har ryddet data, som andre websites har gemt på enheden</translation>
 <translation id="1333965224356556482">Tillad ikke, at websites ser din lokation</translation>
@@ -3148,7 +3148,7 @@
 <translation id="3708295717182051206">Undertekster</translation>
 <translation id="3708684582558000260">Tillad ikke, at lukkede websites kan afslutte afsendingen eller modtagelsen af data</translation>
 <translation id="3709244229496787112">Browseren blev lukket ned, inden overførslen var færdig.</translation>
-<translation id="371174301504454251">Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dine personlige oplysninger. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
+<translation id="371174301504454251">Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dit privatliv. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
 <translation id="3711931198657368127">Ind&amp;sæt, og gå til <ph name="URL" /></translation>
 <translation id="3711945201266135623">Der blev fundet <ph name="NUM_PRINTERS" /> printere på printerserveren</translation>
 <translation id="3712050472459130149">Kontoopdatering er påkrævet</translation>
@@ -8956,7 +8956,7 @@
 <translation id="8881020143150461183">Prøv igen. Kontakt <ph name="CARRIER_NAME" /> for at få teknisk support.</translation>
 <translation id="888256071122006425">Indstillinger for mus og touchplade</translation>
 <translation id="8883273463630735858">Aktivér acceleration af touchplade</translation>
-<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />Sådan administrerer du dine data:<ph name="END_BOLD" /> Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dine personlige oplysninger. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
+<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />Sådan administrerer du dine data:<ph name="END_BOLD" /> Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dit privatliv. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
 <translation id="8884570509232205463">Din enhed låses nu kl. <ph name="UNLOCK_TIME" />.</translation>
 <translation id="8888253246822647887">Din app åbner, når opgraderingen er fuldført. Opgraderinger kan tage et par minutter.</translation>
 <translation id="8889294078294184559">Når du derefter bruger nettet, kan websites ved hjælp af Chrome tjekke og verificere via et website, du tidligere har besøgt, at du sandsynligvis er en rigtig person</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index b3dafd8a..cc32837 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -596,6 +596,7 @@
 <translation id="1506187449813838456">ਪਿਚ ਵਧਾਓ</translation>
 <translation id="1507170440449692343">ਇਹ ਸਫ਼ਾ ਤੁਹਾਡੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚਣ ਤੋਂ ਬਲੌਕ ਕੀਤਾ ਗਿਆ ਹੈ।</translation>
 <translation id="1507246803636407672">&amp;ਬਰਖ਼ਾਸਤ ਕਰੋ</translation>
+<translation id="1508931164824684991">ਸਾਈਟਾਂ JavaScript ਵਰਤ ਸਕਦੀਆਂ ਹਨ</translation>
 <translation id="1509163368529404530">&amp;ਗਰੁੱਪ ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕਰੋ</translation>
 <translation id="1509281256533087115">USB ਰਾਹੀਂ ਕਿਸੇ ਵੀ <ph name="DEVICE_NAME_AND_VENDOR" /> ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
 <translation id="1510238584712386396">ਲੌਂਚਰ</translation>
@@ -859,6 +860,7 @@
 <translation id="1708291623166985230">ਹੌਟਸਪੌਟ ਬੰਦ ਹੈ</translation>
 <translation id="1708338024780164500">(ਨਿਸ਼ਕਿਰਿਆ)</translation>
 <translation id="1708713382908678956"><ph name="NAME_PH" /> (ਆਈ.ਡੀ.: <ph name="ID_PH" />)</translation>
+<translation id="1708979186656821319">ਡਾਊਨਲੋਡ ਪੂਰਾ ਹੋਣ 'ਤੇ ਬੁਲਬੁਲਾ ਨਾ ਦਿਖਾਓ</translation>
 <translation id="1709106626015023981"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (ਜੱਦੀ)</translation>
 <translation id="1709217939274742847">ਪ੍ਰਮਾਣੀਕਰਨ ਵਰਤਣ ਲਈ ਟਿਕਟ ਚੁਣੋ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation>
 <translation id="1709762881904163296">ਨੈੱਟਵਰਕ ਸੈਟਿੰਗਾਂ</translation>
@@ -1682,6 +1684,7 @@
 <translation id="2398546389094871088">ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਪਾਵਰਵਾਸ਼ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਈ-ਸਿਮ ਪ੍ਰੋਫਾਈਲ ਨਹੀਂ ਹਟਣਗੇ। ਇਹਨਾਂ ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਹੱਥੀਂ ਹਟਾਉਣ ਲਈ <ph name="LINK_BEGIN" />ਮੋਬਾਈਲ ਸੈਟਿੰਗਾਂ<ph name="LINK_END" /> 'ਤੇ ਜਾਓ।</translation>
 <translation id="2399699884460174994">ਸੂਚਨਾਵਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਹੋਈਆਂ ਹਨ</translation>
 <translation id="2399939490305346086">ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਸਾਈਨ-ਇਨ ਡਾਟਾ</translation>
+<translation id="2400323785194108001">ਇਸ ਸਾਈਟ ਨੂੰ ਕਦੇ ਵੀ ਅਕਿਰਿਆਸ਼ੀਲ ਨਾ ਕਰੋ</translation>
 <translation id="2400664245143453337">ਤੁਰੰਤ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ</translation>
 <translation id="2402226831639195063">ਟੋਨਾਂ</translation>
 <translation id="2406153734066939945">ਕੀ ਇਸ ਪ੍ਰੋਫਾਈਲ ਅਤੇ ਇਸਦੇ ਡਾਟੇ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?</translation>
@@ -1997,6 +2000,7 @@
 <translation id="2673135533890720193">ਆਪਣਾ ਬ੍ਰਾਊਜ਼ਿੰਗ ਇਤਿਹਾਸ ਪੜ੍ਹੋ</translation>
 <translation id="2674764818721168631">ਬੰਦ</translation>
 <translation id="2675570801872027281">Bruschetta ਨੂੰ ਹਟਾਉਣ ਦੌਰਾਨ ਗੜਬੜ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
+<translation id="2676084251379299915">ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਐਂਟਰਪ੍ਰਾਈਜ਼ ਨੀਤੀ ਕਰਕੇ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ ਕਿਉਂਕਿ ਹੁਣ ਇਹ Chrome ਵੈੱਬ ਸਟੋਰ 'ਤੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।</translation>
 <translation id="267708982776801183">ਲਾਲ-ਹਰਾ ਫਿਲਟਰ (ਉਹ ਸਮੱਸਿਆ ਜਿਸ ਵਿੱਚ ਲਾਲ ਰੰਗ ਹਰਾ ਦਿਸਦਾ ਹੈ)</translation>
 <translation id="2678063897982469759">ਮੁੜ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="2678100101831051676">ਕਾਸਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।</translation>
@@ -2093,6 +2097,7 @@
 <translation id="2755349111255270002">ਇਸ <ph name="DEVICE_TYPE" /> ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ</translation>
 <translation id="2755367719610958252">ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation>
 <translation id="275662540872599901">ਸਕ੍ਰੀਨ ਬੰਦ</translation>
+<translation id="2756936198272359372">JavaScript ਵਰਤਣ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ</translation>
 <translation id="2757161511365746634">ਪ੍ਰਿੰਟਰ ਦੇਖੋ</translation>
 <translation id="2757338480560142065">ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਵੱਲੋਂ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਪਾਸਵਰਡ <ph name="WEBSITE" /> ਦੇ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੋਵੇ</translation>
 <translation id="2761632996810146912"><ph name="HASHTAG_SETTINGS" /> <ph name="SEARCH_QUERY" /> ਲਈ ਕੋਈ ਖੋਜ ਨਤੀਜਾ ਨਹੀਂ ਮਿਲਿਆ</translation>
@@ -2125,6 +2130,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2781800772148653810">ਇਸ ਸਾਈਟ 'ਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਆਗਿਆ ਦਿੱਤੀ ਗਈ ਹੈ</translation>
 <translation id="2782104745158847185">Linux ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋ ਗਈ</translation>
+<translation id="2783024642731649028">ਤੁਹਾਡੇ ਕਾਰਡ ਵਿੱਚ ਮੌਜੂਦ 1 ਆਈਟਮ ਲਈ <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_DOMAIN" /> 'ਤੇ <ph name="DISCOUNT_TEXT" /> ਮਿਲ ਰਹੀ ਹੈ, <ph name="RELATIVE_TIME" /> ਪਹਿਲਾਂ ਦੇਖਿਆ ਗਿਆ</translation>
 <translation id="2783298271312924866">ਡਾਊਨਲੋਡ ਕੀਤਾ</translation>
 <translation id="2783321960289401138">ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ...</translation>
 <translation id="2783829359200813069">ਇਨਕ੍ਰਿਪਸ਼ਨ ਦੀਆਂ ਕਿਸਮਾਂ ਚੁਣੋ</translation>
@@ -2906,6 +2912,7 @@
 <translation id="3496213124478423963">ਜ਼ੂਮ ਘਟਾਓ</translation>
 <translation id="3496238553815913323"><ph name="LANGUAGE" /> (ਚੁਣੀ ਨਹੀਂ ਗਈ)</translation>
 <translation id="3496689104192986836">ਬੈਟਰੀ ਪੱਧਰ <ph name="PERCENTAGE" />%</translation>
+<translation id="3496995426334945408">ਸਾਈਟਾਂ ਆਮ ਤੌਰ ਤੇ JavaScript ਨੂੰ ਅੰਤਰਕਿਰਿਆਤਮਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਿਖਾਉਣ ਲਈ ਵਰਤਦੀਆਂ ਹਨ, ਜਿਵੇਂ ਕਿ ਵੀਡੀਓ ਗੇਮਾਂ ਜਾਂ ਵੈੱਬ ਫ਼ਾਰਮ</translation>
 <translation id="3497501929010263034"><ph name="VENDOR_NAME" /> ਦਾ USB ਡੀਵਾਈਸ (ਉਤਪਾਦ <ph name="PRODUCT_ID" />)</translation>
 <translation id="3497560059572256875">ਡੂਡਲ ਸਾਂਝਾ ਕਰੋ</translation>
 <translation id="3500417806337761827">ਸਾਂਝਾਕਰਨ ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ। ਬਹੁਤ ਸਾਰੇ SMB ਸਾਂਝਾਕਰਨਾਂ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਮਾਊਂਟ ਕੀਤਾ ਜਾ ਚੁੱਕਿਆ ਹੈ।</translation>
@@ -2950,6 +2957,7 @@
 <translation id="354060433403403521">AC ਅਡਾਪਟਰ</translation>
 <translation id="354068948465830244">ਇਹ ਸਾਈਟ ਦਾ ਡਾਟਾ ਪੜ੍ਹ ਅਤੇ ਬਦਲ ਸਕਦੀ ਹੈ</translation>
 <translation id="3541823293333232175">ਜ਼ਿੰਮੇ ਲਗਾਇਆ ਗਿਆ</translation>
+<translation id="354204985370574425">ਇਸ ਸਾਈਟ ਨੂੰ ਕਦੇ ਵੀ ਅਕਿਰਿਆਸ਼ੀਲ ਨਾ ਕਰੋ</translation>
 <translation id="3543393733900874979">ਅੱਪਡੇਟ ਅਸਫਲ (ਗੜਬੜ: <ph name="ERROR_NUMBER" />)</translation>
 <translation id="3543597750097719865">SHA-512 ਨਾਲ X9.62 ECDSA ਹਸਤਾਖਰ</translation>
 <translation id="3544058026430919413">ਕੰਪਨੀ ਅਜਿਹੀਆਂ ਸਾਈਟਾਂ ਦੇ ਸਮੂਹ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰ ਸਕਦੀ ਹੈ ਜੋ ਗਰੁੱਪ ਵਿੱਚ ਤੁਹਾਡੀ ਸਰਗਰਮੀ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਕੁਕੀਜ਼ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕੇ। ਇਹ ਇਨਕੋਗਨਿਟੋ ਵਿੱਚ ਬੰਦ ਹੈ।</translation>
@@ -3844,6 +3852,7 @@
 <translation id="4324577459193912240">ਅਧੂਰੀ ਫ਼ਾਈਲ</translation>
 <translation id="4325237902968425115"><ph name="LINUX_APP_NAME" /> ਨੂੰ ਅਣਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation>
 <translation id="4326146840124313313">Chrome ਦੀ ਸਭ ਤੋਂ ਮਜ਼ਬੂਤ ਸੁਰੱਖਿਆ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ ਅਤੇ ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਤੁਹਾਡੀ ਰੱਖਿਆ ਕਰਨ ਲਈ ਬਹੁਤ ਕੁਝ ਕਰਦੀ ਹੈ</translation>
+<translation id="4326484226728068206">ਤੁਹਾਡੇ ਕਾਰਡ ਵਿੱਚ ਮੌਜੂਦ ਆਈਟਮਾਂ ਲਈ <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_DOMAIN" /> 'ਤੇ <ph name="DISCOUNT_TEXT" /> ਮਿਲ ਰਹੀ ਹੈ, <ph name="RELATIVE_TIME" /> ਪਹਿਲਾਂ ਦੇਖਿਆ ਗਿਆ</translation>
 <translation id="4330191372652740264">ਠੰਡਾ ਪਾਣੀ</translation>
 <translation id="4330387663455830245">ਕਦੇ ਵੀ <ph name="LANGUAGE" /> ਦਾ ਅਨੁਵਾਦ ਨਾ ਕਰੋ</translation>
 <translation id="4332976768901252016">ਮਾਪਿਆਂ ਦੇ ਕੰਟਰੋਲ ਸੈੱਟਅੱਪ ਕਰੋ</translation>
@@ -4532,6 +4541,7 @@
 <translation id="4940448324259979830">ਇਸ ਖਾਤੇ ਦਾ ਪ੍ਰਬੰਧਨ <ph name="PROFILE_NAME" /> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="4940845626435830013">ਡਿਸਕ ਦਾ ਆਕਾਰ ਰਾਖਵਾਂ ਕਰੋ</translation>
 <translation id="4941074198479265146">ਸਾਈਟਾਂ ਆਮ ਤੌਰ 'ਤੇ ਸੰਗੀਤ ਬਣਾਉਣ ਅਤੇ ਸੰਪਾਦਿਤ ਕਰਨ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਈ MIDI ਡੀਵਾਈਸਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਦੀਆਂ ਹਨ</translation>
+<translation id="4941243352516004658">ਤੁਹਾਡੇ ਕਾਰਡ ਵਿੱਚ ਮੌਜੂਦ <ph name="PRODUCT_ITEM_COUNT" /> ਆਈਟਮਾਂ ਲਈ <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_DOMAIN" /> 'ਤੇ <ph name="DISCOUNT_TEXT" /> ਮਿਲ ਰਹੀ ਹੈ, <ph name="RELATIVE_TIME" /> ਪਹਿਲਾਂ ਦੇਖਿਆ ਗਿਆ</translation>
 <translation id="4941246025622441835">ਐਂਟਰਪ੍ਰਾਈਜ਼ ਪ੍ਰਬੰਧਨ ਲਈ ਡੀਵਾਈਸ ਨੂੰ ਦਰਜ ਕਰਦੇ ਸਮੇਂ ਇਹ ਡੀਵਾਈਸ ਬੇਨਤੀ ਵਰਤੋ।</translation>
 <translation id="4941627891654116707">ਫੌਂਟ ਆਕਾਰ</translation>
 <translation id="4941963255146903244">ਆਪਣੇ ਫ਼ੋਨ ਦੀਆਂ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਐਪਾਂ ਦੇਖੋ</translation>
@@ -5487,6 +5497,7 @@
 <translation id="5832970156002835240">ਸਾਰੀਆਂ ਸਾਈਟਾਂ 'ਤੇ ਆਗਿਆ ਦਿਓ</translation>
 <translation id="5833397272224757657">ਵਿਅਕਤੀਗਤਕਰਨ ਲਈ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਸਾਈਟਾਂ ਦੀ ਸਮੱਗਰੀ, ਨਾਲ ਹੀ ਬ੍ਰਾਊਜ਼ਰ ਸਰਗਰਮੀ ਅਤੇ ਅੰਤਰਕਿਰਿਆਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ</translation>
 <translation id="5833726373896279253">ਇਹ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਮਾਲਕ ਵੱਲੋਂ ਸੰਸ਼ੋਧਿਤ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।</translation>
+<translation id="5833899990800318936">ਸਾਈਟਾਂ ਨੂੰ JavaScript ਵਰਤਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ</translation>
 <translation id="583431638776747">ਸਾਈਟ ਉਪਲਬਧ ਨਹੀਂ ਸੀ</translation>
 <translation id="5834581999798853053">ਲਗਭਗ <ph name="TIME" /> ਮਿੰਟ ਬਾਕੀ</translation>
 <translation id="5835360478055379192">{NUM_EXTENSION,plural, =1{<ph name="EXTENSION1" /> ਵੱਲੋਂ HID ਡੀਵਾਈਸਾਂ ਤੱਕ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ}=2{ਡੀਵਾਈਸਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵਾਲੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਦੀ ਗਿਣਤੀ: <ph name="EXTENSION1" />, <ph name="EXTENSION2" />}one{ਡੀਵਾਈਸਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵਾਲੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਦੀ ਗਿਣਤੀ: <ph name="EXTENSION1" />, <ph name="EXTENSION2" /> +{3} ਹੋਰ}other{ਡੀਵਾਈਸਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵਾਲੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਦੀ ਗਿਣਤੀ: <ph name="EXTENSION1" />, <ph name="EXTENSION2" /> +{3} ਹੋਰ}}</translation>
@@ -5717,6 +5728,7 @@
 <translation id="6026819612896463875"><ph name="WINDOW_TITLE" /> - USB ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੀ ਗਈ</translation>
 <translation id="6027945736510816438">ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ <ph name="WEBSITE" /> ਸੀ?</translation>
 <translation id="6028117231645531007">ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰੋ</translation>
+<translation id="6030719887161080597">ਵਿਗਿਆਪਨ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਮਾਪਣ ਲਈ ਸਾਈਟ ਵੱਲੋਂ ਵਰਤੀ ਗਈ ਜਾਣਕਾਰੀ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation>
 <translation id="6031600495088157824">ਟੂਲਬਾਰ ਵਿੱਚ ਇਨਪੁੱਟ ਵਿਕਲਪ</translation>
 <translation id="6032715498678347852">ਇਸ ਸਾਈਟ ਨੂੰ ਐਕਸਟੈਂਸ਼ਨ ਪਹੁੰਚ ਦੇਣ ਲਈ, ਇਸ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।</translation>
 <translation id="6032912588568283682">ਫਾਈਲ ਸਿਸਟਮ</translation>
@@ -5951,6 +5963,7 @@
 <translation id="623755660902014047">ਪੜ੍ਹਨ ਦਾ ਮੋਡ</translation>
 <translation id="6238767809035845642">ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ ਤੋਂ ਸਾਂਝੀ ਕੀਤੀ ਲਿਖਤ</translation>
 <translation id="6238923052227198598">ਨਵੀਨਤਮ ਨੋਟ-ਕਥਨ ਨੂੰ ਲੌਕ ਸਕ੍ਰੀਨ 'ਤੇ ਰੱਖੋ</translation>
+<translation id="6238982280403036866">JavaScript ਵਰਤਣ ਦੀ ਆਗਿਆ ਹੈ</translation>
 <translation id="6239558157302047471">&amp;ਫ੍ਰੇਮ ਮੁੜ-ਲੋਡ ਕਰੋ</translation>
 <translation id="6240821072888636753">ਹਰ ਵਾਰ ਪੁੱਛੋ</translation>
 <translation id="6241530762627360640">ਆਪਣੇ ਸਿਸਟਮ ਨਾਲ ਪੇਅਰ ਕੀਤੀਆਂ ਬਲੂਟੁੱਥ ਡਿਵਾਈਸਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ ਅਤੇ ਨੇੜਲੀਆਂ ਬਲੂਟੁੱਥ ਡਿਵਾਈਸਾਂ ਖੋਜੋ।</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 7cbf445..36fdc58 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -4216,6 +4216,7 @@
 <translation id="4647090755847581616">&amp;Đóng thẻ</translation>
 <translation id="4647283074445570750">Bước <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation>
 <translation id="4648491805942548247">Không đủ quyền</translation>
+<translation id="4650037136970677721">Bộ nhớ tiết kiệm được</translation>
 <translation id="4650591383426000695">Ngắt kết nối điện thoại khỏi <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Không thể tải thành phần trực tuyến có tài nguyên chế độ minh họa.</translation>
 <translation id="4651921906638302153">Không đăng nhập được bằng tài khoản này</translation>
@@ -4450,6 +4451,7 @@
 <translation id="4863702650881330715">Tăng cường khả năng tương thích</translation>
 <translation id="4863769717153320198">Có vẻ như là <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Mặc định)</translation>
 <translation id="4864805589453749318">Chọn cha mẹ sẽ cấp quyền thêm tài khoản trường học.</translation>
+<translation id="486505726797718946">Bộ nhớ tiết kiệm được</translation>
 <translation id="486635084936119914">Tự động mở một số loại tệp nhất định sau khi tải xuống</translation>
 <translation id="4868281708609571334">Hướng dẫn Trợ lý Google nhận dạng giọng nói của <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="4868284252360267853">Hộp thoại này hiện không được đặt tiêu điểm. Nhấn tổ hợp phím Command+Shift+Option+A để đặt hộp thoại này làm tiêu điểm.</translation>
@@ -6108,6 +6110,7 @@
 <translation id="6378392501584240055">Mở danh sách mạng Wi-Fi</translation>
 <translation id="6380143666419481200">Đồng ý và tiếp tục</translation>
 <translation id="6382958439467370461">Không có phím tắt không hoạt động</translation>
+<translation id="6383382161803538830">Chế độ đọc không hoạt động trên trang này</translation>
 <translation id="638418309848716977">Các đường liên kết được hỗ trợ</translation>
 <translation id="6384275966486438344">Thay đổi cài đặt tìm kiếm của bạn thành: <ph name="SEARCH_HOST" /></translation>
 <translation id="63849924261838903">{NUM_TABS,plural, =1{Nhóm chưa có tên – 1 thẻ}other{Nhóm chưa có tên – # thẻ}}</translation>
@@ -6504,6 +6507,7 @@
 <translation id="6729192290958770680">Nhập tên người dùng của bạn</translation>
 <translation id="6731320427842222405">Việc này có thể mất vài phút</translation>
 <translation id="6733620523445262364">Đã tạo "<ph name="BOOKMARK_TITLE" />".</translation>
+<translation id="6734178081670810314"><ph name="EXTENSION_OR_APP_NAME" /> (Mã nhận dạng: <ph name="EXTENSION_OR_APP_ID" />)</translation>
 <translation id="6735304988756581115">Hiển thị cookie và các dữ liệu khác của trang web...</translation>
 <translation id="6736243959894955139">Địa chỉ</translation>
 <translation id="6737393581255281855">Xoá dữ liệu hiển thị?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb
index ad2e713..dd7a5bfa 100644
--- a/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -36,7 +36,7 @@
 <translation id="1597911401261118146">Du kan tjekke, om dine andre adgangskoder er beskyttet mod brud på datasikkerheden og andre sikkerhedsproblemer ved at <ph name="BEGIN_LINK" />logge ind på Chrome<ph name="END_LINK" />.</translation>
 <translation id="1599904803480101533">Chrome har blokeret denne arkivfil, fordi den muligvis indeholder malware</translation>
 <translation id="1619887657840448962">For at gøre Chrome mere sikker har vi deaktiveret følgende udvidelse, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation>
-<translation id="1627304841979541023"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
+<translation id="1627304841979541023"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
 <translation id="1628000112320670027">Få hjælp til Chrome</translation>
 <translation id="1640672724030957280">Downloader...</translation>
 <translation id="1662146548738125461">Om ChromeOS Flex</translation>
@@ -65,7 +65,7 @@
 <translation id="2120620239521071941">Denne handling sletter <ph name="ITEMS_COUNT" /> elementer på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chrome som <ph name="USER_EMAIL" />.</translation>
 <translation id="2121284319307530122">Genstart og opdater &amp;Chrome</translation>
 <translation id="2123055963409958220">Vær med til at gøre Chrome bedre ved at rapportere de <ph name="BEGIN_LINK" />aktuelle indstillinger<ph name="END_LINK" />.</translation>
-<translation id="2131230230468101642">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
+<translation id="2131230230468101642">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
 <translation id="2139300032719313227">Genstart ChromeOS</translation>
 <translation id="2151406531797534936">Genstart Chrome nu</translation>
 <translation id="2174917724755363426">Installationen er ikke fuldført. Er du sikker på, at du vil annullere?</translation>
@@ -237,7 +237,7 @@
 <translation id="5394833366792865639">Del en Chrome-fane</translation>
 <translation id="5412485296464121825">Websites kan gemme oplysninger med Chrome om dine interesser. Hvis du f.eks. besøger et website for at købe sko til et maraton, kan websitet muligvis definere, at din interesse er at løbe maraton. Hvis du derefter besøger et andet website for at tilmelde dig et løb, kan det website vise dig en annonce for løbesko baseret på dine interesser.</translation>
 <translation id="5430073640787465221">Din præferencefil er beskadiget eller ugyldig. Google Chrome kan ikke gendanne dine præferencer.</translation>
-<translation id="5524761631371622910">Når prøver er aktiveret, og hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome dine interesser en gang om måneden.</translation>
+<translation id="5524761631371622910">Når prøver er aktiveret, og hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen Chrome dine interesser en gang om måneden.</translation>
 <translation id="5530733413481476019">Gør Chrome hurtigere</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
 <translation id="565744775970812598"><ph name="FILE_NAME" /> kan være skadelig, så Chrome har blokeret den.</translation>
@@ -245,7 +245,7 @@
 <translation id="5686916850681061684">Tilpas og administrer Google Chrome. Noget kræver din opmærksomhed – klik for at få oplysninger.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
 <translation id="570005089986962444">Når denne indstilling er aktiveret, frigør Chrome hukommelse fra inaktive faner. Dette tildeler aktive faner og andre apps flere computerressourcer og gør Chrome hurtigere. Dine inaktive faner bliver automatisk aktive igen, når du vender tilbage til dem.</translation>
-<translation id="5727531838415286053">Hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
+<translation id="5727531838415286053">Hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chrome dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
 <translation id="5736850870166430177">Hvis et website forsøger at stjæle din adgangskode, eller hvis du downloader en skadelig fil, sender Chrome muligvis også webadresser, bl.a. mindre mængder sideindhold, til Beskyttet browsing</translation>
 <translation id="5756509061973259733">Der findes allerede en Chrome-profil med denne konto på enheden</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation>
@@ -401,14 +401,14 @@
 <translation id="8765470054473112089">Når du indtaster noget i adresselinjen eller søgefeltet, sender Chrome det, du skriver, til din standardsøgemaskine for at få bedre forslag. Dette er deaktiveret i inkognitotilstand.</translation>
 <translation id="8821043148920470810">Hvis du vil have fremtidige Google Chrome-opdateringer, skal du have Windows 10 eller nyere. Denne computer anvender Windows 7.</translation>
 <translation id="8823341990149967727">Chrome er forældet</translation>
-<translation id="8825634023950448068">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Hvis Chrome tager fejl, eller du ikke vil se visse annoncer, kan du fjerne en interesse.</translation>
+<translation id="8825634023950448068">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Hvis Chrome tager fejl, eller du ikke vil se visse annoncer, kan du fjerne en interesse.</translation>
 <translation id="8834965163890861871">Google Chrome forsøger at redigere adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation>
 <translation id="884296878221830158">Den styrer også, hvilken side der vises, når du åbner Chrome eller klikker på knappen Startside.</translation>
 <translation id="8862326446509486874">Du har ikke de nødvendige rettigheder til en installation på systemniveau. Prøv at køre installationsprogrammet igen som administrator.</translation>
 <translation id="8914504000324227558">Genstart Chrome</translation>
 <translation id="8922193594870374009">Hvis du vil sende et nummer fra <ph name="ORIGIN" /> til din Android-telefon, skal du logge ind på Chrome på begge enheder.</translation>
 <translation id="8986207147630327271">Du er ved at føje en arbejdsprofil til denne browser, og du giver kun din administrator kontrol over arbejdsprofilen.</translation>
-<translation id="8989968390305463310">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
+<translation id="8989968390305463310">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chrome automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Der er en tilgængelig Chrome-opdatering}=1{Der er en tilgængelig Chrome-opdatering}one{En Chrome-opdatering har været tilgængelig i # dag}other{En Chrome-opdatering har været tilgængelig i # dage}}</translation>
 <translation id="9053892488859122171">ChromeOS Flex-system</translation>
 <translation id="9054037008353851982">Genstart for at opdatere – dine faner åbnes igen</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 1d9eb62..4ca3e1e8 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -7896,10 +7896,6 @@
      flag_descriptions::kLauncherSystemInfoAnswerCardsName,
      flag_descriptions::kLauncherSystemInfoAnswerCardsDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(search_features::kLauncherSystemInfoAnswerCards)},
-    {"launcher-omnibox-publish-logic-log",
-     flag_descriptions::kLauncherOmniboxPublishLogicLogName,
-     flag_descriptions::kLauncherOmniboxPublishLogicLogDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(search_features::kLauncherOmniboxPublishLogicLog)},
     {"quick-gesture-show-launcher",
      flag_descriptions::kQuickActionShowBubbleLauncherName,
      flag_descriptions::kQuickActionShowBubbleLauncherDescription, kOsCrOS,
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_cache_unittest.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_cache_unittest.cc
index 25dabba..6c85900 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_cache_unittest.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_cache_unittest.cc
@@ -46,10 +46,7 @@
   auto* group = data.add_app_group();
   group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   group->add_package_id();
-  group->set_package_id(0, "phonehub:com.skype.raidar");
-  auto* app = group->add_app();
-  app->set_app_id("com.skype.raidar");
-  app->set_platform("phonehub");
+  group->set_package_id(0, "web:https://keep.google.com/?usp=installed_webapp");
 
   EXPECT_FALSE(base::DirectoryExists(temp_dir_path_));
 
@@ -85,10 +82,8 @@
     auto observed_group = data.app_group(0);
     EXPECT_EQ(observed_group.app_group_uuid(),
               "15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
-    EXPECT_EQ(observed_group.package_id(0), "phonehub:com.skype.raidar");
-    auto observed_app = data.app_group(0).app(0);
-    EXPECT_EQ(observed_app.app_id(), "com.skype.raidar");
-    EXPECT_EQ(observed_app.platform(), "phonehub");
+    EXPECT_EQ(observed_group.package_id(0),
+              "web:https://keep.google.com/?usp=installed_webapp");
   }
 }
 
@@ -97,10 +92,7 @@
   auto* group = data.add_app_group();
   group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   group->add_package_id();
-  group->set_package_id(0, "phonehub:com.skype.raidar");
-  auto* app = group->add_app();
-  app->set_app_id("com.skype.raidar");
-  app->set_platform("phonehub");
+  group->set_package_id(0, "web:https://keep.google.com/?usp=installed_webapp");
 
   EXPECT_TRUE(base::CreateDirectory(temp_dir_path_));
 
@@ -136,10 +128,8 @@
     auto observed_group = data.app_group(0);
     EXPECT_EQ(observed_group.app_group_uuid(),
               "15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
-    EXPECT_EQ(observed_group.package_id(0), "phonehub:com.skype.raidar");
-    auto observed_app = data.app_group(0).app(0);
-    EXPECT_EQ(observed_app.app_id(), "com.skype.raidar");
-    EXPECT_EQ(observed_app.platform(), "phonehub");
+    EXPECT_EQ(observed_group.package_id(0),
+              "web:https://keep.google.com/?usp=installed_webapp");
   }
 }
 
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper.cc
index 8cc7b76..54a33780 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper.cc
@@ -22,28 +22,14 @@
   proto::DeduplicateData deduplicate_data;
   for (const auto& group : response.app_group()) {
     auto* deduplicate_group = deduplicate_data.add_app_group();
+
     if (group.app_group_uuid().empty()) {
       LOG(ERROR) << "The uuid for an app group cannot be empty.";
       return absl::nullopt;
     }
+
     deduplicate_group->set_app_group_uuid(group.app_group_uuid());
 
-    for (const auto& app : group.app()) {
-      if (!app.has_platform() || app.platform().empty()) {
-        LOG(ERROR) << "The platform for an app cannot be empty.";
-        return absl::nullopt;
-      }
-
-      if (!app.has_app_id() || app.app_id().empty()) {
-        LOG(ERROR) << "The app_id for an app cannot be empty.";
-        return absl::nullopt;
-      }
-
-      auto* deduplicate_app = deduplicate_group->add_app();
-      deduplicate_app->set_platform(app.platform());
-      deduplicate_app->set_app_id(app.app_id());
-    }
-
     if (group.package_id().empty()) {
       LOG(ERROR) << "An app group must have at least 1 package id.";
       return absl::nullopt;
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper_unittest.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper_unittest.cc
index 51e2278..097e38f 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper_unittest.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_mapper_unittest.cc
@@ -22,9 +22,6 @@
   group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   group->add_package_id();
   group->set_package_id(0, "website:https://web.skype.com/");
-  auto* app = group->add_app();
-  app->set_app_id("https://web.skype.com/");
-  app->set_platform("website");
 
   absl::optional<proto::DeduplicateData> data =
       mapper_.ToDeduplicateData(response);
@@ -34,9 +31,6 @@
   EXPECT_EQ(observed_group.app_group_uuid(),
             "15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   EXPECT_EQ(observed_group.package_id(0), "website:https://web.skype.com/");
-  auto observed_app = data->app_group(0).app(0);
-  EXPECT_EQ(observed_app.app_id(), "https://web.skype.com/");
-  EXPECT_EQ(observed_app.platform(), "website");
 }
 
 TEST_F(AppDeduplicationMapperTest, TestDeduplicateResponseEmpty) {
@@ -51,18 +45,19 @@
   ASSERT_FALSE(mapper_.ToDeduplicateData(response).has_value());
 }
 
-TEST_F(AppDeduplicationMapperTest, TestDeduplicateResponseEmptyPlatform) {
+TEST_F(AppDeduplicationMapperTest, TestDeduplicateResponseEmptyAppGroupUuid) {
   proto::DeduplicateResponse response;
-  auto* app = response.add_app_group()->add_app();
-  app->set_app_id("com.skype.raidar");
+  auto* app_group = response.add_app_group();
+  app_group->add_package_id();
+  app_group->set_package_id(0, "website:https://web.skype.com/");
 
   ASSERT_FALSE(mapper_.ToDeduplicateData(response).has_value());
 }
 
 TEST_F(AppDeduplicationMapperTest, TestDeduplicateResponseEmptyAppId) {
   proto::DeduplicateResponse response;
-  auto* app = response.add_app_group()->add_app();
-  app->set_platform("phonehub");
+  auto* app_group = response.add_app_group();
+  app_group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
 
   ASSERT_FALSE(mapper_.ToDeduplicateData(response).has_value());
 }
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_server_connector_unittest.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_server_connector_unittest.cc
index 6969ac2..cbbfbf90 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_server_connector_unittest.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_server_connector_unittest.cc
@@ -72,10 +72,7 @@
   auto* group = response.add_app_group();
   group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   group->add_package_id();
-  group->set_package_id(0, "phonehub:com.skype.raider");
-  auto* app = group->add_app();
-  app->set_app_id("com.skype.raider");
-  app->set_platform("phonehub");
+  group->set_package_id(0, "website:https://web.skype.com/");
 
   url_loader_factory_.AddResponse(
       AppDeduplicationServerConnector::GetServerUrl().spec(),
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_service.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_service.cc
index 68f3aee..8698092 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_service.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_service.cc
@@ -9,15 +9,18 @@
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/functional/callback_helpers.h"
+#include "base/notreached.h"
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
 #include "chrome/browser/apps/app_deduplication_service/app_deduplication_service.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/apps/app_service/package_id.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_features.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
+#include "components/services/app_service/public/cpp/app_types.h"
 #include "components/services/app_service/public/cpp/types_util.h"
 
 namespace {
@@ -308,28 +311,23 @@
   uint32_t index = 1;
   for (auto const& group : data.app_group()) {
     DuplicateGroup duplicate_group;
-    for (auto const& app : group.app()) {
-      const std::string& app_id = app.app_id();
-      const std::string& platform = app.platform();
-      EntryId entry_id;
-
-      if (platform == "arc") {
-        entry_id = EntryId(app_id, AppType::kArc);
-      } else if (platform == "web") {
-        entry_id = EntryId(app_id, AppType::kWeb);
-      } else if (platform == "phonehub") {
-        entry_id = EntryId(app_id);
-      } else if (platform == "website") {
-        GURL entry_url = GURL(app_id);
-        if (entry_url.is_valid()) {
-          entry_id = EntryId(GURL(app_id));
-        } else {
-          continue;
-        }
-      } else {
+    for (auto const& id : group.package_id()) {
+      absl::optional<PackageId> package_id = PackageId::FromString(id);
+      if (!package_id.has_value()) {
+        // TODO(sharminzaman@): Add support for websites.
         continue;
       }
 
+      AppType source = package_id.value().app_type();
+      std::string app_id = package_id.value().identifier();
+      EntryId entry_id;
+
+      if (source == AppType::kArc || source == AppType::kWeb) {
+        entry_id = EntryId(app_id, source);
+      } else {
+        LOG(ERROR) << "Source is an unsupported type.";
+        NOTREACHED();
+      }
       entry_to_group_map_[entry_id] = index;
       // Initialize entry status.
       entry_status_[entry_id] = entry_id.entry_type == EntryType::kApp
diff --git a/chrome/browser/apps/app_deduplication_service/app_deduplication_service_unittest.cc b/chrome/browser/apps/app_deduplication_service/app_deduplication_service_unittest.cc
index bec1098..606b749a 100644
--- a/chrome/browser/apps/app_deduplication_service/app_deduplication_service_unittest.cc
+++ b/chrome/browser/apps/app_deduplication_service/app_deduplication_service_unittest.cc
@@ -453,28 +453,18 @@
   auto* skype_group = data.add_app_group();
   skype_group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   skype_group->add_package_id();
-  skype_group->set_package_id(0, "phonehub:com.skype.raider");
+  skype_group->set_package_id(0, "android:com.skype.raider");
   skype_group->add_package_id();
-  skype_group->set_package_id(1, "website:https://web.skype.com/");
-  auto* skype_app_1 = skype_group->add_app();
-  skype_app_1->set_app_id("com.skype.raider");
-  skype_app_1->set_platform("phonehub");
-  auto* skype_app_2 = skype_group->add_app();
-  skype_app_2->set_app_id("https://web.skype.com/");
-  skype_app_2->set_platform("website");
+  skype_group->set_package_id(1, "web:https://web.skype.com/");
 
   auto* duo_group = data.add_app_group();
   duo_group->set_app_group_uuid("1d460a2b-d6d5-471d-b1e6-bbfc87971ea8");
   duo_group->add_package_id();
-  duo_group->set_package_id(0, "arc:com.google.android.apps.tachyon");
+  duo_group->set_package_id(0, "android:com.google.duo");
   duo_group->add_package_id();
   duo_group->set_package_id(1, "web:https://duo.google.com/?lfhs=2");
-  auto* duo_app_1 = duo_group->add_app();
-  duo_app_1->set_app_id("com.google.android.apps.tachyon");
-  duo_app_1->set_platform("arc");
-  auto* duo_app_2 = duo_group->add_app();
-  duo_app_2->set_app_id("https://duo.google.com/?lfhs=2");
-  duo_app_2->set_platform("web");
+  duo_group->add_package_id();
+  duo_group->set_package_id(2, "website:https://duo.google.com/?lfhs=2");
 
   TestingProfile profile;
   ASSERT_TRUE(AppDeduplicationServiceFactory::
@@ -485,28 +475,31 @@
   service->DeduplicateDataToEntries(data);
 
   uint32_t skype_test_index = 1;
-  std::string skype_phonehub_app_id = "com.skype.raider";
-  auto it = service->entry_to_group_map_.find(EntryId(skype_phonehub_app_id));
+
+  std::string skype_android_app_id = "com.skype.raider";
+  auto it = service->entry_to_group_map_.find(
+      EntryId(skype_android_app_id, AppType::kArc));
   ASSERT_NE(it, service->entry_to_group_map_.end());
   EXPECT_EQ(skype_test_index, it->second);
 
-  std::string skype_website_id = "https://web.skype.com/";
-  it = service->entry_to_group_map_.find(EntryId(GURL(skype_website_id)));
+  std::string skype_web_id = "https://web.skype.com/";
+  it = service->entry_to_group_map_.find(EntryId(skype_web_id, AppType::kWeb));
   ASSERT_NE(it, service->entry_to_group_map_.end());
   EXPECT_EQ(skype_test_index, it->second);
 
   auto map_it = service->duplication_map_.find(skype_test_index);
   ASSERT_FALSE(map_it == service->duplication_map_.end());
   EXPECT_THAT(map_it->second.entries,
-              ElementsAre(Entry(EntryId(skype_phonehub_app_id)),
-                          Entry(EntryId(GURL(skype_website_id)))));
+              ElementsAre(Entry(EntryId(skype_android_app_id, AppType::kArc)),
+                          Entry(EntryId(skype_web_id, AppType::kWeb))));
 
   uint32_t duo_test_index = 2;
-  std::string duo_arc_app_id = "com.google.android.apps.tachyon";
-  it =
-      service->entry_to_group_map_.find(EntryId(duo_arc_app_id, AppType::kArc));
+
+  std::string duo_android_app_id = "com.google.duo";
+  it = service->entry_to_group_map_.find(
+      EntryId(skype_android_app_id, AppType::kArc));
   ASSERT_NE(it, service->entry_to_group_map_.end());
-  EXPECT_EQ(duo_test_index, it->second);
+  EXPECT_EQ(skype_test_index, it->second);
 
   std::string duo_web_app_id = "https://duo.google.com/?lfhs=2";
   it =
@@ -514,10 +507,14 @@
   ASSERT_NE(it, service->entry_to_group_map_.end());
   EXPECT_EQ(duo_test_index, it->second);
 
+  std::string duo_website_app_id = "https://duo.google.com/?lfhs=2";
+  it = service->entry_to_group_map_.find(EntryId(duo_website_app_id));
+  EXPECT_EQ(it, service->entry_to_group_map_.end());
+
   map_it = service->duplication_map_.find(duo_test_index);
   ASSERT_FALSE(map_it == service->duplication_map_.end());
   EXPECT_THAT(map_it->second.entries,
-              ElementsAre(Entry(EntryId(duo_arc_app_id, AppType::kArc)),
+              ElementsAre(Entry(EntryId(duo_android_app_id, AppType::kArc)),
                           Entry(EntryId(duo_web_app_id, AppType::kWeb))));
 }
 
@@ -569,10 +566,7 @@
   auto* group = data.add_app_group();
   group->set_app_group_uuid("15ca3ac3-c8cd-4a0c-a195-2ea210ea922c");
   group->add_package_id();
-  group->set_package_id(0, "phonehub:com.skype.raider");
-  auto* app = group->add_app();
-  app->set_app_id("com.skype.raider");
-  app->set_platform("phonehub");
+  group->set_package_id(0, "website:https://web.skype.com/");
 
   url_loader_factory.AddResponse(
       AppDeduplicationServerConnector::GetServerUrl().spec(),
diff --git a/chrome/browser/apps/app_deduplication_service/proto/app_deduplication.proto b/chrome/browser/apps/app_deduplication_service/proto/app_deduplication.proto
index 6133605..7946e23 100644
--- a/chrome/browser/apps/app_deduplication_service/proto/app_deduplication.proto
+++ b/chrome/browser/apps/app_deduplication_service/proto/app_deduplication.proto
@@ -14,14 +14,6 @@
 // go/app-deduplication-service-proto. Changes should be made by updating the
 // server code base and then copying the result to Chromium.
 
-message DeduplicateApplication {
-  // The unique App identifier for the given platform.
-  optional string app_id = 1;
-
-  // The platform of the Duplicated App (e.g. PhoneHub, ARC, Website).
-  optional string platform = 2;
-}
-
 message DeduplicateRequest {
   // Context information about the device making this request.
   optional ClientDeviceContext device_context = 1;
@@ -37,8 +29,6 @@
 
     // Applications which belong to the App Group.
     repeated string package_id = 2;
-
-    repeated DeduplicateApplication app = 3;
   }
 
   // The list of Application Groups corresponding to the requested applications.
diff --git a/chrome/browser/apps/app_deduplication_service/proto/deduplication_data.proto b/chrome/browser/apps/app_deduplication_service/proto/deduplication_data.proto
index 491c63cb..eb137e03 100644
--- a/chrome/browser/apps/app_deduplication_service/proto/deduplication_data.proto
+++ b/chrome/browser/apps/app_deduplication_service/proto/deduplication_data.proto
@@ -12,14 +12,6 @@
 // The DeduplicateResponse proto will be mapped to the DeduplicateData proto
 // before being saved to disk.
 
-message Application {
-  // The unique App identifier for the given platform.
-  optional string app_id = 1;
-
-  // The platform of the Duplicated App (e.g. PhoneHub, ARC, Website).
-  optional string platform = 2;
-}
-
 message DeduplicateData {
   // An Application Group representing a set of "duplicate" apps.
   message AppGroup {
@@ -27,8 +19,6 @@
 
     // Applications which belong to the App Group.
     repeated string package_id = 2;
-
-    repeated Application app = 3;
   }
 
   // The list of Application Groups corresponding to the requested applications.
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index be0c17d2..56ad90c2 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -3205,6 +3205,8 @@
     "web_applications/personalization_app/personalization_system_app_delegate.h",
     "web_applications/print_management_web_app_info.cc",
     "web_applications/print_management_web_app_info.h",
+    "web_applications/projector_app/trusted_projector_ui_config.cc",
+    "web_applications/projector_app/trusted_projector_ui_config.h",
     "web_applications/projector_app/untrusted_projector_annotator_ui_config.cc",
     "web_applications/projector_app/untrusted_projector_annotator_ui_config.h",
     "web_applications/projector_app/untrusted_projector_ui_config.cc",
@@ -3763,6 +3765,7 @@
     "//ash/webui/resources:scanning_app_resources",
     "//ash/webui/resources:shimless_rma_resources",
     "//ash/webui/resources:shortcut_customization_app_resources",
+    "//ash/webui/system_apps/public:system_web_app_config",
     "//ash/webui/system_apps/public:system_web_app_type",
     "//build:branding_buildflags",
     "//build/config/chromebox_for_meetings:buildflags",
diff --git a/chrome/browser/ash/app_list/app_list_client_impl.cc b/chrome/browser/ash/app_list/app_list_client_impl.cc
index fe192171..a0691a2 100644
--- a/chrome/browser/ash/app_list/app_list_client_impl.cc
+++ b/chrome/browser/ash/app_list/app_list_client_impl.cc
@@ -35,7 +35,6 @@
 #include "chrome/browser/ash/app_list/search/ranking/launch_data.h"
 #include "chrome/browser/ash/app_list/search/search_controller.h"
 #include "chrome/browser/ash/app_list/search/search_controller_factory.h"
-#include "chrome/browser/ash/app_list/search/search_features.h"
 #include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/crosapi/url_handler_ash.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
@@ -214,9 +213,6 @@
 
 void AppListClientImpl::StartSearch(const std::u16string& trimmed_query) {
   if (search_controller_) {
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-      LOG(ERROR) << "Launcher search start search with query " << trimmed_query;
-    }
     if (trimmed_query.empty()) {
       search_controller_->ClearSearch();
     } else {
@@ -241,9 +237,6 @@
 void AppListClientImpl::StartZeroStateSearch(base::OnceClosure on_done,
                                              base::TimeDelta timeout) {
   if (search_controller_) {
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-      LOG(ERROR) << "Launcher search start zero state search";
-    }
     search_controller_->StartZeroState(std::move(on_done), timeout);
     OnSearchStarted();
   } else {
diff --git a/chrome/browser/ash/app_list/chrome_app_list_model_updater.cc b/chrome/browser/ash/app_list/chrome_app_list_model_updater.cc
index c8cffee..19c1b28 100644
--- a/chrome/browser/ash/app_list/chrome_app_list_model_updater.cc
+++ b/chrome/browser/ash/app_list/chrome_app_list_model_updater.cc
@@ -14,7 +14,6 @@
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_controller.h"
 #include "ash/public/cpp/app_list/app_list_metrics.h"
-#include "ash/public/cpp/app_list/app_list_types.h"
 #include "ash/public/cpp/tablet_mode.h"
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
@@ -26,7 +25,6 @@
 #include "chrome/browser/ash/app_list/reorder/app_list_reorder_core.h"
 #include "chrome/browser/ash/app_list/reorder/app_list_reorder_delegate.h"
 #include "chrome/browser/ash/app_list/search/chrome_search_result.h"
-#include "chrome/browser/ash/app_list/search/search_features.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/feature_engagement/public/feature_constants.h"
@@ -339,19 +337,10 @@
   std::vector<std::unique_ptr<ash::SearchResult>> ash_results;
   std::vector<std::unique_ptr<ash::SearchResultMetadata>> result_data;
   for (auto* result : results) {
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled() &&
-        result->result_type() == ash::AppListSearchResultType::kOmnibox) {
-      LOG(ERROR) << "Launcher search publish omnibox result " << result->title()
-                 << " with score " << result->display_score();
-    }
     auto ash_result = std::make_unique<ash::SearchResult>();
     ash_result->SetMetadata(result->CloneMetadata());
     ash_results.push_back(std::move(ash_result));
   }
-  if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-    LOG(ERROR) << "Launcher search model updater publish " << ash_results.size()
-               << " results";
-  }
   search_model_.PublishResults(std::move(ash_results), categories);
 }
 
diff --git a/chrome/browser/ash/app_list/search/search_controller.cc b/chrome/browser/ash/app_list/search/search_controller.cc
index 825c7fe..df5ce68 100644
--- a/chrome/browser/ash/app_list/search/search_controller.cc
+++ b/chrome/browser/ash/app_list/search/search_controller.cc
@@ -13,7 +13,6 @@
 #include "ash/public/cpp/tablet_mode.h"
 #include "ash/shell.h"
 #include "ash/system/federated/federated_service_controller_impl.h"
-#include "base/logging.h"
 #include "base/metrics/metrics_hashes.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
@@ -27,7 +26,6 @@
 #include "chrome/browser/ash/app_list/search/common/string_util.h"
 #include "chrome/browser/ash/app_list/search/ranking/ranker_manager.h"
 #include "chrome/browser/ash/app_list/search/ranking/sorting.h"
-#include "chrome/browser/ash/app_list/search/search_features.h"
 #include "chrome/browser/ash/app_list/search/search_metrics_manager.h"
 #include "chrome/browser/ash/app_list/search/search_provider.h"
 #include "chrome/browser/ash/app_list/search/search_session_metrics_manager.h"
@@ -89,9 +87,6 @@
 
 void SearchController::OnBurnInPeriodElapsed() {
   ranker_manager_->OnBurnInPeriodElapsed();
-  if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-    LOG(ERROR) << "Launcher search burn-in period elapsed publish";
-  }
   Publish();
 }
 
@@ -150,9 +145,6 @@
     provider->StopQuery();
   }
 
-  if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-    LOG(ERROR) << "Launcher search clear search publish";
-  }
   Publish();
   ranker_manager_->Start(u"", results_, categories_);
 }
@@ -194,9 +186,6 @@
   // Zero state callbacks will get run when next batch of results gets
   // published.
   if (last_query_.empty() && !on_zero_state_done_.empty()) {
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-      LOG(ERROR) << "Launcher search zero state timeout publish";
-    }
     Publish();
   }
 }
@@ -253,9 +242,6 @@
     // We need to update the currently published results to not include the
     // just-removed result. Manually set the result as filtered and re-publish.
     result->scoring().set_filtered(true);
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-      LOG(ERROR) << "Launcher search remove publish";
-    }
     Publish();
   }
 }
@@ -295,19 +281,7 @@
   // If the burn-in period has not yet elapsed, don't call Publish here (this
   // case is covered by a call scheduled within the burn-in controller).
   if (!last_query_.empty() && is_post_burn_in) {
-    if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-      LOG(ERROR) << "Launcher search post burn-in publish from "
-                 << static_cast<int>(provider->ResultType());
-    }
     Publish();
-  } else if (search_features::isLauncherOmniboxPublishLogicLogEnabled() &&
-             !last_query_.empty()) {
-    LOG(ERROR) << "Launcher search pre burn-in from "
-               << static_cast<int>(provider->ResultType());
-  } else if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-    // We should expect no log from here.
-    LOG(ERROR) << "Launcher search empty query results from "
-               << static_cast<int>(provider->ResultType());
   }
 }
 
@@ -330,9 +304,6 @@
       returned_zero_state_blockers_ < total_zero_state_blockers_) {
     return;
   }
-  if (search_features::isLauncherOmniboxPublishLogicLogEnabled()) {
-    LOG(ERROR) << "Launcher search zero state publish";
-  }
   Publish();
 }
 
diff --git a/chrome/browser/ash/app_list/search/search_features.cc b/chrome/browser/ash/app_list/search/search_features.cc
index 4bddb4af..c55d411 100644
--- a/chrome/browser/ash/app_list/search/search_features.cc
+++ b/chrome/browser/ash/app_list/search/search_features.cc
@@ -33,10 +33,6 @@
              "LauncherSystemInfoAnswerCards",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kLauncherOmniboxPublishLogicLog,
-             "LauncherOmniboxPublishLogicLog",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 bool IsLauncherGameSearchEnabled() {
   return base::FeatureList::IsEnabled(kLauncherGameSearch) ||
          chromeos::features::IsCloudGamingDeviceEnabled();
@@ -62,8 +58,4 @@
   return base::FeatureList::IsEnabled(kLauncherSystemInfoAnswerCards);
 }
 
-bool isLauncherOmniboxPublishLogicLogEnabled() {
-  return base::FeatureList::IsEnabled(kLauncherOmniboxPublishLogicLog);
-}
-
 }  // namespace search_features
diff --git a/chrome/browser/ash/app_list/search/search_features.h b/chrome/browser/ash/app_list/search/search_features.h
index eec7ff1..1711777 100644
--- a/chrome/browser/ash/app_list/search/search_features.h
+++ b/chrome/browser/ash/app_list/search/search_features.h
@@ -27,15 +27,12 @@
 
 BASE_DECLARE_FEATURE(kLauncherSystemInfoAnswerCards);
 
-BASE_DECLARE_FEATURE(kLauncherOmniboxPublishLogicLog);
-
 bool IsLauncherGameSearchEnabled();
 bool IsLauncherKeywordExtractionScoringEnabled();
 bool IsLauncherQueryFederatedAnalyticsPHHEnabled();
 bool IsLauncherImageSearchEnabled();
 bool isLauncherFuzzyMatchForOmniboxEnabled();
 bool isLauncherSystemInfoAnswerCardsEnabled();
-bool isLauncherOmniboxPublishLogicLogEnabled();
 
 }  // namespace search_features
 
diff --git a/chrome/browser/ash/drive/drive_integration_service.cc b/chrome/browser/ash/drive/drive_integration_service.cc
index b17ec2d..e4df6f68 100644
--- a/chrome/browser/ash/drive/drive_integration_service.cc
+++ b/chrome/browser/ash/drive/drive_integration_service.cc
@@ -1675,6 +1675,17 @@
                                                            std::move(callback));
 }
 
+void DriveIntegrationService::ImmediatelyUpload(
+    const base::FilePath& path,
+    drivefs::mojom::DriveFs::ImmediatelyUploadCallback callback) {
+  if (!IsMounted() || !GetDriveFsInterface()) {
+    std::move(callback).Run(drive::FILE_ERROR_SERVICE_UNAVAILABLE);
+    return;
+  }
+
+  GetDriveFsInterface()->ImmediatelyUpload(path, std::move(callback));
+}
+
 void DriveIntegrationService::GetReadOnlyAuthenticationToken(
     GetReadOnlyAuthenticationTokenCallback callback) {
   if (!auth_service_) {
diff --git a/chrome/browser/ash/drive/drive_integration_service.h b/chrome/browser/ash/drive/drive_integration_service.h
index 46bbd6c0..40eab9f 100644
--- a/chrome/browser/ash/drive/drive_integration_service.h
+++ b/chrome/browser/ash/drive/drive_integration_service.h
@@ -308,6 +308,14 @@
 
   void ClearOfflineFiles(base::OnceCallback<void(drive::FileError)> callback);
 
+  // Tells Drive to immediately start uploading the file at |path|, which is a
+  // relative path in Drive. This avoids queuing delays for newly created files,
+  // when we are sure that there are no more subsequent operations on the file
+  // that we should wait for.
+  void ImmediatelyUpload(
+      const base::FilePath& path,
+      drivefs::mojom::DriveFs::ImmediatelyUploadCallback callback);
+
   // Called by lacros to register a bridge that this service can call into when
   // DriveFS wants to initiate a connection to an extension in lacros.
   void RegisterDriveFsNativeMessageHostBridge(
diff --git a/chrome/browser/ash/extensions/file_manager/private_api_util.cc b/chrome/browser/ash/extensions/file_manager/private_api_util.cc
index 8d278571..d18262e2 100644
--- a/chrome/browser/ash/extensions/file_manager/private_api_util.cc
+++ b/chrome/browser/ash/extensions/file_manager/private_api_util.cc
@@ -452,10 +452,9 @@
   }
 
   if (metadata->shortcut_details) {
-    // Only surface shortcut parameter if the shortcut is accessible.
     properties_->shortcut =
-        (metadata->shortcut_details->target_lookup_status ==
-         drivefs::mojom::ShortcutDetails::LookupStatus::kOk);
+        (metadata->shortcut_details->target_lookup_status !=
+         drivefs::mojom::ShortcutDetails::LookupStatus::kUnknown);
   } else {
     properties_->shortcut = false;
   }
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
index cd9b0ee5e..c4ecc53 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -1339,6 +1339,8 @@
         TestCase("toolbarCloudIconShouldNotShowWhenPrefDisabled")
             .EnableBulkPinning(),
         TestCase("toolbarCloudIconShouldShowOnStartupEvenIfSyncing")
+            .EnableBulkPinning(),
+        TestCase("toolbarCloudIconShouldShowWhenPausedState")
             .EnableBulkPinning()));
 
 WRAPPED_INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.cc b/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.cc
new file mode 100644
index 0000000..683f96e
--- /dev/null
+++ b/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.cc
@@ -0,0 +1,39 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.h"
+
+#include "ash/webui/projector_app/public/cpp/projector_app_constants.h"
+#include "ash/webui/projector_app/trusted_projector_ui.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/ash/projector/projector_utils.h"
+
+namespace ash {
+
+namespace {
+
+std::unique_ptr<content::WebUIController> BindCreateWebUIControllerFunc(
+    content::WebUI* web_ui,
+    const GURL& url) {
+  return std::make_unique<ash::TrustedProjectorUI>(
+      web_ui, url, Profile::FromWebUI(web_ui)->GetPrefs());
+}
+
+}  // namespace
+
+TrustedProjectorUIConfig::TrustedProjectorUIConfig()
+    : SystemWebAppUIConfig(
+          ash::kChromeUIProjectorAppHost,
+          SystemWebAppType::PROJECTOR,
+          base::BindRepeating(&BindCreateWebUIControllerFunc)) {}
+
+bool TrustedProjectorUIConfig::IsWebUIEnabled(
+    content::BrowserContext* browser_context) {
+  if (!SystemWebAppUIConfig::IsWebUIEnabled(browser_context)) {
+    return false;
+  }
+  return IsProjectorAppEnabled(Profile::FromBrowserContext(browser_context));
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.h b/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.h
new file mode 100644
index 0000000..59b70d6
--- /dev/null
+++ b/chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.h
@@ -0,0 +1,35 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_WEB_APPLICATIONS_PROJECTOR_APP_TRUSTED_PROJECTOR_UI_CONFIG_H_
+#define CHROME_BROWSER_ASH_WEB_APPLICATIONS_PROJECTOR_APP_TRUSTED_PROJECTOR_UI_CONFIG_H_
+
+#include "ash/webui/system_apps/public/system_web_app_ui_config.h"
+#include "content/public/common/url_constants.h"
+
+namespace content {
+class BrowserContext;
+}  // namespace content
+
+namespace ash {
+
+class TrustedProjectorUI;
+
+// If possible, prefer defining WebUIConfigs under //ash alongside its
+// corresponding WebUIController.
+// TrustedProjectorUIConfig needs to live under //chrome as Profile is needed by
+// both `IsWebUIEnabled` and `CreateWebUIController`.
+//
+// The WebUIConfig of the Projector player app WebUI.
+class TrustedProjectorUIConfig
+    : public SystemWebAppUIConfig<TrustedProjectorUI> {
+ public:
+  TrustedProjectorUIConfig();
+
+  bool IsWebUIEnabled(content::BrowserContext* browser_context) override;
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PROJECTOR_APP_TRUSTED_PROJECTOR_UI_CONFIG_H_
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index e3aaea7..fe7dbc59 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -4171,9 +4171,14 @@
     web_prefs->immersive_mode_enabled = vr::VrTabHelper::IsInVr(web_contents);
   }
 
-  web_prefs->lazy_load_enabled =
-      !web_contents || !web_contents->GetDelegate() ||
-      web_contents->GetDelegate()->ShouldAllowLazyLoad();
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kDisableLazyLoading)) {
+    web_prefs->lazy_load_enabled = false;
+  } else {
+    web_prefs->lazy_load_enabled =
+        !web_contents || !web_contents->GetDelegate() ||
+        web_contents->GetDelegate()->ShouldAllowLazyLoad();
+  }
 
   if (base::FeatureList::IsEnabled(
           features::kNetworkQualityEstimatorWebHoldback)) {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index c9aed05f..e825968 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -4852,11 +4852,6 @@
     "expiry_milestone": 120
   },
   {
-    "name": "launcher-omnibox-publish-logic-log",
-    "owners": ["chenjih", "tby"],
-    "expiry_milestone": 114
-  },
-  {
     "name": "launcher-system-info-answer-cards",
     "owners": ["laurencom", "wrong", "amandadeacon"],
     "expiry_milestone": 120
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index bd80edc3..6569461 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -6461,12 +6461,6 @@
     "Enables System info answer cards in the launcher to provide system "
     "performance metrics";
 
-const char kLauncherOmniboxPublishLogicLogName[] =
-    "Omnibox publish logic log in launcher";
-const char kLauncherOmniboxPublishLogicLogDescription[] =
-    "Enables omnibox provider publish logic logs so that we can debug the "
-    "reason why some results disappars";
-
 const char kMacAddressRandomizationName[] = "MAC address randomization";
 const char kMacAddressRandomizationDescription[] =
     "Feature to allow MAC address randomization to be enabled for WiFi "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index c65ddd9..2ae8f46 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -3716,9 +3716,6 @@
 extern const char kLauncherSystemInfoAnswerCardsName[];
 extern const char kLauncherSystemInfoAnswerCardsDescription[];
 
-extern const char kLauncherOmniboxPublishLogicLogName[];
-extern const char kLauncherOmniboxPublishLogicLogDescription[];
-
 extern const char kMacAddressRandomizationName[];
 extern const char kMacAddressRandomizationDescription[];
 
diff --git a/chrome/browser/headless/headless_mode_util.cc b/chrome/browser/headless/headless_mode_util.cc
index 9cb7488..81297dc8 100644
--- a/chrome/browser/headless/headless_mode_util.cc
+++ b/chrome/browser/headless/headless_mode_util.cc
@@ -72,6 +72,12 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         ::switches::kNoErrorDialogs);
   }
+
+  // Disable lazy loading in the new headless mode, similar to the behavior of
+  // the old headless mode.
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kDisableLazyLoading);
+
 #if BUILDFLAG(IS_LINUX)
   // Headless mode on Linux relies on ozone/headless platform.
   base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
diff --git a/chrome/browser/recent_tabs/internal/android/java/strings/translations/android_restore_tabs_strings_vi.xtb b/chrome/browser/recent_tabs/internal/android/java/strings/translations/android_restore_tabs_strings_vi.xtb
index 8a42ab1..a438286 100644
--- a/chrome/browser/recent_tabs/internal/android/java/strings/translations/android_restore_tabs_strings_vi.xtb
+++ b/chrome/browser/recent_tabs/internal/android/java/strings/translations/android_restore_tabs_strings_vi.xtb
@@ -1,4 +1,14 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="vi">
+<translation id="1356944128023012143">Danh sách các thiết bị đã đồng bộ hoá và các thẻ đã chọn mà bạn muốn khôi phục từ các thiết bị đó trong quy trình khôi phục mới đã đóng.</translation>
+<translation id="1816430105422765050">Chuyển sang các thiết bị đã đồng bộ hoá khác ở mục trong trình đơn này.</translation>
+<translation id="3347725959865138210">Chọn thiết bị có các thẻ mà bạn muốn khôi phục</translation>
+<translation id="3575801299326994724">Xem lại các thẻ đã chọn mà bạn muốn khôi phục từ thiết bị bạn đang chọn.</translation>
+<translation id="3665329097964129553">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> thẻ, lần cập nhật gần đây nhất: <ph name="TIME_SINCE_MODIFIED" />}other{<ph name="TABS_COUNT_MANY" /> thẻ, lần cập nhật gần đây nhất: <ph name="TIME_SINCE_MODIFIED" />}}</translation>
+<translation id="3983305234037158273">Bạn có thể chạm để thay đổi các thiết bị đã đồng bộ hoá cho mục đích khôi phục thẻ. Bạn có thể chạm để xem lại hoặc khôi phục các thẻ đã chọn trên thiết bị hiện tại. Bàn phím đang ẩn.</translation>
+<translation id="4386361164755260473">{TABS_COUNT,plural, =1{Mở <ph name="TABS_COUNT_ONE" /> thẻ}other{Mở <ph name="TABS_COUNT_MANY" /> thẻ}}</translation>
+<translation id="4811934403802581334">Tất cả các thẻ đã chọn từ thiết bị bạn đang chọn sẽ được khôi phục.</translation>
+<translation id="5336031759968328813">Xem lại tất cả các thẻ</translation>
+<translation id="8725404154479306799">Xem tiếp các thẻ mà bạn đang xem dở trên thiết bị cũ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/BUILD.gn b/chrome/browser/resources/chromeos/login/components/BUILD.gn
index 52fa610e..1c9183262 100644
--- a/chrome/browser/resources/chromeos/login/components/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/components/BUILD.gn
@@ -200,8 +200,9 @@
     "behaviors:oobe_i18n_behavior",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
-  externs_list =
-      [ "//ui/webui/resources/cr_elements/cr_lottie/cr_lottie_externs.js" ]
+  externs_list = [
+    "//third_party/cros-components/externs/cros_lottie_renderer_externs.js",
+  ]
   extra_deps = [ ":web_components" ]
 }
 
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.html b/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.html
index 0963501..8727398 100644
--- a/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.html
+++ b/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.html
@@ -39,8 +39,8 @@
   }
 </style>
 <div id="container">
-  <cr-lottie id="animation" animation-url="[[animationUrl]]">
-  </cr-lottie>
+  <cros-lottie-renderer id="animation" asset-url="[[animationUrl]]">
+  </cros-lottie-renderer>
   <cr-icon-button id="playPauseIcon" iron-icon="[[getIcon_(playing)]]"
       aria-label$="[[getAria_(locale, playing)]]"></cr-icon-button>
 </div>
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.js b/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.js
index 0677ba4e..7c207bb 100644
--- a/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.js
+++ b/chrome/browser/resources/chromeos/login/components/oobe_cr_lottie.js
@@ -7,7 +7,7 @@
  */
 
 import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import '//resources/cr_elements/cr_lottie/cr_lottie.js';
+import '//resources/cros_components/lottie_renderer/lottie-renderer.js';
 import './oobe_icons.html.js';
 
 import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -25,7 +25,7 @@
 
 /**
  * @typedef {{
- *   animation:  CrLottieElement,
+ *   animation: LottieRenderer,
  * }}
  */
 OobeCrLottieBase.$;
@@ -71,8 +71,14 @@
   }
 
   onPlayingChanged_() {
-    if (this.$) {
-      this.$.animation.setPlay(this.playing);
+    if (!this.$) {
+      return;
+    }
+
+    if (this.playing) {
+      this.$.animation.play();
+    } else {
+      this.$.animation.pause();
     }
   }
 
diff --git a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
index c896f86..404e8fe 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
@@ -495,7 +495,7 @@
 
   externs_list = [
     "$externs_path/webview_tag.js",
-    "//ui/webui/resources/cr_elements/cr_lottie/cr_lottie_externs.js",
+    "//third_party/cros-components/externs/cros_lottie_renderer_externs.js",
     "//ui/webui/resources/cr_elements/cr_toggle/cr_toggle_externs.js",
   ]
 
@@ -646,7 +646,7 @@
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
   externs_list = [
-    "//ui/webui/resources/cr_elements/cr_lottie/cr_lottie_externs.js",
+    "//third_party/cros-components/externs/cros_lottie_renderer_externs.js",
     "//ui/webui/resources/cr_elements/cr_toggle/cr_toggle_externs.js",
   ]
   extra_deps = [ ":web_components" ]
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 a8bcecde..c2109f8 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
@@ -1368,7 +1368,7 @@
 <translation id="8209050860603202033">فتح الصورة</translation>
 <translation id="8216351761227087153">مشاهدة</translation>
 <translation id="8218622182176210845">إدارة حسابك</translation>
-<translation id="8221401890884589479">‏يمكنك حظر المواقع الإلكترونية التي لا تريدها أن تقدِّم اقتراحات. يحذف Chrome أيضًا تلقائيًا المواقع الإلكترونية التي يمر أكثر من 30 يومًا على إضافتها إلى قائمة "المواقع الإلكترونية التي تقترح الإعلانات". <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
+<translation id="8221401890884589479">‏يمكنك حظر المواقع الإلكترونية التي لا تريدها. بالإضافة إلى ذلك، يحذف Chrome تلقائيًا المواقع الإلكترونية التي يمر أكثر من 30 يومًا على إضافتها إلى قائمة "المواقع الإلكترونية التي تقترح الإعلانات". <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="8223642481677794647">قائمة بطاقات الخلاصة</translation>
 <translation id="8236097722223016103">الإضافة إلى الإشارات المرجعية</translation>
 <translation id="8250920743982581267">المستندات</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 35480ab..d2edf582 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
@@ -120,7 +120,7 @@
 <translation id="1592864538817356322">Standardbeskyttelse:</translation>
 <translation id="1594635596540195766"><ph name="SUGGESTIONS_COUNT" /> forslag på listen nedenfor.</translation>
 <translation id="1598163867407640634">Brug <ph name="SITE_ETLD_PLUS_ONE" /> hos <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /></translation>
-<translation id="1627304841979541023"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
+<translation id="1627304841979541023"><ph name="BEGIN_BOLD" />Sådan kan du administrere dine data:<ph name="END_BOLD" /> Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dit privatliv. Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation>
 <translation id="1628019612362412531">{NUM_SELECTED,plural, =1{Fjern 1 valgt element}one{Fjern # valgt element}other{Fjern # valgte elementer}}</translation>
 <translation id="1633659023549081553">Find nyt indhold via Chromes startside</translation>
 <translation id="1641113438599504367">Beskyttet browsing</translation>
@@ -448,7 +448,7 @@
 <translation id="3435738964857648380">Sikkerhed</translation>
 <translation id="3443221991560634068">Genindlæs den aktuelle side</translation>
 <translation id="3444179773590444986">Vil du dele feedback om Mørkt tema på websites?</translation>
-<translation id="3452832259067974318">Af hensyn til beskyttelsen af dine personlige oplysninger udfylder Chrome ikke din adgangskode automatisk i dette felt.</translation>
+<translation id="3452832259067974318">Af hensyn til privatlivsbeskyttelsen udfylder Chrome ikke din adgangskode automatisk i dette felt.</translation>
 <translation id="3474624961160222204">Fortsæt som <ph name="NAME" /></translation>
 <translation id="3478363558367712427">Du kan vælge din søgemaskine</translation>
 <translation id="3479552764303398839">Ikke nu</translation>
@@ -827,7 +827,7 @@
 <translation id="5514904542973294328">Deaktiveret af administratoren af denne enhed</translation>
 <translation id="5515439363601853141">Lås op for at se din adgangskode</translation>
 <translation id="5517095782334947753">Du har bogmærker, historik, adgangskoder og andre indstillinger fra <ph name="FROM_ACCOUNT" />.</translation>
-<translation id="5524761631371622910">Når prøver er aktiveret, og hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome dine interesser en gang om måneden.</translation>
+<translation id="5524761631371622910">Når prøver er aktiveret, og hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen Chrome dine interesser en gang om måneden.</translation>
 <translation id="5524843473235508879">Omdirigeringen blev blokeret.</translation>
 <translation id="5548606607480005320">Sikkerhedstjek</translation>
 <translation id="5555525474779371165">Vælg din beskyttelse i Beskyttet browsing</translation>
@@ -861,7 +861,7 @@
 <translation id="570347048394355941">Skift til fanen</translation>
 <translation id="572328651809341494">Seneste faner</translation>
 <translation id="5726692708398506830">Gør alting på siden større</translation>
-<translation id="5727531838415286053">Hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
+<translation id="5727531838415286053">Hvis Chrome har placeret dig tilfældigt i en aktiv prøve, vil din browserhistorik påvirke de annoncer, du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chrome dine interesser en gang om måneden. Interesserne opdateres, medmindre du fjerner dem.</translation>
 <translation id="5748802427693696783">Skiftet til standardfaner</translation>
 <translation id="5749068826913805084">Chrome skal have lageradgang for at kunne downloade filer.</translation>
 <translation id="5749237766298580851">Fra <ph name="SEPARATOR" /> Anbefales ikke</translation>
@@ -1494,7 +1494,7 @@
 <translation id="8856931513242997049">Flow for notifikationstilladelse er lukket</translation>
 <translation id="8873817150012960745">Tryk her for at komme i gang</translation>
 <translation id="8881973373982641723">Rydder historikken, herunder fra søgefeltet.</translation>
-<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />Sådan administrerer du dine data:<ph name="END_BOLD" /> Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dine personlige oplysninger. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
+<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />Sådan administrerer du dine data:<ph name="END_BOLD" /> Vi sletter automatisk websites, der er ældre end 4 uger, fra listen for at beskytte dit privatliv. Et website, du besøger igen, kan blive vist på listen igen. Du kan også fjerne et website, hvis du ikke vil have, at websitet nogensinde skal definere interesser for dig igen.</translation>
 <translation id="8898822736010347272">Sender webadresser på visse sider, du besøger, begrænsede systemoplysninger og indhold fra visse sider til Google med henblik på at opdage nye trusler og beskytte brugerne på nettet.</translation>
 <translation id="8909135823018751308">Del…</translation>
 <translation id="8912362522468806198">Google-konto</translation>
@@ -1514,7 +1514,7 @@
 <translation id="8972098258593396643">Vil du downloade til standardmappen?</translation>
 <translation id="8987641763863173640">Administrer indstillinger for forhåndsvisning af video</translation>
 <translation id="8987736167266086032">Fortsæt, hvor du slap</translation>
-<translation id="8989968390305463310">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til beskyttelsen af dine personlige oplysninger sletter Chrome automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
+<translation id="8989968390305463310">Din browserhistorik påvirker de annoncer, som du ser, og de interesser, som er estimeret nedenfor. Af hensyn til privatlivsbeskyttelsen sletter Chrome automatisk dine interesser en gang om måneden. Interesserne kan blive opdateret, medmindre du fjerner dem.</translation>
 <translation id="8993760627012879038">Åbn en ny fane i inkognitotilstand</translation>
 <translation id="8996847606757455498">Vælg en anden udbyder</translation>
 <translation id="8998289560386111590">Ikke tilgængelig på din enhed</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 b2cacc3..310c6dc 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
@@ -285,6 +285,7 @@
 <translation id="2587052924345400782">ਨਵਾਂ ਵਰਜਨ ਉਪਲਬਧ ਹੈ</translation>
 <translation id="2593272815202181319">ਮੋਨੋਸਪੇਸ</translation>
 <translation id="2603212228005142861">ਆਪਣੀਆਂ ਤਰਜੀਹਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
+<translation id="260403163289591229">ਅਨੁਸਰਣ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
 <translation id="2604446170045642109">ਤੁਸੀਂ ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਸਾਈਟਾਂ ਲਈ ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="2612676031748830579">ਕਾਰਡ ਨੰਬਰ</translation>
 <translation id="2625189173221582860">ਪਾਸਵਰਡ ਕਾਪੀ ਕੀਤਾ ਗਿਆ</translation>
@@ -584,6 +585,7 @@
 <translation id="4198423547019359126">ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਕੋਈ ਟਿਕਾਣਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation>
 <translation id="4202218894997543208">ਤੁਹਾਡੇ ਵੱਲੋਂ ਬਲਾਕ ਕੀਤੇ ਗਏ ਵਿਸ਼ੇ</translation>
 <translation id="4214315110991671325">ਜੇ ਤੁਸੀਂ ਕੁਕੀਜ਼ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹੋ, ਤਾਂ Chrome ਉਨ੍ਹਾਂ ਨੂੰ ਪ੍ਰੀਲੋਡ ਕਰਨ ਲਈ ਵਰਤ ਸਕਦਾ ਹੈ।</translation>
+<translation id="4225725533026049334">ਅਨੁਸਰਣ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
 <translation id="4225895483398857530">ਟੂਲਬਾਰ ਸ਼ਾਰਟਕੱਟ</translation>
 <translation id="4242533952199664413">ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation>
 <translation id="4248098802131000011">ਆਪਣੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਡਾਟਾ ਉਲੰਘਣਾਵਾਂ ਅਤੇ ਹੋਰ ਸੁਰੱਖਿਆ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਰੱਖੋ</translation>
@@ -922,6 +924,7 @@
 <translation id="6005538289190791541">ਸੁਝਾਇਆ ਗਿਆ ਪਾਸਵਰਡ</translation>
 <translation id="6011308810877101166">ਖੋਜ ਸੁਝਾਵਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ</translation>
 <translation id="6026538407078977628">ਪੂਰੀ-ਸਕ੍ਰੀਨ 'ਤੇ ਵਿਸਤਾਰ ਕਰੋ</translation>
+<translation id="6030719887161080597">ਵਿਗਿਆਪਨ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਮਾਪਣ ਲਈ ਸਾਈਟ ਵੱਲੋਂ ਵਰਤੀ ਗਈ ਜਾਣਕਾਰੀ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation>
 <translation id="6039379616847168523">ਅਗਲੀ ਟੈਬ 'ਤੇ ਜਾਓ</translation>
 <translation id="6040143037577758943">ਬੰਦ ਕਰੋ</translation>
 <translation id="604124094241169006">ਆਟੋਮੈਟਿਕ</translation>
diff --git a/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_controller.cc b/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_controller.cc
index f7e88ad..39ff12ce 100644
--- a/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_controller.cc
+++ b/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_controller.cc
@@ -592,7 +592,6 @@
     window->SetProperty(chromeos::kEscHoldToExitFullscreen, true);
   } else if (borealis::BorealisWindowManager::IsBorealisWindow(window)) {
     window->SetProperty(chromeos::kUseOverviewToExitFullscreen, true);
-    window->SetProperty(chromeos::kNoExitFullscreenOnLock, true);
     window->SetProperty(chromeos::kUseOverviewToExitPointerLock, true);
   } else if (crostini::IsCrostiniWindow(window)) {
     window->SetProperty(chromeos::kUseOverviewToExitFullscreen, true);
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
index e0c29588..45647bb 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
@@ -240,6 +240,11 @@
 
 void DriveUploadHandler::OnUnmounted() {}
 
+void DriveUploadHandler::ImmediatelyUploadDone(drive::FileError error) {
+  LOG_IF(ERROR, error != drive::FileError::FILE_ERROR_OK)
+      << "ImmediatelyUpload failed with status: " << error;
+}
+
 void DriveUploadHandler::OnSyncingStatusUpdate(
     const drivefs::mojom::SyncingStatus& syncing_status) {
   for (const auto& item : syncing_status.item_events) {
@@ -247,8 +252,16 @@
       continue;
     }
     switch (item->state) {
-      case drivefs::mojom::ItemEvent::State::kQueued:
+      case drivefs::mojom::ItemEvent::State::kQueued: {
+        // Tell Drive to upload the file now. If successful, we will receive a
+        // kInProgress or kCompleted event sooner. If this fails, we ignore it.
+        // The file will get uploaded eventually.
+        drive_integration_service_->ImmediatelyUpload(
+            observed_relative_drive_path_,
+            base::BindOnce(&DriveUploadHandler::ImmediatelyUploadDone,
+                           weak_ptr_factory_.GetWeakPtr()));
         return;
+      }
       case drivefs::mojom::ItemEvent::State::kInProgress:
         if (item->bytes_transferred > 0) {
           sync_progress_ =
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.h b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.h
index cb499a91..6b35862 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.h
+++ b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.h
@@ -60,6 +60,9 @@
   // Ends upload and runs Upload callback.
   void OnEndUpload(GURL hosted_url, std::string error_message = "");
 
+  // Callback for when ImmediatelyUpload() is called on DriveFS.
+  void ImmediatelyUploadDone(drive::FileError error);
+
   // IOTaskController::Observer:
   void OnIOTaskStatus(
       const ::file_manager::io_task::ProgressStatus& status) override;
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler_browsertest.cc b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler_browsertest.cc
index 135df8135..33de5bb3 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/files/file_util.h"
 #include "base/path_service.h"
+#include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/browser/ash/drive/drive_integration_service.h"
@@ -24,10 +25,15 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "storage/browser/file_system/external_mount_points.h"
 #include "storage/browser/file_system/file_system_url.h"
+#include "testing/gmock/include/gmock/gmock.h"
 
 using storage::FileSystemURL;
 
 namespace ash::cloud_upload {
+
+using ::base::test::RunOnceCallback;
+using testing::_;
+
 namespace {
 
 // Returns full test file path to the given |file_name|.
@@ -168,7 +174,7 @@
   const base::FilePath source_file_path() { return source_file_path_; }
 
   mojo::Remote<drivefs::mojom::DriveFsDelegate>& drivefs_delegate() {
-    return fake_drivefs_helpers_[profile()]->fake_drivefs().delegate();
+    return fake_drivefs().delegate();
   }
 
   base::FilePath observed_relative_drive_path() {
@@ -182,6 +188,10 @@
   }
 
  protected:
+  drivefs::FakeDriveFs& fake_drivefs() {
+    return fake_drivefs_helpers_[profile()]->fake_drivefs();
+  }
+
   base::FilePath my_files_dir_;
   base::FilePath read_only_dir_;
   base::FilePath drive_mount_point_;
@@ -202,7 +212,7 @@
   // signals to the DriveFs delegate.
   void SimulateDriveUploadEvents() {
     // Set file metadata for `drivefs::mojom::DriveFs::GetMetadata`.
-    fake_drivefs_helpers_[profile()]->fake_drivefs().SetMetadata(
+    fake_drivefs().SetMetadata(
         observed_relative_drive_path(),
         "application/"
         "vnd.openxmlformats-officedocument.wordprocessingml.document",
@@ -217,6 +227,14 @@
         drivefs::mojom::SyncingStatus::New();
     status->item_events.emplace_back(
         absl::in_place, 12, 34, observed_relative_drive_path().value(),
+        drivefs::mojom::ItemEvent::State::kQueued, 123, 456,
+        drivefs::mojom::ItemEventReason::kTransfer);
+    drivefs_delegate()->OnSyncingStatusUpdate(status.Clone());
+    drivefs_delegate().FlushForTesting();
+
+    status = drivefs::mojom::SyncingStatus::New();
+    status->item_events.emplace_back(
+        absl::in_place, 12, 34, observed_relative_drive_path().value(),
         drivefs::mojom::ItemEvent::State::kCompleted, 123, 456,
         drivefs::mojom::ItemEventReason::kTransfer);
     drivefs_delegate()->OnSyncingStatusUpdate(status.Clone());
@@ -267,6 +285,9 @@
     EXPECT_FALSE(base::PathExists(drive_root_dir_.AppendASCII(test_file_name)));
   }
 
+  EXPECT_CALL(fake_drivefs(), ImmediatelyUpload(_, _))
+      .WillOnce(RunOnceCallback<1>(drive::FileError::FILE_ERROR_OK));
+
   InitiateUpload();
   WaitForUploadComplete();
 
@@ -297,6 +318,9 @@
     EXPECT_FALSE(base::PathExists(drive_root_dir_.AppendASCII(test_file_name)));
   }
 
+  EXPECT_CALL(fake_drivefs(), ImmediatelyUpload(_, _))
+      .WillOnce(RunOnceCallback<1>(drive::FileError::FILE_ERROR_OK));
+
   InitiateUpload();
   WaitForUploadComplete();
 
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index a4665cf1..1ebca797 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -211,8 +211,6 @@
 #include "ash/webui/personalization_app/personalization_app_url_constants.h"
 #include "ash/webui/print_management/print_management_ui.h"
 #include "ash/webui/print_management/url_constants.h"
-#include "ash/webui/projector_app/public/cpp/projector_app_constants.h"  // nogncheck
-#include "ash/webui/projector_app/trusted_projector_ui.h"
 #include "ash/webui/system_extensions_internals_ui/system_extensions_internals_ui.h"
 #include "ash/webui/system_extensions_internals_ui/url_constants.h"
 #include "base/system/sys_info.h"
@@ -238,7 +236,6 @@
 #include "chrome/browser/ash/web_applications/personalization_app/personalization_app_utils.h"
 #include "chrome/browser/feedback/feedback_dialog_utils.h"
 #include "chrome/browser/nearby_sharing/nearby_sharing_service_factory.h"
-#include "chrome/browser/ui/ash/projector/projector_utils.h"
 #include "chrome/browser/ui/webui/ash/account_manager/account_manager_error_ui.h"
 #include "chrome/browser/ui/webui/ash/account_manager/account_migration_welcome_ui.h"
 #include "chrome/browser/ui/webui/ash/add_supervision/add_supervision_ui.h"
@@ -479,12 +476,6 @@
 }
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-template <>
-WebUIController* NewWebUI<ash::TrustedProjectorUI>(WebUI* web_ui,
-                                                   const GURL& url) {
-  return new ash::TrustedProjectorUI(web_ui, url,
-                                     Profile::FromWebUI(web_ui)->GetPrefs());
-}
 
 void BindPrintManagement(
     Profile* profile,
@@ -891,10 +882,6 @@
     return &NewWebUI<ash::printing::printing_manager::PrintManagementUI>;
   if (url.host_piece() == ash::kChromeUIMediaAppHost)
     return &NewComponentUI<ash::MediaAppUI, ChromeMediaAppUIDelegate>;
-  if (url.host_piece() == ash::kChromeUIProjectorAppHost &&
-      IsProjectorAppEnabled(profile)) {
-    return &NewWebUI<ash::TrustedProjectorUI>;
-  }
   if (url.host_piece() == ash::eche_app::kChromeUIEcheAppHost &&
       base::FeatureList::IsEnabled(ash::features::kEcheSWA)) {
     return &NewWebUI<ash::eche_app::EcheAppUI>;
diff --git a/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc b/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
index c28f8cf0..f2bb2165 100644
--- a/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
+++ b/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
@@ -39,6 +39,7 @@
 #include "chrome/browser/ash/shimless_rma/chrome_shimless_rma_delegate.h"
 #include "chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.h"
 #include "chrome/browser/ash/web_applications/files_internals_ui_delegate.h"
+#include "chrome/browser/ash/web_applications/projector_app/trusted_projector_ui_config.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.h"
 #include "chrome/browser/ui/chrome_select_file_policy.h"
@@ -265,6 +266,7 @@
   map.AddWebUIConfig(std::make_unique<ash::SysInternalsUIConfig>());
   map.AddWebUIConfig(
       std::make_unique<ash::SystemExtensionsInternalsUIConfig>());
+  map.AddWebUIConfig(std::make_unique<ash::TrustedProjectorUIConfig>());
   map.AddWebUIConfig(
       std::make_unique<ash::UrgentPasswordExpiryNotificationUIConfig>());
   map.AddWebUIConfig(std::make_unique<ash::VcTrayTesterUIConfig>());
diff --git a/chrome/build/lacros64.pgo.txt b/chrome/build/lacros64.pgo.txt
index 1e96e4d..4773d96 100644
--- a/chrome/build/lacros64.pgo.txt
+++ b/chrome/build/lacros64.pgo.txt
@@ -1 +1 @@
-chrome-chromeos-amd64-generic-main-1683417038-bb6c9e9da40c3bf24a9663c48e7e76253e2d15cb.profdata
+chrome-chromeos-amd64-generic-main-1683501802-a88d8743fb7296041211ecfc28fb2395d6c2badf.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index c4a06de..afc036fe 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1683417038-4234ad3b06f4ee14dda2b4529e3b255ff39ee92c.profdata
+chrome-linux-main-1683501802-be192477e10a0647affa28385c60734743cf52db.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index ea46c8d..00242a1f 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1683424201-f6a7b9909517f1d97cee5b1e71055ee578d4b6d8.profdata
+chrome-mac-arm-main-1683511123-c4d81425839a6855a6090f20aa8a9aa5283375bf.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 4caa2d02..e1acfba 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1683417038-db32b2528db42f9830f404de48928edf6297671b.profdata
+chrome-mac-main-1683501802-503b8a649a228057b7da13a10b085ed45c7034eb.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index c29b423..3005723 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1683417038-668549183721b8859e6c7ea6f88bd379e5db8f2a.profdata
+chrome-win32-main-1683501802-6197da999add0a74b3b7a9a509baae334bd74d7e.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 7f65fb4..89c4742 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1683417038-3b449924bafaac234f3e91f07f8afee4543f83ab.profdata
+chrome-win64-main-1683501802-48f4035be89d5fc7a3e319fd3de776fa7ef4b327.profdata
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 3b40984..39d191d5 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -197,6 +197,9 @@
 // Disable extensions except those specified in a comma-separated list.
 const char kDisableExtensionsExcept[] = "disable-extensions-except";
 
+// Disables lazy loading of images and frames.
+const char kDisableLazyLoading[] = "disable-lazy-loading";
+
 // Disables print preview (For testing, and for users who don't like us. :[ )
 const char kDisablePrintPreview[] = "disable-print-preview";
 
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index f0f55d5..c777bf7a 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -80,6 +80,7 @@
 extern const char kDisableDomainReliability[];
 extern const char kDisableExtensions[];
 extern const char kDisableExtensionsExcept[];
+extern const char kDisableLazyLoading[];
 extern const char kDisablePrintPreview[];
 extern const char kDisablePromptOnRepost[];
 extern const char kDisableStackProfiler[];
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index b044c391..ecca23e5 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-15453.0.0
\ No newline at end of file
+15455.0.0
\ No newline at end of file
diff --git a/chromeos/ash/components/drivefs/fake_drivefs.h b/chromeos/ash/components/drivefs/fake_drivefs.h
index d55fa873..70d39d84 100644
--- a/chromeos/ash/components/drivefs/fake_drivefs.h
+++ b/chromeos/ash/components/drivefs/fake_drivefs.h
@@ -93,6 +93,12 @@
       (drivefs::mojom::DriveFs::GetOfflineFilesSpaceUsageCallback callback),
       (override));
 
+  MOCK_METHOD(void,
+              ImmediatelyUpload,
+              (const base::FilePath& path,
+               drivefs::mojom::DriveFs::ImmediatelyUploadCallback callback),
+              (override));
+
   const base::FilePath& mount_path() { return mount_path_; }
 
   absl::optional<bool> IsItemPinned(const std::string& path);
diff --git a/chromeos/ash/components/drivefs/mojom/drivefs.mojom b/chromeos/ash/components/drivefs/mojom/drivefs.mojom
index e548365a..9cb1ca7 100644
--- a/chromeos/ash/components/drivefs/mojom/drivefs.mojom
+++ b/chromeos/ash/components/drivefs/mojom/drivefs.mojom
@@ -147,6 +147,9 @@
   // Unpins all currently pinned items and force evicts them from the cache.
   // NOTE: Force eviction does not work for hosted documents.
   ClearOfflineFiles() => (FileError error);
+
+  // Uploads a file by skipping any remaining queue time, if possible.
+  ImmediatelyUpload(mojo_base.mojom.FilePath path) => (FileError error);
 };
 
 // Implemented by Chrome, used from DriveFS.
diff --git a/chromeos/crosapi/mojom/clipboard_history.mojom b/chromeos/crosapi/mojom/clipboard_history.mojom
index 3a9abff..b046f10 100644
--- a/chromeos/crosapi/mojom/clipboard_history.mojom
+++ b/chromeos/crosapi/mojom/clipboard_history.mojom
@@ -2,11 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Next MinVersion: 3
-
 module crosapi.mojom;
 
 import "mojo/public/mojom/base/string16.mojom";
+import "mojo/public/mojom/base/unguessable_token.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "ui/base/mojom/ui_base_types.mojom";
 
@@ -14,6 +13,7 @@
 // written to logs. New enum values can be added, but existing enums must
 // never be renumbered, deleted, or reused. If adding an enum, add it at the
 // bottom.
+// Next MinVersion: 3
 [Stable, Extensible]
 enum ClipboardHistoryControllerShowSource {
   // Shown by the accelerator(search + v).
@@ -44,22 +44,30 @@
   kFile = 3,
 };
 
+// Deprecated. Use `ClipboardHistoryItemDescriptor` instead.
+[RenamedFrom="crosapi.mojom.ClipboardHistoryItemDescriptor"]
+struct DeprecatedClipboardHistoryItemDescriptor {
+  mojo_base.mojom.String16 display_text;
+  ClipboardHistoryDisplayFormat display_format;
+  string item_id;
+};
+
 // Describes a clipboard history item.
 //
 // NOTE: This structure does not contain the actual clipboard data. The
 // clipboard data is indicated by the `display_text` and `display_format`
 // fields.
 //
+// The `item_id` field is a unique identifier for the clipboard history item.
+//
 // The `display_text` field is the text that is displayed in the clipboard
 // history menu. The `display_format` field indicates the format of the
 // clipboard data.
 //
-// The `item_id` field is a unique identifier for the clipboard history item.
-[Stable]
 struct ClipboardHistoryItemDescriptor {
-  mojo_base.mojom.String16 display_text;
-  ClipboardHistoryDisplayFormat display_format;
-  string item_id;
+  mojo_base.mojom.UnguessableToken item_id@0;
+  ClipboardHistoryDisplayFormat display_format@1;
+  mojo_base.mojom.String16 display_text@2;
 };
 
 // This interface is implemented by Ash-Chrome.
diff --git a/chromeos/profiles/arm-exp.afdo.newest.txt b/chromeos/profiles/arm-exp.afdo.newest.txt
index 99474fd..a9f98c5 100644
--- a/chromeos/profiles/arm-exp.afdo.newest.txt
+++ b/chromeos/profiles/arm-exp.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-none-115-5715.0-1682940843-benchmark-115.0.5754.0-r1-redacted.afdo.xz
+chromeos-chrome-arm-none-115-5715.0-1682940843-benchmark-115.0.5755.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/arm.afdo.newest.txt b/chromeos/profiles/arm.afdo.newest.txt
index 99474fd..a9f98c5 100644
--- a/chromeos/profiles/arm.afdo.newest.txt
+++ b/chromeos/profiles/arm.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-none-115-5715.0-1682940843-benchmark-115.0.5754.0-r1-redacted.afdo.xz
+chromeos-chrome-arm-none-115-5715.0-1682940843-benchmark-115.0.5755.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt
index fd3ca74..8c03f0cc 100644
--- a/chromeos/profiles/atom.afdo.newest.txt
+++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-atom-115-5735.6-1682934552-benchmark-115.0.5754.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-atom-115-5735.6-1682934552-benchmark-115.0.5755.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index 570ccc4..5354d61 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-115-5715.0-1682934000-benchmark-115.0.5754.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-115-5715.0-1682934000-benchmark-115.0.5755.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index c0763b191..a06ae06 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-114-5692.0-1681124563-benchmark-114.0.5712.0-r1.orderfile.xz
+chromeos-chrome-orderfile-field-115-5735.6-1682934552-benchmark-115.0.5751.0-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index 1cfdd73..9a78f7a 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -5,6 +5,7 @@
 <translation id="1018219910092211213">Không thể phân giải DNS</translation>
 <translation id="1018656279737460067">Đã hủy</translation>
 <translation id="1022433422498218992">Chế độ điều khiển chung</translation>
+<translation id="1022628058306505708">Dòng chảy Trái đất</translation>
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> luồng, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Đã có tính năng mới, hãy sử dụng phím Mũi tên lên để tìm hiểu thêm.</translation>
 <translation id="1059913517121127803">Không thể bắt đầu quét</translation>
@@ -234,6 +235,7 @@
 <translation id="2902312830803030883">Thao tác khác</translation>
 <translation id="2926057806159140518">Nhập tên người dùng và mật khẩu hoặc quét mã QR</translation>
 <translation id="2940811910881150316">Không kiểm tra được thiết bị. Mở lại nắp thiết bị để kiểm tra.</translation>
+<translation id="2981143481017883351">Hiện đã có các nội dung dành riêng cho Chromebook</translation>
 <translation id="3008341117444806826">LÀM MỚI</translation>
 <translation id="3009958530611748826">Chọn một thư mục để lưu</translation>
 <translation id="3017079585324758401">Nền</translation>
@@ -278,6 +280,7 @@
 <translation id="3360306038446926262">Windows</translation>
 <translation id="3368922792935385530">Đã kết nối</translation>
 <translation id="3369013195428705271">Bạn có chắc chắn muốn xóa toàn bộ lịch sử in không? Các lệnh in đang thực hiện sẽ không bị xóa.</translation>
+<translation id="3386675685417744672">Dành riêng cho Chromebook</translation>
 <translation id="3404249063913988450">Bật trình bảo vệ màn hình</translation>
 <translation id="3413935475507503304">Để tiếp tục cập nhật, hãy nhấp vào Tiếp theo.</translation>
 <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation>
@@ -356,6 +359,7 @@
 <translation id="404928562651467259">CẢNH BÁO</translation>
 <translation id="4054683689023980771">Đang tải hình ảnh xuống</translation>
 <translation id="4060260348856573701">APN mới</translation>
+<translation id="4079743696465895866">Chọn hình minh hoạ dành riêng cho Chromebook</translation>
 <translation id="4093865285251893588">Ảnh hồ sơ</translation>
 <translation id="409427325554347132">Lưu thông tin chi tiết của quá trình kiểm tra</translation>
 <translation id="4095829376260267438">WPA2WPA3</translation>
@@ -622,6 +626,7 @@
 <translation id="6184793017104303157">B4</translation>
 <translation id="6189418609903030344">Dung lượng pin sụt giảm theo mức sử dụng</translation>
 <translation id="6191293864534840972">Máy chủ định danh không hợp lệ</translation>
+<translation id="6205145102504628069">Luồng đám mây</translation>
 <translation id="6213737986933151570">CDMA1XRTT</translation>
 <translation id="6223066887782788441">Thoát khỏi trạng thái toàn màn hình</translation>
 <translation id="6223752125779001553">Không có máy quét nào</translation>
@@ -664,6 +669,7 @@
 <translation id="6494974875566443634">Tùy chỉnh</translation>
 <translation id="6500818810472529210">Xem kết quả trên Google Tìm kiếm</translation>
 <translation id="650266656685499220">Để tạo album, hãy chuyển đến Google Photos</translation>
+<translation id="6505750420152840539">Sáng đến tối</translation>
 <translation id="6516990319416533844">Để kiểm tra tốc độ sạc pin, hãy để pin tiêu hao trong khoảng thời gian ngắn</translation>
 <translation id="6517239166834772319">Khám phá</translation>
 <translation id="6526200165918397681">Khớp với hình nền</translation>
diff --git a/chromeos/ui/base/window_properties.cc b/chromeos/ui/base/window_properties.cc
index 76ee8899..262c0c9 100644
--- a/chromeos/ui/base/window_properties.cc
+++ b/chromeos/ui/base/window_properties.cc
@@ -24,7 +24,6 @@
 DEFINE_UI_CLASS_PROPERTY_KEY(bool, kEscHoldToExitFullscreen, false)
 DEFINE_UI_CLASS_PROPERTY_KEY(bool, kUseOverviewToExitFullscreen, false)
 DEFINE_UI_CLASS_PROPERTY_KEY(bool, kUseOverviewToExitPointerLock, false)
-DEFINE_UI_CLASS_PROPERTY_KEY(bool, kNoExitFullscreenOnLock, false)
 
 DEFINE_UI_CLASS_PROPERTY_KEY(bool, kTrackDefaultFrameColors, true)
 DEFINE_UI_CLASS_PROPERTY_KEY(SkColor, kFrameActiveColorKey, kDefaultFrameColor)
diff --git a/chromeos/ui/base/window_properties.h b/chromeos/ui/base/window_properties.h
index 5c02b744..ddc3fae0 100644
--- a/chromeos/ui/base/window_properties.h
+++ b/chromeos/ui/base/window_properties.h
@@ -38,14 +38,6 @@
 COMPONENT_EXPORT(CHROMEOS_UI_BASE)
 extern const ui::ClassProperty<bool>* const kEscHoldToExitFullscreen;
 
-// Do not exit fullscreen on a screen lock. Note that this property becomes
-// active only if `kUseOverviewToExitFullscreen` is true. Borealis apps set this
-// to avoid exiting fullscreen on a screen lock.
-// Do NOT use this property without consulting the security team for other use
-// cases.
-COMPONENT_EXPORT(CHROMEOS_UI_BASE)
-extern const ui::ClassProperty<bool>* const kNoExitFullscreenOnLock;
-
 // Whether to promote users to use Overview to exit fullscreen.
 // Borealis apps set this since they do not handle window size changes.
 COMPONENT_EXPORT(CHROMEOS_UI_BASE)
diff --git a/chromeos/ui/clipboard_history/clipboard_history_submenu_model.h b/chromeos/ui/clipboard_history/clipboard_history_submenu_model.h
index 55b38e0..94a590de 100644
--- a/chromeos/ui/clipboard_history/clipboard_history_submenu_model.h
+++ b/chromeos/ui/clipboard_history/clipboard_history_submenu_model.h
@@ -12,6 +12,10 @@
 #include "base/component_export.h"
 #include "ui/base/models/simple_menu_model.h"
 
+namespace base {
+class UnguessableToken;
+}  // namespace base
+
 namespace crosapi::mojom {
 class ClipboardHistoryItemDescriptor;
 enum class ClipboardHistoryControllerShowSource;
@@ -52,7 +56,7 @@
   const crosapi::mojom::ClipboardHistoryControllerShowSource source_;
 
   // Mappings from command ids to clipboard history item ids.
-  std::map<int, std::string> item_ids_by_command_ids_;
+  std::map<int, base::UnguessableToken> item_ids_by_command_ids_;
 };
 
 }  // namespace chromeos::clipboard_history
diff --git a/chromeos/ui/clipboard_history/clipboard_history_util.cc b/chromeos/ui/clipboard_history/clipboard_history_util.cc
index fb2dda2..dd3fc5f 100644
--- a/chromeos/ui/clipboard_history/clipboard_history_util.cc
+++ b/chromeos/ui/clipboard_history/clipboard_history_util.cc
@@ -40,7 +40,7 @@
 }
 
 void PasteClipboardItemById(
-    const std::string& id,
+    const base::UnguessableToken& id,
     int event_flags,
     crosapi::mojom::ClipboardHistoryControllerShowSource show_source) {
   GetPasteClipboardItemByIdImpl().Run(id, event_flags, show_source);
diff --git a/chromeos/ui/clipboard_history/clipboard_history_util.h b/chromeos/ui/clipboard_history/clipboard_history_util.h
index d684101..7b86333 100644
--- a/chromeos/ui/clipboard_history/clipboard_history_util.h
+++ b/chromeos/ui/clipboard_history/clipboard_history_util.h
@@ -11,6 +11,10 @@
 #include "base/functional/callback_forward.h"
 #include "chromeos/crosapi/mojom/clipboard_history.mojom.h"
 
+namespace base {
+class UnguessableToken;
+}  // namespace base
+
 namespace ui {
 class ImageModel;
 }  // namespace ui
@@ -31,7 +35,7 @@
 // Sets the function implementation that pastes the clipboard item specified
 // by id. CrOS Ash and CrOS Lacros have different implementations.
 using PasteClipboardItemByIdImpl = base::RepeatingCallback<void(
-    const std::string&,
+    const base::UnguessableToken&,
     int,
     crosapi::mojom::ClipboardHistoryControllerShowSource)>;
 COMPONENT_EXPORT(CHROMEOS_UI_CLIPBOARD_HISTORY)
@@ -40,7 +44,7 @@
 // Pastes the clipboard item specified by `id`.
 COMPONENT_EXPORT(CHROMEOS_UI_CLIPBOARD_HISTORY)
 void PasteClipboardItemById(
-    const std::string& id,
+    const base::UnguessableToken& id,
     int event_flags,
     crosapi::mojom::ClipboardHistoryControllerShowSource show_source);
 
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 7f4bd89..05a24fa 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "20.64",
-  "log_list_timestamp": "2023-05-06T12:54:52Z",
+  "version": "20.65",
+  "log_list_timestamp": "2023-05-07T12:54:15Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/exo/BUILD.gn b/components/exo/BUILD.gn
index 8482d3b..5fba7eb 100644
--- a/components/exo/BUILD.gn
+++ b/components/exo/BUILD.gn
@@ -307,7 +307,6 @@
     "//base/test:test_support",
     "//cc",
     "//cc:test_support",
-    "//chromeos/ash/components/login/auth",
     "//chromeos/dbus/power",
     "//chromeos/dbus/power:power_manager_proto",
     "//chromeos/ui/base",
diff --git a/components/exo/DEPS b/components/exo/DEPS
index f58ece5..9612462 100644
--- a/components/exo/DEPS
+++ b/components/exo/DEPS
@@ -33,7 +33,6 @@
     "+components/viz/test",
   ],
   "ui_lock_controller_unittest\.cc": [
-    "+chromeos/ash/components/login/auth",
     "+chromeos/dbus/power",
     "+chromeos/dbus/power_manager",
   ],
diff --git a/components/exo/ui_lock_controller.cc b/components/exo/ui_lock_controller.cc
index 723e74a..fed387b 100644
--- a/components/exo/ui_lock_controller.cc
+++ b/components/exo/ui_lock_controller.cc
@@ -217,14 +217,6 @@
     }
   }
 
-  // Notify again but this only notifies again the fullscreen notifier.
-  void NotifyAgainForFullscreen() {
-    ash::WindowState* window_state = ash::WindowState::Get(window_);
-    if (window_state->IsFullscreen()) {
-      OnFullscreen();
-    }
-  }
-
   void OnWindowDestroying(aura::Window* window) override {
     window_observation_.Reset();
     window_state_observation_.Reset();
@@ -586,17 +578,11 @@
 void UILockController::OnSurfaceFocused(Surface* gained_focus,
                                         Surface* lost_focus,
                                         bool has_focused_surface) {
-  if (gained_focus != focused_surface_to_unlock_) {
+  if (gained_focus != focused_surface_to_unlock_)
     StopTimer();
-  }
 
-  if (gained_focus) {
-    ExitNotifier* exit_notifier =
-        GetExitNotifier(this, gained_focus->window(), true);
-    if (exit_notifier) {
-      exit_notifier->NotifyAgainForFullscreen();
-    }
-  }
+  if (gained_focus)
+    GetExitNotifier(this, gained_focus->window(), true);
 }
 
 void UILockController::OnPointerCaptureEnabled(Pointer* pointer,
diff --git a/components/exo/ui_lock_controller_unittest.cc b/components/exo/ui_lock_controller_unittest.cc
index cee83d0..7557d14 100644
--- a/components/exo/ui_lock_controller_unittest.cc
+++ b/components/exo/ui_lock_controller_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/feature_list.h"
 #include "base/test/power_monitor_test.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/ash/components/login/auth/auth_events_recorder.h"
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
@@ -139,14 +138,6 @@
   void SetUp() override {
     test::ExoTestBase::SetUp();
     seat_ = std::make_unique<Seat>();
-
-    // Order of window activations and observer callbacks is not trivial, e.g.
-    // lock screen widget is active when `OnLockStateChanged(locked=false)`
-    // callback is called. It's better to test them with views.
-    // `AuthEventsRecorder` is required for `set_show_lock_screen_views=true`.
-    auth_events_recorder_ = ash::AuthEventsRecorder::CreateForTesting();
-    GetSessionControllerClient()->set_show_lock_screen_views(true);
-
     WMHelper::GetInstance()->RegisterAppPropertyResolver(
         std::make_unique<TestPropertyResolver>());
   }
@@ -192,7 +183,6 @@
 
   std::unique_ptr<Seat> seat_;
   base::test::ScopedFeatureList scoped_feature_list_;
-  std::unique_ptr<ash::AuthEventsRecorder> auth_events_recorder_;
 };
 
 TEST_F(UILockControllerTest, HoldingEscapeExitsFullscreen) {
@@ -587,9 +577,6 @@
 }
 
 TEST_F(UILockControllerTest, PointerLockNotificationReshownOnUnlock) {
-  // Lock screen takes focus and it disables pointer capture.
-  GetSessionControllerClient()->set_show_lock_screen_views(false);
-
   // Arrange: Set up a pointer capture notification, then let it expire.
   std::unique_ptr<ShellSurface> test_surface = BuildSurface(1024, 768);
   test_surface->SetApplicationId(kOverviewToExitAppId);
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 4487a5b3..5e3f1a5 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -117,6 +117,7 @@
 <translation id="1105711894873068933">Sau khi <ph name="LACROS_NAME" /> tắt, tất cả dữ liệu người dùng sẽ bị xoá vào lần đăng nhập tiếp theo.</translation>
 <translation id="1107538157073168076">Tắt tiện ích thông tin chi tiết</translation>
 <translation id="1110426799149444997">Tắt tính năng tìm kiếm khu vực của <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
+<translation id="1111324374369583989">Không hiển thị màn hình cài đặt kích thước trên màn hình trong khi đăng nhập</translation>
 <translation id="1117535567637097036">Trình xử lý giao thức được đặt qua chính sách này không được sử dụng khi xử lý các cơ chế của Android.</translation>
 <translation id="1118093128235245168">Cho phép các trang web yêu cầu người dùng cấp quyền truy cập vào một thiết bị USB đã kết nối</translation>
 <translation id="111910763555783249">Cài đặt thông báo</translation>
@@ -685,6 +686,7 @@
       </translation>
 <translation id="1613327425322354195">Báo cáo trạng thái bảo mật của thiết bị</translation>
 <translation id="1615221548356595305">Cho phép hợp nhất các đường kết nối HTTP/2 đối với những máy chủ này kể cả khi sử dụng chứng chỉ ứng dụng khách</translation>
+<translation id="1615734278280392199">Sử dụng công cụ tìm kiếm ở chế độ không ẩn danh.</translation>
 <translation id="1616280227447957376">Cho phép tiếp tục từ trang cảnh báo SSL trên các nguồn gốc cụ thể</translation>
 <translation id="1617235075406854669">Bật xóa nhật ký duyệt web và lịch sử tải xuống</translation>
 <translation id="1620510694547887537">Camera</translation>
@@ -1070,6 +1072,7 @@
 
       Các thay đổi đối với chính sách chỉ được áp dụng khi ARC không chạy, chẳng hạn như khi đang khởi động ChromeOS.</translation>
 <translation id="1984934843478301531">Tự động khởi chạy ứng dụng</translation>
+<translation id="1985545260037812875">Hiển thị màn hình cài đặt kích thước trên màn hình trong khi đăng nhập</translation>
 <translation id="1985598967415986700">Có thể kiểm soát được Tính năng Giảm thiểu tác nhân người dùng qua Field-Trials và Origin-Trials.</translation>
 <translation id="1987789058026551147">Bật tính năng báo cáo phiên kiosk của thiết bị</translation>
 <translation id="1988345404999458987">Cung cấp cấu hình của các máy chủ máy in hiện có.
@@ -2309,6 +2312,7 @@
 
       Để biết thông tin chi tiết về các mẫu <ph name="URL_LABEL" /> hợp lệ, vui lòng xem tại https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.  Chính sách này chỉ đối chiếu dựa trên nguồn gốc, nên mọi đường dẫn trong mẫu URL sẽ bị bỏ qua.</translation>
 <translation id="3118552207903834734">Cho phép người dùng định cấu hình tên máy chủ của thiết bị</translation>
+<translation id="3120434599585109871">Sử dụng công cụ tìm kiếm ở chế độ ẩn danh.</translation>
 <translation id="3122082892722698079">Kiểm soát việc sử dụng trường hợp ngoại lệ cho nội dung không an toàn</translation>
 <translation id="3125472566440502628">Tắt tính năng chọn để nói</translation>
 <translation id="3126748868885248792">Nút bên phải là nút chính</translation>
@@ -2908,6 +2912,9 @@
 <translation id="3606571057705314194">Tắt bộ chọn hồ sơ khi khởi động</translation>
 <translation id="3608206578291537084">Bật quy trình báo cáo đã mã hoá</translation>
 <translation id="3608281460204780443">Hiển thị biểu tượng Cửa hàng Chrome trực tuyến trong trình chạy <ph name="PRODUCT_OS_NAME" /> và trên trang thẻ mới</translation>
+<translation id="3616490235694929053">Chính sách này kiểm soát việc người dùng có thấy màn hình cài đặt kích thước trên màn hình trong lần đăng nhập đầu tiên hay không.
+      Nếu bạn đặt chính sách này thành false (sai), thì màn hình cài đặt kích thước trên màn hình sẽ không hiển thị.
+      Nếu bạn đặt chính sách này thành true (đúng), thì màn hình cài đặt kích thước trên màn hình sẽ hiển thị.</translation>
 <translation id="3622463490728773174">Cho phép sử dụng phương thức triển khai mới</translation>
 <translation id="3623332696371971798">Không cho phép truy cập vào Google Photos từ ứng dụng cá nhân hoá</translation>
 <translation id="3627678165642179114">Bật hoặc tắt dịch vụ web kiểm tra lỗi chính tả</translation>
@@ -4663,6 +4670,7 @@
 <translation id="528302483493794684">Cấu hình máy ảo. Mô tả loại máy ảo mà người dùng có thể cài đặt (máy ảo sẽ được liên kết vĩnh viễn với mã của cấu hình này) và các chế độ kiểm soát áp dụng cho loại máy ảo này.</translation>
 <translation id="5283457834853986457">Tắt trình tìm kiếm plugin (không được dùng nữa)</translation>
 <translation id="5286579716704722323">Cho phép người dùng nhấp vào các trang cảnh báo SSL</translation>
+<translation id="5288713554963040955">Cho phép hiển thị màn hình cài đặt kích thước trên màn hình trong khi đăng nhập</translation>
 <translation id="5288772341821359899">Nếu đã đặt chính sách, phạm vi cổng UDP mà WebRTC sử dụng sẽ được hạn chế đến phạm vi cổng được chỉ định (đã bao gồm cả điểm cuối).
 
       Nếu chưa đặt chính sách hoặc nếu chính sách được đặt thành chuỗi trống hoặc phạm vi cổng không hợp lệ thì WebRTC được phép sử dụng bất kỳ cổng UDP cục bộ khả dụng nào.</translation>
@@ -7729,6 +7737,7 @@
       Chính sách này chỉ có hiệu lực khi máy đã đăng ký chính sách <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> đối với <ph name="PRODUCT_NAME" />.
       Chính sách này luôn có hiệu lực đối với <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="8050080920415773384">In bản gốc</translation>
+<translation id="8055051642109241571">Cho phép tìm kiếm ở chế độ ẩn danh</translation>
 <translation id="8056237304861875584">Chính sách Cho phép tiếp tục nhiệm vụ trong Trung tâm điều khiển điện thoại sẽ được bật.</translation>
 <translation id="8056273037819805106">Thông tin đăng nhập <ph name="PRODUCT_OS_NAME" /> sẽ được dùng để xác thực mạng với một proxy được quản lý.</translation>
 <translation id="8056800559672904373">Tài khoản được quản lý phải là tài khoản chính và không có tài khoản phụ, đồng thời người dùng có thể nhập dữ liệu duyệt web hiện có vào thời điểm tạo hồ sơ</translation>
@@ -8480,6 +8489,9 @@
 <translation id="8728854710675158426">Hàm băm không an toàn trong quá trình giao tiếp qua TLS đã bật</translation>
 <translation id="8734543507835977857">Bắt đầu thời gian trì hoãn của chính sách quản lý nguồn và giới hạn thời lượng phiên hoạt động khi phiên bắt đầu</translation>
 <translation id="8736538322216687231">Buộc sử dụng Chế độ hạn chế tối thiểu trên YouTube</translation>
+<translation id="874149307422233209">Chính sách này cho phép quản trị viên kiểm soát cách Google xử lý dữ liệu người dùng được gửi đến công cụ Tìm kiếm thông qua các tính năng của <ph name="PRODUCT_OS_NAME" />.
+Khi bạn bật chính sách này, người dùng có thể sử dụng hộp tìm kiếm của Trình chạy <ph name="PRODUCT_OS_NAME" /> và hộp địa chỉ của Trình duyệt <ph name="PRODUCT_NAME" /> trong <ph name="PRODUCT_OS_NAME" /> để nhật ký tìm kiếm của người dùng không được liên kết với danh tính của họ.
+Khi bạn tắt hoặc không đặt chính sách này, dữ liệu của người dùng trong các lượt tìm kiếm này sẽ được liên kết với danh tính của họ.</translation>
 <translation id="8744844164152340112">Cài đặt giao diện dùng để kết xuất giao diện người dùng khi OOBE và trong phiên sử dụng (tối/sáng/tự động).
       Chế độ tự động sẽ tự động chuyển đổi giữa giao diện tối và giao diện sáng tại thời điểm bình minh và hoàng hôn.
       Nên đề xuất chính sách này, cho phép người dùng thay đổi giao diện trong phần cài đặt hệ thống.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 979623b..a55a685 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -2526,7 +2526,7 @@
 <translation id="7201591969684833065">Администраторът ви може да вижда:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />. Натиснете Tab и след това – Enter, за да отворите нов раздел в режим „инкогнито“ и да сърфирате частно</translation>
 <translation id="7203375778433816396">Задаване на Chrome като браузър по подразбиране за системата</translation>
-<translation id="7207736436284129083">{COUNT,plural, =0{Няма}=1{1 код за достъп}other{# кода за достъп}}</translation>
+<translation id="7207736436284129083">{COUNT,plural, =0{Няма}=1{1 ключ за достъп}other{# ключа за достъп}}</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> не се придържа към стандартите за сигурност.</translation>
 <translation id="7210993021468939304">Може да инсталира и стартира приложения за Linux в контейнера, както и да вижда активността в него</translation>
 <translation id="721197778055552897"><ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /> за този проблем.</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 663dcd3e..f2a9a3c5 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -3212,6 +3212,7 @@
 <translation id="8870494189203302833">ਉਸੇ ਕ੍ਰਮ ਵਿੱਚ ਪਾਸਾ ਹੇਠਾਂ ਕੀਤੇ ਹੋਏ</translation>
 <translation id="8870700989640064057">ਕੀ ਗੁਪਤ ਫ਼ਾਈਲ ਨੂੰ ਪ੍ਰਿੰਟ ਕਰਨਾ ਹੈ?</translation>
 <translation id="8871553383647848643">ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਦਿੱਖ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ</translation>
+<translation id="8871603420762394026">Chrome ਹੁਣ ਸਾਈਟਾਂ ਵਿਚਾਲੇ ਬਹੁਤ ਹੀ ਸੀਮਤ ਜਾਣਕਾਰੀ ਨੂੰ ਸਾਂਝਾ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਜਦੋਂ ਤੁਹਾਨੂੰ ਕੋਈ ਵਿਗਿਆਪਨ ਦਿਖਾਇਆ ਗਿਆ ਸੀ, ਤਾਂ ਜੋ ਵਿਗਿਆਪਨਾਂ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਦਾ ਮੁਲਾਂਕਣ ਕਰਨ ਵਿੱਚ ਸਾਈਟਾਂ ਦੀ ਮਦਦ ਕੀਤੀ ਜਾ ਸਕੇ।</translation>
 <translation id="8874824191258364635">ਕੋਈ ਵੈਧ ਕਾਰਡ ਨੰਬਰ ਦਾਖਲ ਕਰੋ</translation>
 <translation id="8876033571432926051">ਬੇਕਾਇਦਾ ਗੇਮਾਂ</translation>
 <translation id="8877780815363510165">ਮੱਛੀ ਫੜ੍ਹਨਾ</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 7d538ba..5ddc3ae 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -1034,6 +1034,7 @@
 <translation id="3531780078352352885">Tờ công việc</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> muốn sử dụng micrô của bạn</translation>
 <translation id="3533328374079021623">Hộp thư 5</translation>
+<translation id="3536227077203206203">Đã cho phép sử dụng cho lần này</translation>
 <translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542628208405253498">Hình ảnh trên thẻ</translation>
 <translation id="3542768452570884558">Mở đường liên kết trong cửa sổ mới</translation>
@@ -2453,6 +2454,7 @@
 <translation id="7030436163253143341">Chứng chỉ không hợp lệ</translation>
 <translation id="7031646650991750659">Những ứng dụng bạn đã cài đặt bằng Google Play</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, Nhấn phím Tab rồi nhấn phím Enter để quản lý chế độ cài đặt về quyền riêng tư của Tài khoản Google của bạn</translation>
+<translation id="7044081119134178347">Đã cho phép sử dụng máy ảnh cho lần này</translation>
 <translation id="7048095965575426564">Fanfold châu Âu</translation>
 <translation id="7050187094878475250">Bạn đã cố gắng truy cập <ph name="DOMAIN" /> nhưng máy chủ đã hiển thị chứng chỉ có thời gian hiệu lực quá dài để có thể tin cậy.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Không thể lưu thẻ này ngay bây giờ}other{Không thể lưu các thẻ này ngay bây giờ}}</translation>
@@ -3045,6 +3047,7 @@
 <translation id="8416694386774425977">Cấu hình mạng này là không hợp lệ và không thể nhập được.
 Thông tin chi tiết bổ sung:
 <ph name="DEBUG_INFO" /></translation>
+<translation id="8416874502399604126">Đã cho phép sử dụng micrô cho lần này</translation>
 <translation id="8424582179843326029"><ph name="FIRST_LABEL" /> <ph name="SECOND_LABEL" /> <ph name="THIRD_LABEL" /></translation>
 <translation id="8427848540066057481">500 x 750 mm</translation>
 <translation id="8428213095426709021">Cài đặt</translation>
@@ -3100,6 +3103,7 @@
 <translation id="8554912124839363479">{NUM_PERMISSIONS,plural, =1{Đặt lại quyền}other{Đặt lại quyền}}</translation>
 <translation id="8555010941760982128">Sử dụng mã này khi thanh toán</translation>
 <translation id="8557066899867184262">CVC nằm ở mặt sau thẻ của bạn.</translation>
+<translation id="8558347880669160417">Đã cho phép sử dụng micrô và máy ảnh cho lần này</translation>
 <translation id="8559762987265718583">Không thể thiết lập kết nối riêng tư với <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> vì ngày và giờ (<ph name="DATE_AND_TIME" />) trên thiết bị của bạn không đúng.</translation>
 <translation id="8564182942834072828">Tài liệu riêng biệt/Bản sao chưa đối chiếu</translation>
 <translation id="8564985650692024650">Chromium khuyên bạn nên đặt lại mật khẩu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
@@ -3371,6 +3375,7 @@
 <translation id="949314938206378263">Bạn đã yêu cầu truy cập trang web này. Cha/mẹ bạn có thể trả lời trong Family Link.</translation>
 <translation id="950736567201356821">Đục 3 lỗ trên cùng</translation>
 <translation id="961663415146723894">Đóng gáy dưới cùng</translation>
+<translation id="961930410699694996">Đã cho phép sử dụng thông tin vị trí cho lần này</translation>
 <translation id="962484866189421427">Nội dung này có thể tìm cách cài đặt ứng dụng lừa đảo giả mạo nội dung khác hoặc thu thập dữ liệu có thể được dùng để theo dõi bạn. <ph name="BEGIN_LINK" />Vẫn hiển thị<ph name="END_LINK" /></translation>
 <translation id="963837307749850257">Tất cả người dùng</translation>
 <translation id="964050462028070434">Quản lý mật khẩu và khoá đăng nhập…</translation>
diff --git a/content/browser/compute_pressure/compute_pressure_origin_trial_browsertest.cc b/content/browser/compute_pressure/compute_pressure_origin_trial_browsertest.cc
new file mode 100644
index 0000000..1e98f71e
--- /dev/null
+++ b/content/browser/compute_pressure/compute_pressure_origin_trial_browsertest.cc
@@ -0,0 +1,90 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+
+#include "base/test/scoped_feature_list.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 "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/features.h"
+#include "url/gurl.h"
+
+namespace content {
+
+namespace {
+
+constexpr char kBaseDataDir[] = "content/test/data/compute_pressure";
+
+class ComputePressureOriginTrialBrowserTest : public ContentBrowserTest {
+ public:
+  ~ComputePressureOriginTrialBrowserTest() override = default;
+
+  void SetUpOnMainThread() override {
+    ContentBrowserTest::SetUpOnMainThread();
+
+    // We need to use URLLoaderInterceptor (rather than a EmbeddedTestServer),
+    // because origin trial token is associated with a fixed origin, whereas
+    // EmbeddedTestServer serves content on a random port.
+    interceptor_ = URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+        kBaseDataDir, GURL("https://example.test/"));
+  }
+
+  void TearDownOnMainThread() override {
+    interceptor_.reset();
+    ContentBrowserTest::TearDownOnMainThread();
+  }
+
+  bool HasComputePressureApi() {
+    return EvalJs(shell(), "'PressureObserver' in window").ExtractBool();
+  }
+
+ protected:
+  const GURL kValidTokenUrl{"https://example.test/valid_token.html"};
+  const GURL kNoTokenUrl{"https://example.test/no_token.html"};
+
+  base::test::ScopedFeatureList scoped_feature_list_;
+  std::unique_ptr<content::URLLoaderInterceptor> interceptor_;
+};
+
+IN_PROC_BROWSER_TEST_F(ComputePressureOriginTrialBrowserTest,
+                       ValidOriginTrialToken) {
+  ASSERT_TRUE(NavigateToURL(shell(), kValidTokenUrl));
+  EXPECT_TRUE(HasComputePressureApi());
+}
+
+IN_PROC_BROWSER_TEST_F(ComputePressureOriginTrialBrowserTest,
+                       NoOriginTrialToken) {
+  ASSERT_TRUE(NavigateToURL(shell(), kNoTokenUrl));
+  EXPECT_FALSE(HasComputePressureApi());
+}
+
+class ComputePressureOriginTrialKillSwitchBrowserTest
+    : public ComputePressureOriginTrialBrowserTest {
+ public:
+  ComputePressureOriginTrialKillSwitchBrowserTest() {
+    scoped_feature_list_.Reset();
+    scoped_feature_list_.InitAndDisableFeature(
+        blink::features::kComputePressure);
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(ComputePressureOriginTrialKillSwitchBrowserTest,
+                       ValidOriginTrialToken) {
+  ASSERT_TRUE(NavigateToURL(shell(), kValidTokenUrl));
+  EXPECT_FALSE(HasComputePressureApi());
+}
+
+IN_PROC_BROWSER_TEST_F(ComputePressureOriginTrialKillSwitchBrowserTest,
+                       NoOriginTrialToken) {
+  ASSERT_TRUE(NavigateToURL(shell(), kNoTokenUrl));
+  EXPECT_FALSE(HasComputePressureApi());
+}
+
+}  // namespace
+
+}  // namespace content
diff --git a/content/browser/compute_pressure/compute_pressure_unittest.cc b/content/browser/compute_pressure/compute_pressure_unittest.cc
index 37750d93..1788b01 100644
--- a/content/browser/compute_pressure/compute_pressure_unittest.cc
+++ b/content/browser/compute_pressure/compute_pressure_unittest.cc
@@ -134,11 +134,7 @@
 
 class ComputePressureTest : public RenderViewHostImplTestHarness {
  public:
-  ComputePressureTest() {
-    scoped_feature_list_.InitAndEnableFeature(
-        blink::features::kComputePressure);
-  }
-
+  ComputePressureTest() = default;
   ~ComputePressureTest() override = default;
 
   ComputePressureTest(const ComputePressureTest&) = delete;
@@ -178,8 +174,6 @@
   const GURL kTestUrl{"https://example.com/compute_pressure.html"};
   const GURL kInsecureUrl{"http://example.com/compute_pressure.html"};
 
-  base::test::ScopedFeatureList scoped_feature_list_;
-
   mojo::Remote<device::mojom::PressureManager> pressure_manager_;
   std::unique_ptr<PressureManagerSync> pressure_manager_sync_;
   std::unique_ptr<device::ScopedPressureManagerOverrider>
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index ae0d824..3d756dc 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -5736,7 +5736,7 @@
 
   static std::string DescribeParams(
       const testing::TestParamInfo<ParamType>& info) {
-    return info.param ? "UndoCommitNavigation" : "NavigationQueueing";
+    return info.param ? "NavigationQueueing" : "UndoCommitNavigation";
   }
 
  private:
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 60af795c..c762659 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -5092,6 +5092,7 @@
   }
 
   void SetupAndRegisterServiceWorker() {
+    RegisterRequestMonitorForRequestCount();
     RegisterRequestHandlerForSlowResponsePage();
     StartServerAndNavigateToSetup();
 
@@ -5119,6 +5120,14 @@
     return EvalJs(GetPrimaryMainFrame(), "document.body.innerText;");
   }
 
+  int GetRequestCount(const std::string& relative_url) const {
+    const auto& it = request_log_.find(relative_url);
+    if (it == request_log_.end()) {
+      return 0;
+    }
+    return it->second.size();
+  }
+
  private:
   void RegisterRequestHandlerForSlowResponsePage() {
     embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
@@ -5170,6 +5179,16 @@
           return http_response;
         }));
   }
+  void RegisterRequestMonitorForRequestCount() {
+    embedded_test_server()->RegisterRequestMonitor(base::BindRepeating(
+        &ServiceWorkerRaceNetworkRequestBrowserTest::MonitorRequestHandler,
+        base::Unretained(this)));
+  }
+  void MonitorRequestHandler(const net::test_server::HttpRequest& request) {
+    request_log_[request.relative_url].push_back(request);
+  }
+  std::map<std::string, std::vector<net::test_server::HttpRequest>>
+      request_log_;
   base::test::ScopedFeatureList feature_list_;
 };
 
@@ -5309,13 +5328,23 @@
 IN_PROC_BROWSER_TEST_F(ServiceWorkerRaceNetworkRequestBrowserTest,
                        FetchHandler_Wins_Fallback) {
   SetupAndRegisterServiceWorker();
-  // Fetch handler will fallback. This case the response from the default
-  // fallback requset will be used. RaceNetworkRequset is not involved.
-  const GURL slow_url = embedded_test_server()->GetURL(
-      "/service_worker/mock_response?server_slow&sw_fallback");
+  // Fetch handler will fallback. This case the response from RaceNetworkRequest
+  // is returned as a final response.
+  const std::string relative_url =
+      "/service_worker/mock_response?server_slow&sw_fallback";
+  const GURL slow_url = embedded_test_server()->GetURL(relative_url);
   NavigateToURLBlockUntilNavigationsComplete(shell(), slow_url, 1);
   EXPECT_EQ("[ServiceWorkerRaceNetworkRequest] Slow response from the network",
             GetInnerText());
+  // Request count should be 1 (RaceNetworkRequest). No additional request to
+  // the server.
+  EXPECT_EQ(1, GetRequestCount(relative_url));
+
+  // TODO(crbug.com/1420517) Ensure if the network error result is from
+  // RaceNetworkRequest. The current code only tests if the network error
+  // happens.
+  EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+  EXPECT_FALSE(NavigateToURL(shell(), slow_url));
 }
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerRaceNetworkRequestBrowserTest,
@@ -5460,13 +5489,23 @@
   WorkerRunningStatusObserver observer(public_context());
   ReloadBlockUntilNavigationsComplete(shell(), 1);
   observer.WaitUntilRunning();
-  // Fetch handler will fallback. This case the response from the default
-  // fallback requset will be used. RaceNetworkRequset is not involved.
+  // Fetch handler will fallback. This case the response from RaceNetworkRequest
+  // is returned as a final response.
+  const std::string relative_url =
+      "/service_worker/mock_response?server_slow&sw_fallback";
   EXPECT_EQ("[ServiceWorkerRaceNetworkRequest] Slow response from the network",
             EvalJs(GetPrimaryMainFrame(),
-                   "fetch('/service_worker/mock_response?"
-                   "server_slow&sw_fallback').then(response => "
-                   "response.text())"));
+                   "fetch('" + relative_url +
+                       "').then(response => response.text())"));
+  // Request count should be 1 (RaceNetworkRequest). No additional request to
+  // the server.
+  EXPECT_EQ(1, GetRequestCount(relative_url));
+
+  // TODO(crbug.com/1420517) Ensure if the network error result is from
+  // RaceNetworkRequest. The current code only tests if the network error
+  // happens.
+  EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+  EXPECT_FALSE(ExecJs(GetPrimaryMainFrame(), "fetch('" + relative_url + "')"));
 }
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerRaceNetworkRequestBrowserTest,
diff --git a/content/browser/service_worker/service_worker_main_resource_loader.cc b/content/browser/service_worker/service_worker_main_resource_loader.cc
index e0bee95..47d83e3 100644
--- a/content/browser/service_worker/service_worker_main_resource_loader.cc
+++ b/content/browser/service_worker/service_worker_main_resource_loader.cc
@@ -412,9 +412,22 @@
       blink::ServiceWorkerStatusToString(status), "result",
       ComposeFetchEventResultString(fetch_result, *response));
 
+  // If the response of RaceNetworkRequest is already handled, discard the
+  // fetch handler result.
   if (fetch_response_from() == FetchResponseFrom::kWithoutServiceWorker) {
     return;
   }
+  // If the RaceNetworkRequest is triggered but the response is not handled
+  // yet, and the fetch handler result is FetchEventResult::kShouldFallback, ask
+  // RaceNetworkRequestURLLoaderClient to handle the response regardless of the
+  // response status not to dispatch additional network request for fallback.
+  if (dispatched_preload_type_ == DispatchedPreloadType::kRaceNetworkRequest &&
+      fetch_result ==
+          ServiceWorkerFetchDispatcher::FetchEventResult::kShouldFallback) {
+    DCHECK(race_network_request_loader_client_);
+    race_network_request_loader_client_->NotifyFetchHandlerFallback();
+    return;
+  }
   // Use the response from ServiceWorker fetch handler, and cancel the
   // connection for RaceNetworkRequest.
   // TODO(crbug.com/1420517) RaceNetworkRequrest doesn't support fallback case.
diff --git a/content/common/service_worker/race_network_request_url_loader_client.cc b/content/common/service_worker/race_network_request_url_loader_client.cc
index 3759092..9a1320fc 100644
--- a/content/common/service_worker/race_network_request_url_loader_client.cc
+++ b/content/common/service_worker/race_network_request_url_loader_client.cc
@@ -51,21 +51,23 @@
       ServiceWorkerResourceLoader::FetchResponseFrom::kServiceWorker) {
     return;
   }
-  // If the response is not 200, use the other response from the fetch handler
-  // instead because it may have a response from the cache.
+
+  head_ = std::move(head);
+
+  // If the fetch handler result is a fallback, commit the RaceNetworkRequest
+  // response. If the result is not a fallback and the response is not 200, use
+  // the other response from the fetch handler instead because it may have a
+  // response from the cache.
   // TODO(crbug.com/1420517): More comprehensive error handling may be needed,
   // especially the case when HTTP cache hit or redirect happened.
-  if (head->headers->response_code() != net::HttpStatusCode::HTTP_OK) {
+  if (!is_fetch_handler_response_fallback_ &&
+      head_->headers->response_code() != net::HttpStatusCode::HTTP_OK) {
     return;
   }
 
   owner_->SetFetchResponseFrom(
       ServiceWorkerResourceLoader::FetchResponseFrom::kWithoutServiceWorker);
-
-  head_ = std::move(head);
-  owner_->CommitResponseHeaders(head_);
-  owner_->CommitResponseBody(head_, std::move(body),
-                             std::move(cached_metadata));
+  CommitResponse(std::move(body), std::move(cached_metadata));
 }
 
 void ServiceWorkerRaceNetworkRequestURLLoaderClient::OnReceiveRedirect(
@@ -91,6 +93,22 @@
   if (!owner_) {
     return;
   }
+  // If the fetch handler result is a fallback, complete the commit of the
+  // RaceNetworkRequest response.
+  if (is_fetch_handler_response_fallback_) {
+    // If there is a network error, OnComplete can be directly called, in that
+    // case |fetch_response_from| is not set yet.
+    if (owner_->fetch_response_from() ==
+        ServiceWorkerResourceLoader::FetchResponseFrom::kNoResponseYet) {
+      owner_->SetFetchResponseFrom(
+          ServiceWorkerResourceLoader::FetchResponseFrom::
+              kWithoutServiceWorker);
+    }
+    owner_->CommitCompleted(status.error_code,
+                            "RaceNetworkRequest has completed due to the fetch "
+                            "handler result is a fallback");
+    return;
+  }
   // If the fetch handler wins or there is a network error in
   // RaceNetworkRequest, do nothing. Defer the handling to the owner.
   if (owner_->fetch_response_from() !=
@@ -107,6 +125,19 @@
   receiver_.Bind(remote->InitWithNewPipeAndPassReceiver());
 }
 
+void ServiceWorkerRaceNetworkRequestURLLoaderClient::
+    NotifyFetchHandlerFallback() {
+  is_fetch_handler_response_fallback_ = true;
+}
+
+void ServiceWorkerRaceNetworkRequestURLLoaderClient::CommitResponse(
+    mojo::ScopedDataPipeConsumerHandle response_body,
+    absl::optional<mojo_base::BigBuffer> cached_metadata) {
+  owner_->CommitResponseHeaders(head_);
+  owner_->CommitResponseBody(head_, std::move(response_body),
+                             std::move(cached_metadata));
+}
+
 net::NetworkTrafficAnnotationTag
 ServiceWorkerRaceNetworkRequestURLLoaderClient::NetworkTrafficAnnotationTag() {
   return net::DefineNetworkTrafficAnnotation(
diff --git a/content/common/service_worker/race_network_request_url_loader_client.h b/content/common/service_worker/race_network_request_url_loader_client.h
index 1b7b0e90..c1463ec 100644
--- a/content/common/service_worker/race_network_request_url_loader_client.h
+++ b/content/common/service_worker/race_network_request_url_loader_client.h
@@ -38,6 +38,12 @@
 
   static net::NetworkTrafficAnnotationTag NetworkTrafficAnnotationTag();
 
+  // When the fetch handler result is fallback, the browser tries to use the
+  // RaceNetworkRequest response rather than dispatching another network
+  // request. This method tells the client to handle the response regardless of
+  // the result.
+  void NotifyFetchHandlerFallback();
+
   // network::mojom::URLLoaderClient overrides:
   void OnReceiveEarlyHints(network::mojom::EarlyHintsPtr early_hints) override;
   void OnReceiveResponse(
@@ -53,10 +59,15 @@
   void OnComplete(const network::URLLoaderCompletionStatus& status) override;
 
  private:
+  // Commit the head and body through |owner_|'s Commit methods.
+  // This method does not complete the commit process.
+  void CommitResponse(mojo::ScopedDataPipeConsumerHandle response_body,
+                      absl::optional<mojo_base::BigBuffer> cached_metadata);
   mojo::Receiver<network::mojom::URLLoaderClient> receiver_{this};
   const network::ResourceRequest request_;
   base::WeakPtr<ServiceWorkerResourceLoader> owner_;
   network::mojom::URLResponseHeadPtr head_;
+  bool is_fetch_handler_response_fallback_ = false;
 };
 }  // namespace content
 
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc
index 47556660..7b19d47 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.cc
+++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -515,12 +515,20 @@
   // request is not dispatched. OnFallback doesn't delete the instance and flip
   // the status. Those are handled in the process of RaceNetworkRequest
   // handling.
-  // TODO(crbug.com/1432075) Fallback response shoudld be handled as a fallback.
+  // TODO(crbug.com/1432075) Fallback response should be handled as a fallback.
   // The response from RaceNetworkRequest is currently handled by the code path
   // for the non-fallback case.
   if (fetch_response_from() == FetchResponseFrom::kWithoutServiceWorker) {
     return;
   }
+  // If the RaceNetworkRequest is triggered but the response is not handled yet,
+  // ask its URLLoaderClient to handle the response regardless of the response
+  // status not to dispatch additional network request for fallback.
+  if (did_start_race_network_request_) {
+    DCHECK(race_network_request_loader_client_);
+    race_network_request_loader_client_->NotifyFetchHandlerFallback();
+    return;
+  }
 
   // Hand over to the network loader.
   mojo::PendingRemote<network::mojom::URLLoaderClient> client;
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index ff91caa..1f35a94b 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1296,6 +1296,7 @@
     "../browser/browsing_topics/browsing_topics_browsertest.cc",
     "../browser/child_process_launcher_browsertest.cc",
     "../browser/child_process_security_policy_browsertest.cc",
+    "../browser/compute_pressure/compute_pressure_origin_trial_browsertest.cc",
     "../browser/content_index/content_index_browsertest.cc",
     "../browser/content_security_policy_browsertest.cc",
     "../browser/cross_origin_opener_policy_browsertest.cc",
diff --git a/content/test/content_test_bundle_data.filelist b/content/test/content_test_bundle_data.filelist
index 3bc5011..7408db1 100644
--- a/content/test/content_test_bundle_data.filelist
+++ b/content/test/content_test_bundle_data.filelist
@@ -5281,6 +5281,8 @@
 data/color-scheme-2.html
 data/color-scheme-dark.html
 data/color-scheme.html
+data/compute_pressure/no_token.html
+data/compute_pressure/valid_token.html
 data/content-disposition-attachment.html
 data/content-disposition-attachment.html.mock-http-headers
 data/content-disposition-empty.html
diff --git a/content/test/data/compute_pressure/no_token.html b/content/test/data/compute_pressure/no_token.html
new file mode 100644
index 0000000..43bcedb3
--- /dev/null
+++ b/content/test/data/compute_pressure/no_token.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Compute Pressure API No Origin Trial Test</title>
diff --git a/content/test/data/compute_pressure/valid_token.html b/content/test/data/compute_pressure/valid_token.html
new file mode 100644
index 0000000..c4780e9f
--- /dev/null
+++ b/content/test/data/compute_pressure/valid_token.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<!-- The OT token below expires in 2033.
+   Regenerate this token with the command:
+   generate_token.py https://example.test ComputePressure --expire-timestamp=2000000000 -->
+<meta http-equiv="origin-trial" content="A/jtk5npXPKyDrNo9oTFvtpkxme5321eVz7rRB35qNSG+U00gtajlCmSfhxTxUDuAb0umALAsiXoKIfMHl3mnQMAAABaeyJvcmlnaW4iOiAiaHR0cHM6Ly9leGFtcGxlLnRlc3Q6NDQzIiwgImZlYXR1cmUiOiAiQ29tcHV0ZVByZXNzdXJlIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9">
+<title>Compute Pressure API Origin Trial Test</title>
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
index 937d15b0..cea057922 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -370,7 +370,8 @@
 
 # Pixel_MediaRecorderFromVideoElement fails on several FYI bots
 crbug.com/1382332 [ chromeos ] Pixel_MediaRecorderFromVideoElement [ Failure ]
-crbug.com/1382332 [ chromeos ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
+crbug.com/1382332 [ angle-disabled chromeos cros-chrome no-passthrough ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
+crbug.com/1382332 [ angle-opengles arm chromeos chromeos-board-jacuzzi display-server-x lacros-chrome passthrough target-cpu-32 ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ android android-webview-instrumentation angle-disabled no-passthrough ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ android-chromium android-nexus-5x android-nougat angle-disabled no-passthrough qualcomm renderer-skia-gl target-cpu-64 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ android-chromium android-s android-sm-a135m angle-disabled arm no-passthrough renderer-skia-gl target-cpu-32 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
index 7eece34..eaf9c84 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
@@ -95,7 +95,7 @@
 crbug.com/1409453 [ win amd ] WebCodecs_TexImage2d_hw_decoder [ Failure ]
 
 # Not all platform encoders are very good at adhering to specified bitrate
-crbug.com/1368785 [ mac-x86_64 ] WebCodecs_EncodingRateControl_avc1.420034_prefer-hardware_constant_* [ Failure ]
+crbug.com/1368785 [ asan intel-0x3e9b mac-x86_64 ] WebCodecs_EncodingRateControl_avc1.420034_prefer-hardware_constant_* [ Failure ]
 
 # AVC VBR seems to be unreliable on some Android devices
 crbug.com/1368785 [ android-pixel-6 android-t arm renderer-skia-vulkan target-cpu-64 ] WebCodecs_EncodingRateControl_avc1.420034_prefer-software_variable_* [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
index 1d698e9..5a61a38 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -400,8 +400,6 @@
 # Win failures     #
 ####################
 
-# Failing even with Slow due to heartbeat
-crbug.com/1432255 [ win angle-swiftshader ] conformance/reading/read-pixels-test.html [ Failure ]
 
 # Consistent failures in functions.control_flow.return_in_nested_loop_vertex and functions.control_flow.return_in_nested_loop_fragment
 # Possible HLSL compiler bug.
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 42ab0c6..648aadcd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -113,6 +113,7 @@
 <translation id="1657011748321897393">Không thể chia sẻ do bạn không kết nối với mạng.</translation>
 <translation id="1657641691196698092">Số cookie bị chặn</translation>
 <translation id="165877110639533037">Không có thẻ nào đang mở</translation>
+<translation id="166310177317698233">Bạn có thể tìm thấy các thẻ được ghim bằng cách nhấn vào nút Hiển thị thẻ.</translation>
 <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> sang <ph name="TARGET_LANGUAGE" /></translation>
 <translation id="1683483432843341018">Yêu cầu trang web dành cho thiết bị di động</translation>
 <translation id="168715261339224929">Để sử dụng dấu trang trên tất cả các thiết bị của bạn, hãy bật đồng bộ hóa.</translation>
diff --git a/media/base/mac/color_space_util_mac.mm b/media/base/mac/color_space_util_mac.mm
index 6e0e685..261cab8bf 100644
--- a/media/base/mac/color_space_util_mac.mm
+++ b/media/base/mac/color_space_util_mac.mm
@@ -77,8 +77,7 @@
 }
 
 gfx::ColorSpace::PrimaryID GetCoreVideoPrimary(CFTypeRef primaries_untyped) {
-  // The named primaries. Default to BT709.
-  auto primary_id = gfx::ColorSpace::PrimaryID::BT709;
+  auto primary_id = gfx::ColorSpace::PrimaryID::INVALID;
   if (!GetImageBufferProperty(primaries_untyped, GetSupportedImagePrimaries(),
                               &primary_id)) {
     DLOG(ERROR) << "Failed to find CVImageBufferRef primaries: "
@@ -157,7 +156,7 @@
                                                    CFTypeRef gamma_untyped,
                                                    double* gamma) {
   // The named transfer function.
-  auto transfer_id = gfx::ColorSpace::TransferID::BT709;
+  auto transfer_id = gfx::ColorSpace::TransferID::INVALID;
   if (!GetImageBufferProperty(transfer_untyped, GetSupportedImageTransferFn(),
                               &transfer_id)) {
     DLOG(ERROR) << "Failed to find CVImageBufferRef transfer: "
@@ -167,19 +166,17 @@
   if (transfer_id != gfx::ColorSpace::TransferID::CUSTOM)
     return transfer_id;
 
-  // If we fail to retrieve the gamma parameter, fall back to BT709.
-  constexpr auto kDefaultTransferFn = gfx::ColorSpace::TransferID::BT709;
   CFNumberRef gamma_number = base::mac::CFCast<CFNumberRef>(gamma_untyped);
   if (!gamma_number) {
     DLOG(ERROR) << "Failed to get gamma level.";
-    return kDefaultTransferFn;
+    return gfx::ColorSpace::TransferID::INVALID;
   }
 
   // CGFloat is a double on 64-bit systems.
   CGFloat gamma_double = 0;
   if (!CFNumberGetValue(gamma_number, kCFNumberCGFloatType, &gamma_double)) {
     DLOG(ERROR) << "Failed to get CVImageBufferRef gamma level as float.";
-    return kDefaultTransferFn;
+    return gfx::ColorSpace::TransferID::INVALID;
   }
 
   if (gamma_double == 2.2)
@@ -241,14 +238,10 @@
   auto transfer_id =
       GetCoreVideoTransferFn(transfer_untyped, gamma_untyped, &gamma);
 
-  // Use a matrix id that is coherent with a primary id. Useful when we fail to
-  // parse the matrix. Previously it was always defaulting to MatrixID::BT709
-  // See http://crbug.com/788236.
-  if (matrix_id == gfx::ColorSpace::MatrixID::INVALID) {
-    if (primary_id == gfx::ColorSpace::PrimaryID::BT470BG)
-      matrix_id = gfx::ColorSpace::MatrixID::BT470BG;
-    else
-      matrix_id = gfx::ColorSpace::MatrixID::BT709;
+  if (primary_id == gfx::ColorSpace::PrimaryID::INVALID ||
+      matrix_id == gfx::ColorSpace::MatrixID::INVALID ||
+      transfer_id == gfx::ColorSpace::TransferID::INVALID) {
+    return gfx::ColorSpace();
   }
 
   // It is specified to the decoder to use luma=[16,235] chroma=[16,240] via
diff --git a/media/gpu/mac/vt_config_util_unittest.cc b/media/gpu/mac/vt_config_util_unittest.cc
index 183628f..96314e07 100644
--- a/media/gpu/mac/vt_config_util_unittest.cc
+++ b/media/gpu/mac/vt_config_util_unittest.cc
@@ -379,7 +379,7 @@
       CreateFormatDescription(CFSTR("Cows"), CFSTR("Go"), CFSTR("Moo"));
   ASSERT_TRUE(format_descriptor);
   auto cs = GetFormatDescriptionColorSpace(format_descriptor);
-  EXPECT_EQ(gfx::ColorSpace::CreateREC709(), cs);
+  EXPECT_FALSE(cs.IsValid());
 }
 
 TEST(VTConfigUtil, FormatDescriptionBT709) {
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.cc b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
index 1d669939..d42d751a 100644
--- a/media/gpu/mac/vt_video_decode_accelerator_mac.cc
+++ b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
@@ -2241,7 +2241,22 @@
   PictureInfo* picture_info = it->second.get();
   DCHECK(picture_info->gl_images.empty());
 
-  const gfx::ColorSpace color_space = GetImageBufferColorSpace(frame.image);
+  gfx::ColorSpace color_space;
+  if (codec_ == VideoCodec::kVP9) {
+    // Prefer the color space from the config if available. It generally comes
+    // from the color tag which is more expressive than the VP9 bitstream.
+    color_space = config_.container_color_space.ToGfxColorSpace();
+    if (!color_space.IsValid()) {
+      color_space = GetImageBufferColorSpace(frame.image);
+    }
+  } else {
+    // Otherwise prefer the frame color space.
+    color_space = GetImageBufferColorSpace(frame.image);
+    if (!color_space.IsValid()) {
+      color_space = config_.container_color_space.ToGfxColorSpace();
+    }
+  }
+
   std::vector<gfx::BufferPlane> planes;
   if (IsMultiPlaneFormatForHardwareVideoEnabled()) {
     planes.push_back(gfx::BufferPlane::DEFAULT);
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc
index 34b6e19..03dce1c 100644
--- a/net/dns/host_resolver.cc
+++ b/net/dns/host_resolver.cc
@@ -503,17 +503,6 @@
 }
 
 // static
-std::vector<HostResolverEndpointResult>
-HostResolver::AddressListToEndpointResults(const AddressList& address_list) {
-  HostResolverEndpointResult connection_endpoint;
-  connection_endpoint.ip_endpoints = address_list.endpoints();
-
-  std::vector<HostResolverEndpointResult> list;
-  list.push_back(std::move(connection_endpoint));
-  return list;
-}
-
-// static
 AddressList HostResolver::EndpointResultToAddressList(
     base::span<const HostResolverEndpointResult> endpoints,
     const std::set<std::string>& aliases) {
diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h
index b538f751..c4f7cfe 100644
--- a/net/dns/host_resolver.h
+++ b/net/dns/host_resolver.h
@@ -499,17 +499,8 @@
   // Helper for squashing error code to a small set of DNS error codes.
   static int SquashErrorCode(int error);
 
-  // Utility to convert an AddressList to an equivalent list of
-  // `HostResolverEndpointResults`. Assumes all addresses in the input list
-  // represent the default non-protocol endpoint.
-  //
-  // TODO(crbug.com/1264933): Delete once `AddressList` usage is fully replaced
-  // in `HostResolver` and results.
-  static std::vector<HostResolverEndpointResult> AddressListToEndpointResults(
-      const AddressList& address_list);
-
-  // Opposite conversion of `AddressListToEndpointResults()`. Builds an
-  // AddressList from the first non-protocol endpoint found in `endpoints`.
+  // Builds an AddressList from the first non-protocol endpoint found in
+  // `endpoints`.
   //
   // TODO(crbug.com/1264933): Delete once `AddressList` usage is fully replaced
   // in `HostResolver` and results.
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index de25eb07..6292c33 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2023-05-06 12:54 UTC
+# Last updated: 2023-05-07 12:54 UTC
 PinsListTimestamp
-1683377692
+1683464055
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json
index 86e83177..f83ec16 100644
--- a/net/http/transport_security_state_static_pins.json
+++ b/net/http/transport_security_state_static_pins.json
@@ -31,7 +31,7 @@
 // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets'
 // refer to, and the timestamp at which the pins list was last updated.
 //
-// Last updated: 2023-05-06 12:54 UTC
+// Last updated: 2023-05-07 12:54 UTC
 //
 {
   "pinsets": [
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 95384d7..5c839ee 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5734,9 +5734,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -5747,8 +5747,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -5899,9 +5899,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -5912,8 +5912,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -6046,9 +6046,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -6059,8 +6059,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.coverage.json b/testing/buildbot/chromium.coverage.json
index 611f394..86fca54 100644
--- a/testing/buildbot/chromium.coverage.json
+++ b/testing/buildbot/chromium.coverage.json
@@ -25539,9 +25539,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -25552,8 +25552,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -25704,9 +25704,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -25717,8 +25717,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -25851,9 +25851,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -25864,8 +25864,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 417416b..c1d22956 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -41594,9 +41594,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -41606,8 +41606,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -41759,9 +41759,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -41771,8 +41771,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -41906,9 +41906,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -41918,8 +41918,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -43383,9 +43383,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -43395,8 +43395,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -43548,9 +43548,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -43560,8 +43560,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -43695,9 +43695,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -43707,8 +43707,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -44443,9 +44443,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -44455,8 +44455,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 2109f8c..3b03fc0 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -18116,12 +18116,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18132,8 +18132,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -18301,12 +18301,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18317,8 +18317,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
@@ -18463,12 +18463,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 115.0.5755.0",
+        "description": "Run with ash-chrome version 115.0.5757.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18479,8 +18479,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v115.0.5755.0",
-              "revision": "version:115.0.5755.0"
+              "location": "lacros_version_skew_tests_v115.0.5757.0",
+              "revision": "version:115.0.5757.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index a41ec661..f7ea636 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,16 +22,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5755.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5757.0/test_ash_chrome',
     ],
-    'description': 'Run with ash-chrome version 115.0.5755.0',
+    'description': 'Run with ash-chrome version 115.0.5757.0',
     'identifier': 'Lacros version skew testing ash canary',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v115.0.5755.0',
-          'revision': 'version:115.0.5755.0',
+          'location': 'lacros_version_skew_tests_v115.0.5757.0',
+          'revision': 'version:115.0.5757.0',
         },
       ],
     },
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
index 6197cf10..08d82e2 100644
--- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
+++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -1902,12 +1902,14 @@
     if (CSSPrimitiveValue* value_percent =
             ConsumePercent(args, context, CSSPrimitiveValue::ValueRange::kAll);
         value_percent) {
-      lightness = std::max(0.0, value_percent->GetDoubleValue());
+      lightness =
+          std::min(100.0, std::max(0.0, value_percent->GetDoubleValue()));
     } else if (CSSPrimitiveValue* value = ConsumeNumber(
                    args, context, CSSPrimitiveValue::ValueRange::kAll);
                value) {
-      lightness = std::max(0.0, value->GetDoubleValue()) *
-                  (function_id == CSSValueID::kLab ? 1.0 : 100.0);
+      lightness =
+          std::min(100.0, std::max(0.0, value->GetDoubleValue()) *
+                              (function_id == CSSValueID::kLab ? 1.0 : 100.0));
     } else {
       return false;
     }
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
index ce7a4d0..346044e 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
+++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -538,6 +538,10 @@
                network::features::kAttributionReportingCrossAppWeb);
   }
 
+  if (trial_name == "ComputePressure") {
+    return base::FeatureList::IsEnabled(features::kComputePressure);
+  }
+
   return true;
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/color.cc b/third_party/blink/renderer/platform/graphics/color.cc
index 820e718..7909b6f 100644
--- a/third_party/blink/renderer/platform/graphics/color.cc
+++ b/third_party/blink/renderer/platform/graphics/color.cc
@@ -193,8 +193,8 @@
 
   if (color_space == ColorSpace::kLab || color_space == ColorSpace::kOklab ||
       color_space == ColorSpace::kLch || color_space == ColorSpace::kOklch) {
-    // param0_ is luminance which cannot be negative.
-    result.param0_ = std::max(result.param0_, 0.f);
+    // param0_ is luminance which cannot be negative or above 100%.
+    result.param0_ = std::min(100.f, std::max(result.param0_, 0.f));
   }
   if (color_space == ColorSpace::kLch || color_space == ColorSpace::kOklch) {
     // param1_ is chroma, which cannot be negative.
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index a020ee69..91d0e74 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -667,8 +667,13 @@
       base_feature: "none",
     },
     {
+      // blink::features::kComputePressure is a kill switch for the API. If the
+      // feature is disabled, origin trial tokens are ignored.
       name: "ComputePressure",
+      origin_trial_feature_name: "ComputePressure",
       status: "experimental",
+      base_feature_status: "enabled",
+      copied_from_base_feature_if: "overridden",
     },
     {
       name: "ConfirmationOfAction",
@@ -2353,7 +2358,7 @@
     },
     {
       name: "NodeAsNSResolver",
-      status: "experimental",
+      status: "stable",
     },
     {
       name: "NoIdleEncodingForWebTests",
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
index 47d4cd38..a0512c4 100644
--- a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
+++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
@@ -92,7 +92,9 @@
       base::FeatureList::IsEnabled(
           base::features::kPartitionAllocBackupRefPtr) &&
       (brp_mode == base::features::BackupRefPtrMode::kEnabled ||
-       brp_mode == base::features::BackupRefPtrMode::kEnabledWithoutZapping) &&
+       brp_mode == base::features::BackupRefPtrMode::kEnabledWithoutZapping ||
+       brp_mode ==
+           base::features::BackupRefPtrMode::kEnabledWithMemoryReclaimer) &&
       process_affected_by_brp_flag;
 #else  // BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT)
   const bool process_affected_by_brp_flag = false;
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a73584d..119f4686 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -865,7 +865,7 @@
 
 # Passes with the WPT runner but not the internal one. (???)
 crbug.com/1175040 external/wpt/css/css-backgrounds/background-repeat-space-1a.html [ Failure Pass ]
-crbug.com/1175040 external/wpt/css/css-backgrounds/background-repeat-space-1b.html [ Failure Pass ]
+crbug.com/1175040 [ Mac10.15 Release ] external/wpt/css/css-backgrounds/background-repeat-space-1b.html [ Failure Pass ]
 crbug.com/1175040 external/wpt/css/css-backgrounds/background-repeat-space-1c.html [ Failure Pass ]
 crbug.com/1175040 external/wpt/css/css-backgrounds/background-repeat-space-3.html [ Failure Pass ]
 crbug.com/1175040 external/wpt/css/css-backgrounds/background-repeat-space-4.html [ Failure Pass ]
@@ -2227,7 +2227,9 @@
 
 # These tests have test harness errors and PASS lines that have a
 # non-deterministic order.
-crbug.com/705125 fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Failure ]
+crbug.com/705125 [ Debug Mac13-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Failure ]
+crbug.com/705125 [ Mac11-arm64 Release ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Failure ]
+crbug.com/705125 [ Mac12-arm64 Release ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Failure ]
 
 # Working on getting the CSP tests going:
 
@@ -2675,7 +2677,6 @@
 crbug.com/1088475 [ Mac10.15 ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Failure Pass Timeout ]
 crbug.com/1088475 [ Mac11 ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Failure Pass Timeout ]
 crbug.com/1088475 [ Mac12 ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Failure Pass Timeout ]
-crbug.com/1088475 [ Mac13-arm64 ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Failure Pass Timeout ]
 crbug.com/1088475 [ Win ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Failure Pass Timeout ]
 
 # FontFace object failures detected by WPT test
@@ -3751,7 +3752,9 @@
 # Tests failing when enabling new modern media controls
 crbug.com/832157 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html [ Crash Failure Pass Timeout ]
 crbug.com/832169 media/media-controls-fit-properly-while-zoomed.html [ Failure Pass ]
-crbug.com/849694 [ Mac ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
+crbug.com/849694 [ Debug Mac13-arm64 ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
+crbug.com/849694 [ Mac10.14 Release ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
+crbug.com/849694 [ Mac12 ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
 
 # Tests currently failing on Windows when run on Swarming
 crbug.com/757165 [ Win ] compositing/culling/filter-occlusion-blur.html [ Crash Failure Pass Timeout ]
@@ -5004,7 +5007,6 @@
 crbug.com/1048761 external/wpt/websockets/binary/001.html?wpt_flags=h2 [ Failure ]
 crbug.com/1048761 external/wpt/websockets/binary/002.html?wpt_flags=h2 [ Failure ]
 crbug.com/1048761 [ Linux ] external/wpt/websockets/binary/004.html?wpt_flags=h2 [ Failure ]
-crbug.com/1048761 [ Debug Mac12 ] external/wpt/websockets/binary/004.html?wpt_flags=h2 [ Failure ]
 crbug.com/1048761 [ Win ] external/wpt/websockets/binary/004.html?wpt_flags=h2 [ Failure ]
 crbug.com/1048761 external/wpt/websockets/binary/005.html?wpt_flags=h2 [ Failure ]
 crbug.com/1048761 [ Linux ] external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html?wpt_flags=h2 [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-interpolation.html b/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-interpolation.html
index 7bda888..d22f534 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-interpolation.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-interpolation.html
@@ -102,7 +102,7 @@
   {at: 0.3, expect: 'oklab(0.3 0 0)'},
   {at: 0.6, expect: 'oklab(0.6 0 0)'},
   {at: 1, expect: 'oklab(1 0 0)'},
-  {at: 1.5, expect: 'oklab(1.5 0 0)'},
+  {at: 1.5, expect: 'oklab(1 0 0)'},
 ]);
 
 test_interpolation({
@@ -115,7 +115,7 @@
   {at: 0.3, expect: 'oklab(0.3 0 0)'},
   {at: 0.6, expect: 'oklab(0.6 0 0)'},
   {at: 1, expect: 'oklab(1 0 0)'},
-  {at: 1.5, expect: 'oklab(1.5 0 0)'},
+  {at: 1.5, expect: 'oklab(1 0 0)'},
 ]);
 
 test_interpolation({
@@ -128,6 +128,6 @@
   {at: 0.3, expect: 'oklab(0.3 0 0)'},
   {at: 0.6, expect: 'oklab(0.6 0 0)'},
   {at: 1, expect: 'oklab(1 0 0)'},
-  {at: 1.5, expect: 'oklab(1.5 0 0)'},
+  {at: 1.5, expect: 'oklab(1 0 0)'},
 ]);
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-1.html b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-1.html
new file mode 100644
index 0000000..fdb3955
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0 to 100</title>
+<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#ok-lab">
+<link rel="match" href="lab-l-over-100-ref.html">
+<meta name="assert" content="lab() with lightness greater than 100">
+<style>
+    .ref { background-color: lab(100 150 20); width: 100px; height: 100px}
+    /* l = 150 should clamp back to 100 */
+    .test { background-color: lab(150 150 20); width: 100px; height: 100px}
+</style>
+
+<body>
+    <p>Test passes if you see a single color.</p>
+    <div class="ref"></div>
+    <div class="test"></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-2.html b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-2.html
new file mode 100644
index 0000000..f62f9e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-2.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0% to 100%</title>
+<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#ok-lab">
+<link rel="match" href="lab-l-over-100-ref.html">
+<meta name="assert" content="lab() with lightness greater than 100%">
+<style>
+    .ref { background-color: lab(100% 150 20); width: 100px; height: 100px}
+    /* l = 150 should clamp back to 100 */
+    .test { background-color: lab(150% 150 20); width: 100px; height: 100px}
+</style>
+
+<body>
+    <p>Test passes if you see a single color.</p>
+    <div class="ref"></div>
+    <div class="test"></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-ref.html b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-ref.html
new file mode 100644
index 0000000..57328cf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/lab-l-over-100-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0 to 100</title>
+<style>
+    .ref { background-color: lab(100 150 20); width: 100px; height: 200px}
+</style>
+
+<body>
+    <p>Test passes if you see a single color.</p>
+    <div class="ref"></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-lab-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-lab-expected.txt
index 10b4bbb..4445e63 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-lab-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-lab-expected.txt
@@ -1,11 +1,11 @@
 This is a testharness.js-based test.
-Found 104 tests; 88 PASS, 16 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 104 tests; 92 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Property color value 'lab(0 0 0)'
 PASS Property color value 'lab(0 0 0 / 1)'
 PASS Property color value 'lab(0 0 0 / 0.5)'
 PASS Property color value 'lab(20 0 10/0.5)'
 PASS Property color value 'lab(20 0 10/50%)'
-FAIL Property color value 'lab(400 0 10/50%)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 100 +/- 0.0001, expected 100 but got 400
+PASS Property color value 'lab(400 0 10/50%)'
 PASS Property color value 'lab(50 -160 160)'
 PASS Property color value 'lab(50 -200 200)'
 PASS Property color value 'lab(0 0 0 / -10%)'
@@ -14,21 +14,21 @@
 PASS Property color value 'lab(-40 0 0)'
 PASS Property color value 'lab(50 -20 0)'
 PASS Property color value 'lab(50 0 -20)'
-FAIL Property color value 'lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 100 +/- 0.0001, expected 100 but got 150
+PASS Property color value 'lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))'
 PASS Property color value 'lab(calc(-50 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))'
 PASS Property color value 'lab(none none none / none)'
 PASS Property color value 'lab(none none none)'
 PASS Property color value 'lab(20 none none / none)'
 PASS Property color value 'lab(none none none / 0.5)'
 PASS Property color value 'lab(0 0 0 / none)'
-FAIL Property color value 'lab(calc(NaN) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got Infinity
-FAIL Property color value 'lab(calc(0 / 0) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got Infinity
+FAIL Property color value 'lab(calc(NaN) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got 100
+FAIL Property color value 'lab(calc(0 / 0) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got 100
 PASS Property color value 'oklab(0 0 0)'
 PASS Property color value 'oklab(0 0 0 / 1)'
 PASS Property color value 'oklab(0 0 0 / 0.5)'
 PASS Property color value 'oklab(0.2 0 0.1/0.5)'
 PASS Property color value 'oklab(0.2 0 0.1/50%)'
-FAIL Property color value 'oklab(4 0 0.1/50%)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 1 +/- 0.0001, expected 1 but got 4
+PASS Property color value 'oklab(4 0 0.1/50%)'
 PASS Property color value 'oklab(0.5 -1.6 1.6)'
 PASS Property color value 'oklab(0.5 -2 2)'
 PASS Property color value 'oklab(0 0 0 / -10%)'
@@ -37,7 +37,7 @@
 PASS Property color value 'oklab(-0.4 0 0)'
 PASS Property color value 'oklab(0.5 -0.2 0)'
 PASS Property color value 'oklab(0.5 0 -0.2)'
-FAIL Property color value 'oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 1 +/- 0.0001, expected 1 but got 1.5
+PASS Property color value 'oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))'
 PASS Property color value 'oklab(calc(-0.5 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))'
 PASS Property color value 'oklab(none none none / none)'
 PASS Property color value 'oklab(none none none)'
@@ -46,8 +46,8 @@
 PASS Property color value 'oklab(0 0 0 / none)'
 FAIL Property color value 'lab(20% -50% 90%/0.5)' assert_true: 'lab(20% -50% 90%/0.5)' is a supported value for color. expected true got false
 FAIL Property color value 'oklab(20% 70% -80%/0.5)' assert_true: 'oklab(20% 70% -80%/0.5)' is a supported value for color. expected true got false
-FAIL Property color value 'oklab(calc(NaN) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got Infinity
-FAIL Property color value 'oklab(calc(0 / 0) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got Infinity
+FAIL Property color value 'oklab(calc(NaN) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got 1
+FAIL Property color value 'oklab(calc(0 / 0) 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 0 +/- 0.0001, expected 0 but got 1
 PASS Property color value 'lch(0 0 0deg)'
 PASS Property color value 'lch(0 0 0deg / 1)'
 PASS Property color value 'lch(0 0 0deg / 0.5)'
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-lab-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-lab-expected.txt
index a6ddfcc1..0dc2ec7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-lab-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-lab-expected.txt
@@ -1,11 +1,11 @@
 This is a testharness.js-based test.
-Found 116 tests; 92 PASS, 24 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 116 tests; 98 PASS, 18 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS e.style['color'] = "lab(0 0 0)" should set the property value
 PASS e.style['color'] = "lab(0 0 0 / 1)" should set the property value
 PASS e.style['color'] = "lab(0 0 0 / 0.5)" should set the property value
 PASS e.style['color'] = "lab(20 0 10/0.5)" should set the property value
 PASS e.style['color'] = "lab(20 0 10/50%)" should set the property value
-FAIL e.style['color'] = "lab(400 0 10/50%)" should set the property value assert_equals: serialization should be canonical expected "lab(100 0 10 / 0.5)" but got "lab(400 0 10 / 0.5)"
+PASS e.style['color'] = "lab(400 0 10/50%)" should set the property value
 PASS e.style['color'] = "lab(50 -160 160)" should set the property value
 PASS e.style['color'] = "lab(50 -200 200)" should set the property value
 PASS e.style['color'] = "lab(0 0 0 / -10%)" should set the property value
@@ -14,24 +14,24 @@
 PASS e.style['color'] = "lab(-40 0 0)" should set the property value
 PASS e.style['color'] = "lab(50 -20 0)" should set the property value
 PASS e.style['color'] = "lab(50 0 -20)" should set the property value
-FAIL e.style['color'] = "lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))" should set the property value assert_equals: serialization should be canonical expected "lab(100 -0.5 1.5 / 0.5)" but got "lab(150 -0.5 1.5 / 0.5)"
+PASS e.style['color'] = "lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))" should set the property value
 PASS e.style['color'] = "lab(calc(-50 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))" should set the property value
 PASS e.style['color'] = "lab(none none none / none)" should set the property value
 PASS e.style['color'] = "lab(none none none)" should set the property value
 PASS e.style['color'] = "lab(20 none none / none)" should set the property value
 PASS e.style['color'] = "lab(none none none / 0.5)" should set the property value
 PASS e.style['color'] = "lab(0 0 0 / none)" should set the property value
-FAIL e.style['color'] = "lab(calc(infinity) 0 0)" should set the property value assert_equals: serialization should be canonical expected "lab(100 0 0)" but got "lab(Infinity 0 0)"
+PASS e.style['color'] = "lab(calc(infinity) 0 0)" should set the property value
 FAIL e.style['color'] = "lab(50 calc(infinity) 0)" should set the property value assert_equals: serialization should be canonical expected "lab(50 calc(infinity) 0)" but got "lab(50 Infinity 0)"
 FAIL e.style['color'] = "lab(50 calc(-infinity) 0)" should set the property value assert_equals: serialization should be canonical expected "lab(50 calc(-infinity) 0)" but got "lab(50 -Infinity 0)"
-FAIL e.style['color'] = "lab(calc(NaN) 0 0)" should set the property value assert_equals: serialization should be canonical expected "lab(calc(NaN) 0 0)" but got "lab(Infinity 0 0)"
-FAIL e.style['color'] = "lab(calc(0 / 0) 0 0)" should set the property value assert_equals: serialization should be canonical expected "lab(calc(NaN) 0 0)" but got "lab(Infinity 0 0)"
+FAIL e.style['color'] = "lab(calc(NaN) 0 0)" should set the property value assert_equals: serialization should be canonical expected "lab(calc(NaN) 0 0)" but got "lab(100 0 0)"
+FAIL e.style['color'] = "lab(calc(0 / 0) 0 0)" should set the property value assert_equals: serialization should be canonical expected "lab(calc(NaN) 0 0)" but got "lab(100 0 0)"
 PASS e.style['color'] = "oklab(0 0 0)" should set the property value
 PASS e.style['color'] = "oklab(0 0 0 / 1)" should set the property value
 PASS e.style['color'] = "oklab(0 0 0 / 0.5)" should set the property value
 PASS e.style['color'] = "oklab(0.2 0 0.1/0.5)" should set the property value
 PASS e.style['color'] = "oklab(0.2 0 0.1/50%)" should set the property value
-FAIL e.style['color'] = "oklab(4 0 0.1/50%)" should set the property value assert_equals: serialization should be canonical expected "oklab(1 0 0.1 / 0.5)" but got "oklab(4 0 0.1 / 0.5)"
+PASS e.style['color'] = "oklab(4 0 0.1/50%)" should set the property value
 PASS e.style['color'] = "oklab(0.5 -1.6 1.6)" should set the property value
 PASS e.style['color'] = "oklab(0.5 -2 2)" should set the property value
 PASS e.style['color'] = "oklab(0 0 0 / -10%)" should set the property value
@@ -40,7 +40,7 @@
 PASS e.style['color'] = "oklab(-0.4 0 0)" should set the property value
 PASS e.style['color'] = "oklab(0.5 -2 0)" should set the property value
 PASS e.style['color'] = "oklab(0.5 0 -2)" should set the property value
-FAIL e.style['color'] = "oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))" should set the property value assert_equals: serialization should be canonical expected "oklab(1 -0.5 1.5 / 0.5)" but got "oklab(1.5 -0.5 1.5 / 0.5)"
+PASS e.style['color'] = "oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))" should set the property value
 PASS e.style['color'] = "oklab(calc(-0.5 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))" should set the property value
 PASS e.style['color'] = "oklab(none none none / none)" should set the property value
 PASS e.style['color'] = "oklab(none none none)" should set the property value
@@ -49,11 +49,11 @@
 PASS e.style['color'] = "oklab(0 0 0 / none)" should set the property value
 FAIL e.style['color'] = "lab(20% -50% 90%/0.5)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "oklab(20% 70% -80%/0.5)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "oklab(calc(infinity) 0 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(1 0 0)" but got "oklab(Infinity 0 0)"
+PASS e.style['color'] = "oklab(calc(infinity) 0 0)" should set the property value
 FAIL e.style['color'] = "oklab(0.5 calc(infinity) 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(0.5 calc(infinity) 0)" but got "oklab(0.5 Infinity 0)"
 FAIL e.style['color'] = "oklab(0.5 calc(-infinity) 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(0.5 calc(-infinity) 0)" but got "oklab(0.5 -Infinity 0)"
-FAIL e.style['color'] = "oklab(calc(NaN) 0 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(calc(NaN) 0 0)" but got "oklab(Infinity 0 0)"
-FAIL e.style['color'] = "oklab(calc(0 / 0) 0 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(calc(NaN) 0 0)" but got "oklab(Infinity 0 0)"
+FAIL e.style['color'] = "oklab(calc(NaN) 0 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(calc(NaN) 0 0)" but got "oklab(1 0 0)"
+FAIL e.style['color'] = "oklab(calc(0 / 0) 0 0)" should set the property value assert_equals: serialization should be canonical expected "oklab(calc(NaN) 0 0)" but got "oklab(1 0 0)"
 PASS e.style['color'] = "lch(0 0 0deg)" should set the property value
 PASS e.style['color'] = "lch(0 0 0deg / 1)" should set the property value
 PASS e.style['color'] = "lch(0 0 0deg / 0.5)" should set the property value
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/compute-pressure-origin-trial-interfaces.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/compute-pressure-origin-trial-interfaces.html
new file mode 100644
index 0000000..3d87c270
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/compute-pressure-origin-trial-interfaces.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<!-- Generate token with the command:
+generate_token.py http://127.0.0.1:8000 ComputePressure --expire-timestamp=2000000000
+-- -->
+<meta http-equiv="origin-trial" content="A/ijBvNMU7/C+St5uZUkD/FosB1Q2iRiNhdXDcXxO0DsGQqsNxGOGR1ZFC1qmM9u1rq8F/OJkTPHLD/ei+WfvQ0AAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQ29tcHV0ZVByZXNzdXJlIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
+<title>Compute Pressure API - interfaces exposed by origin trial</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../../resources/origin-trials-helper.js"></script>
+<script>
+test(t => {
+  OriginTrialsHelper.check_properties_exist(this, {
+    'PressureObserver': ['observe', 'unobserve', 'disconnect', 'takeRecords'],
+  });
+}, 'Compute Pressure API interfaces and properties in Origin-Trial enabled document.');
+
+test(t => {
+  assert_true('PressureObserver' in window, 'PressureObserver object exists on window scope');
+  assert_not_equals(window.PressureObserver, undefined, 'PressureObserver can be accessed on window');
+}, 'Compute Pressure API entry point in Origin-Trial enabled document.');
+</script>
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js
index 4cb09493..6f7c792 100644
--- a/third_party/closure_compiler/externs/file_manager_private.js
+++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -285,6 +285,7 @@
   IS_ARBITRARY_SYNC_FOLDER: 'isArbitrarySyncFolder',
   SYNC_STATUS: 'syncStatus',
   PROGRESS: 'progress',
+  SHORTCUT: 'shortcut',
 };
 
 /**
@@ -363,15 +364,6 @@
 /**
  * @enum {string}
  */
-chrome.fileManagerPrivate.SecurityErrorType = {
-  DLP: 'dlp',
-  ENTERPRISE_CONNECTORS: 'enterprise_connectors',
-  DLP_WARNING_TIMEOUT: 'dlp_warning_timeout',
-};
-
-/**
- * @enum {string}
- */
 chrome.fileManagerPrivate.IOTaskType = {
   COPY: 'copy',
   DELETE: 'delete',
@@ -387,6 +379,15 @@
 /**
  * @enum {string}
  */
+chrome.fileManagerPrivate.SecurityErrorType = {
+  DLP: 'dlp',
+  ENTERPRISE_CONNECTORS: 'enterprise_connectors',
+  DLP_WARNING_TIMEOUT: 'dlp_warning_timeout',
+};
+
+/**
+ * @enum {string}
+ */
 chrome.fileManagerPrivate.RecentDateBucket = {
   TODAY: 'today',
   YESTERDAY: 'yesterday',
@@ -884,6 +885,7 @@
  * @typedef {{
  *   type: !chrome.fileManagerPrivate.IOTaskType,
  *   state: !chrome.fileManagerPrivate.IOTaskState,
+ *   securityError: !chrome.fileManagerPrivate.SecurityErrorType,
  *   sourceName: string,
  *   numRemainingItems: number,
  *   itemCount: number,
diff --git a/third_party/cros-components/BUILD.gn b/third_party/cros-components/BUILD.gn
index 615a4ce7..86549e7 100644
--- a/third_party/cros-components/BUILD.gn
+++ b/third_party/cros-components/BUILD.gn
@@ -13,6 +13,10 @@
   "checkbox/checkbox.ts",
   "radio/radio.ts",
   "switch/switch.ts",
+  "helpers/helpers.ts",
+  "async_helpers/async_helpers.ts",
+  "lottie_renderer/lottie-renderer.ts",
+  "lottie_renderer/worker.ts",
 ]
 
 ts_library("cros_components__ts_library") {
@@ -20,7 +24,8 @@
   visibility = [ ":*" ]
 
   root_dir = "src/"
-  out_dir = "$root_gen_dir/ui/webui/resources/tsc/cros_components/to_be_rewritten"
+  out_dir =
+      "$root_gen_dir/ui/webui/resources/tsc/cros_components/to_be_rewritten"
 
   in_files = _cros_components_ts_files
 
@@ -48,7 +53,8 @@
 }
 
 rewrite_imports("cros_components_ts") {
-  base_dir = "$root_gen_dir/ui/webui/resources/tsc/cros_components/to_be_rewritten"
+  base_dir =
+      "$root_gen_dir/ui/webui/resources/tsc/cros_components/to_be_rewritten"
 
   # Rollup maps URLs like `chrome://resources/cros_components/*` to
   # files in
@@ -63,6 +69,11 @@
   import_mappings = [
     "lit|//resources/mwc/lit/index.js",
     "@material/|chrome://resources/mwc/@material/",
+
+    # Add js prefix's to any internal imports so they work at runtime.
+    "../async_helpers/async_helpers|../async_helpers/async_helpers.js",
+    "../helpers/helpers|../helpers/helpers.js",
+    "./worker|./worker.js",
   ]
 
   deps = [
@@ -78,8 +89,12 @@
   manifest_files = []
 
   deps = [ ":cros_components_ts" ]
-  manifest_files +=
-      filter_include(get_target_outputs(":cros_components_ts"),
-                     [ "*.manifest" ])
+  manifest_files += filter_include(get_target_outputs(":cros_components_ts"),
+                                   [ "*.manifest" ])
   resource_path_prefix = "cros_components"
+  input_files_base_dir = rebase_path(".", "//")
+  input_files = [ "src/lottie_renderer/lottie_worker.js" ]
+  resource_path_rewrites = [
+    "src/lottie_renderer/lottie_worker.js|lottie_renderer/lottie_worker.js",
+  ]
 }
diff --git a/third_party/cros-components/externs/cros_lottie_renderer_externs.js b/third_party/cros-components/externs/cros_lottie_renderer_externs.js
new file mode 100644
index 0000000..218ef4f
--- /dev/null
+++ b/third_party/cros-components/externs/cros_lottie_renderer_externs.js
@@ -0,0 +1,17 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/* Minimal externs file provided for places in the code that
+ * still use JavaScript instead of TypeScript.
+ * @externs
+ */
+
+/**
+ * @constructor
+ * @extends {HTMLElement}
+ */
+function LottieRenderer() {}
+
+LottieRenderer.prototype.play = function() {};
+LottieRenderer.prototype.pause = function() {};
\ No newline at end of file
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 1276654..8951b31b 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -84896,8 +84896,17 @@
   <int value="8" label="Reload"/>
   <int value="9" label="Keyword"/>
   <int value="10" label="Keyword generated"/>
+  <int value="33554432" label="From address bar"/>
   <int value="33554433" label="From address bar | Typed"/>
+  <int value="33554434" label="From address bar | Auto bookmark"/>
+  <int value="33554435" label="From address bar | Auto subframe"/>
+  <int value="33554436" label="From address bar | Manual subframe"/>
   <int value="33554437" label="From address bar | Generated"/>
+  <int value="33554438" label="From address bar | Auto toplevel"/>
+  <int value="33554439" label="From address bar | Form submit"/>
+  <int value="33554440" label="From address bar | Reload"/>
+  <int value="33554441" label="From address bar | Keyword"/>
+  <int value="33554442" label="From address bar | Keyword generated"/>
 </enum>
 
 <enum name="PrerenderBackNavigationEligibility">
diff --git a/tools/nocompile/OWNERS b/tools/nocompile/OWNERS
index 859c2c6..6e48ff0 100644
--- a/tools/nocompile/OWNERS
+++ b/tools/nocompile/OWNERS
@@ -1 +1,2 @@
 dcheng@chromium.org
+kristianm@chromium.org
diff --git a/tools/nocompile/driver.py b/tools/nocompile/driver.py
index 236de90..7404390 100755
--- a/tools/nocompile/driver.py
+++ b/tools/nocompile/driver.py
@@ -14,6 +14,7 @@
 
 import ast
 import concurrent.futures
+import functools
 import io
 import os
 import re
@@ -112,7 +113,7 @@
   return expectation
 
 
-def ExtractTestConfigs(sourcefile_path, suite_name):
+def ExtractTestConfigs(sourcefile_path, suite_name, resultfile, resultlog):
   """Parses the source file for test configurations.
 
   Each no-compile test in the file is separated by an ifdef macro.  We scan
@@ -123,10 +124,12 @@
   Args:
     sourcefile_path: The path to the source file.
     suite_name: The name of the test suite.
+    resultfile: File object for .cc file that results are written to.
+    resultlog: File object for the log file.
 
   Returns:
-    A list of test configurations. Each test configuration is a dictionary of
-    the form:
+    A list of test configurations, excluding tests prefixed with DISABLED_. Each
+    test configuration is a dictionary of the form:
 
       { name: 'NCTEST_NAME'
         suite_name: 'SOURCE_FILE_NAME'
@@ -143,34 +146,41 @@
     is actually None, then this specifies a compiler sanity check test, which
     should expect a SUCCESSFUL compilation.
   """
-  sourcefile = open(sourcefile_path, 'r', encoding='utf-8')
-
-  # Start with at least the compiler sanity test.  You need to always have one
-  # sanity test to show that compiler flags and configuration are not just
-  # wrong.  Otherwise, having a misconfigured compiler, or an error in the
-  # shared portions of the .nc file would cause all tests to erroneously pass.
-  test_configs = []
-
-  for line in sourcefile:
-    match_result = NCTEST_CONFIG_RE.match(line)
-    if not match_result:
-      continue
-
-    groups = match_result.groups()
-
-    # Grab the name and remove the defined() predicate if there is one.
-    name = groups[0]
-    strip_result = STRIP_DEFINED_RE.match(name)
-    if strip_result:
-      name = strip_result.group(1)
-
-    # Read expectations if there are any.
-    test_configs.append({
-        'name': name,
+  with open(sourcefile_path, 'r', encoding='utf-8') as sourcefile:
+    # Start with a compiler smoke test. This is important to show that compiler
+    # flags and configuration are not just wrong. Otherwise, having a
+    # misconfigured compiler, or an error in the shared portions of the .nc file
+    # would cause all tests to erroneously pass.
+    test_configs = [{
+        'name': 'NCTEST_SMOKE',
         'suite_name': suite_name,
-        'expectations': ParseExpectation(groups[1])
-    })
-  sourcefile.close()
+        'expectations': None,
+    }]
+
+    for line in sourcefile:
+      match_result = NCTEST_CONFIG_RE.match(line)
+      if not match_result:
+        continue
+
+      groups = match_result.groups()
+
+      # Grab the name and remove the defined() predicate if there is one.
+      name = groups[0]
+      strip_result = STRIP_DEFINED_RE.match(name)
+      if strip_result:
+        name = strip_result.group(1)
+
+      config = {
+          'name': name,
+          'suite_name': suite_name,
+          'expectations': ParseExpectation(groups[1])
+      }
+
+      if config['name'].startswith('DISABLED_'):
+        PassTest(resultfile, resultlog, config)
+        continue
+
+      test_configs.append(config)
   return test_configs
 
 
@@ -392,70 +402,51 @@
   words = [w.capitalize() for w in words]
   suite_name = 'NoCompile' + ''.join(words)
 
-  test_configs = ExtractTestConfigs(sourcefile_path, suite_name)
-  timings['extract_done'] = time.time()
+  with io.StringIO() as resultfile, io.StringIO() as resultlog:
+    resultfile.write(RESULT_FILE_HEADER % sourcefile_path)
 
-  resultfile = io.StringIO()
-  resultlog = io.StringIO()
-  resultfile.write(RESULT_FILE_HEADER % sourcefile_path)
+    test_configs = ExtractTestConfigs(sourcefile_path, suite_name, resultfile,
+                                      resultlog)
+    timings['extract_done'] = time.time()
 
-  # Run the no-compile tests, but ensure we do not run more than |parallelism|
-  # tests at once.
-  timings['header_written'] = time.time()
-  finished_tests = []
+    # Run the no-compile tests, but ensure we do not run more than |parallelism|
+    # tests at once.
+    timings['header_written'] = time.time()
+    finished_tests = []
 
-  with concurrent.futures.ThreadPoolExecutor(
-      max_workers=parallelism) as executor:
-    executing_tests = {}
-    # Test that a basic compiler invocation actually works, i.e. the nocompile
-    # tests aren't all unexpectedly passing by failing in an incorrect way, e.g.
-    # a compiler crash or syntax error.
-    executing_tests[executor.submit(
-        RunTest, compiler, os.path.dirname(resultfile_path), cflags, {
-            'name': 'NCTEST_SANITY',
-            'suite_name': suite_name,
-            'expectations': None,
-        })] = 'NCTEST_SANITY'
+    with concurrent.futures.ThreadPoolExecutor(
+        max_workers=parallelism) as executor:
+      finished_tests = executor.map(
+          functools.partial(RunTest, compiler, os.path.dirname(resultfile_path),
+                            cflags), test_configs)
 
-    for config in test_configs:
-      if config['name'].startswith('DISABLED_'):
-        PassTest(resultfile, resultlog, config)
-      else:
-        executing_tests[executor.submit(RunTest, compiler,
-                                        os.path.dirname(resultfile_path),
-                                        cflags, config)] = config['name']
+      timings['compile_done'] = time.time()
 
-    for future in concurrent.futures.as_completed(executing_tests):
-      finished_tests.append(future.result())
+      finished_tests = sorted(finished_tests, key=lambda test: test['name'])
+      for test in finished_tests:
+        if test['name'] == 'NCTEST_SMOKE':
+          (stdout, stderr) = ExtractTestOutputAndCleanup(test)
+          return_code = test['returncode']
+          if return_code != 0:
+            sys.stdout.write(stdout)
+            sys.stderr.write(stderr)
+          continue
+        ProcessTestResult(resultfile, resultlog, test)
+      timings['results_processed'] = time.time()
 
-  timings['compile_done'] = time.time()
+    WriteStats(resultlog, suite_name, timings)
 
-  finished_tests = sorted(finished_tests, key=lambda test: test['name'])
-  for test in finished_tests:
-    if test['name'] == 'NCTEST_SANITY':
-      (stdout, stderr) = ExtractTestOutputAndCleanup(test)
-      return_code = test['returncode']
-      if return_code != 0:
-        sys.stdout.write(stdout)
-        sys.stderr.write(stderr)
-      continue
-    ProcessTestResult(resultfile, resultlog, test)
-  timings['results_processed'] = time.time()
+    with open(resultfile_path + '.log', 'w') as fd:
+      fd.write(resultlog.getvalue())
+    if return_code == 0:
+      with open(resultfile_path, 'w') as fd:
+        fd.write(resultfile.getvalue())
 
-  WriteStats(resultlog, suite_name, timings)
-
-  with open(resultfile_path + '.log', 'w') as fd:
-    fd.write(resultlog.getvalue())
-  if return_code == 0:
-    with open(resultfile_path, 'w') as fd:
-      fd.write(resultfile.getvalue())
-
-  resultfile.close()
-  if return_code != 0:
-    print("No-compile driver failure with return_code %d. Result log:" %
-          return_code)
-    print(resultlog.getvalue())
-  sys.exit(return_code)
+    if return_code != 0:
+      print("No-compile driver failure with return_code %d. Result log:" %
+            return_code)
+      print(resultlog.getvalue())
+    sys.exit(return_code)
 
 
 if __name__ == '__main__':
diff --git a/ui/file_manager/file_manager/foreground/js/toolbar_controller.js b/ui/file_manager/file_manager/foreground/js/toolbar_controller.js
index db2adf5..26ed978b 100644
--- a/ui/file_manager/file_manager/foreground/js/toolbar_controller.js
+++ b/ui/file_manager/file_manager/foreground/js/toolbar_controller.js
@@ -13,6 +13,7 @@
 import {VolumeManager} from '../../externs/volume_manager.js';
 import {getStore} from '../../state/store.js';
 
+import {constants} from './constants.js';
 import {DirectoryModel} from './directory_model.js';
 import {FileSelectionHandler} from './file_selection.js';
 import {A11yAnnounce} from './ui/a11y_announce.js';
@@ -121,6 +122,20 @@
     this.cloudButton_ = queryRequiredElement('#cloud-button', this.toolbar_);
 
     /**
+     * @private {!HTMLElement}
+     * @const
+     */
+    this.cloudStatusIcon_ = queryRequiredElement(
+        '#cloud-button > xf-icon[slot="suffix-icon"]', this.toolbar_);
+
+    /**
+     * @private {!HTMLElement}
+     * @const
+     */
+    this.cloudButtonIcon_ = queryRequiredElement(
+        '#cloud-button > xf-icon[slot="prefix-icon"]', this.toolbar_);
+
+    /**
      * @private {!Command}
      * @const
      */
@@ -515,7 +530,7 @@
    */
   updateBulkPinning_(state) {
     const bulkPinningPref = state.preferences?.driveFsBulkPinningEnabled;
-    const bulkPinningStage = state.bulkPinning?.stage;
+    const bulkPinning = state.bulkPinning;
     // If the bulk pinning preference is enabled, the user should not be able to
     // toggle items offline.
     if (this.bulkPinningPref_ !== bulkPinningPref) {
@@ -523,10 +538,49 @@
       this.togglePinnedCommand_.canExecuteChange(
           this.listContainer_.currentList);
     }
-    if (util.canBulkPinningCloudPanelShow(bulkPinningStage, bulkPinningPref)) {
-      this.cloudButton_.hidden = false;
+    if (!util.canBulkPinningCloudPanelShow(
+            bulkPinning?.stage, bulkPinningPref)) {
+      this.cloudButton_.hidden = true;
       return;
     }
-    this.cloudButton_.hidden = true;
+    this.updateBulkPinningIcon_(bulkPinning);
+    this.cloudButton_.hidden = false;
+  }
+
+  /**
+   * Encapsulates the logic to update the bulk pinning cloud icon and the sub
+   * icons that indicate the current stage it is in.
+   * @param {chrome.fileManagerPrivate.BulkPinProgress|undefined} progress
+   */
+  updateBulkPinningIcon_(progress) {
+    switch (progress?.stage) {
+      case chrome.fileManagerPrivate.BulkPinStage.SYNCING:
+        this.cloudButtonIcon_.setAttribute('type', constants.ICON_TYPES.CLOUD);
+        if (progress.bytesToPin === 0 ||
+            progress.pinnedBytes / progress.bytesToPin === 1) {
+          this.cloudStatusIcon_.setAttribute(
+              'type', constants.ICON_TYPES.CLOUD_DONE);
+        } else {
+          this.cloudStatusIcon_.setAttribute(
+              'type', constants.ICON_TYPES.CLOUD_SYNC);
+        }
+        break;
+      case chrome.fileManagerPrivate.BulkPinStage.NOT_ENOUGH_SPACE:
+        this.cloudButtonIcon_.setAttribute('type', constants.ICON_TYPES.CLOUD);
+        this.cloudStatusIcon_.setAttribute(
+            'type', constants.ICON_TYPES.CLOUD_ERROR);
+        break;
+      case chrome.fileManagerPrivate.BulkPinStage.PAUSED:
+        this.cloudButtonIcon_.setAttribute(
+            'type', constants.ICON_TYPES.BULK_PINNING_OFFLINE);
+        this.cloudStatusIcon_.removeAttribute('type');
+        this.cloudStatusIcon_.removeAttribute('size');
+        break;
+      default:
+        this.cloudButtonIcon_.setAttribute('type', constants.ICON_TYPES.CLOUD);
+        this.cloudStatusIcon_.removeAttribute('type');
+        this.cloudStatusIcon_.removeAttribute('size');
+        break;
+    }
   }
 }
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html
index a082e1b..fdbea984 100644
--- a/ui/file_manager/file_manager/main.html
+++ b/ui/file_manager/file_manager/main.html
@@ -405,7 +405,8 @@
             <cr-button id="cloud-button" class="icon-button menu-button" tabindex="0" hidden
                     aria-label="Cloud Placeholder"
                     command="#cloud" has-tooltip>
-              <xf-icon type="cloud"></xf-icon>
+              <xf-icon type="cloud" slot="prefix-icon"></xf-icon>
+              <xf-icon slot="suffix-icon"></xf-icon>
             </cr-button>
             <cr-button id="refresh-button" class="icon-button menu-button" tabindex="0" hidden
                     aria-label="$i18n{REFRESH_BUTTON_LABEL}"
diff --git a/ui/file_manager/file_manager/widgets/xf_cloud_panel.ts b/ui/file_manager/file_manager/widgets/xf_cloud_panel.ts
index a7feb65c..819766b 100644
--- a/ui/file_manager/file_manager/widgets/xf_cloud_panel.ts
+++ b/ui/file_manager/file_manager/widgets/xf_cloud_panel.ts
@@ -75,7 +75,7 @@
     converter: {
       fromAttribute:
           (value: string) => {
-            if (value in CloudPanelType) {
+            if (value && value.toUpperCase() in CloudPanelType) {
               return value as CloudPanelType;
             }
             console.warn(`Failed to convert ${value} to CloudPanelType`);
diff --git a/ui/file_manager/file_manager/widgets/xf_icon.ts b/ui/file_manager/file_manager/widgets/xf_icon.ts
index a440a72..21c15a01 100644
--- a/ui/file_manager/file_manager/widgets/xf_icon.ts
+++ b/ui/file_manager/file_manager/widgets/xf_icon.ts
@@ -416,6 +416,21 @@
     :host([type='word']) span {
       background-color: var(--cros-sys-file_ms_word);
     }
+
+    /**
+     * These icons are never shown on their own but are shown as suffix icons,
+     * hence why they are smaller with offset margins. At the moment these are
+     * only supported with "small" size prefix icons.
+     */
+    :host([type='cloud_done']) span,
+    :host([type='cloud_error']) span,
+    :host([type='cloud_offline']) span,
+    :host([type='cloud_sync']) span {
+      margin-inline-start: 10px;
+      margin-top: 8px;
+      height: 12px;
+      width: 12px;
+    }
   `;
 }
 
diff --git a/ui/file_manager/integration_tests/file_manager/toolbar.js b/ui/file_manager/integration_tests/file_manager/toolbar.js
index 7cb6aef..8d572172 100644
--- a/ui/file_manager/integration_tests/file_manager/toolbar.js
+++ b/ui/file_manager/integration_tests/file_manager/toolbar.js
@@ -463,6 +463,8 @@
   // hidden.
   await sendTestMessage({name: 'setBulkPinningEnabledPref', enabled: true});
   await remoteCall.waitForElementLost(appId, '#cloud-button[hidden]');
+  await remoteCall.waitForElement(
+      appId, '#cloud-button > xf-icon[type="cloud_sync"]');
 };
 
 /**
@@ -482,6 +484,8 @@
   // error, there is a UI state to show so the toolbar should still be visible.
   await sendTestMessage({name: 'setBulkPinningEnabledPref', enabled: true});
   await remoteCall.waitForElementLost(appId, '#cloud-button[hidden]');
+  await remoteCall.waitForElement(
+      appId, '#cloud-button > xf-icon[type="cloud_error"]');
 };
 
 
@@ -540,19 +544,7 @@
 
   // Click the cloud icon and wait for the dialog to move into space.
   await remoteCall.waitAndClickElement(appId, '#cloud-button:not([hidden])');
-  const caller = getCaller();
-  await repeatUntil(async () => {
-    const styles = await remoteCall.waitForElementStyles(
-        appId, ['xf-cloud-panel', 'cr-action-menu', 'dialog'], ['left']);
-
-    if (styles.renderedHeight > 0 && styles.renderedWidth > 0 &&
-        styles.renderedTop > 0 && styles.renderedLeft > 0) {
-      return true;
-    }
-
-    return pending(
-        caller, `Waiting for xf-cloud-panel to appear on left click.`);
-  });
+  await remoteCall.waitForCloudPanelVisible(appId);
 };
 
 /**
@@ -582,12 +574,36 @@
   await sendTestMessage({name: 'forceBulkPinningCalculateRequiredSpace'});
 
   // Assert the stage is `PAUSED` and the cloud button is still hidden.
-  const stage = await sendTestMessage({name: 'getBulkPinningStage'});
-  chrome.test.assertEq('Paused', stage);
+  await remoteCall.waitForBulkPinningStage('Paused');
   await remoteCall.waitForElement(appId, '#cloud-button[hidden]');
 };
 
 /**
+ * Tests that the cloud icon should show if bulk pinning is paused (which
+ * represents an offline state) and the user preference is enabled.
+ */
+testcase.toolbarCloudIconShouldShowWhenPausedState = async () => {
+  const appId =
+      await setupAndWaitUntilReady(RootPath.DRIVE, [], BASIC_DRIVE_ENTRY_SET);
+  await remoteCall.waitForElement(appId, '#cloud-button[hidden]');
+
+  // Force the bulk pinning preference on.
+  await sendTestMessage({name: 'setSpacedFreeSpace', freeSpace: 1 << 30});
+  await sendTestMessage({name: 'setBulkPinningEnabledPref', enabled: true});
+
+  // Set the bulk pinning manager to enter offline mode. This will surface a
+  // `PAUSED` state which has a UI representation iff the pref is enabled.
+  await sendTestMessage({name: 'setBulkPinningOnline', enabled: false});
+
+  // Assert the stage is `PAUSED`, the cloud button is visible and the icon is
+  // the offline icon.
+  await remoteCall.waitForBulkPinningStage('Paused');
+  await remoteCall.waitForElement(appId, '#cloud-button:not([hidden])');
+  await remoteCall.waitForElement(
+      appId, '#cloud-button > xf-icon[type="bulk_pinning_offline"]');
+};
+
+/**
  * Tests that the cloud icon should show when a Files app window has started.
  * This mainly tests that on startup the bulk pin progress is fetched and
  * doesn't require an async event to show.
@@ -603,14 +619,7 @@
 
   // Wait until the pin manager enters the syncing stage otherwise the next
   // syncing event will get ignored.
-  const caller = getCaller();
-  await repeatUntil(async () => {
-    const stage = await sendTestMessage({name: 'getBulkPinningStage'});
-    if (stage === 'Syncing') {
-      return true;
-    }
-    return pending(caller, 'Still waiting for syncing stage');
-  });
+  await remoteCall.waitForBulkPinningStage('Syncing');
 
   // Mock the Drive pinning event completing downloading all the data.
   await sendTestMessage({
@@ -623,19 +632,7 @@
   // Wait until the bulk pinning required space reaches 0 (no bytes left to
   // pin). This indicates the bulk pinning manager has finished. When Files app
   // starts after this, no event will go via onBulkPinProgress.
-  await repeatUntil(async () => {
-    const stage = await sendTestMessage({name: 'getBulkPinningStage'});
-    if (stage !== 'Syncing') {
-      return pending(caller, 'Still waiting for syncing stage');
-    }
-    const requiredSpace =
-        await sendTestMessage({name: 'getBulkPinningRequiredSpace'});
-    const parsedSpace = parseInt(requiredSpace, 10);
-    if (parsedSpace > 0) {
-      return pending(caller, 'Still waiting for required space to be 0');
-    }
-    return true;
-  });
+  await remoteCall.waitForBulkPinningRequiredSpace(0);
 
   // Open a new window to the Drive root and ensure the cloud button is not
   // hidden. The cloud button will show on startup as it relies on the bulk
@@ -649,20 +646,6 @@
   // the cloud button is visible the `<xf-cloud-panel>` should have it's data
   // set. To bypass async issues, only wait 10s to check the data is available
   // to ensure its done prior to the 60s free disk space check.
-  const futureDate = new Date();
-  futureDate.setSeconds(futureDate.getSeconds() + 10);
-  await repeatUntil(async () => {
-    chrome.test.assertTrue(
-        new Date() < futureDate,
-        'Timed out waiting for data to appear on xf-cloud-panel');
-    const cloudPanel = await remoteCall.callRemoteTestUtil(
-        'deepQueryAllElements', appId,
-        ['xf-cloud-panel[percentage="100"][items="1"]']);
-    if (cloudPanel && cloudPanel.length === 1) {
-      return true;
-    }
-    return pending(
-        caller,
-        'Still waiting for xf-cloud-panel to have items and percentage set');
-  });
+  await remoteCall.waitForCloudPanelState(
+      appId, /*items=*/ 1, /*percentage=*/ 100);
 };
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js
index 2997f2d..028696a 100644
--- a/ui/file_manager/integration_tests/remote_call.js
+++ b/ui/file_manager/integration_tests/remote_call.js
@@ -1053,4 +1053,89 @@
       return true;
     });
   }
+
+  /**
+   * Waits for the <xf-cloud-panel> element to be visible on the DOM.
+   * @param {string} appId app window ID
+   */
+  async waitForCloudPanelVisible(appId) {
+    const caller = getCaller();
+    return repeatUntil(async () => {
+      const styles = await this.waitForElementStyles(
+          appId, ['xf-cloud-panel', 'cr-action-menu', 'dialog'], ['left']);
+
+      if (styles.renderedHeight > 0 && styles.renderedWidth > 0 &&
+          styles.renderedTop > 0 && styles.renderedLeft > 0) {
+        return true;
+      }
+
+      return pending(caller, `Waiting for xf-cloud-panel to appear.`);
+    });
+  }
+
+  /**
+   * Wait for the underlying bulk pinning manager to enter the specified stage.
+   * @param {string} want The stage the bulk pinning is expected to be in. This
+   *     is a string relating to the stage defined in the `PinManager`.
+   */
+  async waitForBulkPinningStage(want) {
+    const caller = getCaller();
+    return repeatUntil(async () => {
+      const currentStage = await sendTestMessage({name: 'getBulkPinningStage'});
+      if (currentStage === want) {
+        return true;
+      }
+      return pending(caller, `Still waiting for syncing stage: ${want}`);
+    });
+  }
+
+  /**
+   * Wait until the pin manager has the expected required space.
+   * @param {number} want
+   */
+  async waitForBulkPinningRequiredSpace(want) {
+    const caller = getCaller();
+    return repeatUntil(async () => {
+      const actualRequiredSpace =
+          await sendTestMessage({name: 'getBulkPinningRequiredSpace'});
+      const parsedSpace = parseInt(actualRequiredSpace, 10);
+      if (parsedSpace === want) {
+        return true;
+      }
+      return pending(caller, `Still waiting for required space to be ${want}`);
+    });
+  }
+
+  /**
+   * Wait until the cloud panel has the specified item and percentage attributes
+   * defined, if the `timeoutSeconds` is supplied it will only wait for the
+   * specified time before timing out.
+   * @param {string} appId app window ID
+   * @param {number} items The items expected on the cloud panel.
+   * @param {number} percentage The percentage integer expected on the cloud
+   *     panel.
+   * @param {number=} timeoutSeconds Whether to timeout when verifying the panel
+   *     attributes.
+   */
+  async waitForCloudPanelState(appId, items, percentage, timeoutSeconds = 10) {
+    const futureDate = new Date();
+    futureDate.setSeconds(futureDate.getSeconds() + timeoutSeconds);
+    const caller = getCaller();
+    return repeatUntil(async () => {
+      chrome.test.assertTrue(
+          new Date() < futureDate,
+          `Timed out waiting for items=${items} and percentage=${
+              percentage} to appear on xf-cloud-panel`);
+      const cloudPanel = await this.callRemoteTestUtil(
+          'deepQueryAllElements', appId,
+          [`xf-cloud-panel[percentage="${percentage}"][items="${items}"]`]);
+      if (cloudPanel && cloudPanel.length === 1) {
+        return true;
+      }
+      return pending(
+          caller,
+          `Still waiting for xf-cloud-panel to have items=${
+              items} and percentage=${percentage}`);
+    });
+  }
 }
diff --git a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc_externs.js b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc_externs.js
index 91f14d6..0af8bb1 100644
--- a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc_externs.js
+++ b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc_externs.js
@@ -20,3 +20,8 @@
  */
 CrFingerprintProgressArcElement.prototype.setProgress = function(
     prevPercentComplete, currPercentComplete, isComplete) {};
+
+/**
+ * @param {boolean} shouldPlay
+ */
+CrFingerprintProgressArcElement.prototype.setPlay = function(shouldPlay) {};