diff --git a/DEPS b/DEPS
index d9eeba6..0f06e109 100644
--- a/DEPS
+++ b/DEPS
@@ -304,7 +304,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '170d8216f07494492b5d6e5b9b75865f32a059c5',
+  'skia_revision': '158d51b34caacc8d00593618e19481bb08b3a9ad',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -312,7 +312,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '32175d8a6dc185dd850e5c9988f208085c9c0d80',
+  'angle_revision': '5f1ab1d18838821366f46890ea6b2ac8bda9381d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -375,7 +375,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'a404e6d108a230c0c4080a71705c6e6d7c30557a',
+  'catapult_revision': '038b25e395cafe0dc95b8139295eab6441315cc8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -383,7 +383,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': '1d38337fc19da49c4d10e3a8db54f9f1bc4a4281',
+  'devtools_frontend_revision': 'b418be78a1cc482bb211150eba1bfd66d3161d56',
   # 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.
@@ -419,11 +419,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.
-  'dawn_revision': '3a2573e93c73bd80360601d457945338adfe8752',
+  'dawn_revision': '0fa5fb16bd4d54a7d8b3c26e76f9f03c55c8cfd2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '880e3f9826ac0e779c1e3c880488e6aaa59c008f',
+  'quiche_revision': '4bdfa810532a294befb8e8048318309dabd36bd8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -770,7 +770,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    '65e3a3879fdbbc6023431ae97ef2d64fc035ac7b',
+    '8d6d9fe85aa127fa8a78d5a4d6718c0cc9f9f651',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1194,7 +1194,7 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '9082e05b3ec4ab6437f2b812d3aaf035cc33ef60',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'b33e6de87391826c83fb460690dd3393f53a1eb8',
       'condition': 'checkout_linux',
   },
 
@@ -1204,13 +1204,13 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '252b19866a6a9f3de069363184e5fca72280e558',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '58a343c88bda7ef0b65ad9bdf208b9307446dfbe',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'dfaf7dc9e9d2c5f53e0a8789263305926c5a8b09',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '4a7f0a0231b8416f70b080330ee1940b5621ac1e',
     'condition': 'checkout_src_internal',
   },
 
@@ -1644,7 +1644,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '367c798358282cf6fbc9fc47a71a10b26cb6040f',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '1f3b5b40211b34322fe31a43556c8e4a028d0275',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1829,7 +1829,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '0673bb68c214c0a6c56d00b30e6600dcc9f02b93',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '1fbfde95c492b1be89c5b0404131f3069c952c58',
+    Var('webrtc_git') + '/src.git' + '@' + '6d3524bf1c56aab8e34aad1fc83f1b3a6f70c1aa',
 
   # 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.
@@ -1856,7 +1856,7 @@
       'packages': [
         {
           'package': 'skia/tools/goldctl/linux-amd64',
-          'version': 'GYJyu-6ZtuFKlycWv9v7SFg61ONNNobNlfP0HTV6IGQC',
+          'version': 'E46nXQa9dcFdViDiaWhmdecJ-XgdTDLkrfaGq45UlsUC',
         },
       ],
       'dep_type': 'cipd',
@@ -1866,7 +1866,7 @@
       'packages': [
         {
           'package': 'skia/tools/goldctl/windows-amd64',
-          'version': 'jmDxbBm43jkyCFWbnBLpWu8GADl05R5x2kV-ttxKaUgC',
+          'version': 'NlbXdAFIb05vtC14fXZwj8gK67uZHdlqPVPBbNhpU1QC',
         },
       ],
       'dep_type': 'cipd',
@@ -1877,7 +1877,7 @@
       'packages': [
         {
           'package': 'skia/tools/goldctl/mac-amd64',
-          'version': 'SVMraIHmdNooMzoPH_0l0pHjwN9wgULMxNntBbrNQyMC',
+          'version': 'rfHNzii-7hBOdsmGW8WeOM_JU0csp7fQgf-6p8cPyZYC',
         },
       ],
       'dep_type': 'cipd',
@@ -1888,7 +1888,7 @@
       'packages': [
         {
           'package': 'skia/tools/goldctl/mac-arm64',
-          'version': 'CklLGpnehytIF37cw7TK3rU3GqE_NzN76x9OERwfrNMC',
+          'version': 'WMPFVGxAsM-r610JEQHRGWzuoZ72se528q3xXCHUeDAC',
         },
       ],
       'dep_type': 'cipd',
@@ -1899,7 +1899,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@2cfef762d453d1f568cab9ad9f9c0665c613cac0',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@86339f6a54f3cf454e216f428e4ee8ffa32dbb08',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 5593ad5..352296c2 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -6447,7 +6447,6 @@
         'DidFinishNavigation',
         'RenderViewReady',
         'RenderViewDeleted',
-        'RenderViewHostChanged',
         'DOMContentLoaded',
         'DidFinishLoad',
     ]
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index ec5d53e..f3d99562 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -2195,10 +2195,15 @@
              "PerUserMetricsConsent",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-// Allows Files App to find and execute tasks using App Service for Arc and
-// Guest OS apps.
-BASE_FEATURE(kArcAndGuestOsFileTasksUseAppService,
-             "ArcAndGuestOsFileTasksUseAppService",
+// Allows Files App to find and execute tasks using App Service for ARC apps.
+BASE_FEATURE(kArcFileTasksUseAppService,
+             "ArcFileTasksUseAppService",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+// Allows Files App to find and execute tasks using App Service for Guest OS
+// apps.
+BASE_FEATURE(kGuestOsFileTasksUseAppService,
+             "GuestOsFileTasksUseAppService",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -3175,8 +3180,12 @@
   return base::FeatureList::IsEnabled(kWmMode);
 }
 
-bool ShouldArcAndGuestOsFileTasksUseAppService() {
-  return base::FeatureList::IsEnabled(kArcAndGuestOsFileTasksUseAppService);
+bool ShouldArcFileTasksUseAppService() {
+  return base::FeatureList::IsEnabled(kArcFileTasksUseAppService);
+}
+
+bool ShouldGuestOsFileTasksUseAppService() {
+  return base::FeatureList::IsEnabled(kGuestOsFileTasksUseAppService);
 }
 
 bool ShouldShowPlayStoreInDemoMode() {
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index c850257..17c8272 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -65,7 +65,9 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kArcInputOverlayBeta);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kArcInputOverlayAlphaV2);
 COMPONENT_EXPORT(ASH_CONSTANTS)
-BASE_DECLARE_FEATURE(kArcAndGuestOsFileTasksUseAppService);
+BASE_DECLARE_FEATURE(kArcFileTasksUseAppService);
+COMPONENT_EXPORT(ASH_CONSTANTS)
+BASE_DECLARE_FEATURE(kGuestOsFileTasksUseAppService);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kArcManagedAdbSideloadingSupport);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kAssistAutoCorrect);
@@ -875,7 +877,9 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsWifiSyncAndroidEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsWmModeEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS)
-bool ShouldArcAndGuestOsFileTasksUseAppService();
+bool ShouldArcFileTasksUseAppService();
+COMPONENT_EXPORT(ASH_CONSTANTS)
+bool ShouldGuestOsFileTasksUseAppService();
 // TODO(michaelpg): Remove after M71 branch to re-enable Play Store by default.
 COMPONENT_EXPORT(ASH_CONSTANTS) bool ShouldShowPlayStoreInDemoMode();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool ShouldUseV1DeviceSync();
diff --git a/ash/quick_pair/common/fake_bluetooth_adapter.cc b/ash/quick_pair/common/fake_bluetooth_adapter.cc
index 744683c..f7276b6d 100644
--- a/ash/quick_pair/common/fake_bluetooth_adapter.cc
+++ b/ash/quick_pair/common/fake_bluetooth_adapter.cc
@@ -4,8 +4,7 @@
 
 #include "ash/quick_pair/common/fake_bluetooth_adapter.h"
 
-namespace ash {
-namespace quick_pair {
+namespace ash::quick_pair {
 
 void FakeBluetoothAdapter::NotifyPoweredChanged(bool powered) {
   device::BluetoothAdapter::NotifyAdapterPoweredChanged(powered);
@@ -34,6 +33,24 @@
   }
 }
 
+void FakeBluetoothAdapter::NotifyGattDiscoveryCompleteForService(
+    device::BluetoothRemoteGattService* service) {
+  device::BluetoothAdapter::NotifyGattDiscoveryComplete(service);
+}
+
+void FakeBluetoothAdapter::NotifyConfirmPasskey(
+    uint32_t passkey,
+    device::BluetoothDevice* device) {
+  pairing_delegate_->ConfirmPasskey(device, passkey);
+}
+
+void FakeBluetoothAdapter::DevicePairedChanged(device::BluetoothDevice* device,
+                                               bool new_paired_status) {
+  for (auto& observer : GetObservers()) {
+    observer.DevicePairedChanged(this, device, new_paired_status);
+  }
+}
+
 bool FakeBluetoothAdapter::IsPowered() const {
   return is_bluetooth_powered_;
 }
@@ -49,13 +66,46 @@
 
 device::BluetoothDevice* FakeBluetoothAdapter::GetDevice(
     const std::string& address) {
+  // There are a few situations where we want GetDevice to return nullptr. For
+  // example, if we want the Pairer to "pair by address" then GetDevice should
+  // return nullptr when called on the mac address.
+  if (get_device_returns_nullptr_) {
+    get_device_returns_nullptr_ = false;
+    return nullptr;
+  }
+
   for (const auto& it : mock_devices_) {
     if (it->GetAddress() == address) {
       return it.get();
     }
   }
+
   return nullptr;
 }
 
-}  // namespace quick_pair
-}  // namespace ash
+void FakeBluetoothAdapter::AddPairingDelegate(
+    device::BluetoothDevice::PairingDelegate* pairing_delegate,
+    PairingDelegatePriority priority) {
+  pairing_delegate_ = pairing_delegate;
+}
+
+void FakeBluetoothAdapter::ConnectDevice(
+    const std::string& address,
+    const absl::optional<device::BluetoothDevice::AddressType>& address_type,
+    base::OnceCallback<void(device::BluetoothDevice*)> callback,
+    base::OnceCallback<void(const std::string&)> error_callback) {
+  if (connect_device_failure_) {
+    std::move(error_callback).Run(std::string());
+    return;
+  }
+
+  // If |connect_device_timeout_| is set, mimic a timeout by returning before
+  // calling the success callback.
+  if (connect_device_timeout_) {
+    return;
+  }
+
+  std::move(callback).Run(GetDevice(address));
+}
+
+}  // namespace ash::quick_pair
diff --git a/ash/quick_pair/common/fake_bluetooth_adapter.h b/ash/quick_pair/common/fake_bluetooth_adapter.h
index 3844f09..37daf4a6f 100644
--- a/ash/quick_pair/common/fake_bluetooth_adapter.h
+++ b/ash/quick_pair/common/fake_bluetooth_adapter.h
@@ -26,6 +26,24 @@
 
   void NotifyRemoved(device::BluetoothDevice* device);
 
+  void SetConnectFailure() { connect_device_failure_ = true; }
+
+  // This will force the next 'GetDevice()' call to return a nullptr. This is
+  // used to test codepaths where the adapter is not able to return the device.
+  void SetGetDeviceNullptr() { get_device_returns_nullptr_ = true; }
+
+  // This will alter the 'ConnectDevice()' call to return before firing its
+  // callback, mimicking a timeout situation.
+  void SetConnectDeviceTimeout() { connect_device_timeout_ = true; }
+
+  void NotifyGattDiscoveryCompleteForService(
+      device::BluetoothRemoteGattService* service);
+
+  void NotifyConfirmPasskey(uint32_t passkey, device::BluetoothDevice* device);
+
+  void DevicePairedChanged(device::BluetoothDevice* device,
+                           bool new_paired_status);
+
   bool IsPowered() const override;
 
   bool IsPresent() const override;
@@ -35,11 +53,25 @@
 
   device::BluetoothDevice* GetDevice(const std::string& address) override;
 
+  void AddPairingDelegate(
+      device::BluetoothDevice::PairingDelegate* pairing_delegate,
+      PairingDelegatePriority priority) override;
+
+  void ConnectDevice(
+      const std::string& address,
+      const absl::optional<device::BluetoothDevice::AddressType>& address_type,
+      base::OnceCallback<void(device::BluetoothDevice*)> callback,
+      base::OnceCallback<void(const std::string&)> error_callback) override;
+
  private:
   ~FakeBluetoothAdapter() = default;
 
   bool is_bluetooth_powered_ = false;
   bool is_bluetooth_present_ = true;
+  bool connect_device_failure_ = false;
+  bool get_device_returns_nullptr_ = false;
+  bool connect_device_timeout_ = false;
+  device::BluetoothDevice::PairingDelegate* pairing_delegate_ = nullptr;
   device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus
       hardware_offloading_status_ = device::BluetoothAdapter::
           LowEnergyScanSessionHardwareOffloadingStatus::kSupported;
diff --git a/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl_unittest.cc b/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl_unittest.cc
index 441c426b..2c95771 100644
--- a/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl_unittest.cc
+++ b/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl_unittest.cc
@@ -11,6 +11,7 @@
 #include "ash/public/cpp/test/test_system_tray_client.h"
 #include "ash/quick_pair/common/account_key_failure.h"
 #include "ash/quick_pair/common/device.h"
+#include "ash/quick_pair/common/fake_bluetooth_adapter.h"
 #include "ash/quick_pair/common/fast_pair/fast_pair_metrics.h"
 #include "ash/quick_pair/common/logging.h"
 #include "ash/quick_pair/common/pair_failure.h"
@@ -111,91 +112,10 @@
 constexpr char kInitializePairingProcessInitial[] =
     "FastPair.InitialPairing.Initialization";
 
-class FakeBluetoothAdapter
-    : public testing::NiceMock<device::MockBluetoothAdapter> {
- public:
-  FakeBluetoothAdapter() = default;
-
-  // Move-only class
-  FakeBluetoothAdapter(const FakeBluetoothAdapter&) = delete;
-  FakeBluetoothAdapter& operator=(const FakeBluetoothAdapter&) = delete;
-
-  device::BluetoothDevice* GetDevice(const std::string& address) override {
-    // There are a few situations where we want GetDevice to return nullptr. For
-    // example, if we want the Pairer to "pair by address" then GetDevice should
-    // return nullptr when called on the mac address.
-    if (get_device_returns_nullptr_ &&
-        address == kBluetoothCanonicalizedAddress) {
-      get_device_returns_nullptr_ = false;
-      return nullptr;
-    }
-
-    for (const auto& it : mock_devices_) {
-      if (it->GetAddress() == address) {
-        return it.get();
-      }
-    }
-
-    return nullptr;
-  }
-
-  void AddPairingDelegate(
-      device::BluetoothDevice::PairingDelegate* pairing_delegate,
-      PairingDelegatePriority priority) override {
-    pairing_delegate_ = pairing_delegate;
-  }
-
-  void NotifyGattDiscoveryCompleteForService(
-      device::BluetoothRemoteGattService* service) {
-    device::BluetoothAdapter::NotifyGattDiscoveryComplete(service);
-  }
-
-  void NotifyConfirmPasskey(uint32_t passkey, device::BluetoothDevice* device) {
-    pairing_delegate_->ConfirmPasskey(device, passkey);
-  }
-
-  void DevicePairedChanged(device::BluetoothDevice* device,
-                           bool new_paired_status) {
-    for (auto& observer : GetObservers()) {
-      observer.DevicePairedChanged(this, device, new_paired_status);
-    }
-  }
-
-  void ConnectDevice(
-      const std::string& address,
-      const absl::optional<device::BluetoothDevice::AddressType>& address_type,
-      base::OnceCallback<void(device::BluetoothDevice*)> callback,
-      base::OnceCallback<void(const std::string&)> error_callback) override {
-    if (connect_device_failure_) {
-      std::move(error_callback).Run("");
-      return;
-    }
-
-    if (connect_device_timeout_) {
-      return;
-    }
-
-    std::move(callback).Run(GetDevice(address));
-  }
-
-  void SetConnectFailure() { connect_device_failure_ = true; }
-
-  void SetConnectDeviceTimeout() { connect_device_timeout_ = true; }
-
-  void SetGetDeviceNullptr() { get_device_returns_nullptr_ = true; }
-
- protected:
-  ~FakeBluetoothAdapter() override = default;
-  bool connect_device_failure_ = false;
-  bool connect_device_timeout_ = false;
-  bool get_device_returns_nullptr_ = false;
-  device::BluetoothDevice::PairingDelegate* pairing_delegate_ = nullptr;
-};
-
 class FakeBluetoothDevice
     : public testing::NiceMock<device::MockBluetoothDevice> {
  public:
-  explicit FakeBluetoothDevice(FakeBluetoothAdapter* adapter)
+  explicit FakeBluetoothDevice(ash::quick_pair::FakeBluetoothAdapter* adapter)
       : testing::NiceMock<device::MockBluetoothDevice>(
             adapter,
             0,
@@ -234,7 +154,7 @@
   bool IsDevicePaired() { return is_device_paired_; }
 
  protected:
-  FakeBluetoothAdapter* fake_adapter_;
+  ash::quick_pair::FakeBluetoothAdapter* fake_adapter_;
   bool pair_failure_ = false;
   bool pair_timeout_ = false;
   bool is_device_paired_ = false;
diff --git a/ash/system/rotation/rotation_lock_feature_pod_controller.cc b/ash/system/rotation/rotation_lock_feature_pod_controller.cc
index cf2cc56..bea45bbf 100644
--- a/ash/system/rotation/rotation_lock_feature_pod_controller.cc
+++ b/ash/system/rotation/rotation_lock_feature_pod_controller.cc
@@ -4,13 +4,18 @@
 
 #include "ash/system/rotation/rotation_lock_feature_pod_controller.h"
 
+#include <memory>
+
+#include "ash/constants/ash_features.h"
 #include "ash/constants/quick_settings_catalogs.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/unified/feature_pod_button.h"
+#include "ash/system/unified/feature_tile.h"
 #include "ash/system/unified/quick_settings_metrics_util.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
+#include "base/functional/bind.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace ash {
@@ -30,6 +35,7 @@
 
 FeaturePodButton* RotationLockFeaturePodController::CreateButton() {
   DCHECK(!button_);
+  DCHECK(!features::IsQsRevampEnabled());
   button_ = new FeaturePodButton(this);
   button_->DisableLabelButtonFocus();
   // Init the button with invisible state. The `UpdateButton` method will update
@@ -39,6 +45,26 @@
   return button_;
 }
 
+std::unique_ptr<FeatureTile> RotationLockFeaturePodController::CreateTile() {
+  DCHECK(!tile_);
+  DCHECK(features::IsQsRevampEnabled());
+  // TODO(b/251724698): Create the tile as FeatureTile::TileType::kCompact
+  // after adding logic to shrink the Cast tile to compact when auto-rotation
+  // is allowed. Also remove the call to SetSubLabelVisibility().
+  auto tile = std::make_unique<FeatureTile>(
+      base::BindRepeating(&RotationLockFeaturePodController::OnIconPressed,
+                          weak_factory_.GetWeakPtr()));
+  tile_ = tile.get();
+  // The tile label is always "Auto rotate" and there is no sub-label.
+  tile_->SetLabel(
+      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ROTATION_LOCK_AUTO));
+  tile_->SetSubLabelVisibility(false);
+  // UpdateTile() will update visibility.
+  tile_->SetVisible(false);
+  UpdateTile();
+  return tile;
+}
+
 QsFeatureCatalogName RotationLockFeaturePodController::GetCatalogName() {
   return QsFeatureCatalogName::kRotationLock;
 }
@@ -52,14 +78,23 @@
 }
 
 void RotationLockFeaturePodController::OnTabletPhysicalStateChanged() {
-  UpdateButton();
+  if (features::IsQsRevampEnabled()) {
+    UpdateTile();
+  } else {
+    UpdateButton();
+  }
 }
 
 void RotationLockFeaturePodController::OnUserRotationLockChanged() {
-  UpdateButton();
+  if (features::IsQsRevampEnabled()) {
+    UpdateTile();
+  } else {
+    UpdateButton();
+  }
 }
 
 void RotationLockFeaturePodController::UpdateButton() {
+  DCHECK(!features::IsQsRevampEnabled());
   // Even though auto-rotation is also supported when the device is not in a
   // tablet physical state but kSupportsClamshellAutoRotation is set. The "Auto
   // rotate" feature pod button in the system tray menu is not expected to be
@@ -116,4 +151,51 @@
       IDS_ASH_STATUS_TRAY_ROTATION_LOCK_TOOLTIP, tooltip_state));
 }
 
+void RotationLockFeaturePodController::UpdateTile() {
+  DCHECK(features::IsQsRevampEnabled());
+  // Auto-rotation is also supported when the device is not in a tablet physical
+  // state but kSupportsClamshellAutoRotation is set. The "Auto rotate" feature
+  // tile in the system tray menu is not expected to be shown in the case.
+  const bool is_auto_rotation_allowed =
+      Shell::Get()->tablet_mode_controller()->is_in_tablet_physical_state();
+
+  if (!tile_->GetVisible() && is_auto_rotation_allowed) {
+    TrackVisibilityUMA();
+  }
+  tile_->SetVisible(is_auto_rotation_allowed);
+
+  if (!is_auto_rotation_allowed) {
+    return;
+  }
+
+  auto* screen_orientation_controller =
+      Shell::Get()->screen_orientation_controller();
+  const bool rotation_locked =
+      screen_orientation_controller->user_rotation_locked();
+  const bool is_portrait =
+      screen_orientation_controller->IsUserLockedOrientationPortrait();
+
+  // The tile is toggled when auto-rotate is on.
+  tile_->SetToggled(!rotation_locked);
+
+  std::u16string tooltip_state;
+  if (rotation_locked && is_portrait) {
+    tile_->SetVectorIcon(kUnifiedMenuRotationLockAutoIcon);
+    tooltip_state = l10n_util::GetStringUTF16(
+        IDS_ASH_STATUS_TRAY_ROTATION_LOCK_LOCKED_VERTICAL_TOOLTIP);
+  } else if (rotation_locked && !is_portrait) {
+    tile_->SetVectorIcon(kUnifiedMenuRotationLockAutoIcon);
+    tooltip_state = l10n_util::GetStringUTF16(
+        IDS_ASH_STATUS_TRAY_ROTATION_LOCK_LOCKED_HORIZONTAL_TOOLTIP);
+  } else {
+    // TODO(b/264428682): Custom icon for auto-rotate (non-locked) state.
+    tile_->SetVectorIcon(kUnifiedMenuRotationLockAutoIcon);
+    tooltip_state =
+        l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ROTATION_LOCK_AUTO_LABEL);
+  }
+
+  tile_->SetTooltipText(l10n_util::GetStringFUTF16(
+      IDS_ASH_STATUS_TRAY_ROTATION_LOCK_TOOLTIP, tooltip_state));
+}
+
 }  // namespace ash
diff --git a/ash/system/rotation/rotation_lock_feature_pod_controller.h b/ash/system/rotation/rotation_lock_feature_pod_controller.h
index 55f06de..f63697b 100644
--- a/ash/system/rotation/rotation_lock_feature_pod_controller.h
+++ b/ash/system/rotation/rotation_lock_feature_pod_controller.h
@@ -10,10 +10,17 @@
 #include "ash/display/screen_orientation_controller.h"
 #include "ash/public/cpp/tablet_mode_observer.h"
 #include "ash/system/unified/feature_pod_controller_base.h"
+#include "base/memory/weak_ptr.h"
 
 namespace ash {
 
+class FeaturePodButton;
+class FeatureTile;
+
 // Controller of a feature pod button that toggles rotation lock mode.
+// Pre-QsRevamp the button is toggled when rotation is locked.
+// Post-QsRevamp the tile is toggled when rotation is unlocked (i.e. auto-rotate
+// is enabled).
 class ASH_EXPORT RotationLockFeaturePodController
     : public FeaturePodControllerBase,
       public TabletModeObserver,
@@ -30,6 +37,7 @@
 
   // FeaturePodControllerBase:
   FeaturePodButton* CreateButton() override;
+  std::unique_ptr<FeatureTile> CreateTile() override;
   QsFeatureCatalogName GetCatalogName() override;
   void OnIconPressed() override;
 
@@ -41,8 +49,13 @@
 
  private:
   void UpdateButton();
+  void UpdateTile();
 
+  // Owned by views hierarchy.
   FeaturePodButton* button_ = nullptr;
+  FeatureTile* tile_ = nullptr;
+
+  base::WeakPtrFactory<RotationLockFeaturePodController> weak_factory_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/rotation/rotation_lock_feature_pod_controller_unittest.cc b/ash/system/rotation/rotation_lock_feature_pod_controller_unittest.cc
index 6af0121b..0e72646b1 100644
--- a/ash/system/rotation/rotation_lock_feature_pod_controller_unittest.cc
+++ b/ash/system/rotation/rotation_lock_feature_pod_controller_unittest.cc
@@ -4,20 +4,27 @@
 
 #include "ash/system/rotation/rotation_lock_feature_pod_controller.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/constants/quick_settings_catalogs.h"
 #include "ash/shell.h"
 #include "ash/system/unified/feature_pod_button.h"
+#include "ash/system/unified/feature_tile.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/command_line.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "ui/display/display_switches.h"
 
 namespace ash {
 
 class RotationLockFeaturePodControllerTest : public AshTestBase {
  public:
-  RotationLockFeaturePodControllerTest() = default;
+  RotationLockFeaturePodControllerTest() {
+    // Disable QsRevamp.
+    feature_list_.InitWithFeatures(
+        {}, {features::kQsRevamp, features::kQsRevampWip});
+  }
 
   RotationLockFeaturePodControllerTest(
       const RotationLockFeaturePodControllerTest&) = delete;
@@ -40,6 +47,7 @@
   FeaturePodButton* button_view() const { return button_view_.get(); }
 
  private:
+  base::test::ScopedFeatureList feature_list_;
   std::unique_ptr<RotationLockFeaturePodController> controller_;
   std::unique_ptr<FeaturePodButton> button_view_;
 };
@@ -205,4 +213,125 @@
       /*expected_count=*/1);
 }
 
+class RotationLockFeaturePodControllerQsRevampTest : public AshTestBase {
+ public:
+  RotationLockFeaturePodControllerQsRevampTest() {
+    feature_list_.InitWithFeatures(
+        {features::kQsRevamp, features::kQsRevampWip}, {});
+  }
+
+  // AshTestBase:
+  void SetUp() override {
+    // The Display used for testing is not an internal display. This flag
+    // allows for DisplayManager to treat it as one.
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        ::switches::kUseFirstDisplayAsInternal);
+    AshTestBase::SetUp();
+  }
+
+  void TearDown() override {
+    controller_.reset();
+    feature_tile_.reset();
+    AshTestBase::TearDown();
+  }
+
+ protected:
+  void SetUpController() {
+    controller_ = std::make_unique<RotationLockFeaturePodController>();
+    feature_tile_ = controller_->CreateTile();
+  }
+
+  base::test::ScopedFeatureList feature_list_;
+  std::unique_ptr<RotationLockFeaturePodController> controller_;
+  std::unique_ptr<FeatureTile> feature_tile_;
+};
+
+// Tests that when the tile is initially created it is not visible.
+TEST_F(RotationLockFeaturePodControllerQsRevampTest, CreateTile) {
+  SetUpController();
+  EXPECT_FALSE(feature_tile_->GetVisible());
+}
+
+// Tests that the button is created visible when tablet mode is enabled.
+TEST_F(RotationLockFeaturePodControllerQsRevampTest, CreateTileInTabletMode) {
+  Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
+  SetUpController();
+  EXPECT_TRUE(feature_tile_->GetVisible());
+  Shell::Get()->tablet_mode_controller()->SetEnabledForTest(false);
+  EXPECT_FALSE(feature_tile_->GetVisible());
+}
+
+// Tests that enabling tablet mode changes the tile visibility.
+TEST_F(RotationLockFeaturePodControllerQsRevampTest,
+       TileVisibilityChangesDuringTabletMode) {
+  SetUpController();
+  Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
+  EXPECT_TRUE(feature_tile_->GetVisible());
+  Shell::Get()->tablet_mode_controller()->SetEnabledForTest(false);
+  EXPECT_FALSE(feature_tile_->GetVisible());
+}
+
+TEST_F(RotationLockFeaturePodControllerQsRevampTest, OnIconPressed) {
+  SetUpController();
+  TabletModeController* tablet_mode_controller =
+      Shell::Get()->tablet_mode_controller();
+  ScreenOrientationController* screen_orientation_controller =
+      Shell::Get()->screen_orientation_controller();
+  ASSERT_FALSE(screen_orientation_controller->rotation_locked());
+  tablet_mode_controller->SetEnabledForTest(true);
+  ASSERT_TRUE(feature_tile_->GetVisible());
+  ASSERT_TRUE(feature_tile_->IsToggled());
+
+  // Clicking the tile turns off auto-rotate and locks rotation.
+  controller_->OnIconPressed();
+  EXPECT_TRUE(screen_orientation_controller->rotation_locked());
+  EXPECT_TRUE(feature_tile_->GetVisible());
+  EXPECT_FALSE(feature_tile_->IsToggled());
+
+  // Clicking again turns on auto-rotate and unlocks rotation.
+  controller_->OnIconPressed();
+  EXPECT_FALSE(screen_orientation_controller->rotation_locked());
+  EXPECT_TRUE(feature_tile_->GetVisible());
+  EXPECT_TRUE(feature_tile_->IsToggled());
+
+  tablet_mode_controller->SetEnabledForTest(false);
+}
+
+TEST_F(RotationLockFeaturePodControllerQsRevampTest, IconUMATracking) {
+  SetUpController();
+
+  // No metrics logged before clicking on any views.
+  auto histogram_tester = std::make_unique<base::HistogramTester>();
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOn",
+                                     /*expected_count=*/0);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOff",
+                                     /*expected_count=*/0);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.DiveIn",
+                                     /*expected_count=*/0);
+
+  // Turn on rotation lock when pressing on the icon.
+  controller_->OnIconPressed();
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOn",
+                                     /*expected_count=*/1);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOff",
+                                     /*expected_count=*/0);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.DiveIn",
+                                     /*expected_count=*/0);
+  histogram_tester->ExpectBucketCount("Ash.QuickSettings.FeaturePod.ToggledOn",
+                                      QsFeatureCatalogName::kRotationLock,
+                                      /*expected_count=*/1);
+
+  // Turn off rotation lock when pressing on the icon.
+  controller_->OnIconPressed();
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOn",
+                                     /*expected_count=*/1);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.ToggledOff",
+                                     /*expected_count=*/1);
+  histogram_tester->ExpectTotalCount("Ash.QuickSettings.FeaturePod.DiveIn",
+                                     /*expected_count=*/0);
+  histogram_tester->ExpectBucketCount("Ash.QuickSettings.FeaturePod.ToggledOff",
+                                      QsFeatureCatalogName::kRotationLock,
+                                      /*expected_count=*/1);
+}
+
 }  // namespace ash
diff --git a/ash/system/unified/feature_tile.cc b/ash/system/unified/feature_tile.cc
index b786ef5..8018415 100644
--- a/ash/system/unified/feature_tile.cc
+++ b/ash/system/unified/feature_tile.cc
@@ -203,6 +203,8 @@
 }
 
 void FeatureTile::SetSubLabelVisibility(bool visible) {
+  // Only primary tiles have a sub-label.
+  DCHECK(sub_label_);
   sub_label_->SetVisible(visible);
 }
 
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc
index bb4757ca..1f4e4ad 100644
--- a/ash/system/unified/unified_system_tray_controller.cc
+++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -674,6 +674,8 @@
               feature_pod_controllers_, tiles);
   create_tile(std::make_unique<CastFeaturePodController>(this),
               feature_pod_controllers_, tiles);
+  create_tile(std::make_unique<RotationLockFeaturePodController>(),
+              feature_pod_controllers_, tiles);
   create_tile(std::make_unique<VPNFeaturePodController>(this),
               feature_pod_controllers_, tiles);
 
diff --git a/ash/webui/camera_app_ui/resources/js/main.ts b/ash/webui/camera_app_ui/resources/js/main.ts
index 083b941..9b0b66b 100644
--- a/ash/webui/camera_app_ui/resources/js/main.ts
+++ b/ash/webui/camera_app_ui/resources/js/main.ts
@@ -380,33 +380,9 @@
       }
     })();
 
-    const preloadImages = (async () => {
-      function loadImage(url: string) {
-        return new Promise<void>((resolve, reject) => {
-          const link = document.createElement('link');
-          link.rel = 'preload';
-          link.as = 'image';
-          link.href = url;
-          link.onload = () => resolve();
-          link.onerror = () =>
-              reject(new Error(`Failed to preload image ${url}`));
-          document.head.appendChild(link);
-        });
-      }
-      const results = await Promise.allSettled(
-          preloadImagesList.map((name) => loadImage(`/images/${name}`)));
-      for (const result of results) {
-        if (result.status === 'rejected') {
-          reportError(
-              ErrorType.PRELOAD_IMAGE_FAILURE, ErrorLevel.ERROR,
-              assertInstanceof(result.reason, Error));
-          break;
-        }
-      }
-    })();
-
+    preloadImages();
     metrics.sendLaunchEvent({launchType});
-    await Promise.all([showWindow, startCamera, preloadImages]);
+    await Promise.all([showWindow, startCamera]);
     await this.setupFeatureEffectsAndDialogs();
   }
 
@@ -481,6 +457,27 @@
 }
 
 /**
+ * Preload images to avoid flickering.
+ */
+function preloadImages() {
+  const imagesContainer = document.createElement('div');
+  imagesContainer.id = 'preload-images';
+  imagesContainer.hidden = true;
+  for (const imageName of preloadImagesList) {
+    const img = document.createElement('img');
+    const url = `/images/${imageName}`;
+    img.onerror = () => {
+      reportError(
+          ErrorType.PRELOAD_IMAGE_FAILURE, ErrorLevel.ERROR,
+          new Error(`Failed to preload image ${url}`));
+    };
+    img.src = url;
+    imagesContainer.appendChild(img);
+  }
+  document.body.appendChild(imagesContainer);
+}
+
+/**
  * Singleton of the App object.
  */
 let instance: App|null = null;
diff --git a/ash/webui/file_manager/resources/main.js b/ash/webui/file_manager/resources/main.js
index ecce0d9a..aa2385d3 100644
--- a/ash/webui/file_manager/resources/main.js
+++ b/ash/webui/file_manager/resources/main.js
@@ -3,11 +3,8 @@
 // found in the LICENSE file.
 
 import './strings.m.js';
-import 'chrome://file-manager/background/js/metrics_start.js';
 import './test_util_swa.js';
 
-import {background} from 'chrome://file-manager/background/js/file_manager_base.js';
-import {VolumeManagerImpl} from 'chrome://file-manager/background/js/volume_manager_impl.js';
 import {GlitchType, reportGlitch} from 'chrome://file-manager/common/js/glitch.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 
diff --git a/ash/webui/file_manager/untrusted_resources/files_img_content.css b/ash/webui/file_manager/untrusted_resources/files_img_content.css
index 7a20e64..81de9026 100644
--- a/ash/webui/file_manager/untrusted_resources/files_img_content.css
+++ b/ash/webui/file_manager/untrusted_resources/files_img_content.css
@@ -28,3 +28,13 @@
 #content[hidden] {
   display: none;
 }
+
+/* TODO(files-app-dark-mode): figure out what background color should be
+ * used here. */
+@media (prefers-color-scheme: dark) {
+  html,
+  body,
+  img {
+    background-color: black;
+  }
+}
diff --git a/ash/webui/file_manager/untrusted_resources/files_video_content.css b/ash/webui/file_manager/untrusted_resources/files_video_content.css
index 5705ca5..f0451ff 100644
--- a/ash/webui/file_manager/untrusted_resources/files_video_content.css
+++ b/ash/webui/file_manager/untrusted_resources/files_video_content.css
@@ -42,3 +42,13 @@
   outline: 2px solid rgba(66, 133, 244, 0.5);
   outline-offset: -2px;
 }
+
+/* TODO(files-app-dark-mode): figure out what background color should be
+ * used here. */
+@media (prefers-color-scheme: dark) {
+  html,
+  body,
+  video {
+    background-color: black;
+  }
+}
diff --git a/ash/webui/personalization_app/resources/css/common.css b/ash/webui/personalization_app/resources/css/common.css
index 04084a7..40d1e20 100644
--- a/ash/webui/personalization_app/resources/css/common.css
+++ b/ash/webui/personalization_app/resources/css/common.css
@@ -53,32 +53,6 @@
   height: 100%;
 }
 
-.photo-container {
-  box-sizing: border-box;
-  height: 100%;
-  overflow: hidden;
-  padding: calc(var(--personalization-app-grid-item-spacing) / 2);
-  width: 100%;
-}
-
-.photo-container:focus-visible {
-  outline: none;
-}
-
-/* This extra position: relative element corrects for absolutely positioned
-   elements ignoring parent interior padding. */
-.photo-inner-container {
-  align-items: center;
-  border-radius: var(--personalization-app-grid-item-border-radius);
-  cursor: pointer;
-  display: flex;
-  height: 100%;
-  justify-content: center;
-  overflow: hidden;
-  position: relative;
-  width: 100%;
-}
-
 @keyframes ripple {
   /* 0 ms */
   from {
@@ -106,92 +80,6 @@
   animation: 2210ms linear var(--animation-delay, 1s) infinite ripple;
 }
 
-.photo-inner-container:focus-visible,
-.photo-loading-placeholder:focus-visible {
-  outline: 2px solid var(--cros-focus-ring-color);
-}
-
-.photo-images-container {
-  background-color: var(--personalization-app-grid-item-background-color);
-  border-radius: 12px;
-  box-sizing: border-box;
-  display: flex;
-  flex-flow: row wrap;
-  height: 100%;
-  justify-content: center;
-  /* stop img and gradient-mask from ignoring above border-radius. */
-  overflow: hidden;
-  position: relative;
-  width: 100%;
-}
-
-.photo-images-container img {
-  flex: 1 1 0;
-  height: 100%;
-  min-width: 50%;
-  object-fit: cover;
-  width: 100%;
-}
-
-.photo-images-container img.left {
-  clip-path: inset(0 50% 0 0);
-  position: absolute;
-}
-
-.photo-images-container img.right {
-  clip-path: inset(0 0 0 50%);
-  position: absolute;
-}
-
-@keyframes scale-up {
-  from {
-    transform: scale(0);
-  }
-  to {
-    transform: scale(1);
-  }
-}
-
-.photo-container iron-icon[icon='personalization:checkmark'] {
-  --iron-icon-height: 20px;
-  --iron-icon-width: 20px;
-  animation-duration: 200ms;
-  animation-name: scale-up;
-  animation-timing-function: cubic-bezier(0.40, 0.00, 0.20, 1.00);
-  left: 4px;
-  position: absolute;
-  top: 4px;
-}
-
-.photo-inner-container:not([aria-selected='true'])
-iron-icon[icon='personalization:checkmark'] {
-  display: none;
-}
-
-.photo-inner-container[aria-selected='true'] {
-  background-color: rgba(var(--cros-icon-color-prominent-rgb),
-      var(--personalization-app-second-tone-opacity));
-  border-radius: 16px;
-}
-
-@keyframes resize {
-  100% {
-    height: calc(100% - 8px);
-    width: calc(100% - 8px);
-  }
-}
-
-.photo-inner-container[aria-selected='true'] .photo-images-container {
-  animation-duration: 200ms;
-  animation-fill-mode: forwards;
-  animation-name: resize;
-  animation-timing-function: cubic-bezier(0.40, 0.00, 0.20, 1.00);
-}
-
-.photo-inner-container[aria-selected='true'] .photo-images-border {
-  border: 0;
-}
-
 cr-button[aria-pressed=true],
 cr-button[aria-selected=true] {
   background-color: var(--cros-highlight-color);
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_collections_element.html b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_collections_element.html
index 9099f7a..89c9ab2 100644
--- a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_collections_element.html
+++ b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_collections_element.html
@@ -1,40 +1,9 @@
 <style include="common wallpaper">
-  .photo-inner-container.photo-loading-failure,
-  .photo-inner-container[aria-disabled='true'] {
-    cursor: default;
-  }
-
   wallpaper-grid-item[aria-disabled='true'][data-online]::part(image) {
     filter: grayscale(100%);
     opacity: 0.3;
   }
 
-  .local.photo-loading-failure .photo-images-container {
-    background-color: var(--cros-highlight-color);
-  }
-
-  .local.photo-loading-failure .photo-images-container img {
-    flex: none;
-    height: 64px;
-    margin: 12px;
-    min-width: initial;
-    width: initial;
-  }
-
-  .photo-images-container.photo-images-container-3 img,
-  .photo-images-container.photo-images-container-4 img {
-    height: 50%;
-  }
-
-  .photo-text-container {
-    bottom: 8px;
-    box-sizing: border-box;
-    justify-content: center;
-    position: absolute;
-    width: 100%;
-    z-index: 2;
-  }
-
   wallpaper-grid-item[google-photos-tile] .primary-text {
     align-items: center;
     bottom: calc(8px + var(--cros-annotation-2-line-height));
@@ -59,28 +28,6 @@
     display: block;
   }
 
-  .photo-text-container p {
-    color: white;
-    font: var(--cros-annotation-2-font);
-    margin: 0;
-    max-width: 100%;
-    overflow: hidden;
-    text-align: center;
-    text-overflow: ellipsis;
-    text-shadow: var(--personalization-app-text-shadow-elevation-1);
-    white-space: nowrap;
-  }
-
-  .photo-text-container p:empty {
-    /* Take layout space but be otherwise hidden to the user and ChromeVox. */
-    display: inline-block;
-    visibility: hidden;
-  }
-
-  .photo-text-container p:first-child {
-    font: var(--cros-headline-1-font);
-  }
-
   wallpaper-grid-item[google-photos-tile][aria-disabled='true'] p {
     /* Text color should stay light even in dark mode.
      * All of the google photos tile is always light.
@@ -89,27 +36,6 @@
     text-shadow: none;
   }
 
-  .local.photo-loading-failure .photo-text-container p {
-    color: var(--cros-button-label-color-secondary);
-    text-shadow: none;
-  }
-
-  .photo-gradient-mask {
-    background: linear-gradient(rgba(var(--google-grey-900-rgb), 0),
-        rgba(var(--google-grey-900-rgb), 55%));
-    border-radius: 0 0 12px 12px;
-    height: 50%;
-    left: 0;
-    position: absolute;
-    top: 50%;
-    width: 100%;
-    z-index: 1;
-  }
-
-  .local[aria-disabled='true'] .photo-gradient-mask {
-    display: none;
-  }
-
   .outer-container {
     height: calc(var(--personalization-app-grid-item-height) +
       var(--personalization-app-grid-item-spacing));
@@ -144,10 +70,6 @@
     --personalization-app-grid-item-background-color: var(--google-grey-200);
   }
 
-  img {
-    user-select: none;
-  }
-
 </style>
 <template is="dom-if" if="[[hasError_]]">
   <wallpaper-error></wallpaper-error>
@@ -160,16 +82,14 @@
     <template>
       <div class="outer-container">
         <template is="dom-if" if="[[isLoadingTile_(item)]]" restamp>
-          <div class="photo-container">
-            <div aria-disabled="true"
-                aria-label="$i18n{ariaLabelLoading}"
-                aria-posinset$="[[getAriaIndex_(index)]]"
-                class="photo-inner-container placeholder"
-                role="option"
-                style$="[[getLoadingPlaceholderAnimationDelay_(index)]]"
-                tabindex$="[[tabIndex]]">
-            </div>
-          </div>
+          <wallpaper-grid-item
+              aria-label="$i18n{ariaLabelLoading}"
+              aria-posinset$="[[getAriaIndex_(index)]]"
+              disabled
+              index="[[index]]"
+              role="option"
+              tabindex$="[[tabIndex]]">
+          </wallpaper-grid-item>
         </template>
         <template is="dom-if" if="[[isGooglePhotosTile_(item)]]">
           <wallpaper-grid-item
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_preview_element.html b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_preview_element.html
index 45b0696..d1f2868 100644
--- a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_preview_element.html
+++ b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_preview_element.html
@@ -52,6 +52,29 @@
   ::slotted(personalization-theme) {
     grid-area: theme;
   }
+
+  .photo-images-container {
+    background-color: var(--personalization-app-grid-item-background-color);
+    border-radius: 12px;
+    box-sizing: border-box;
+    display: flex;
+    flex-flow: row wrap;
+    height: 100%;
+    justify-content: center;
+    /* stop img and gradient-mask from ignoring above border-radius. */
+    overflow: hidden;
+    position: relative;
+    width: 100%;
+  }
+
+  .photo-images-container img {
+    flex: 1 1 0;
+    height: 100%;
+    min-width: 50%;
+    object-fit: cover;
+    width: 100%;
+  }
+
 </style>
 <div class="preview-container" id="container">
   <div id="wallpaperLabel">
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts b/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
index 22b9496c..a9c4cc4 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
@@ -8,6 +8,29 @@
 import {Accelerator, AcceleratorCategory, AcceleratorId, AcceleratorInfo, AcceleratorSource, AcceleratorState, AcceleratorSubcategory, AcceleratorType, LayoutInfo, MojoAcceleratorConfig, MojoAcceleratorInfo, MojoLayoutInfo, StandardAcceleratorInfo, TextAcceleratorInfo} from './shortcut_types.js';
 import {areAcceleratorsEqual, getAccelerator, getAcceleratorId, isStandardAcceleratorInfo, isTextAcceleratorInfo} from './shortcut_utils.js';
 
+// Convert from Mojo types to the app types.
+function createSanitizedAccelInfo(info: MojoAcceleratorInfo):
+    StandardAcceleratorInfo {
+  assert(isStandardAcceleratorInfo(info));
+  const {locked, state, type, layoutProperties} = info;
+  const sanitizedAccelerator: Accelerator = {
+    keyCode: layoutProperties.standardAccelerator.accelerator.keyCode,
+    modifiers: layoutProperties.standardAccelerator.accelerator.modifiers,
+  };
+  return {
+    locked,
+    state,
+    type,
+    layoutProperties: {
+      standardAccelerator: {
+        accelerator: sanitizedAccelerator,
+        keyDisplay: mojoString16ToString(
+            layoutProperties.standardAccelerator.keyDisplay),
+      },
+    },
+  };
+}
+
 /** The name of an {@link Accelerator}, e.g. "Snap Window Left". */
 type AcceleratorName = string;
 /**
@@ -16,7 +39,10 @@
  * See getKeyForLookup() in this file for the implementation details.
  */
 type AcceleratorLookupKey = string;
-type AcceleratorLookupMap = Map<AcceleratorId, StandardAcceleratorInfo[]>;
+type StandardAcceleratorLookupMap =
+    Map<AcceleratorId, StandardAcceleratorInfo[]>;
+type TextAcceleratorLookupMap = Map<AcceleratorId, TextAcceleratorInfo[]>;
+
 type ReverseAcceleratorLookupMap = Map<AcceleratorLookupKey, AcceleratorId>;
 
 /**
@@ -29,11 +55,20 @@
   /**
    * A map with the key set to a concatenated string of the accelerator's
    * '{source}-{action_id}', this concatenation uniquely identifies one
-   * accelerator. The value is an array of AcceleratorInfo's associated to one
-   * accelerator. This map serves as a way to quickly look up all
-   * AcceleratorInfos for one accelerator.
+   * accelerator. The value is an array of StandardAcceleratorInfo's
+   * associated to one accelerator. This map serves as a way to quickly look up
+   * all StandardAcceleratorInfos for one accelerator.
    */
-  private acceleratorLookup: AcceleratorLookupMap = new Map();
+  private standardAcceleratorLookup: StandardAcceleratorLookupMap = new Map();
+
+  /**
+   * A map with the key set to a concatenated string of the accelerator's
+   * '{source}-{action_id}', this concatenation uniquely identifies one
+   * accelerator. The value is a TextAcceleratorInfo associated to one
+   * accelerator.
+   */
+  private textAcceleratorLookup: TextAcceleratorLookupMap = new Map();
+
 
   /**
    * A map with the key as a stringified version of AcceleratorKey and the
@@ -55,10 +90,18 @@
         {keyCode: accelerator.keyCode, modifiers: accelerator.modifiers});
   }
 
-  getAcceleratorInfos(source: number|string, action: number|string):
+  getStandardAcceleratorInfos(source: number|string, action: number|string):
       StandardAcceleratorInfo[] {
     const uuid: AcceleratorId = getAcceleratorId(source, action);
-    const acceleratorInfos = this.acceleratorLookup.get(uuid);
+    const acceleratorInfos = this.standardAcceleratorLookup.get(uuid);
+    assert(acceleratorInfos);
+    return acceleratorInfos;
+  }
+
+  getTextAcceleratorInfos(source: number|string, action: number|string):
+      TextAcceleratorInfo[] {
+    const uuid: AcceleratorId = getAcceleratorId(source, action);
+    const acceleratorInfos = this.textAcceleratorLookup.get(uuid);
     assert(acceleratorInfos);
     return acceleratorInfos;
   }
@@ -88,6 +131,21 @@
     return this.reverseAcceleratorLookup.get(this.getKeyForLookup(accelerator));
   }
 
+  initializeLookupIdForStandardAccelerator(source: string, actionId: string):
+      void {
+    const id = getAcceleratorId(source, actionId);
+    if (!this.standardAcceleratorLookup.has(id)) {
+      this.standardAcceleratorLookup.set(id, []);
+    }
+  }
+
+  initializeLookupIdForTextAccelerator(source: string, actionId: string): void {
+    const id = getAcceleratorId(source, actionId);
+    if (!this.textAcceleratorLookup.has(id)) {
+      this.textAcceleratorLookup.set(id, []);
+    }
+  }
+
   setAcceleratorLookup(acceleratorConfig: MojoAcceleratorConfig): void {
     for (const [source, accelInfoMap] of Object.entries(acceleratorConfig)) {
       // When calling Object.entries on an object with optional enum keys,
@@ -97,52 +155,21 @@
         continue;
       }
       for (const [actionId, accelInfos] of Object.entries(accelInfoMap)) {
-        const id = getAcceleratorId(source, actionId);
-        if (!this.acceleratorLookup.has(id)) {
-          this.acceleratorLookup.set(id, []);
-        }
         accelInfos.forEach((info: MojoAcceleratorInfo) => {
-          // Convert from Mojo types to the app types.
-          let sanitizedAccelInfo: StandardAcceleratorInfo|TextAcceleratorInfo;
           if (isTextAcceleratorInfo(info)) {
-            sanitizedAccelInfo = {
-              layoutProperties: {
-                textAccelerator: {
-                  textAccelerator: [],
-                },
-              },
-              locked: info.locked,
-              state: info.state,
-              type: info.type,
-            };
+            this.initializeLookupIdForTextAccelerator(source, actionId);
+            this.getTextAcceleratorInfos(source, actionId).push({...info});
           } else {
             assert(isStandardAcceleratorInfo(info));
-            const sanitizedAccelerator: Accelerator = {
-              keyCode:
-                  info.layoutProperties.standardAccelerator.accelerator.keyCode,
-              modifiers: info.layoutProperties.standardAccelerator.accelerator
-                             .modifiers,
-            };
-            sanitizedAccelInfo = {
-              layoutProperties: {
-                standardAccelerator: {
-                  accelerator: sanitizedAccelerator,
-                  keyDisplay: mojoString16ToString(
-                      info.layoutProperties.standardAccelerator.keyDisplay),
-                },
-              },
-              locked: info.locked,
-              state: info.state,
-              type: info.type,
-            };
+            this.initializeLookupIdForStandardAccelerator(source, actionId);
+            const sanitizedAccelInfo = createSanitizedAccelInfo(info);
             this.reverseAcceleratorLookup.set(
-                this.getKeyForLookup(
-                    info.layoutProperties.standardAccelerator.accelerator),
-                id);
+                this.getKeyForLookup(sanitizedAccelInfo.layoutProperties
+                                         .standardAccelerator.accelerator),
+                getAcceleratorId(source, actionId));
+            this.getStandardAcceleratorInfos(source, actionId)
+                .push({...sanitizedAccelInfo});
           }
-          this.getAcceleratorInfos(source, actionId)
-              .push(Object.assign(
-                  {}, sanitizedAccelInfo as StandardAcceleratorInfo));
         });
       }
     }
@@ -173,7 +200,7 @@
     // first.
     this.maybeRemoveOrDisableAccelerator(getAccelerator(newAccelInfo));
 
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
     const currentAccelerator = accelInfos[foundIdx];
 
     // Handle the edge case in which the user is attempting to replace an
@@ -212,7 +239,7 @@
 
     // Get the matching accelerator and add the new accelerator to its
     // container.
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
 
     // Handle edge case in which the user attempts to add a disabled default
     // accelerator.
@@ -253,7 +280,7 @@
       assertNotReached();
     }
 
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
     const foundIdx = this.getAcceleratorInfoIndex(source, action, accelerator);
     // Remove accelerator from main map.
     accelInfos.splice(foundIdx, 1);
@@ -306,7 +333,7 @@
     const uuidSplit = uuid.split('-');
     const source: AcceleratorSource = parseInt(uuidSplit[0], 10);
     const action = parseInt(uuidSplit[1], 10);
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
     const foundIdx = this.getAcceleratorInfoIndex(source, action, accelerator);
 
     const foundAccel = accelInfos[foundIdx];
@@ -335,7 +362,7 @@
   private getAcceleratorInfoIndex(
       source: AcceleratorSource, action: number,
       accelerator: Accelerator): number {
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
     for (let i = 0; i < accelInfos.length; ++i) {
       if (areAcceleratorsEqual(accelerator, getAccelerator(accelInfos[i]))) {
         return i;
@@ -353,12 +380,13 @@
       return null;
     }
 
-    const accelInfos = this.getAcceleratorInfos(source, action);
+    const accelInfos = this.getStandardAcceleratorInfos(source, action);
     return accelInfos[foundIdx];
   }
 
   reset(): void {
-    this.acceleratorLookup.clear();
+    this.standardAcceleratorLookup.clear();
+    this.textAcceleratorLookup.clear();
     this.layoutInfoProvider.resetLookupMaps();
     this.reverseAcceleratorLookup.clear();
   }
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_subsection.ts b/ash/webui/shortcut_customization_ui/resources/js/accelerator_subsection.ts
index 71d0f46..d6d58d27 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_subsection.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_subsection.ts
@@ -105,7 +105,9 @@
     // subsection's accelerators are kept distinct from each other.
     const tempAccelRowData: AcceleratorRowData[] = [];
     layoutInfos!.forEach((layoutInfo) => {
-      const acceleratorInfos = this.lookupManager.getAcceleratorInfos(
+      // TODO(michaelcheco): Conditionally lookup standard/text accelerators
+      // when text accelerator ui is implemented.
+      const acceleratorInfos = this.lookupManager.getStandardAcceleratorInfos(
           layoutInfo.source, layoutInfo.action);
       acceleratorInfos.filter((accel) => {
         // Hide accelerators that are default and disabled.
diff --git a/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts b/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
index b9bcd984..a7c2853 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
@@ -6,12 +6,64 @@
 
 import {keyToIconNameMap} from './input_key.js';
 import {stringToMojoString16} from './mojo_utils.js';
-import {AcceleratorCategory, AcceleratorSource, AcceleratorState, AcceleratorSubcategory, AcceleratorType, LayoutStyle, Modifier, MojoAcceleratorConfig, MojoAcceleratorInfo, MojoLayoutInfo} from './shortcut_types.js';
+import {AcceleratorCategory, AcceleratorSource, AcceleratorState, AcceleratorSubcategory, AcceleratorType, LayoutStyle, Modifier, MojoAcceleratorConfig, MojoAcceleratorInfo, MojoLayoutInfo, TextAcceleratorPartType} from './shortcut_types.js';
 
 const fakeTimestamp: TimeTicks = {
   internalValue: BigInt(0),
 };
 
+const newTabAccelerator: MojoAcceleratorInfo = {
+  type: AcceleratorType.kDefault,
+  state: AcceleratorState.kEnabled,
+  locked: true,
+  layoutProperties: {
+    standardAccelerator: {
+      keyDisplay: stringToMojoString16('t'),
+      accelerator: {
+        modifiers: Modifier.CONTROL,
+        keyCode: 84,
+        keyState: 0,
+        timeStamp: fakeTimestamp,
+      },
+    },
+    textAccelerator: undefined,
+
+  },
+};
+
+const cycleTabsAccelerator: MojoAcceleratorInfo = {
+  type: AcceleratorType.kDefault,
+  state: AcceleratorState.kEnabled,
+  locked: true,
+  layoutProperties: {
+    textAccelerator: {
+      textAccelerator: [
+        {
+          text: stringToMojoString16('ctrl'),
+          type: TextAcceleratorPartType.kModifier,
+        },
+        {
+          text: stringToMojoString16(' + '),
+          type: TextAcceleratorPartType.kPlainText,
+        },
+        {
+          text: stringToMojoString16('1 '),
+          type: TextAcceleratorPartType.kKey,
+        },
+        {
+          text: stringToMojoString16('through '),
+          type: TextAcceleratorPartType.kPlainText,
+        },
+        {
+          text: stringToMojoString16('8'),
+          type: TextAcceleratorPartType.kKey,
+        },
+      ],
+    },
+    standardAccelerator: undefined,
+  },
+};
+
 export const fakeAcceleratorConfig: MojoAcceleratorConfig = {
   [AcceleratorSource.kAsh]: {
     // Snap Window Left
@@ -93,24 +145,14 @@
   // TODO(michaelcheco): Separate Browser and Ambient accelerators.
   [AcceleratorSource.kAmbient]: {
     // New Tab
-    [0]: [{
-      type: AcceleratorType.kDefault,
-      state: AcceleratorState.kEnabled,
-      locked: true,
-      layoutProperties: {
-        standardAccelerator: {
-          keyDisplay: stringToMojoString16('t'),
-          accelerator: {
-            modifiers: Modifier.CONTROL,
-            keyCode: 84,
-            keyState: 0,
-            timeStamp: fakeTimestamp,
-          },
-        },
-        textAccelerator: undefined,
+    [0]: [newTabAccelerator],
+  },
+};
 
-      },
-    }],
+export const fakeAmbientConfig: MojoAcceleratorConfig = {
+  [AcceleratorSource.kAmbient]: {
+    [0]: [newTabAccelerator],
+    [1]: [cycleTabsAccelerator],
   },
 };
 
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts
index 1a21768d..be80f5a 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts
@@ -22,7 +22,7 @@
 import {ShowEditDialogEvent} from './accelerator_row.js';
 import {getShortcutProvider} from './mojo_interface_provider.js';
 import {getTemplate} from './shortcut_customization_app.html.js';
-import {AcceleratorInfo, AcceleratorSource, AcceleratorState, AcceleratorType, MojoAcceleratorConfig, MojoLayoutInfo, ShortcutProviderInterface} from './shortcut_types.js';
+import {AcceleratorInfo, AcceleratorSource, AcceleratorState, AcceleratorType, MojoAcceleratorConfig, MojoLayoutInfo, ShortcutProviderInterface, StandardAcceleratorInfo} from './shortcut_types.js';
 import {getCategoryNameStringId, isCustomizationDisabled} from './shortcut_utils.js';
 
 export interface ShortcutCustomizationAppElement {
@@ -167,8 +167,8 @@
     this.$.navigationPanel.notifyEvent('updateSubsections');
     const updatedAccels =
         this.acceleratorlookupManager
-            .getAcceleratorInfos(e.detail.source, e.detail.action)
-            ?.filter((accel) => {
+            .getStandardAcceleratorInfos(e.detail.source, e.detail.action)
+            ?.filter((accel: StandardAcceleratorInfo) => {
               // Hide accelerators that are default and disabled.
               return !(
                   accel.type === AcceleratorType.kDefault &&
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
index 2b76742..e2c9199 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
@@ -28,6 +28,8 @@
 }
 
 export type TextAcceleratorPart = AcceleratorInfoTypes.TextAcceleratorPart;
+export type TextAcceleratorPartType =
+    AcceleratorInfoTypes.TextAcceleratorPartType;
 export const TextAcceleratorPartType =
     AcceleratorInfoTypes.TextAcceleratorPartType;
 
diff --git a/base/observer_list_unittest.cc b/base/observer_list_unittest.cc
index 90d03a58..d75b7d9 100644
--- a/base/observer_list_unittest.cc
+++ b/base/observer_list_unittest.cc
@@ -553,7 +553,7 @@
   explicit ListDestructor(ObserverListType* list) : list_(list) {}
   ~ListDestructor() override = default;
 
-  void Observe(int x) override { delete list_; }
+  void Observe(int x) override { delete list_.ExtractAsDangling(); }
 
  private:
   raw_ptr<ObserverListType> list_;
@@ -819,8 +819,8 @@
   ObserverListFoo observer_list;
   Adder a(1), b(-1);
 
+  Disrupter disrupter2(&observer_list, true);  // Must outlive `disrupter1`.
   Disrupter disrupter1(&observer_list, true);
-  Disrupter disrupter2(&observer_list, true);
 
   // Disrupt itself and another one.
   disrupter1.SetDoomed(&disrupter2);
@@ -848,8 +848,8 @@
   ObserverListFoo observer_list;
   Adder a(1), b(-1);
 
+  Disrupter disrupter2(&observer_list, true);  // Must outlive `disrupter1`.
   Disrupter disrupter1(&observer_list, true);
-  Disrupter disrupter2(&observer_list, true);
 
   // Disrupt itself and another one.
   disrupter1.SetDoomed(&disrupter2);
diff --git a/base/process/process_mac.cc b/base/process/process_mac.cc
index c46f6f6..326b22b8 100644
--- a/base/process/process_mac.cc
+++ b/base/process/process_mac.cc
@@ -14,17 +14,11 @@
 #include <memory>
 
 #include "base/cxx17_backports.h"
-#include "base/feature_list.h"
 #include "base/mac/mach_logging.h"
 #include "base/memory/free_deleter.h"
 
 namespace base {
 
-// Enables backgrounding hidden renderers on Mac.
-BASE_FEATURE(kMacAllowBackgroundingProcesses,
-             "MacAllowBackgroundingProcesses",
-             FEATURE_DISABLED_BY_DEFAULT);
-
 Time Process::CreationTime() const {
   int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, Pid()};
   size_t len = 0;
@@ -39,7 +33,7 @@
 }
 
 bool Process::CanBackgroundProcesses() {
-  return FeatureList::IsEnabled(kMacAllowBackgroundingProcesses);
+  return true;
 }
 
 bool Process::IsProcessBackgrounded(PortProvider* port_provider) const {
diff --git a/base/test/values_test_util.cc b/base/test/values_test_util.cc
index 8b646786..6587b02 100644
--- a/base/test/values_test_util.cc
+++ b/base/test/values_test_util.cc
@@ -217,6 +217,12 @@
 IsJsonMatcher::IsJsonMatcher(const base::Value& value)
     : expected_value_(value.Clone()) {}
 
+IsJsonMatcher::IsJsonMatcher(const base::Value::Dict& value)
+    : expected_value_(base::Value(value.Clone())) {}
+
+IsJsonMatcher::IsJsonMatcher(const base::Value::List& value)
+    : expected_value_(base::Value(value.Clone())) {}
+
 IsJsonMatcher::IsJsonMatcher(const IsJsonMatcher& other)
     : expected_value_(other.expected_value_.Clone()) {}
 
diff --git a/base/test/values_test_util.h b/base/test/values_test_util.h
index 33a9bb9..b804fab 100644
--- a/base/test/values_test_util.h
+++ b/base/test/values_test_util.h
@@ -59,6 +59,8 @@
  public:
   explicit IsJsonMatcher(base::StringPiece json);
   explicit IsJsonMatcher(const base::Value& value);
+  explicit IsJsonMatcher(const base::Value::Dict& value);
+  explicit IsJsonMatcher(const base::Value::List& value);
   IsJsonMatcher(const IsJsonMatcher& other);
   ~IsJsonMatcher();
 
diff --git a/base/time/time.h b/base/time/time.h
index 7f7b07b..6f435bc 100644
--- a/base/time/time.h
+++ b/base/time/time.h
@@ -411,11 +411,15 @@
   static constexpr int64_t kNanosecondsPerSecond =
       kNanosecondsPerMicrosecond * kMicrosecondsPerSecond;
 
-  // Returns true if this object has not been initialized.
+  // TODO(https://crbug.com/1392437): Remove concept of "null" from base::Time.
   //
   // Warning: Be careful when writing code that performs math on time values,
   // since it's possible to produce a valid "zero" result that should not be
-  // interpreted as a "null" value.
+  // interpreted as a "null" value. If you find yourself using this method or
+  // the zero-arg default constructor, please consider using an optional to
+  // express the null state.
+  //
+  // Returns true if this object has not been initialized (probably).
   constexpr bool is_null() const { return us_ == 0; }
 
   // Returns true if this object represents the maximum/minimum time.
@@ -591,6 +595,14 @@
     bool HasValidValues() const;
   };
 
+  // TODO(https://crbug.com/1392437): Remove concept of "null" from base::Time.
+  //
+  // Warning: Be careful when writing code that performs math on time values,
+  // since it's possible to produce a valid "zero" result that should not be
+  // interpreted as a "null" value. If you find yourself using this constructor
+  // or the is_null() method, please consider using an optional to express the
+  // null state.
+  //
   // Contains the NULL time. Use Time::Now() to get the current time.
   constexpr Time() : TimeBase(0) {}
 
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index e91933d..1c918b5 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-11.20230104.2.1
+11.20230104.3.1
diff --git a/chrome/VERSION b/chrome/VERSION
index d1f3b72..4d8237c 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=111
 MINOR=0
-BUILD=5520
+BUILD=5521
 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/res/layout/bottom_tab_strip_toolbar.xml b/chrome/android/features/tab_ui/java/res/layout/bottom_tab_strip_toolbar.xml
index f52b7d3..07f44b6 100644
--- a/chrome/android/features/tab_ui/java/res/layout/bottom_tab_strip_toolbar.xml
+++ b/chrome/android/features/tab_ui/java/res/layout/bottom_tab_strip_toolbar.xml
@@ -26,7 +26,8 @@
                 android:id="@+id/toolbar_left_button"
                 style="@style/BottomToolbarButton"
                 android:src="@drawable/ic_expand_less_black_24dp"
-                app:tint="@color/default_icon_color_tint_list" />
+                app:tint="@color/default_icon_color_tint_list"
+                tools:ignore="ContentDescription" />
             <FrameLayout
                 android:id="@+id/toolbar_container_view"
                 android:layout_width="0dp"
@@ -36,7 +37,8 @@
                 android:id="@+id/toolbar_right_button"
                 style="@style/BottomToolbarButton"
                 android:src="@drawable/plus"
-                app:tint="@color/default_icon_color_tint_list" />
+                app:tint="@color/default_icon_color_tint_list"
+                tools:ignore="ContentDescription" />
         </LinearLayout>
         <org.chromium.ui.widget.ChromeImageView
             android:id="@+id/tab_strip_fading_edge_start"
diff --git a/chrome/android/features/tab_ui/java/res/layout/tab_grid_card_item.xml b/chrome/android/features/tab_ui/java/res/layout/tab_grid_card_item.xml
index 12d323b..dddf214f 100644
--- a/chrome/android/features/tab_ui/java/res/layout/tab_grid_card_item.xml
+++ b/chrome/android/features/tab_ui/java/res/layout/tab_grid_card_item.xml
@@ -5,14 +5,16 @@
 found in the LICENSE file.
 -->
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
-       xmlns:app="http://schemas.android.com/apk/res-auto">
+       xmlns:app="http://schemas.android.com/apk/res-auto"
+       xmlns:tools="http://schemas.android.com/tools">
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/background_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@drawable/tab_grid_card_background"
         android:layout_margin="@dimen/tab_grid_card_margin"
-        android:visibility="gone"/>
+        android:visibility="gone"
+        android:importantForAccessibility="no" />
     <FrameLayout
         android:id="@+id/content_view"
         android:layout_width="match_parent"
@@ -98,6 +100,7 @@
             android:layout_margin="@dimen/tab_list_card_action_button_margin"
             android:scaleType="center"
             android:layout_gravity="end"
-            android:tint="@macro/default_icon_color"/>
+            android:tint="@macro/default_icon_color"
+            tools:ignore="ContentDescription" />
     </FrameLayout>
 </merge>
diff --git a/chrome/android/java/res/layout/send_tab_to_self_device_picker_item.xml b/chrome/android/java/res/layout/send_tab_to_self_device_picker_item.xml
index fc03006..22105ba 100644
--- a/chrome/android/java/res/layout/send_tab_to_self_device_picker_item.xml
+++ b/chrome/android/java/res/layout/send_tab_to_self_device_picker_item.xml
@@ -21,7 +21,8 @@
             android:layout_gravity="start"
             android:paddingTop="20dp"
             android:gravity="center"
-            android:background="@android:color/transparent" />
+            android:background="@android:color/transparent"
+            android:importantForAccessibility="no" />
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/chrome/android/java/res/layout/share_sheet_content.xml b/chrome/android/java/res/layout/share_sheet_content.xml
index 84d53de..e6a2d63 100644
--- a/chrome/android/java/res/layout/share_sheet_content.xml
+++ b/chrome/android/java/res/layout/share_sheet_content.xml
@@ -81,7 +81,8 @@
           android:visibility="gone"
           android:clickable="true"
           android:focusable="true"
-          android:background="?attr/selectableItemBackground"/>
+          android:background="?attr/selectableItemBackground"
+          tools:ignore="ContentDescription" />
     </RelativeLayout>
 
     <View
diff --git a/chrome/android/java/res/layout/sheet_tab_toolbar.xml b/chrome/android/java/res/layout/sheet_tab_toolbar.xml
index a23f8004..cedf36d 100644
--- a/chrome/android/java/res/layout/sheet_tab_toolbar.xml
+++ b/chrome/android/java/res/layout/sheet_tab_toolbar.xml
@@ -102,7 +102,8 @@
                 android:layout_alignStart="@id/title"
                 android:layout_below="@id/title"
                 android:layout_marginTop="3dp"
-                app:tint="@macro/default_icon_color" />
+                app:tint="@macro/default_icon_color"
+                tools:ignore="ContentDescription" />
 
             <TextView
                 android:id="@+id/origin"
diff --git a/chrome/android/java/res/layout/shopping_filter_row.xml b/chrome/android/java/res/layout/shopping_filter_row.xml
index 73396c8..74f7f99 100644
--- a/chrome/android/java/res/layout/shopping_filter_row.xml
+++ b/chrome/android/java/res/layout/shopping_filter_row.xml
@@ -13,7 +13,8 @@
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/start_icon"
         android:src="@drawable/price_tracking_enabled_outline"
-        style="@style/ListItemStartIcon" />
+        style="@style/ListItemStartIcon"
+        android:importantForAccessibility="no" />
 
     <TextView
         android:id="@+id/title"
@@ -28,6 +29,7 @@
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/end_icon"
         android:src="@drawable/outline_chevron_right_24dp"
-        style="@style/ListItemEndIcon" />
+        style="@style/ListItemEndIcon"
+        android:importantForAccessibility="no" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/update_menu_item.xml b/chrome/android/java/res/layout/update_menu_item.xml
index 149a7a121..ec8c328 100644
--- a/chrome/android/java/res/layout/update_menu_item.xml
+++ b/chrome/android/java/res/layout/update_menu_item.xml
@@ -44,6 +44,7 @@
         android:layout_height="match_parent"
         android:layout_gravity="end"
         android:gravity="center_vertical"
-        app:tint="@null" />
+        app:tint="@null"
+        android:importantForAccessibility="no" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/virtual_card_enrollment_dialog.xml b/chrome/android/java/res/layout/virtual_card_enrollment_dialog.xml
index c2d47804..e68dba8 100644
--- a/chrome/android/java/res/layout/virtual_card_enrollment_dialog.xml
+++ b/chrome/android/java/res/layout/virtual_card_enrollment_dialog.xml
@@ -18,7 +18,8 @@
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
         android:src="@drawable/virtual_card_enrollment_illustration"
-        android:layout_centerHorizontal="true" />
+        android:layout_centerHorizontal="true"
+        android:importantForAccessibility="no" />
 
     <androidx.appcompat.widget.DialogTitle
         android:id="@+id/dialog_title"
@@ -46,7 +47,8 @@
             android:layout_alignTop="@id/virtual_card_text"
             android:layout_alignBottom="@id/credit_card_identifier"
             android:layout_marginEnd="@dimen/virtual_card_enrollment_dialog_card_container_issuer_icon_margin_end"
-            tools:src="@drawable/infobar_autofill_cc" />
+            tools:src="@drawable/infobar_autofill_cc"
+            android:importantForAccessibility="no" />
 
         <TextView
             android:id="@+id/virtual_card_text"
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index 694c825d..f5f7c0b9 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -956,10 +956,6 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     ash::ConfigureSwap();
     ash::InitializeKstaled();
-
-    // If we're in an experimental group that locks the browser text we will do
-    // that now.
-    ash::LockMainProgramText();
 #endif
   }
 
diff --git a/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc b/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
index 412455fd..e162c27 100644
--- a/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
+++ b/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
@@ -126,12 +126,10 @@
                      weak_ptr_factory_.GetWeakPtr(), app, std::move(callback)));
 }
 
-// TODO(b/263437253): fix up once supporting libraries are in place.
 std::string WebAppPreloadInstaller::GetAppId(
     const PreloadAppDefinition& app) const {
   // The app's "Web app manifest ID" is the equivalent of the unhashed app ID.
-  // return web_app::GenerateAppIdFromUnhashed(app.GetWebAppManifestId());
-  return "";
+  return web_app::GenerateAppIdFromUnhashed(app.GetWebAppManifestId().spec());
 }
 
 void WebAppPreloadInstaller::InstallAppImpl(
diff --git a/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc b/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
index 2461e18..5a5a1d0 100644
--- a/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
+++ b/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
@@ -126,11 +126,13 @@
   ASSERT_TRUE(found);
 }
 
-// TODO(b/263437253): fix up once supporting libraries are in place.
-TEST_F(WebAppPreloadInstallerTest, DISABLED_GetAppId) {
+TEST_F(WebAppPreloadInstallerTest, GetAppId) {
   WebAppPreloadInstaller installer(profile());
 
   proto::AppProvisioningListAppsResponse_App app;
+  app.set_package_id("web:https://cursive.apps.chrome/");
+  app.mutable_web_extras()->set_original_manifest_url(
+      "https://cursive.apps.chrome/manifest.json");
 
   ASSERT_EQ(installer.GetAppId(PreloadAppDefinition(app)),
             "apignacaigpffemhdbhmnajajaccbckh");
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.cc b/chrome/browser/apps/app_service/publishers/arc_apps.cc
index a2e85b4a..a35f9ec 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps.cc
@@ -126,25 +126,6 @@
   UpdateIconImage(std::move(callback), std::move(iv));
 }
 
-// TODO(crbug.com/1253250): Remove and use GetPermissionType
-apps::mojom::PermissionType GetAppServicePermissionType(
-    arc::mojom::AppPermission arc_permission_type) {
-  switch (arc_permission_type) {
-    case arc::mojom::AppPermission::CAMERA:
-      return apps::mojom::PermissionType::kCamera;
-    case arc::mojom::AppPermission::LOCATION:
-      return apps::mojom::PermissionType::kLocation;
-    case arc::mojom::AppPermission::MICROPHONE:
-      return apps::mojom::PermissionType::kMicrophone;
-    case arc::mojom::AppPermission::NOTIFICATIONS:
-      return apps::mojom::PermissionType::kNotifications;
-    case arc::mojom::AppPermission::CONTACTS:
-      return apps::mojom::PermissionType::kContacts;
-    case arc::mojom::AppPermission::STORAGE:
-      return apps::mojom::PermissionType::kStorage;
-  }
-}
-
 apps::PermissionType GetPermissionType(
     arc::mojom::AppPermission arc_permission_type) {
   switch (arc_permission_type) {
@@ -191,23 +172,6 @@
   }
 }
 
-// TODO(crbug.com/1253250): Remove and use CreatePermissions
-void UpdateAppPermissions(
-    const base::flat_map<arc::mojom::AppPermission,
-                         arc::mojom::PermissionStatePtr>& new_permissions,
-    std::vector<apps::mojom::PermissionPtr>* permissions) {
-  for (const auto& new_permission : new_permissions) {
-    auto permission = apps::mojom::Permission::New();
-    permission->permission_type =
-        GetAppServicePermissionType(new_permission.first);
-    permission->value = apps::mojom::PermissionValue::NewBoolValue(
-        new_permission.second->granted);
-    permission->is_managed = new_permission.second->managed;
-
-    permissions->push_back(std::move(permission));
-  }
-}
-
 apps::Permissions CreatePermissions(
     const base::flat_map<arc::mojom::AppPermission,
                          arc::mojom::PermissionStatePtr>& new_permissions) {
@@ -539,18 +503,6 @@
   }
 }
 
-// TODO(crbug.com/1253250): Remove and use GetResizeLocked.
-apps::mojom::OptionalBool IsResizeLocked(ArcAppListPrefs* prefs,
-                                         const std::string& app_id) {
-  auto resize_locked = GetResizeLocked(prefs, app_id);
-  if (!resize_locked.has_value()) {
-    return apps::mojom::OptionalBool::kUnknown;
-  }
-
-  return resize_locked.value() ? apps::mojom::OptionalBool::kTrue
-                               : apps::mojom::OptionalBool::kFalse;
-}
-
 bool IsWebAppShellPackage(Profile* profile,
                           const ArcAppListPrefs::AppInfo& app_info) {
   ash::ApkWebAppService* apk_web_app_service =
@@ -606,6 +558,30 @@
   return intent_filters;
 }
 
+apps::InstallReason GetInstallReason(const ArcAppListPrefs* prefs,
+                                     const std::string& app_id,
+                                     const ArcAppListPrefs::AppInfo& app_info) {
+  // Sticky represents apps that cannot be uninstalled and are installed by the
+  // system.
+  if (app_info.sticky) {
+    return apps::InstallReason::kSystem;
+  }
+
+  if (prefs->IsOem(app_id)) {
+    return apps::InstallReason::kOem;
+  }
+
+  if (prefs->IsDefault(app_id)) {
+    return apps::InstallReason::kDefault;
+  }
+
+  if (prefs->IsControlledByPolicy(app_info.package_name)) {
+    return apps::InstallReason::kPolicy;
+  }
+
+  return apps::InstallReason::kUser;
+}
+
 }  // namespace
 
 namespace apps {
@@ -628,12 +604,6 @@
     return;
   }
 
-  mojo::Remote<apps::mojom::AppService>& app_service = proxy()->AppService();
-  if (!base::FeatureList::IsEnabled(kStopMojomAppService) &&
-      !app_service.is_bound()) {
-    return;
-  }
-
   // Make some observee-observer connections.
   ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_);
   if (!prefs) {
@@ -672,8 +642,6 @@
     web_apk_manager_ = std::make_unique<apps::WebApkManager>(profile_);
   }
 
-  PublisherBase::Initialize(app_service, apps::mojom::AppType::kArc);
-
   RegisterPublisher(AppType::kArc);
 
   std::vector<AppPtr> apps;
@@ -1069,27 +1037,6 @@
                                         : arc::mojom::ArcResizeLockState::OFF);
 }
 
-void ArcApps::Connect(
-    mojo::PendingRemote<apps::mojom::Subscriber> subscriber_remote,
-    apps::mojom::ConnectOptionsPtr opts) {
-  std::vector<apps::mojom::AppPtr> apps;
-  ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_);
-  if (prefs) {
-    for (const auto& app_id : prefs->GetAppIds()) {
-      std::unique_ptr<ArcAppListPrefs::AppInfo> app_info =
-          prefs->GetApp(app_id);
-      if (app_info) {
-        apps.push_back(Convert(prefs, app_id, *app_info));
-      }
-    }
-  }
-  mojo::Remote<apps::mojom::Subscriber> subscriber(
-      std::move(subscriber_remote));
-  subscriber->OnApps(std::move(apps), apps::mojom::AppType::kArc,
-                     true /* should_notify_initialized */);
-  subscribers_.Add(std::move(subscriber));
-}
-
 void ArcApps::PauseApp(const std::string& app_id) {
   if (paused_apps_.MaybeAddApp(app_id)) {
     SetIconEffect(app_id);
@@ -1163,7 +1110,6 @@
                               const ArcAppListPrefs::AppInfo& app_info) {
   ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_);
   if (prefs && !IsWebAppShellPackage(profile_, app_info)) {
-    PublisherBase::Publish(Convert(prefs, app_id, app_info), subscribers_);
     AppPublisher::Publish(CreateApp(prefs, app_id, app_info));
   }
 }
@@ -1175,7 +1121,6 @@
     return;
   }
 
-  PublisherBase::Publish(Convert(prefs, app_id, app_info), subscribers_);
   AppPublisher::Publish(CreateApp(prefs, app_id, app_info));
 }
 
@@ -1190,12 +1135,6 @@
     app_id_to_task_ids_.erase(app_id);
   }
 
-  apps::mojom::AppPtr mojom_app = apps::mojom::App::New();
-  mojom_app->app_type = apps::mojom::AppType::kArc;
-  mojom_app->app_id = app_id;
-  mojom_app->readiness = apps::mojom::Readiness::kUninstalledByUser;
-  PublisherBase::Publish(std::move(mojom_app), subscribers_);
-
   auto app = std::make_unique<App>(AppType::kArc, app_id);
   app->readiness = Readiness::kUninstalledByUser;
   AppPublisher::Publish(std::move(app));
@@ -1208,12 +1147,6 @@
 
 void ArcApps::OnAppNameUpdated(const std::string& app_id,
                                const std::string& name) {
-  apps::mojom::AppPtr mojom_app = apps::mojom::App::New();
-  mojom_app->app_type = apps::mojom::AppType::kArc;
-  mojom_app->app_id = app_id;
-  mojom_app->name = name;
-  PublisherBase::Publish(std::move(mojom_app), subscribers_);
-
   auto app = std::make_unique<App>(AppType::kArc, app_id);
   app->name = name;
   AppPublisher::Publish(std::move(app));
@@ -1228,11 +1161,6 @@
   if (!app_info || IsWebAppShellPackage(profile_, *app_info)) {
     return;
   }
-  apps::mojom::AppPtr mojom_app = apps::mojom::App::New();
-  mojom_app->app_type = apps::mojom::AppType::kArc;
-  mojom_app->app_id = app_id;
-  mojom_app->last_launch_time = app_info->last_launch_time;
-  PublisherBase::Publish(std::move(mojom_app), subscribers_);
 
   auto app = std::make_unique<App>(AppType::kArc, app_id);
   app->last_launch_time = app_info->last_launch_time;
@@ -1262,8 +1190,6 @@
   for (const auto& app_id : prefs->GetAppIds()) {
     std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id);
     if (app_info && !IsWebAppShellPackage(profile_, *app_info)) {
-      PublisherBase::Publish(Convert(prefs, app_id, *app_info, update_icon),
-                             subscribers_);
       AppPublisher::Publish(CreateApp(prefs, app_id, *app_info, update_icon));
     }
   }
@@ -1304,9 +1230,6 @@
   auto GetAppInfoAndPublish = [prefs, this](std::string app_id) {
     std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id);
     if (app_info) {
-      PublisherBase::Publish(
-          Convert(prefs, app_id, *app_info, false /* update_icon */),
-          subscribers_);
       AppPublisher::Publish(
           CreateApp(prefs, app_id, *app_info, false /* update_icon */));
     }
@@ -1333,13 +1256,6 @@
     const std::vector<arc::mojom::SupportedLinksPackagePtr>& added,
     const std::vector<arc::mojom::SupportedLinksPackagePtr>& removed,
     arc::mojom::SupportedLinkChangeSource source) {
-  if (!base::FeatureList::IsEnabled(kStopMojomAppService)) {
-    mojo::Remote<apps::mojom::AppService>& app_service = proxy()->AppService();
-    if (!app_service.is_bound()) {
-      return;
-    }
-  }
-
   ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_);
   if (!prefs) {
     return;
@@ -1529,37 +1445,11 @@
                        is_placeholder_icon, icon_effects, std::move(callback));
 }
 
-apps::mojom::InstallReason GetInstallReason(
-    const ArcAppListPrefs* prefs,
-    const std::string& app_id,
-    const ArcAppListPrefs::AppInfo& app_info) {
-  // Sticky represents apps that cannot be uninstalled and are installed by the
-  // system.
-  if (app_info.sticky) {
-    return apps::mojom::InstallReason::kSystem;
-  }
-
-  if (prefs->IsOem(app_id)) {
-    return apps::mojom::InstallReason::kOem;
-  }
-
-  if (prefs->IsDefault(app_id)) {
-    return apps::mojom::InstallReason::kDefault;
-  }
-
-  if (prefs->IsControlledByPolicy(app_info.package_name)) {
-    return apps::mojom::InstallReason::kPolicy;
-  }
-
-  return apps::mojom::InstallReason::kUser;
-}
-
 AppPtr ArcApps::CreateApp(ArcAppListPrefs* prefs,
                           const std::string& app_id,
                           const ArcAppListPrefs::AppInfo& app_info,
                           bool update_icon) {
-  auto install_reason = ConvertMojomInstallReasonToInstallReason(
-      GetInstallReason(prefs, app_id, app_info));
+  auto install_reason = GetInstallReason(prefs, app_id, app_info);
   auto app = AppPublisher::MakeApp(
       AppType::kArc, app_id,
       app_info.suspended ? Readiness::kDisabledByPolicy : Readiness::kReady,
@@ -1630,83 +1520,6 @@
   app->app_size_in_bytes = app_info.app_size_in_bytes;
   app->data_size_in_bytes = app_info.data_size_in_bytes;
 
-  // TODO(crbug.com/1253250): Add other fields for the App struct.
-  return app;
-}
-
-apps::mojom::AppPtr ArcApps::Convert(ArcAppListPrefs* prefs,
-                                     const std::string& app_id,
-                                     const ArcAppListPrefs::AppInfo& app_info,
-                                     bool update_icon) {
-  auto install_reason = GetInstallReason(prefs, app_id, app_info);
-  apps::mojom::AppPtr app = PublisherBase::MakeApp(
-      apps::mojom::AppType::kArc, app_id,
-      app_info.suspended ? apps::mojom::Readiness::kDisabledByPolicy
-                         : apps::mojom::Readiness::kReady,
-      app_info.name, install_reason);
-
-  app->publisher_id = app_info.package_name;
-
-  auto paused = paused_apps_.IsPaused(app_id)
-                    ? apps::mojom::OptionalBool::kTrue
-                    : apps::mojom::OptionalBool::kFalse;
-
-  if (update_icon) {
-    app->icon_key =
-        icon_key_factory_.MakeIconKey(GetIconEffects(app_id, app_info));
-  }
-
-  app->version = app_info.version_name;
-
-  app->last_launch_time = app_info.last_launch_time;
-  app->install_time = app_info.install_time;
-  app->install_source = install_reason == apps::mojom::InstallReason::kSystem
-                            ? apps::mojom::InstallSource::kSystem
-                            : apps::mojom::InstallSource::kPlayStore;
-
-  auto show = ShouldShow(app_info) ? apps::mojom::OptionalBool::kTrue
-                                   : apps::mojom::OptionalBool::kFalse;
-  // All published ARC apps are launchable. All launchable apps should be
-  // permitted to be shown on the shelf, and have their pins on the shelf
-  // persisted.
-  app->show_in_shelf = apps::mojom::OptionalBool::kTrue;
-  app->show_in_launcher = show;
-  app->handles_intents = show;
-
-  if (app_id == arc::kPlayGamesAppId &&
-      show == apps::mojom::OptionalBool::kFalse) {
-    // Play Games should only be hidden in the launcher.
-    app->show_in_search = apps::mojom::OptionalBool::kTrue;
-    app->show_in_management = apps::mojom::OptionalBool::kTrue;
-  } else {
-    app->show_in_search = show;
-    app->show_in_management = show;
-  }
-
-  app->allow_uninstall = (app_info.ready && !app_info.sticky)
-                             ? apps::mojom::OptionalBool::kTrue
-                             : apps::mojom::OptionalBool::kFalse;
-
-  app->has_badge = app_notifications_.HasNotification(app_id)
-                       ? apps::mojom::OptionalBool::kTrue
-                       : apps::mojom::OptionalBool::kFalse;
-  app->paused = paused;
-  app->resize_locked = IsResizeLocked(prefs, app_id);
-
-  std::unique_ptr<ArcAppListPrefs::PackageInfo> package =
-      prefs->GetPackage(app_info.package_name);
-  if (package) {
-    UpdateAppPermissions(package->permissions, &app->permissions);
-  }
-
-  auto* intent_helper_bridge =
-      arc::ArcIntentHelperBridge::GetForBrowserContext(profile_);
-  if (intent_helper_bridge &&
-      app_info.package_name != arc::kArcIntentHelperPackageName) {
-    UpdateAppIntentFilters(app_info.package_name, intent_helper_bridge,
-                           &app->intent_filters);
-  }
-
   return app;
 }
 
@@ -1720,8 +1533,6 @@
       std::unique_ptr<ArcAppListPrefs::AppInfo> app_info =
           prefs->GetApp(app_id);
       if (app_info && !IsWebAppShellPackage(profile_, *app_info)) {
-        PublisherBase::Publish(Convert(prefs, app_id, *app_info, update_icon),
-                               subscribers_);
         AppPublisher::Publish(CreateApp(prefs, app_id, *app_info, update_icon));
       }
     }
@@ -1752,13 +1563,6 @@
     return;
   }
 
-  apps::mojom::AppPtr mojom_app = apps::mojom::App::New();
-  mojom_app->app_type = apps::mojom::AppType::kArc;
-  mojom_app->app_id = app_id;
-  mojom_app->icon_key =
-      icon_key_factory_.MakeIconKey(GetIconEffects(app_id, *app_info));
-  PublisherBase::Publish(std::move(mojom_app), subscribers_);
-
   auto app = std::make_unique<App>(AppType::kArc, app_id);
   app->icon_key = std::move(
       *icon_key_factory_.CreateIconKey(GetIconEffects(app_id, *app_info)));
@@ -1777,18 +1581,6 @@
   app_id_to_task_ids_.erase(app_id);
 }
 
-void ArcApps::UpdateAppIntentFilters(
-    std::string package_name,
-    arc::ArcIntentHelperBridge* intent_helper_bridge,
-    std::vector<apps::mojom::IntentFilterPtr>* intent_filters) {
-  const std::vector<arc::IntentFilter>& arc_intent_filters =
-      intent_helper_bridge->GetIntentFilterForPackage(package_name);
-  for (auto& arc_intent_filter : arc_intent_filters) {
-    intent_filters->push_back(
-        apps_util::ConvertArcToAppServiceIntentFilter(arc_intent_filter));
-  }
-}
-
 void ArcApps::BuildMenuForShortcut(
     const std::string& package_name,
     MenuItems menu_items,
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.h b/chrome/browser/apps/app_service/publishers/arc_apps.h
index 3b264b1..8fc42c6 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps.h
+++ b/chrome/browser/apps/app_service/publishers/arc_apps.h
@@ -44,10 +44,6 @@
 #include "components/services/app_service/public/cpp/menu.h"
 #include "components/services/app_service/public/cpp/permission.h"
 #include "components/services/app_service/public/cpp/publisher_base.h"
-#include "components/services/app_service/public/mojom/app_service.mojom.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote_set.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 class Profile;
@@ -61,12 +57,7 @@
 // An app publisher (in the App Service sense) of ARC++ apps,
 //
 // See components/services/app_service/README.md.
-//
-// TODO(crbug.com/1253250):
-// 1. Remove the parent class apps::PublisherBase.
-// 2. Remove all apps::mojom related code.
 class ArcApps : public KeyedService,
-                public apps::PublisherBase,
                 public AppPublisher,
                 public ArcAppListPrefs::Observer,
                 public arc::ArcIntentHelperObserver,
@@ -142,9 +133,6 @@
       ReplacedAppPreferences replaced_app_preferences) override;
   void SetResizeLocked(const std::string& app_id, bool locked) override;
 
-  // apps::mojom::Publisher overrides.
-  void Connect(mojo::PendingRemote<apps::mojom::Subscriber> subscriber_remote,
-               apps::mojom::ConnectOptionsPtr opts) override;
   void PauseApp(const std::string& app_id) override;
   void UnpauseApp(const std::string& app_id) override;
   void StopApp(const std::string& app_id) override;
@@ -218,10 +206,6 @@
                    const std::string& app_id,
                    const ArcAppListPrefs::AppInfo& app_info,
                    bool update_icon = true);
-  apps::mojom::AppPtr Convert(ArcAppListPrefs* prefs,
-                              const std::string& app_id,
-                              const ArcAppListPrefs::AppInfo& app_info,
-                              bool update_icon = true);
   void ConvertAndPublishPackageApps(
       const arc::mojom::ArcPackageInfo& package_info,
       bool update_icon = true);
@@ -229,10 +213,6 @@
                              const ArcAppListPrefs::AppInfo& app_info);
   void SetIconEffect(const std::string& app_id);
   void CloseTasks(const std::string& app_id);
-  void UpdateAppIntentFilters(
-      std::string package_name,
-      arc::ArcIntentHelperBridge* intent_helper_bridge,
-      std::vector<apps::mojom::IntentFilterPtr>* intent_filters);
 
   void BuildMenuForShortcut(const std::string& package_name,
                             MenuItems menu_items,
@@ -245,8 +225,6 @@
       base::OnceCallback<void(MenuItems)> callback,
       std::unique_ptr<apps::AppShortcutItems> app_shortcut_items);
 
-  mojo::RemoteSet<apps::mojom::Subscriber> subscribers_;
-
   Profile* const profile_;
   ArcIconOnceLoader arc_icon_once_loader_;
   ArcActivityAdaptiveIconImpl arc_activity_adaptive_icon_impl_;
diff --git a/chrome/browser/apps/app_service/publishers/crostini_apps.cc b/chrome/browser/apps/app_service/publishers/crostini_apps.cc
index d676d2c..3a51ec5 100644
--- a/chrome/browser/apps/app_service/publishers/crostini_apps.cc
+++ b/chrome/browser/apps/app_service/publishers/crostini_apps.cc
@@ -82,7 +82,7 @@
   // the app can support. We find these extension types by checking what
   // extensions correspond to the app's supported mime types.
   std::vector<std::string> extension_types;
-  if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService()) {
+  if (ash::features::ShouldGuestOsFileTasksUseAppService()) {
     extension_types = mime_types_service->GetExtensionTypesFromMimeTypes(
         mime_types_set, registration.VmName(), registration.ContainerName());
   }
diff --git a/chrome/browser/apps/app_service/publishers/crostini_apps_unittest.cc b/chrome/browser/apps/app_service/publishers/crostini_apps_unittest.cc
index e0b74a2c..22d6c5fe 100644
--- a/chrome/browser/apps/app_service/publishers/crostini_apps_unittest.cc
+++ b/chrome/browser/apps/app_service/publishers/crostini_apps_unittest.cc
@@ -165,7 +165,7 @@
 
 TEST_F(CrostiniAppsTest, CrostiniIntentFilterHasExtensionsFromPrefs) {
   base::test::ScopedFeatureList scoped_feature_list{
-      ash::features::kArcAndGuestOsFileTasksUseAppService};
+      ash::features::kGuestOsFileTasksUseAppService};
 
   std::string mime_type = "test/mime1";
   std::string extension = "test_extension";
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index aa1b5c3..1b63c2d 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -1701,6 +1701,8 @@
     "login/screens/app_downloading_screen.h",
     "login/screens/arc_terms_of_service_screen.cc",
     "login/screens/arc_terms_of_service_screen.h",
+    "login/screens/arc_vm_data_migration_screen.cc",
+    "login/screens/arc_vm_data_migration_screen.h",
     "login/screens/assistant_optin_flow_screen.cc",
     "login/screens/assistant_optin_flow_screen.h",
     "login/screens/base_screen.cc",
diff --git a/chrome/browser/ash/app_list/search/scoring.cc b/chrome/browser/ash/app_list/search/scoring.cc
index 69d143ce..ad95be0 100644
--- a/chrome/browser/ash/app_list/search/scoring.cc
+++ b/chrome/browser/ash/app_list/search/scoring.cc
@@ -11,24 +11,21 @@
 namespace app_list {
 
 double Scoring::FinalScore() const {
-  if (filter) {
+  if (filter && !override_filter_for_test)
     return -1.0;
-  }
   return ftrl_result_score;
 }
 
 double Scoring::BestMatchScore() const {
-  if (filter) {
+  if (filter)
     return -1.0;
-  } else {
+  else
     return std::max(mrfu_result_score, normalized_relevance);
-  }
 }
 
 ::std::ostream& operator<<(::std::ostream& os, const Scoring& scoring) {
-  if (scoring.filter) {
+  if (scoring.filter)
     return os << "{" << scoring.FinalScore() << " | filtered}";
-  }
   return os << base::StringPrintf(
              "{%.2f | nr:%.2f rs:%.2f bm:%d cr:%d bi:%d}", scoring.FinalScore(),
              scoring.normalized_relevance, scoring.ftrl_result_score,
diff --git a/chrome/browser/ash/app_list/search/scoring.h b/chrome/browser/ash/app_list/search/scoring.h
index aea3422..02f7b1e 100644
--- a/chrome/browser/ash/app_list/search/scoring.h
+++ b/chrome/browser/ash/app_list/search/scoring.h
@@ -18,6 +18,11 @@
   double normalized_relevance = 0.0;
   double mrfu_result_score = 0.0;
   double ftrl_result_score = 0.0;
+  // TODO(b/259607603) remove 'override_filter_for_test'. This field is used
+  // to temporarily disable filtering for a specific result. This is needed
+  // due to a race condition with the test beginning before the
+  // RemovedResultsRanker is initialized.
+  bool override_filter_for_test = false;
 
   // Used only for results in the Continue section. Continue results are first
   // ordered by |continue_rank|, and then by their display score. -1 indicates
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_common.cc b/chrome/browser/ash/cert_provisioning/cert_provisioning_common.cc
index e4017a55f..a8201c9 100644
--- a/chrome/browser/ash/cert_provisioning/cert_provisioning_common.cc
+++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_common.cc
@@ -138,17 +138,17 @@
 CertProfile::~CertProfile() = default;
 
 absl::optional<CertProfile> CertProfile::MakeFromValue(
-    const base::Value& value) {
+    const base::Value::Dict& value) {
   static_assert(kVersion == 5, "This function should be updated");
 
-  const std::string* id = value.FindStringKey(kCertProfileIdKey);
-  const std::string* name = value.FindStringKey(kCertProfileNameKey);
+  const std::string* id = value.FindString(kCertProfileIdKey);
+  const std::string* name = value.FindString(kCertProfileNameKey);
   const std::string* policy_version =
-      value.FindStringKey(kCertProfilePolicyVersionKey);
+      value.FindString(kCertProfilePolicyVersionKey);
   absl::optional<bool> is_va_enabled =
-      value.FindBoolKey(kCertProfileIsVaEnabledKey);
+      value.FindBool(kCertProfileIsVaEnabledKey);
   absl::optional<int> renewal_period_sec =
-      value.FindIntKey(kCertProfileRenewalPeroidSec);
+      value.FindInt(kCertProfileRenewalPeroidSec);
 
   if (!id || !policy_version) {
     return absl::nullopt;
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_common.h b/chrome/browser/ash/cert_provisioning/cert_provisioning_common.h
index c421d4f8..a72e2b51 100644
--- a/chrome/browser/ash/cert_provisioning/cert_provisioning_common.h
+++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_common.h
@@ -92,7 +92,8 @@
 const char kCertProfileIsVaEnabledKey[] = "enable_remote_attestation_check";
 
 struct CertProfile {
-  static absl::optional<CertProfile> MakeFromValue(const base::Value& value);
+  static absl::optional<CertProfile> MakeFromValue(
+      const base::Value::Dict& value);
 
   CertProfile();
   // For tests.
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_scheduler.cc b/chrome/browser/ash/cert_provisioning/cert_provisioning_scheduler.cc
index 5502707e44..f71d63a 100644
--- a/chrome/browser/ash/cert_provisioning/cert_provisioning_scheduler.cc
+++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_scheduler.cc
@@ -557,12 +557,13 @@
   const base::Value& profile_list = pref_service_->GetValue(pref_name_);
 
   for (const base::Value& cur_profile : profile_list.GetList()) {
-    const CertProfileId* id = cur_profile.FindStringKey(kCertProfileIdKey);
+    const base::Value::Dict& cur_profile_dict = cur_profile.GetDict();
+    const CertProfileId* id = cur_profile_dict.FindString(kCertProfileIdKey);
     if (!id || (*id != cert_profile_id)) {
       continue;
     }
 
-    return CertProfile::MakeFromValue(cur_profile);
+    return CertProfile::MakeFromValue(cur_profile_dict);
   }
 
   return absl::nullopt;
@@ -575,7 +576,8 @@
 
   std::vector<CertProfile> result_profiles;
   for (const base::Value& cur_profile : profile_list.GetList()) {
-    absl::optional<CertProfile> p = CertProfile::MakeFromValue(cur_profile);
+    absl::optional<CertProfile> p =
+        CertProfile::MakeFromValue(cur_profile.GetDict());
     if (!p) {
       LOG(WARNING) << "Failed to parse certificate profile";
       continue;
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_serializer.cc b/chrome/browser/ash/cert_provisioning/cert_provisioning_serializer.cc
index e9b8d30..a5bd9ee0 100644
--- a/chrome/browser/ash/cert_provisioning/cert_provisioning_serializer.cc
+++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_serializer.cc
@@ -4,8 +4,11 @@
 
 #include "chrome/browser/ash/cert_provisioning/cert_provisioning_serializer.h"
 
+#include <string>
+
 #include "base/base64.h"
 #include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/cert_provisioning/cert_provisioning_common.h"
 #include "components/prefs/pref_service.h"
@@ -39,20 +42,20 @@
 }
 
 template <typename T>
-bool DeserializeEnumValue(const base::Value::Dict& parent_value,
+bool DeserializeEnumValue(const base::Value::Dict& parent_dict,
                           const char* value_name,
                           T* dst) {
-  const absl::optional<int> serialized_enum = parent_value.FindInt(value_name);
-  if (!serialized_enum) {
+  absl::optional<int> serialized_enum = parent_dict.FindInt(value_name);
+  if (!serialized_enum.has_value()) {
     return false;
   }
   return ConvertToEnum<T>(*serialized_enum, dst);
 }
 
-bool DeserializeStringValue(const base::Value::Dict& parent_value,
+bool DeserializeStringValue(const base::Value::Dict& parent_dict,
                             const char* value_name,
                             std::string* dst) {
-  const std::string* serialized_string = parent_value.FindString(value_name);
+  const std::string* serialized_string = parent_dict.FindString(value_name);
   if (!serialized_string) {
     return false;
   }
@@ -60,22 +63,21 @@
   return true;
 }
 
-bool DeserializeBoolValue(const base::Value::Dict& parent_value,
+bool DeserializeBoolValue(const base::Value::Dict& parent_dict,
                           const char* value_name,
                           bool* dst) {
-  const absl::optional<bool> serialized_bool =
-      parent_value.FindBool(value_name);
-  if (!serialized_bool) {
+  absl::optional<bool> serialized_bool = parent_dict.FindBool(value_name);
+  if (!serialized_bool.has_value()) {
     return false;
   }
   *dst = *serialized_bool;
   return true;
 }
 
-bool DeserializeRenewalPeriod(const base::Value::Dict& parent_value,
+bool DeserializeRenewalPeriod(const base::Value::Dict& parent_dict,
                               const char* value_name,
                               base::TimeDelta* dst) {
-  absl::optional<int> serialized_time = parent_value.FindInt(value_name);
+  absl::optional<int> serialized_time = parent_dict.FindInt(value_name);
   *dst = base::Seconds(serialized_time.value_or(0));
   return true;
 }
@@ -91,19 +93,19 @@
 
   if (!profile.renewal_period.is_zero()) {
     result.Set(kKeyNameCertProfileRenewalPeriod,
-               static_cast<int>(profile.renewal_period.InSeconds()));
+               base::saturated_cast<int>(profile.renewal_period.InSeconds()));
   }
 
   return result;
 }
 
-bool DeserializeCertProfile(const base::Value::Dict& parent_value,
+bool DeserializeCertProfile(const base::Value::Dict& parent_dict,
                             const char* value_name,
                             CertProfile* dst) {
   static_assert(CertProfile::kVersion == 5, "This function should be updated");
 
   const base::Value::Dict* serialized_profile =
-      parent_value.FindDict(value_name);
+      parent_dict.FindDict(value_name);
 
   if (!serialized_profile) {
     return false;
@@ -128,15 +130,14 @@
   return is_ok;
 }
 
-base::Value SerializePublicKey(const std::vector<uint8_t>& public_key) {
-  return base::Value(base::Base64Encode(public_key));
+std::string SerializePublicKey(const std::vector<uint8_t>& public_key) {
+  return base::Base64Encode(public_key);
 }
 
-bool DeserializePublicKey(const base::Value::Dict& parent_value,
+bool DeserializePublicKey(const base::Value::Dict& parent_dict,
                           const char* value_name,
                           std::vector<uint8_t>* dst) {
-  const std::string* serialized_public_key =
-      parent_value.FindString(value_name);
+  const std::string* serialized_public_key = parent_dict.FindString(value_name);
 
   if (!serialized_public_key) {
     return false;
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_worker_unittest.cc b/chrome/browser/ash/cert_provisioning/cert_provisioning_worker_unittest.cc
index 05d138c..46b34385 100644
--- a/chrome/browser/ash/cert_provisioning/cert_provisioning_worker_unittest.cc
+++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_worker_unittest.cc
@@ -50,7 +50,7 @@
 
 using attestation::MockTpmChallengeKeySubtle;
 using ::base::test::IsJson;
-using ::base::test::ParseJson;
+using ::base::test::ParseJsonDict;
 using ::base::test::RunOnceCallback;
 using ::chromeos::platform_keys::HashAlgorithm;
 using ::chromeos::platform_keys::KeyAttributeType;
@@ -1647,7 +1647,7 @@
 
   StrictMock<PrefServiceObserver> pref_observer(
       &testing_pref_service_, GetPrefNameForSerialization(kCertScope));
-  base::Value pref_val;
+  base::Value::Dict pref_val;
 
   EXPECT_CALL(state_change_callback_observer_, StateChangeCallback)
       .Times(AtLeast(1));
@@ -1665,7 +1665,7 @@
                             /*profile=*/_,
                             /*callback=*/_, /*signals=*/_));
 
-    pref_val = ParseJson(base::StringPrintf(
+    pref_val = ParseJsonDict(base::StringPrintf(
         R"({
           "cert_profile_1": {
             "cert_profile": {
@@ -1705,9 +1705,9 @@
 
     worker = CertProvisioningWorkerFactory::Get()->Deserialize(
         kCertScope, GetProfile(), &testing_pref_service_,
-        *pref_val.GetDict().FindDict(kCertProfileId),
-        &cert_provisioning_client_, MakeInvalidator(&mock_invalidator),
-        GetStateChangeCallback(), GetResultCallback());
+        *pref_val.FindDict(kCertProfileId), &cert_provisioning_client_,
+        MakeInvalidator(&mock_invalidator), GetStateChangeCallback(),
+        GetResultCallback());
   }
 
   // Retry start csr request, receive response, try sign challenge.
@@ -1718,7 +1718,7 @@
         StartCsr(Eq(std::ref(provisioning_process)), /*callback=*/_),
         em::HashingAlgorithm::SHA256);
 
-    pref_val = ParseJson("{}");
+    pref_val = ParseJsonDict("{}");
     EXPECT_CALL(pref_observer, OnPrefValueUpdated(IsJson(pref_val))).Times(1);
 
     EXPECT_CALL(*mock_invalidator, Register(kInvalidationTopic, _)).Times(1);
@@ -1746,7 +1746,7 @@
                                    kChallengeResponse, kSignature,
                                    /*callback=*/_));
 
-    pref_val = ParseJson(base::StringPrintf(
+    pref_val = ParseJsonDict(base::StringPrintf(
         R"({
           "cert_profile_1": {
             "cert_profile": {
@@ -1788,9 +1788,9 @@
 
     worker = CertProvisioningWorkerFactory::Get()->Deserialize(
         kCertScope, GetProfile(), &testing_pref_service_,
-        *pref_val.GetDict().FindDict(kCertProfileId),
-        &cert_provisioning_client_, std::move(mock_invalidator_obj),
-        GetStateChangeCallback(), GetResultCallback());
+        *pref_val.FindDict(kCertProfileId), &cert_provisioning_client_,
+        std::move(mock_invalidator_obj), GetStateChangeCallback(),
+        GetResultCallback());
   }
 
   // Retry download cert request, receive response, try import certificate.
@@ -1803,7 +1803,7 @@
     EXPECT_IMPORT_CERTIFICATE_OK(
         ImportCertificate(TokenId::kUser, /*certificate=*/_, /*callback=*/_));
 
-    pref_val = ParseJson("{}");
+    pref_val = ParseJsonDict("{}");
     EXPECT_CALL(pref_observer, OnPrefValueUpdated(IsJson(pref_val))).Times(1);
 
     EXPECT_CALL(*mock_invalidator, Unregister()).Times(1);
@@ -1829,7 +1829,7 @@
 
   PrefServiceObserver pref_observer(&testing_pref_service_,
                                     GetPrefNameForSerialization(kCertScope));
-  base::Value pref_val;
+  base::Value::Dict pref_val;
 
   EXPECT_CALL(state_change_callback_observer_, StateChangeCallback)
       .Times(AtLeast(1));
@@ -1845,7 +1845,7 @@
                             /*profile=*/_,
                             /*callback=*/_, /*signals=*/_));
 
-    pref_val = ParseJson(base::StringPrintf(
+    pref_val = ParseJsonDict(base::StringPrintf(
         R"({
           "cert_profile_1": {
             "cert_profile": {
@@ -1865,7 +1865,7 @@
 
     EXPECT_START_CSR_CA_ERROR(StartCsr);
 
-    pref_val = ParseJson("{}");
+    pref_val = ParseJsonDict("{}");
     EXPECT_CALL(pref_observer, OnPrefValueUpdated(IsJson(pref_val))).Times(1);
 
     EXPECT_CALL(callback_observer_,
@@ -1951,7 +1951,7 @@
 
   PrefServiceObserver pref_observer(&testing_pref_service_,
                                     GetPrefNameForSerialization(kCertScope));
-  base::Value pref_val;
+  base::Value::Dict pref_val;
 
   {
     testing::InSequence seq;
@@ -1965,7 +1965,7 @@
                             /*profile=*/_,
                             /*callback=*/_, /*signals=*/_));
 
-    pref_val = ParseJson(base::StringPrintf(
+    pref_val = ParseJsonDict(base::StringPrintf(
         R"({
           "cert_profile_1": {
             "cert_profile": {
@@ -1989,7 +1989,7 @@
   }
 
   {
-    pref_val = ParseJson("{}");
+    pref_val = ParseJsonDict("{}");
     EXPECT_CALL(pref_observer, OnPrefValueUpdated(IsJson(pref_val))).Times(1);
 
     worker->Stop(CertProvisioningWorkerState::kCanceled);
diff --git a/chrome/browser/ash/crostini/crostini_installer.cc b/chrome/browser/ash/crostini/crostini_installer.cc
index d46ae93..242d74388 100644
--- a/chrome/browser/ash/crostini/crostini_installer.cc
+++ b/chrome/browser/ash/crostini/crostini_installer.cc
@@ -162,6 +162,55 @@
   NOTREACHED();
 }
 
+crostini::mojom::InstallerError CrostiniResultToInstallerError(
+    crostini::CrostiniResult result,
+    InstallerState installer_state) {
+  DCHECK_NE(result, CrostiniResult::SUCCESS);
+
+  bool offline = content::GetNetworkConnectionTracker()->IsOffline();
+  if (offline) {
+    LOG(WARNING)
+        << "Crostini installation may have failed due to being offline.";
+  }
+
+  switch (installer_state) {
+    default:
+    case InstallerState::kStart:
+      NOTREACHED();
+      return InstallerError::kErrorUnknown;
+    case InstallerState::kInstallImageLoader:
+      if (offline) {
+        return InstallerError::kErrorOffline;
+      } else if (result == CrostiniResult::NEED_UPDATE) {
+        return InstallerError::kNeedUpdate;
+      } else {
+        return InstallerError::kErrorLoadingTermina;
+      }
+    case InstallerState::kCreateDiskImage:
+      return InstallerError::kErrorCreatingDiskImage;
+    case InstallerState::kStartTerminaVm:
+      return InstallerError::kErrorStartingTermina;
+    case InstallerState::kStartLxd:
+      return InstallerError::kErrorStartingLxd;
+    case InstallerState::kCreateContainer:
+      if (offline) {
+        return InstallerError::kErrorOffline;
+      } else {
+        return InstallerError::kErrorCreateContainer;
+      }
+    case InstallerState::kSetupContainer:
+      if (offline) {
+        return InstallerError::kErrorOffline;
+      } else {
+        return InstallerError::kErrorSettingUpContainer;
+      }
+    case InstallerState::kStartContainer:
+      return InstallerError::kErrorStartingContainer;
+    case InstallerState::kConfigureContainer:
+      return InstallerError::kErrorConfiguringContainer;
+  }
+}
+
 }  // namespace
 
 CrostiniInstaller* CrostiniInstaller::GetForProfile(Profile* profile) {
@@ -308,102 +357,30 @@
   RecordSetupResult(SetupResult::kNotStarted);
 }
 
-void CrostiniInstaller::OnStageStarted(InstallerState stage) {}
-
-void CrostiniInstaller::OnComponentLoaded(CrostiniResult result) {
-  DCHECK_EQ(installing_state_, InstallerState::kInstallImageLoader);
-
-  if (result != CrostiniResult::SUCCESS) {
-    if (content::GetNetworkConnectionTracker()->IsOffline()) {
-      LOG(ERROR) << "Network connection dropped while downloading cros-termina";
-      HandleError(InstallerError::kErrorOffline);
-    } else if (result == CrostiniResult::NEED_UPDATE) {
-      HandleError(InstallerError::kNeedUpdate);
-    } else {
-      HandleError(InstallerError::kErrorLoadingTermina);
-    }
+void CrostiniInstaller::OnStageStarted(InstallerState stage) {
+  if (stage == InstallerState::kStart ||
+      stage == InstallerState::kInstallImageLoader) {
+    // Drop these as we manually set our internal state to kInstallImageLoader
+    // upon starting the restart.
     return;
   }
-  UpdateInstallingState(InstallerState::kCreateDiskImage);
+
+  UpdateInstallingState(stage);
 }
 
 void CrostiniInstaller::OnDiskImageCreated(bool success,
                                            CrostiniResult result,
                                            int64_t disk_size_available) {
-  DCHECK_EQ(installing_state_, InstallerState::kCreateDiskImage);
-  if (!success) {
-    HandleError(InstallerError::kErrorCreatingDiskImage);
-    return;
-  }
   if (result == CrostiniResult::CREATE_DISK_IMAGE_ALREADY_EXISTS) {
     require_cleanup_ = false;
   }
-  UpdateInstallingState(InstallerState::kStartTerminaVm);
-}
-
-void CrostiniInstaller::OnVmStarted(bool success) {
-  DCHECK_EQ(installing_state_, InstallerState::kStartTerminaVm);
-  if (!success) {
-    HandleError(InstallerError::kErrorStartingTermina);
-    return;
-  }
-  UpdateInstallingState(InstallerState::kStartLxd);
-}
-
-void CrostiniInstaller::OnLxdStarted(CrostiniResult result) {
-  DCHECK_EQ(installing_state_, InstallerState::kStartLxd);
-  if (result != CrostiniResult::SUCCESS) {
-    HandleError(InstallerError::kErrorStartingLxd);
-    return;
-  }
-  UpdateInstallingState(InstallerState::kCreateContainer);
 }
 
 void CrostiniInstaller::OnContainerDownloading(int32_t download_percent) {
-  DCHECK_EQ(installing_state_, InstallerState::kCreateContainer);
   container_download_percent_ = base::clamp(download_percent, 0, 100);
   RunProgressCallback();
 }
 
-void CrostiniInstaller::OnContainerCreated(CrostiniResult result) {
-  DCHECK_EQ(installing_state_, InstallerState::kCreateContainer);
-  if (result != CrostiniResult::SUCCESS) {
-    if (content::GetNetworkConnectionTracker()->IsOffline()) {
-      LOG(ERROR) << "Network connection dropped while creating container";
-      HandleError(InstallerError::kErrorOffline);
-    } else {
-      HandleError(InstallerError::kErrorCreateContainer);
-    }
-    return;
-  }
-  UpdateInstallingState(InstallerState::kSetupContainer);
-}
-
-void CrostiniInstaller::OnContainerSetup(bool success) {
-  DCHECK_EQ(installing_state_, InstallerState::kSetupContainer);
-
-  if (!success) {
-    if (content::GetNetworkConnectionTracker()->IsOffline()) {
-      LOG(ERROR) << "Network connection dropped while downloading container";
-      HandleError(InstallerError::kErrorOffline);
-    } else {
-      HandleError(InstallerError::kErrorSettingUpContainer);
-    }
-    return;
-  }
-  UpdateInstallingState(InstallerState::kStartContainer);
-}
-
-void CrostiniInstaller::OnContainerStarted(CrostiniResult result) {
-  DCHECK(installing_state_ == InstallerState::kStartContainer ||
-         installing_state_ == InstallerState::kConfigureContainer);
-
-  if (result != CrostiniResult::SUCCESS) {
-    HandleError(InstallerError::kErrorStartingContainer);
-    return;
-  }
-}
-
 bool CrostiniInstaller::CanInstall() {
   // Allow to start from State::ERROR. In that case, we're doing a Retry.
   return state_ == State::IDLE || state_ == State::ERROR;
@@ -554,19 +531,14 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   restart_id_ = CrostiniManager::kUninitializedRestartId;
 
+  if (result == CrostiniResult::RESTART_ABORTED ||
+      result == CrostiniResult::RESTART_REQUEST_CANCELLED) {
+    return;
+  }
+
   if (result != CrostiniResult::SUCCESS) {
-    if (state_ != State::ERROR && result != CrostiniResult::RESTART_ABORTED &&
-        result != CrostiniResult::RESTART_REQUEST_CANCELLED) {
-      DCHECK_EQ(state_, State::INSTALLING);
-      // TODO(b/227552325): Currently just adding mapping for
-      // CONTAINER_CONFIGURATION_FAILED -> kErrorConfiguringContainer. Consider
-      // making a better mapping for more descriptive errors than kErrorUnknown.
-      if (result == CrostiniResult::CONTAINER_CONFIGURATION_FAILED) {
-        HandleError(InstallerError::kErrorConfiguringContainer);
-      } else {
-        HandleError(InstallerError::kErrorUnknown);
-      }
-    }
+    DCHECK_EQ(state_, State::INSTALLING);
+    HandleError(CrostiniResultToInstallerError(result, installing_state_));
     return;
   }
 
diff --git a/chrome/browser/ash/crostini/crostini_installer.h b/chrome/browser/ash/crostini/crostini_installer.h
index 87a6748..7a26504d 100644
--- a/chrome/browser/ash/crostini/crostini_installer.h
+++ b/chrome/browser/ash/crostini/crostini_installer.h
@@ -92,16 +92,10 @@
 
   // CrostiniManager::RestartObserver:
   void OnStageStarted(crostini::mojom::InstallerState stage) override;
-  void OnComponentLoaded(crostini::CrostiniResult result) override;
   void OnDiskImageCreated(bool success,
                           CrostiniResult result,
                           int64_t disk_size_available) override;
-  void OnVmStarted(bool success) override;
-  void OnLxdStarted(CrostiniResult result) override;
   void OnContainerDownloading(int32_t download_percent) override;
-  void OnContainerCreated(crostini::CrostiniResult result) override;
-  void OnContainerSetup(bool success) override;
-  void OnContainerStarted(crostini::CrostiniResult result) override;
 
   // Return true if internal state allows starting installation.
   bool CanInstall();
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
index e2c5062..309967a 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
@@ -294,9 +294,8 @@
             absl::nullopt);
   ASSERT_EQ(ash::holding_space_prefs::GetTimeOfFirstPin(prefs), absl::nullopt);
 
-  if (timeOfFirstAdd) {
+  if (timeOfFirstAdd)
     ASSERT_GT(timeOfFirstAdd, timeOfFirstAvailability);
-  }
 }
 
 class AutotestPrivateApiOverviewTest : public AutotestPrivateApiTest {
@@ -315,9 +314,8 @@
     base::RunLoop run_loop;
     ash::OverviewTestApi().SetOverviewMode(
         /*start=*/true, base::BindLambdaForTesting([&run_loop](bool finished) {
-          if (!finished) {
+          if (!finished)
             ADD_FAILURE() << "Failed to enter overview.";
-          }
           run_loop.Quit();
         }));
     run_loop.Run();
@@ -560,9 +558,12 @@
       const std::vector<double>& scores) {
     std::vector<std::unique_ptr<ChromeSearchResult>> results;
     for (size_t i = 0; i < ids.size(); ++i) {
-      results.emplace_back(std::make_unique<app_list::TestResult>(
-          ids[i], display_types[i], categories[i], best_match_ranks[i],
-          /*relevance=*/scores[i], /*ftrl_result_score=*/scores[i]));
+      std::unique_ptr<app_list::TestResult> test_result =
+          std::make_unique<app_list::TestResult>(
+              ids[i], display_types[i], categories[i], best_match_ranks[i],
+              /*relevance=*/scores[i], /*ftrl_result_score=*/scores[i]);
+      test_result->scoring().override_filter_for_test = true;
+      results.emplace_back(std::move(test_result));
     }
     return results;
   }
@@ -611,9 +612,8 @@
   for (auto* result : PublishedResults()) {
     // There may be zero state results that are also published, but not visible
     // in the UI. This test should only check search list results.
-    if (result->display_type() != ash::SearchResultDisplayType::kList) {
+    if (result->display_type() != ash::SearchResultDisplayType::kList)
       continue;
-    }
 
     results.push_back(result);
   }
diff --git a/chrome/browser/ash/file_manager/app_service_file_tasks.cc b/chrome/browser/ash/file_manager/app_service_file_tasks.cc
index 0e92873b..bddadabe 100644
--- a/chrome/browser/ash/file_manager/app_service_file_tasks.cc
+++ b/chrome/browser/ash/file_manager/app_service_file_tasks.cc
@@ -237,8 +237,10 @@
       apps::AppType::kExtension,
       apps::AppType::kStandaloneBrowserChromeApp,
       apps::AppType::kStandaloneBrowserExtension};
-  if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService()) {
+  if (ash::features::ShouldArcFileTasksUseAppService()) {
     supported_app_types.push_back(apps::AppType::kArc);
+  }
+  if (ash::features::ShouldGuestOsFileTasksUseAppService()) {
     supported_app_types.push_back(apps::AppType::kCrostini);
     supported_app_types.push_back(apps::AppType::kPluginVm);
   }
@@ -335,16 +337,14 @@
     intent_files.push_back(std::move(file));
   }
 
-  if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService()) {
-    DCHECK(task.task_type == TASK_TYPE_ARC_APP ||
-           task.task_type == TASK_TYPE_WEB_APP ||
-           task.task_type == TASK_TYPE_FILE_HANDLER ||
-           task.task_type == TASK_TYPE_CROSTINI_APP ||
-           task.task_type == TASK_TYPE_PLUGIN_VM_APP);
-  } else {
-    DCHECK(task.task_type == TASK_TYPE_WEB_APP ||
-           task.task_type == TASK_TYPE_FILE_HANDLER);
-  }
+  DCHECK(task.task_type == TASK_TYPE_WEB_APP ||
+         task.task_type == TASK_TYPE_FILE_HANDLER ||
+         (ash::features::ShouldArcFileTasksUseAppService() &&
+          task.task_type == TASK_TYPE_ARC_APP) ||
+         (ash::features::ShouldGuestOsFileTasksUseAppService() &&
+          (task.task_type == TASK_TYPE_CROSTINI_APP ||
+           task.task_type == TASK_TYPE_PLUGIN_VM_APP)));
+
   apps::IntentPtr intent = std::make_unique<apps::Intent>(
       apps_util::kIntentActionView, std::move(intent_files));
   intent->activity_name = task.action_id;
diff --git a/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc b/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
index 796fcbd..bc60180 100644
--- a/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
+++ b/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
@@ -343,7 +343,8 @@
   AppServiceFileTasksTestEnabled() {
     feature_list_.InitWithFeatures(
         {blink::features::kFileHandlingAPI,
-         ash::features::kArcAndGuestOsFileTasksUseAppService},
+         ash::features::kArcFileTasksUseAppService,
+         ash::features::kGuestOsFileTasksUseAppService},
         {});
   }
 };
@@ -352,7 +353,8 @@
  public:
   AppServiceFileTasksTestDisabled() {
     feature_list_.InitWithFeatures(
-        {}, {ash::features::kArcAndGuestOsFileTasksUseAppService});
+        {}, {ash::features::kArcFileTasksUseAppService,
+             ash::features::kGuestOsFileTasksUseAppService});
   }
 };
 
@@ -374,7 +376,7 @@
   ASSERT_EQ(0U, tasks.size());
 }
 
-// Crostini apps should not be found when kArcAndGuestOsFileTasksUseAppService
+// Crostini apps should not be found when kGuestOsFileTasksUseAppService
 // is disabled.
 TEST_F(AppServiceFileTasksTestDisabled, FindAppServiceCrostiniApp) {
   std::string text_mime_type = "text/plain";
@@ -390,7 +392,7 @@
   ASSERT_EQ(0U, tasks.size());
 }
 
-// PluginVm apps should not be found when kArcAndGuestOsFileTasksUseAppService
+// PluginVm apps should not be found when kGuestOsFileTasksUseAppService
 // is disabled.
 TEST_F(AppServiceFileTasksTestDisabled, FindAppServicePluginVmApp) {
   std::string file_name = "foo.txt";
diff --git a/chrome/browser/ash/file_manager/file_tasks.cc b/chrome/browser/ash/file_manager/file_tasks.cc
index 566b1f8..2a4807b 100644
--- a/chrome/browser/ash/file_manager/file_tasks.cc
+++ b/chrome/browser/ash/file_manager/file_tasks.cc
@@ -322,7 +322,7 @@
     extensions::app_file_handler_util::MimeTypeCollector* mime_collector,
     std::unique_ptr<std::vector<std::string>> mime_types) {
   if (task.task_type == TASK_TYPE_ARC_APP &&
-      !ash::features::ShouldArcAndGuestOsFileTasksUseAppService()) {
+      !ash::features::ShouldArcFileTasksUseAppService()) {
     apps::RecordAppLaunchMetrics(profile, apps::AppType::kArc, task.app_id,
                                  apps::LaunchSource::kFromFileManager,
                                  apps::LaunchContainer::kLaunchContainerWindow);
@@ -566,7 +566,7 @@
     return;
 
   std::string task_id = TaskDescriptorToId(task_descriptor);
-  if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService() &&
+  if (ash::features::ShouldArcFileTasksUseAppService() &&
       task_descriptor.task_type == TASK_TYPE_ARC_APP) {
     // Task IDs for Android apps are stored in a legacy format (app id:
     // "<package>/<activity>", task id: "view"). For ARC app task descriptors
@@ -796,7 +796,7 @@
   if (task.task_type == TASK_TYPE_ARC_APP ||
       task.task_type == TASK_TYPE_WEB_APP ||
       task.task_type == TASK_TYPE_FILE_HANDLER ||
-      (ash::features::ShouldArcAndGuestOsFileTasksUseAppService() &&
+      (ash::features::ShouldGuestOsFileTasksUseAppService() &&
        (task.task_type == TASK_TYPE_CROSTINI_APP ||
         task.task_type == TASK_TYPE_PLUGIN_VM_APP))) {
     // TODO(petermarshall): Implement GetProfileForExtensionTask in Lacros if
@@ -810,7 +810,7 @@
     return true;
   }
 
-  if (!ash::features::ShouldArcAndGuestOsFileTasksUseAppService() &&
+  if (!ash::features::ShouldGuestOsFileTasksUseAppService() &&
       (task.task_type == TASK_TYPE_CROSTINI_APP ||
        task.task_type == TASK_TYPE_PLUGIN_VM_APP)) {
     DCHECK_EQ(kGuestOsAppActionID, task.action_id);
@@ -912,12 +912,18 @@
   // extension file_browser_handlers.
   FindAppServiceTasks(profile, entries, file_urls, tasks);
 
-  // 3. Find and append Guest OS tasks.
-  FindGuestOsTasks(
-      profile, entries, file_urls, tasks,
-      // Done. Apply post-filtering and callback.
-      base::BindOnce(PostProcessFoundTasks, profile, entries,
-                     std::move(callback), std::move(resulting_tasks)));
+  // 3. Find and append Guest OS tasks directly if Guest OS file tasks aren't
+  // provided by App Service.
+  if (!ash::features::ShouldGuestOsFileTasksUseAppService()) {
+    FindGuestOsTasks(
+        profile, entries, file_urls, tasks,
+        // Done. Apply post-filtering and callback.
+        base::BindOnce(PostProcessFoundTasks, profile, entries,
+                       std::move(callback), std::move(resulting_tasks)));
+  } else {
+    PostProcessFoundTasks(profile, entries, std::move(callback),
+                          std::move(resulting_tasks));
+  }
 }
 
 void FindAllTypesOfTasks(Profile* profile,
@@ -926,18 +932,15 @@
                          FindTasksCallback callback) {
   DCHECK(profile);
   auto resulting_tasks = std::make_unique<ResultingTasks>();
-
-  if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService()) {
-    // Skip FindArcTasks and FindGuestOsTasks since these tasks are now found in
-    // App Service.
-    FindAppServiceTasks(profile, entries, file_urls, &resulting_tasks->tasks);
-    PostProcessFoundTasks(profile, entries, std::move(callback),
-                          std::move(resulting_tasks));
-  } else {
-    // 1. Find and append ARC handler tasks.
+  if (!ash::features::ShouldArcFileTasksUseAppService()) {
+    // 1. Find and append ARC handler tasks if ARC file tasks aren't
+    // provided by App Service.
     FindArcTasks(profile, entries, file_urls, std::move(resulting_tasks),
                  base::BindOnce(&FindExtensionAndAppTasks, profile, entries,
                                 file_urls, std::move(callback)));
+  } else {
+    FindExtensionAndAppTasks(profile, entries, file_urls, std::move(callback),
+                             std::move(resulting_tasks));
   }
 }
 
@@ -965,7 +968,7 @@
                                             file_path.Extension(),
                                             &default_task)) {
       default_tasks.insert(default_task);
-      if (ash::features::ShouldArcAndGuestOsFileTasksUseAppService() &&
+      if (ash::features::ShouldArcFileTasksUseAppService() &&
           default_task.task_type == TASK_TYPE_ARC_APP) {
         // Default preference Task Descriptors for Android apps are stored in a
         // legacy format (app id: "<package>/<activity>", action id: "view"). To
diff --git a/chrome/browser/ash/file_manager/file_tasks_unittest.cc b/chrome/browser/ash/file_manager/file_tasks_unittest.cc
index d03f3310..5c47ab6 100644
--- a/chrome/browser/ash/file_manager/file_tasks_unittest.cc
+++ b/chrome/browser/ash/file_manager/file_tasks_unittest.cc
@@ -625,7 +625,7 @@
 TEST_F(FileManagerFileTaskPreferencesTest,
        ChooseAndSetDefault_MatchesWithAlternateAppServiceTaskDescriptorForm) {
   base::test::ScopedFeatureList scoped_feature_list{
-      ash::features::kArcAndGuestOsFileTasksUseAppService};
+      ash::features::kArcFileTasksUseAppService};
 
   std::string package = "com.example.gallery";
   std::string activity = "com.example.gallery.OpenActivity";
@@ -670,7 +670,7 @@
 TEST_F(FileManagerFileTaskPreferencesTest,
        UpdateDefaultTask_ConvertsArcAppServiceTaskDescriptorToStandardTaskId) {
   base::test::ScopedFeatureList scoped_feature_list{
-      ash::features::kArcAndGuestOsFileTasksUseAppService};
+      ash::features::kArcFileTasksUseAppService};
 
   std::string package = "com.example.gallery";
   std::string activity = "com.example.gallery.OpenActivity";
diff --git a/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc
new file mode 100644
index 0000000..2d30f53
--- /dev/null
+++ b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc
@@ -0,0 +1,101 @@
+// 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/login/screens/arc_vm_data_migration_screen.h"
+
+#include "ash/components/arc/arc_prefs.h"
+#include "ash/components/arc/arc_util.h"
+#include "ash/components/arc/session/arc_vm_data_migration_status.h"
+#include "base/notreached.h"
+#include "chrome/browser/lifetime/application_lifetime.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "components/prefs/pref_service.h"
+
+namespace ash {
+
+namespace {
+
+constexpr char kUserActionSkip[] = "skip";
+constexpr char kUserActionUpdate[] = "update";
+
+}  // namespace
+
+ArcVmDataMigrationScreen::ArcVmDataMigrationScreen(
+    base::WeakPtr<ArcVmDataMigrationScreenView> view)
+    : BaseScreen(ArcVmDataMigrationScreenView::kScreenId,
+                 OobeScreenPriority::DEFAULT),
+      view_(std::move(view)) {
+  DCHECK(view_);
+}
+
+ArcVmDataMigrationScreen::~ArcVmDataMigrationScreen() = default;
+
+void ArcVmDataMigrationScreen::ShowImpl() {
+  // The migration screen is shown after a session restart with an ARC-enabled
+  // login user, and thus the primary profile is available at this point.
+  profile_ = ProfileManager::GetPrimaryUserProfile();
+  DCHECK(profile_);
+  SetUpInitialView();
+  // TODO(b/258278176): Stop stale ARCVM and Upstart jobs before calling Show().
+  if (view_) {
+    view_->Show();
+  }
+}
+
+void ArcVmDataMigrationScreen::HideImpl() {}
+
+void ArcVmDataMigrationScreen::OnUserAction(const base::Value::List& args) {
+  const std::string& action_id = args[0].GetString();
+  VLOG(1) << "User action: action_id=" << action_id;
+  if (action_id == kUserActionSkip) {
+    HandleSkip();
+  } else if (action_id == kUserActionUpdate) {
+    HandleUpdate();
+  } else {
+    BaseScreen::OnUserAction(args);
+  }
+}
+
+void ArcVmDataMigrationScreen::SetUpInitialView() {
+  // TODO(b/258278176): Check free disk space and battery state.
+  arc::ArcVmDataMigrationStatus data_migration_status =
+      arc::GetArcVmDataMigrationStatus(profile_->GetPrefs());
+  switch (data_migration_status) {
+    case arc::ArcVmDataMigrationStatus::kConfirmed:
+      // Set the status back to kNotified to prepare for cases where the
+      // migration is skipped or the device is shut down before the migration is
+      // started.
+      arc::SetArcVmDataMigrationStatus(
+          profile_->GetPrefs(), arc::ArcVmDataMigrationStatus::kNotified);
+      UpdateUIState(ArcVmDataMigrationScreenView::UIState::kWelcome);
+      break;
+    case arc::ArcVmDataMigrationStatus::kStarted:
+      // TODO(b/258278176): Show the resume screen.
+      UpdateUIState(ArcVmDataMigrationScreenView::UIState::kWelcome);
+      break;
+    default:
+      NOTREACHED();
+      break;
+  }
+}
+
+void ArcVmDataMigrationScreen::UpdateUIState(
+    ArcVmDataMigrationScreenView::UIState state) {
+  if (view_) {
+    view_->SetUIState(state);
+  }
+}
+
+void ArcVmDataMigrationScreen::HandleSkip() {
+  chrome::AttemptRelaunch();
+}
+
+void ArcVmDataMigrationScreen::HandleUpdate() {
+  arc::SetArcVmDataMigrationStatus(profile_->GetPrefs(),
+                                   arc::ArcVmDataMigrationStatus::kStarted);
+  // TODO(b/258278176): Trigger the migration.
+  NOTIMPLEMENTED();
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.h b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.h
new file mode 100644
index 0000000..428f142
--- /dev/null
+++ b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.h
@@ -0,0 +1,45 @@
+// 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_LOGIN_SCREENS_ARC_VM_DATA_MIGRATION_SCREEN_H_
+#define CHROME_BROWSER_ASH_LOGIN_SCREENS_ARC_VM_DATA_MIGRATION_SCREEN_H_
+
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/ash/login/screens/base_screen.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h"
+
+namespace ash {
+
+class ArcVmDataMigrationScreen : public BaseScreen {
+ public:
+  explicit ArcVmDataMigrationScreen(
+      base::WeakPtr<ArcVmDataMigrationScreenView> view);
+  ~ArcVmDataMigrationScreen() override;
+  ArcVmDataMigrationScreen(const ArcVmDataMigrationScreen&) = delete;
+  ArcVmDataMigrationScreen& operator=(const ArcVmDataMigrationScreen&) = delete;
+
+ private:
+  // BaseScreen overrides:
+  void ShowImpl() override;
+  void HideImpl() override;
+  void OnUserAction(const base::Value::List& args) override;
+
+  void SetUpInitialView();
+
+  void UpdateUIState(ArcVmDataMigrationScreenView::UIState state);
+
+  void HandleSkip();
+  void HandleUpdate();
+
+  Profile* profile_;
+
+  base::WeakPtr<ArcVmDataMigrationScreenView> view_;
+
+  base::WeakPtrFactory<ArcVmDataMigrationScreen> weak_ptr_factory_{this};
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_ASH_LOGIN_SCREENS_ARC_VM_DATA_MIGRATION_SCREEN_H_
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
index 5b3a2a61..9b0fb4ff 100644
--- a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
+++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
@@ -692,6 +692,11 @@
     if (parsed_response.license_type.has_value())
       state.Set(kDeviceStateLicenseType, *parsed_response.license_type);
 
+    if (parsed_response.assigned_upgrade_type.has_value()) {
+      state.Set(kDeviceStateAssignedUpgradeType,
+                *parsed_response.assigned_upgrade_type);
+    }
+
     // Store the enrollment state obtained from the server to local state.
     // Depending on the value, this can be used later to trigger enrollment or
     // to disable the device.
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.cc b/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.cc
index c140fc5..1ab0ac3 100644
--- a/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.cc
+++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.cc
@@ -9,6 +9,8 @@
 
 #include "ash/constants/ash_features.h"
 #include "base/logging.h"
+#include "base/strings/strcat.h"
+#include "base/strings/string_number_conversions.h"
 #include "chrome/browser/ash/policy/server_backed_state/server_backed_device_state.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -78,6 +80,24 @@
   }
 }
 
+// Converts an assigned upgrade type enum value from the DM protocol for
+// initial enrollment into the corresponding prefs string constant.
+std::string ConvertAssignedUpgradeType(
+    em::DeviceInitialEnrollmentStateResponse::AssignedUpgradeType
+        assigned_upgrade_type) {
+  switch (assigned_upgrade_type) {
+    case em::DeviceInitialEnrollmentStateResponse::
+        ASSIGNED_UPGRADE_TYPE_UNSPECIFIED:
+      return std::string();
+    case em::DeviceInitialEnrollmentStateResponse::
+        ASSIGNED_UPGRADE_TYPE_CHROME_ENTERPRISE:
+      return kDeviceStateAssignedUpgradeTypeChromeEnterprise;
+    case em::DeviceInitialEnrollmentStateResponse::
+        ASSIGNED_UPGRADE_TYPE_KIOSK_AND_SIGNAGE:
+      return kDeviceStateAssignedUpgradeTypeKiosk;
+  }
+}
+
 // Converts a license packaging sku enum value from the DM protocol for initial
 // enrollment into the corresponding prefs string constant.
 std::string ConvertLicenseType(
@@ -155,6 +175,11 @@
           ConvertLicenseType(state_response.license_packaging_sku());
     }
 
+    if (state_response.has_assigned_upgrade_type()) {
+      parsed_response.assigned_upgrade_type =
+          ConvertAssignedUpgradeType(state_response.assigned_upgrade_type());
+    }
+
     if (state_response.has_disabled_state()) {
       parsed_response.disabled_message =
           state_response.disabled_state().message();
@@ -162,10 +187,22 @@
 
     LOG(WARNING) << "Received initial_enrollment_mode="
                  << state_response.initial_enrollment_mode() << " ("
-                 << parsed_response.restore_mode << "). "
-                 << (state_response.is_license_packaged_with_device()
+                 << parsed_response.restore_mode << "). ";
+
+    LOG(WARNING) << (state_response.is_license_packaged_with_device()
                          ? "Device has a packaged license for management."
-                         : "No packaged license.");
+                         : "No packaged license. ");
+
+    LOG(WARNING) << (state_response.has_assigned_upgrade_type()
+                         ? base::StrCat(
+                               {"Assigned upgrade type=",
+                                base::NumberToString(
+                                    state_response.assigned_upgrade_type()),
+                                " (",
+                                parsed_response.assigned_upgrade_type.value_or(
+                                    std::string()),
+                                ")."})
+                         : "No assigned upgrade type.");
 
     return parsed_response;
   }
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.h b/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.h
index 479275a..f1d6da5 100644
--- a/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.h
+++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_state_message_processor.h
@@ -45,6 +45,7 @@
     absl::optional<std::string> disabled_message;
     absl::optional<bool> is_license_packaged_with_device;
     absl::optional<std::string> license_type;
+    absl::optional<std::string> assigned_upgrade_type;
   };
 
   // Returns the request job type. This must match the request filled in
diff --git a/chrome/browser/ash/policy/enrollment/enrollment_config.cc b/chrome/browser/ash/policy/enrollment/enrollment_config.cc
index a0d84edb..7ca5b3a 100644
--- a/chrome/browser/ash/policy/enrollment/enrollment_config.cc
+++ b/chrome/browser/ash/policy/enrollment/enrollment_config.cc
@@ -35,6 +35,27 @@
   return wizard_context && ash::IsRollbackFlow(*wizard_context);
 }
 
+// Returns the license type to use based on the license type, assigned
+// upgrade type and the license packaged from device state.
+policy::LicenseType GetLicenseTypeToUse(
+    const std::string license_type, const bool is_license_packaged_with_device,
+    const std::string assigned_upgrade_type) {
+  if (license_type == policy::kDeviceStateLicenseTypeEnterprise) {
+    return policy::LicenseType::kEnterprise;
+  } else if (license_type == policy::kDeviceStateLicenseTypeEducation) {
+    return policy::LicenseType::kEducation;
+  } else if (license_type == policy::kDeviceStateLicenseTypeTerminal) {
+    return policy::LicenseType::kTerminal;
+  }
+
+  if (!is_license_packaged_with_device &&
+      assigned_upgrade_type == policy::kDeviceStateAssignedUpgradeTypeKiosk) {
+    return policy::LicenseType::kTerminal;
+  }
+
+  return policy::LicenseType::kNone;
+}
+
 }  // namespace
 
 namespace policy {
@@ -125,19 +146,21 @@
       device_state.FindBool(kDeviceStatePackagedLicense).value_or(false);
   const std::string license_type =
       GetString(device_state, kDeviceStateLicenseType);
+  const std::string assigned_upgrade_type = GetString(device_state, kDeviceStateAssignedUpgradeType);
 
   config.is_license_packaged_with_device = is_license_packaged_with_device;
 
-  if (license_type == kDeviceStateLicenseTypeEnterprise) {
-    config.license_type = LicenseType::kEnterprise;
-  } else if (license_type == kDeviceStateLicenseTypeEducation) {
-    config.license_type = LicenseType::kEducation;
-  } else if (license_type == kDeviceStateLicenseTypeTerminal) {
-    config.license_type = LicenseType::kTerminal;
-  } else {
-    config.license_type = LicenseType::kNone;
+  if(assigned_upgrade_type == kDeviceStateAssignedUpgradeTypeChromeEnterprise) {
+    config.assigned_upgrade_type =
+        AssignedUpgradeType::kAssignedUpgradeTypeChromeEnterprise;
+  } else if(assigned_upgrade_type == kDeviceStateAssignedUpgradeTypeKiosk) {
+    config.assigned_upgrade_type =
+        AssignedUpgradeType::kAssignedUpgradeTypeKioskAndSignage;
   }
 
+  config.license_type = GetLicenseTypeToUse(
+      license_type, is_license_packaged_with_device, assigned_upgrade_type);
+
   const bool pref_enrollment_auto_start_present =
       local_state.HasPrefPath(prefs::kDeviceEnrollmentAutoStart);
   const bool pref_enrollment_auto_start =
diff --git a/chrome/browser/ash/policy/enrollment/enrollment_config.h b/chrome/browser/ash/policy/enrollment/enrollment_config.h
index e1710d7..7a5ea6a6 100644
--- a/chrome/browser/ash/policy/enrollment/enrollment_config.h
+++ b/chrome/browser/ash/policy/enrollment/enrollment_config.h
@@ -103,6 +103,17 @@
     AUTH_MECHANISM_BEST_AVAILABLE = 2,
   };
 
+  // An enumeration of assigned upgrades that a device can after initial
+  // enrollment.
+  enum class AssignedUpgradeType {
+    // Unspecified Upgrade
+    kAssignedUpgradeTypeUnspecified = 0,
+    // Chrome Enterprise Upgrade
+    kAssignedUpgradeTypeChromeEnterprise = 1,
+    // Kiosk & Signage Upgrade
+    kAssignedUpgradeTypeKioskAndSignage = 2,
+  };
+
   // Get the enrollment configuration that has been set up via signals such as
   // device requisition, OEM manifest, pre-existing installation-time attributes
   // or server-backed state retrieval. The configuration is stored in |config|,
@@ -222,6 +233,12 @@
   // Which type of license device has.
   LicenseType license_type = LicenseType::kNone;
 
+  // The assigned upgrade for a device after initial enrollment. Chrome
+  // Enterpise Upgrade is the default upgrade for ZTE devices, unless other is
+  // specified in the server-backed initial state retrieval.
+  AssignedUpgradeType assigned_upgrade_type =
+      AssignedUpgradeType::kAssignedUpgradeTypeChromeEnterprise;
+
   // The authentication mechanism to use.
   // TODO(drcrash): Change to best available once ZTE is everywhere.
   AuthMechanism auth_mechanism = AUTH_MECHANISM_INTERACTIVE;
diff --git a/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.cc b/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.cc
index 1e1da602..b29d63ef 100644
--- a/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.cc
+++ b/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.cc
@@ -20,6 +20,7 @@
 const char kDeviceStateDisabledMessage[] = "disabled_message";
 const char kDeviceStatePackagedLicense[] = "packaged_license";
 const char kDeviceStateLicenseType[] = "license_type";
+const char kDeviceStateAssignedUpgradeType[] = "assigned_upgrade_type";
 
 // Modes for a device after initial state determination.
 const char kDeviceStateInitialModeEnrollmentEnforced[] = "enrollment-enforced";
@@ -39,6 +40,11 @@
 // Modes for a device after either initial or secondary state determination.
 const char kDeviceStateModeDisabled[] = "disabled";
 
+// Assigned upgrades for a device after initial state determination.
+const char kDeviceStateAssignedUpgradeTypeChromeEnterprise[] =
+    "enterprise";
+const char kDeviceStateAssignedUpgradeTypeKiosk[] = "kiosk";
+
 DeviceStateMode GetDeviceStateMode() {
   const std::string* device_state_mode =
       g_browser_process->local_state()
diff --git a/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.h b/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.h
index 085bc45..a12c8fa 100644
--- a/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.h
+++ b/chrome/browser/ash/policy/server_backed_state/server_backed_device_state.h
@@ -13,6 +13,7 @@
 extern const char kDeviceStateDisabledMessage[];
 extern const char kDeviceStatePackagedLicense[];
 extern const char kDeviceStateLicenseType[];
+extern const char kDeviceStateAssignedUpgradeType[];
 
 // String constants used to persist the initial state action in the
 // kDeviceStateMode dictionary entry.
@@ -32,6 +33,11 @@
 // or the restorative action in the kDeviceStateMode dictionary entry.
 extern const char kDeviceStateModeDisabled[];
 
+// String constants used to persist the assigned upgrade type in the
+// kDeviceStateAssignedUpgradeType dictionary entry.
+extern const char kDeviceStateAssignedUpgradeTypeChromeEnterprise[];
+extern const char kDeviceStateAssignedUpgradeTypeKiosk[];
+
 // Mode that a device needs to start in.
 enum DeviceStateMode {
   // No state restoration.
diff --git a/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.cc b/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.cc
index 0339906..b1637f2 100644
--- a/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.cc
+++ b/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.cc
@@ -33,6 +33,13 @@
   return profile_manager->GetProfile(path);
 }
 
+content::BrowserContext*
+BrowserContextHelperDelegateImpl::GetOrCreatePrimaryOTRBrowserContext(
+    content::BrowserContext* browser_context) {
+  Profile* profile = Profile::FromBrowserContext(browser_context);
+  return profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+}
+
 const base::FilePath* BrowserContextHelperDelegateImpl::GetUserDataDir() {
   // profile_manager can be null in unit tests.
   auto* profile_manager = g_browser_process->profile_manager();
diff --git a/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.h b/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.h
index e87a1b7..0b36946 100644
--- a/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.h
+++ b/chrome/browser/ash/profiles/browser_context_helper_delegate_impl.h
@@ -22,6 +22,8 @@
       const base::FilePath& path) override;
   content::BrowserContext* DeprecatedGetBrowserContext(
       const base::FilePath& path) override;
+  content::BrowserContext* GetOrCreatePrimaryOTRBrowserContext(
+      content::BrowserContext* browser_context) override;
   const base::FilePath* GetUserDataDir() override;
 };
 
diff --git a/chrome/browser/ash/profiles/profile_helper.cc b/chrome/browser/ash/profiles/profile_helper.cc
index 5891afb..819e557c 100644
--- a/chrome/browser/ash/profiles/profile_helper.cc
+++ b/chrome/browser/ash/profiles/profile_helper.cc
@@ -294,27 +294,17 @@
 }
 
 bool ProfileHelperImpl::IsSigninProfileInitialized() {
-  return browser_context_helper_->delegate()->GetBrowserContextByPath(
-      GetSigninProfileDir());
+  return browser_context_helper_->GetSigninBrowserContext();
 }
 
 Profile* ProfileHelperImpl::GetSigninProfile() {
-  Profile* profile = Profile::FromBrowserContext(
-      browser_context_helper_->delegate()->DeprecatedGetBrowserContext(
-          GetSigninProfileDir()));
-  if (!profile)
-    return nullptr;
-  return profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+  return Profile::FromBrowserContext(
+      browser_context_helper_->DeprecatedGetOrCreateSigninBrowserContext());
 }
 
 Profile* ProfileHelperImpl::GetLockScreenProfile() {
-  ProfileManager* profile_manager = g_browser_process->profile_manager();
-  DCHECK(profile_manager);
-  Profile* profile =
-      profile_manager->GetProfileByPath(GetLockScreenProfileDir());
-  if (!profile)
-    return nullptr;
-  return profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+  return Profile::FromBrowserContext(
+      browser_context_helper_->GetLockScreenBrowserContext());
 }
 
 base::FilePath ProfileHelperImpl::GetActiveUserProfileDir() {
diff --git a/chrome/browser/ash/release_notes/release_notes_storage.cc b/chrome/browser/ash/release_notes/release_notes_storage.cc
index be62168..d8f728af 100644
--- a/chrome/browser/ash/release_notes/release_notes_storage.cc
+++ b/chrome/browser/ash/release_notes/release_notes_storage.cc
@@ -28,7 +28,7 @@
 // This stores the latest milestone with new Release Notes content. If the last
 // milestone the user has seen the notification is before this, a new
 // notification will be shown.
-constexpr int kLastChromeVersionWithReleaseNotes = 108;
+constexpr int kLastChromeVersionWithReleaseNotes = 111;
 constexpr int kTimesToShowSuggestionChip = 3;
 
 int GetMilestone() {
diff --git a/chrome/browser/creator/android/java/res/layout/creator_bottomsheet_toolbar.xml b/chrome/browser/creator/android/java/res/layout/creator_bottomsheet_toolbar.xml
index 6f8fe454..1eee3a3 100644
--- a/chrome/browser/creator/android/java/res/layout/creator_bottomsheet_toolbar.xml
+++ b/chrome/browser/creator/android/java/res/layout/creator_bottomsheet_toolbar.xml
@@ -93,7 +93,8 @@
           android:layout_alignStart="@id/title"
           android:layout_below="@id/title"
           android:layout_marginTop="@dimen/creator_bottomsheet_toolbar_security_icon_margin"
-          app:tint="@macro/default_icon_color" />
+          app:tint="@macro/default_icon_color"
+          android:importantForAccessibility="no" />
       <TextView
           android:id="@+id/origin"
           android:layout_width="match_parent"
diff --git a/chrome/browser/data_saver/data_saver.h b/chrome/browser/data_saver/data_saver.h
index 4b9eb76c..83e89d2 100644
--- a/chrome/browser/data_saver/data_saver.h
+++ b/chrome/browser/data_saver/data_saver.h
@@ -18,15 +18,15 @@
 // Fetch and cache the Android Data Saver saver setting.
 void FetchDataSaverOSSettingAsynchronously();
 
-// Returns true if the Android Data Saver option is enabled. On non-Android
-// OSes, this always return false. Note that the result returned by this
-// function may be stale. Making OS calls to get the state of the Data Saver
-// setting can be slow. For this reason, we make the OS calls happen in a
-// background thread and store the result in a global variable. Calling
-// IsDataSaverEnabled immediately returns the last cached value and fires of OS
-// calls in a background thread. If there is no cached value, this function may
-// lookup the setting synchronously, depending on the state of the
-// DataSaverSettingBlockWhenUninitialized Finch feature.
+// Returns true if the Android Data Saver option is enabled and the device is on
+// a metered network. On non-Android OSes, this always return false. Note that
+// the result returned by this function may be stale. Making OS calls to get the
+// state of the Data Saver setting can be slow. For this reason, we make the OS
+// calls happen in a background thread and store the result in a global
+// variable. Calling IsDataSaverEnabled immediately returns the last cached
+// value and fires of OS calls in a background thread. If there is no cached
+// value, this function may lookup the setting synchronously, depending on the
+// state of the DataSaverSettingBlockWhenUninitialized Finch feature.
 bool IsDataSaverEnabled(content::BrowserContext* browser_context);
 
 }  // namespace data_saver
diff --git a/chrome/browser/download/android/java/res/layout/download_location_dialog.xml b/chrome/browser/download/android/java/res/layout/download_location_dialog.xml
index dbb0a815..8f209cb 100644
--- a/chrome/browser/download/android/java/res/layout/download_location_dialog.xml
+++ b/chrome/browser/download/android/java/res/layout/download_location_dialog.xml
@@ -55,7 +55,8 @@
                     android:layout_height="wrap_content"
                     app:srcCompat="@drawable/ic_drive_file_24dp"
                     app:tint="@macro/default_icon_color"
-                    style="@style/ListItemStartIcon" />
+                    style="@style/ListItemStartIcon"
+                    android:importantForAccessibility="no" />
 
                 <org.chromium.components.browser_ui.widget.text.AlertDialogEditText
                     android:id="@+id/file_name"
@@ -91,7 +92,8 @@
                     android:layout_height="wrap_content"
                     android:src="@drawable/ic_folder_blue_24dp"
                     app:tint="@macro/default_icon_color"
-                    style="@style/ListItemStartIcon" />
+                    style="@style/ListItemStartIcon"
+                    android:importantForAccessibility="no" />
 
                 <Spinner
                     android:id="@+id/file_location"
diff --git a/chrome/browser/language/android/java/res/layout/accept_languages_item.xml b/chrome/browser/language/android/java/res/layout/accept_languages_item.xml
index 0fcaab1..28582c5 100644
--- a/chrome/browser/language/android/java/res/layout/accept_languages_item.xml
+++ b/chrome/browser/language/android/java/res/layout/accept_languages_item.xml
@@ -18,7 +18,8 @@
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/icon_view"
         style="@style/ListItemStartIcon"
-        app:tint="@color/default_icon_color_tint_list" />
+        app:tint="@color/default_icon_color_tint_list"
+        android:importantForAccessibility="no" />
 
     <LinearLayout
         android:layout_width="0dp"
diff --git a/chrome/browser/mac/install_from_dmg.mm b/chrome/browser/mac/install_from_dmg.mm
index c37a74a..3298cafa 100644
--- a/chrome/browser/mac/install_from_dmg.mm
+++ b/chrome/browser/mac/install_from_dmg.mm
@@ -17,6 +17,8 @@
 #include <sys/param.h>
 #include <unistd.h>
 
+#include <algorithm>
+
 #include "base/auto_reset.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
@@ -30,6 +32,7 @@
 #include "base/mac/scoped_authorizationref.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_ioobject.h"
+#include "base/memory/scoped_policy.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
@@ -57,13 +60,13 @@
 // IOHDIXHDDriveInKernel for disk images mounted "in-kernel." (See the
 // documentation for "hdiutil attach -kernel" for more information on the
 // distinction.)
-io_service_t CopyDiskImageAncestorForMedia(const char* disk_image_class,
-                                           io_service_t media) {
+base::mac::ScopedIOObject<io_service_t> GetDiskImageAncestorForMedia(
+    const char* disk_image_class,
+    base::mac::ScopedIOObject<io_service_t> media) {
   // This is highly unlikely. media as passed in is expected to be of class
   // IOMedia. Since the media service's entire ancestor chain will be checked,
   // though, check it as well.
   if (IOObjectConformsTo(media, disk_image_class)) {
-    IOObjectRetain(media);
     return media;
   }
 
@@ -73,7 +76,7 @@
       kIORegistryIterateRecursively | kIORegistryIterateParents, &iterator_ref);
   if (kr != KERN_SUCCESS) {
     MACH_LOG(ERROR, kr) << "IORegistryEntryCreateIterator";
-    return IO_OBJECT_NULL;
+    return base::mac::ScopedIOObject<io_service_t>();
   }
   base::mac::ScopedIOObject<io_iterator_t> iterator(iterator_ref);
   iterator_ref = IO_OBJECT_NULL;
@@ -87,12 +90,12 @@
            IOIteratorNext(iterator));
        ancestor; ancestor.reset(IOIteratorNext(iterator))) {
     if (IOObjectConformsTo(ancestor, disk_image_class)) {
-      return ancestor.release();
+      return ancestor;
     }
   }
 
   // The media does not reside on a disk image.
-  return IO_OBJECT_NULL;
+  return base::mac::ScopedIOObject<io_service_t>();
 }
 
 // Given an io_service_t (expected to be of class IOMedia), determines whether
@@ -100,12 +103,14 @@
 // present, it will be set to the pathname of the disk image file, encoded in
 // filesystem encoding.
 //
-// There are two SPI ways to do this: One is in the DiskImages private
-// framework: DIHLCopyImageForVolume(). One is a set of keys in
-// CFURLPriv: _kCFURLVolumeIsDiskImageKey and _kCFURLDiskImageBackingURLKey.
-// However, because downstream users want to use Chromium as a base for code in
-// the MAS, neither are used here. The request for a real API is FB9139935.
-bool MediaResidesOnDiskImage(io_service_t media, std::string* image_path) {
+// There are two ways to do this using SPI: The first way would be to use
+// DIHLCopyImageForVolume() from the DiskImages private framework.  The second
+// way would be to use _kCFURLVolumeIsDiskImageKey and
+// _kCFURLDiskImageBackingURLKey from CFURLPriv. However, because downstream
+// users want to use Chromium as a base for code in the MAS, neither are used
+// here. The request for a real API is FB9139935.
+bool MediaResidesOnDiskImage(base::mac::ScopedIOObject<io_service_t> media,
+                             std::string* image_path) {
   if (image_path) {
     image_path->clear();
   }
@@ -115,13 +120,14 @@
     // type "AppleDiskImageDevice" that has a property "DiskImageURL" of string
     // type.
 
-    base::mac::ScopedIOObject<io_service_t> di_device(
-        CopyDiskImageAncestorForMedia("AppleDiskImageDevice", media));
+    base::mac::ScopedIOObject<io_service_t> di_device =
+        GetDiskImageAncestorForMedia("AppleDiskImageDevice", media);
     if (di_device) {
       if (image_path) {
         base::ScopedCFTypeRef<CFTypeRef> disk_image_url_cftyperef(
             IORegistryEntryCreateCFProperty(di_device, CFSTR("DiskImageURL"),
-                                            nullptr, 0));
+                                            /*allocator=*/nullptr,
+                                            /*options=*/0));
         if (!disk_image_url_cftyperef) {
           LOG(ERROR)
               << "IORegistryEntryCreateCFProperty failed for DiskImageURL";
@@ -139,7 +145,7 @@
         }
 
         base::ScopedCFTypeRef<CFURLRef> disk_image_url(CFURLCreateWithString(
-            kCFAllocatorDefault, disk_image_url_string, nullptr));
+            /*allocator=*/nullptr, disk_image_url_string, /*baseURL=*/nullptr));
         if (!disk_image_url) {
           LOG(ERROR) << "CFURLCreateWithString failed";
           return true;
@@ -162,13 +168,14 @@
     // ancestor of type "IOHDIXHDDrive" that has a property "image-path" of data
     // type.
 
-    base::mac::ScopedIOObject<io_service_t> hdix_drive(
-        CopyDiskImageAncestorForMedia("IOHDIXHDDrive", media));
+    base::mac::ScopedIOObject<io_service_t> hdix_drive =
+        GetDiskImageAncestorForMedia("IOHDIXHDDrive", media);
     if (hdix_drive) {
       if (image_path) {
         base::ScopedCFTypeRef<CFTypeRef> image_path_cftyperef(
             IORegistryEntryCreateCFProperty(hdix_drive, CFSTR("image-path"),
-                                            nullptr, 0));
+                                            /*allocator=*/nullptr,
+                                            /*options=*/0));
         if (!image_path_cftyperef) {
           LOG(ERROR) << "IORegistryEntryCreateCFProperty failed for image-path";
           return true;
@@ -201,10 +208,10 @@
   return false;
 }
 
-// Returns true if |path| is located on a read-only filesystem of a disk
-// image. Returns false if not, or in the event of an error. If
-// out_dmg_bsd_device_name is present, it will be set to the BSD device name
-// for the disk image's device, in "diskNsM" form.
+// Returns `DiskImageStatusTrue` if `path` is located on a read-only filesystem
+// of a disk image, `DiskImageStatusFalse` if not, or `DiskImageStatusFailure`
+// in the event of an error. If `out_dmg_bsd_device_name` is non-null, it will
+// be set to the BSD device name for the disk image's device, in "diskNsM" form.
 DiskImageStatus IsPathOnReadOnlyDiskImage(
     const char path[],
     std::string* out_dmg_bsd_device_name) {
@@ -236,28 +243,20 @@
     out_dmg_bsd_device_name->assign(dmg_bsd_device_name);
   }
 
-  const mach_port_t master_port = kIOMasterPortDefault;
-
-  // IOBSDNameMatching gives ownership of match_dict to the caller, but
-  // IOServiceGetMatchingServices will assume that reference.
-  CFMutableDictionaryRef match_dict = IOBSDNameMatching(master_port,
-                                                        0,
-                                                        dmg_bsd_device_name);
+  base::ScopedCFTypeRef<CFMutableDictionaryRef> match_dict(IOBSDNameMatching(
+      kIOMasterPortDefault, /*options=*/0, dmg_bsd_device_name));
   if (!match_dict) {
     LOG(ERROR) << "IOBSDNameMatching " << dmg_bsd_device_name;
     return DiskImageStatusFailure;
   }
 
-  io_iterator_t iterator_ref;
-  kern_return_t kr = IOServiceGetMatchingServices(master_port,
-                                                  match_dict,
-                                                  &iterator_ref);
+  base::mac::ScopedIOObject<io_iterator_t> iterator;
+  kern_return_t kr = IOServiceGetMatchingServices(
+      kIOMasterPortDefault, match_dict.release(), iterator.InitializeInto());
   if (kr != KERN_SUCCESS) {
     MACH_LOG(ERROR, kr) << "IOServiceGetMatchingServices";
     return DiskImageStatusFailure;
   }
-  base::mac::ScopedIOObject<io_iterator_t> iterator(iterator_ref);
-  iterator_ref = IO_OBJECT_NULL;
 
   // There needs to be exactly one matching service.
   base::mac::ScopedIOObject<io_service_t> media(IOIteratorNext(iterator));
@@ -272,10 +271,9 @@
     return DiskImageStatusFailure;
   }
 
-  iterator.reset();
-
-  return MediaResidesOnDiskImage(media, NULL) ? DiskImageStatusTrue
-                                              : DiskImageStatusFalse;
+  return MediaResidesOnDiskImage(media, /*image_path=*/nullptr)
+             ? DiskImageStatusTrue
+             : DiskImageStatusFalse;
 }
 
 // Shows a dialog asking the user whether or not to install from the disk
@@ -290,12 +288,13 @@
 
   NSAlert* alert = [[[NSAlert alloc] init] autorelease];
 
-  [alert setAlertStyle:NSAlertStyleInformational];
-  [alert setMessageText:title];
-  [alert setInformativeText:prompt];
+  alert.alertStyle = NSAlertStyleInformational;
+  alert.messageText = title;
+  alert.informativeText = prompt;
+
   [alert addButtonWithTitle:yes];
   NSButton* cancel_button = [alert addButtonWithTitle:no];
-  [cancel_button setKeyEquivalent:@"\e"];
+  cancel_button.keyEquivalent = @"\e";
 
   NSInteger result = [alert runModal];
 
@@ -322,51 +321,46 @@
       base::mac::NSToCFCast(prompt));
 }
 
-// Invokes the installer program at installer_path to copy source_path to
-// target_path and perform any additional on-disk bookkeeping needed to be
-// able to launch target_path properly.  If authorization_arg is non-NULL,
-// function will assume ownership of it, will invoke the installer with that
-// authorization reference, and will attempt Keystone ticket promotion.
-bool InstallFromDiskImage(AuthorizationRef authorization_arg,
-                          NSString* installer_path,
+// Invokes the installer program at `installer_path` to copy `source_path` to
+// `target_path` and perform any additional on-disk bookkeeping needed to be
+// able to launch `target_path` properly. If `authorization_arg` is non-null,
+// this function will invoke the installer with that authorization reference,
+// and will attempt Keystone ticket promotion.
+bool InstallFromDiskImage(base::mac::ScopedAuthorizationRef authorization,
+                          NSURL* installer_url,
                           NSString* source_path,
                           NSString* target_path) {
-  base::mac::ScopedAuthorizationRef authorization(authorization_arg);
-  authorization_arg = NULL;
   int exit_status;
   if (authorization) {
-    const char* installer_path_c = [installer_path fileSystemRepresentation];
-    const char* source_path_c = [source_path fileSystemRepresentation];
-    const char* target_path_c = [target_path fileSystemRepresentation];
-    const char* arguments[] = {source_path_c, target_path_c, NULL};
+    const char* installer_path_c = installer_url.fileSystemRepresentation;
+    const char* source_path_c = source_path.fileSystemRepresentation;
+    const char* target_path_c = target_path.fileSystemRepresentation;
+    const char* arguments[] = {source_path_c, target_path_c, nullptr};
 
     OSStatus status = base::mac::ExecuteWithPrivilegesAndWait(
-        authorization,
-        installer_path_c,
-        kAuthorizationFlagDefaults,
-        arguments,
-        NULL,  // pipe
-        &exit_status);
+        authorization, installer_path_c, kAuthorizationFlagDefaults, arguments,
+        /*pipe=*/nullptr, &exit_status);
     if (status != errAuthorizationSuccess) {
       OSSTATUS_LOG(ERROR, status)
           << "AuthorizationExecuteWithPrivileges install";
       return false;
     }
   } else {
-    NSArray* arguments = @[ source_path, target_path ];
+    NSError* error = nil;
+    NSTask* task =
+        [NSTask launchedTaskWithExecutableURL:installer_url
+                                    arguments:@[ source_path, target_path ]
+                                        error:&error
+                           terminationHandler:nil];
 
-    NSTask* task;
-    @try {
-      task = [NSTask launchedTaskWithLaunchPath:installer_path
-                                      arguments:arguments];
-    } @catch(NSException* exception) {
-      LOG(ERROR) << "+[NSTask launchedTaskWithLaunchPath:arguments:]: "
-                 << [[exception description] UTF8String];
+    if (!task) {
+      LOG(ERROR) << "NSTask launch error: "
+                 << base::SysNSStringToUTF8(error.description);
       return false;
     }
 
     [task waitUntilExit];
-    exit_status = [task terminationStatus];
+    exit_status = task.terminationStatus;
   }
 
   if (exit_status != 0) {
@@ -393,7 +387,7 @@
 // call EjectAndTrashDiskImage on dmg_bsd_device_name.
 bool LaunchInstalledApp(NSString* installed_path,
                         const std::string& dmg_bsd_device_name) {
-  base::FilePath browser_path([installed_path fileSystemRepresentation]);
+  base::FilePath browser_path = base::mac::NSStringToFilePath(installed_path);
 
   base::FilePath helper_path = browser_path.Append("Contents/Frameworks");
   helper_path = helper_path.Append(chrome::kFrameworkName);
@@ -429,9 +423,10 @@
 
   NSAlert* alert = [[[NSAlert alloc] init] autorelease];
 
-  [alert setAlertStyle:NSAlertStyleWarning];
-  [alert setMessageText:title];
-  [alert setInformativeText:error];
+  alert.alertStyle = NSAlertStyleWarning;
+  alert.messageText = title;
+  alert.informativeText = error;
+
   [alert addButtonWithTitle:ok];
 
   [alert runModal];
@@ -442,7 +437,7 @@
 DiskImageStatus IsAppRunningFromReadOnlyDiskImage(
     std::string* dmg_bsd_device_name) {
   return IsPathOnReadOnlyDiskImage(
-      [[base::mac::OuterBundle() bundlePath] fileSystemRepresentation],
+      base::mac::OuterBundle().bundlePath.fileSystemRepresentation,
       dmg_bsd_device_name);
 }
 
@@ -456,37 +451,39 @@
 
     NSArray* application_directories = NSSearchPathForDirectoriesInDomains(
         NSApplicationDirectory, NSLocalDomainMask, YES);
-    if ([application_directories count] == 0) {
+    if (application_directories.count) {
       LOG(ERROR) << "NSSearchPathForDirectoriesInDomains: "
                  << "no local application directories";
       return false;
     }
-    NSString* application_directory = application_directories[0];
+    NSString* application_directory = application_directories.firstObject;
 
-    NSFileManager* file_manager = [NSFileManager defaultManager];
+    NSFileManager* file_manager = NSFileManager.defaultManager;
 
     BOOL is_directory;
     if (![file_manager fileExistsAtPath:application_directory
                             isDirectory:&is_directory] ||
         !is_directory) {
       VLOG(1) << "No application directory at "
-              << [application_directory UTF8String];
+              << base::SysNSStringToUTF8(application_directory);
       return false;
     }
 
-    NSString* source_path = [base::mac::OuterBundle() bundlePath];
-    NSString* application_name = [source_path lastPathComponent];
+    NSString* source_path = base::mac::OuterBundle().bundlePath;
+    NSString* application_name = source_path.lastPathComponent;
     NSString* target_path =
         [application_directory stringByAppendingPathComponent:application_name];
 
     if ([file_manager fileExistsAtPath:target_path]) {
-      VLOG(1) << "Something already exists at " << [target_path UTF8String];
+      VLOG(1) << "Something already exists at "
+              << base::SysNSStringToUTF8(target_path);
       return false;
     }
 
-    NSString* installer_path =
-        [base::mac::FrameworkBundle() pathForResource:@"install" ofType:@"sh"];
-    if (!installer_path) {
+    NSURL* installer_url =
+        [base::mac::FrameworkBundle() URLForResource:@"install"
+                                       withExtension:@"sh"];
+    if (!installer_url) {
       VLOG(1) << "Could not locate install.sh";
       return false;
     }
@@ -501,7 +498,7 @@
     // authentication fails.  In either case, try to install without privilege
     // escalation.
 
-    if (!InstallFromDiskImage(authorization.release(), installer_path,
+    if (!InstallFromDiskImage(std::move(authorization), installer_url,
                               source_path, target_path)) {
       ShowErrorDialog();
       return false;
@@ -556,21 +553,10 @@
 // A small structure used to ferry data between SynchronousDAOperation and
 // SynchronousDACallbackAdapter.
 struct SynchronousDACallbackData {
- public:
-  SynchronousDACallbackData()
-      : callback_called(false),
-        run_loop_running(false),
-        can_log(true) {
-  }
-
-  SynchronousDACallbackData(const SynchronousDACallbackData&) = delete;
-  SynchronousDACallbackData& operator=(const SynchronousDACallbackData&) =
-      delete;
-
   base::ScopedCFTypeRef<DADissenterRef> dissenter;
-  bool callback_called;
-  bool run_loop_running;
-  bool can_log;
+  bool callback_called = false;
+  bool run_loop_running = false;
+  bool can_log = true;
 };
 
 // The callback target for SynchronousDAOperation. Set the fields in
@@ -584,8 +570,7 @@
   callback_data->callback_called = true;
 
   if (dissenter) {
-    CFRetain(dissenter);
-    callback_data->dissenter.reset(dissenter);
+    callback_data->dissenter.reset(dissenter, base::scoped_policy::RETAIN);
   }
 
   // Only stop the run loop if SynchronousDAOperation started it. Don't stop
@@ -659,14 +644,15 @@
 }  // namespace
 
 void EjectAndTrashDiskImage(const std::string& dmg_bsd_device_name) {
-  base::ScopedCFTypeRef<DASessionRef> session(DASessionCreate(NULL));
+  base::ScopedCFTypeRef<DASessionRef> session(
+      DASessionCreate(/*allocator=*/nullptr));
   if (!session.get()) {
     LOG(ERROR) << "DASessionCreate";
     return;
   }
 
-  base::ScopedCFTypeRef<DADiskRef> disk(
-      DADiskCreateFromBSDName(NULL, session, dmg_bsd_device_name.c_str()));
+  base::ScopedCFTypeRef<DADiskRef> disk(DADiskCreateFromBSDName(
+      /*allocator=*/nullptr, session, dmg_bsd_device_name.c_str()));
   if (!disk.get()) {
     LOG(ERROR) << "DADiskCreateFromBSDName";
     return;
@@ -723,12 +709,11 @@
 
   NSURL* disk_image_path_nsurl =
       [NSURL fileURLWithPath:base::SysUTF8ToNSString(disk_image_path)];
-  NSError* ns_error = nil;
-  if (![[NSFileManager defaultManager] trashItemAtURL:disk_image_path_nsurl
-                                     resultingItemURL:nil
-                                                error:&ns_error]) {
-    LOG(ERROR) << base::SysNSStringToUTF8([ns_error localizedDescription]);
+  NSError* error = nil;
+  if (![NSFileManager.defaultManager trashItemAtURL:disk_image_path_nsurl
+                                   resultingItemURL:nil
+                                              error:&error]) {
+    LOG(ERROR) << base::SysNSStringToUTF8(error.localizedDescription);
     return;
   }
-
 }
diff --git a/chrome/browser/net/convert_explicitly_allowed_network_ports_pref_unittest.cc b/chrome/browser/net/convert_explicitly_allowed_network_ports_pref_unittest.cc
index b56cdb4..6cf6c04e 100644
--- a/chrome/browser/net/convert_explicitly_allowed_network_ports_pref_unittest.cc
+++ b/chrome/browser/net/convert_explicitly_allowed_network_ports_pref_unittest.cc
@@ -23,10 +23,9 @@
         prefs::kExplicitlyAllowedNetworkPorts);
   }
 
-  void SetManagedPref(base::Value ports) {
-    local_state_.SetManagedPref(
-        prefs::kExplicitlyAllowedNetworkPorts,
-        base::Value::ToUniquePtrValue(std::move(ports)));
+  void SetList(base::Value::List ports) {
+    local_state_.SetList(prefs::kExplicitlyAllowedNetworkPorts,
+                         std::move(ports));
   }
 
   PrefService* local_state() { return &local_state_; }
@@ -36,38 +35,38 @@
 };
 
 TEST_F(ConvertExplicitlyAllowedNetworkPortsPrefTest, EmptyList) {
-  SetManagedPref(base::Value(base::Value::Type::LIST));
+  SetList(base::Value::List());
   auto ports = ConvertExplicitlyAllowedNetworkPortsPref(local_state());
   EXPECT_THAT(ports, IsEmpty());
 }
 
 TEST_F(ConvertExplicitlyAllowedNetworkPortsPrefTest, ValidList) {
-  base::Value list(base::Value::Type::LIST);
-  list.Append(base::Value(20));
-  list.Append(base::Value(21));
-  list.Append(base::Value(22));
-  SetManagedPref(std::move(list));
+  base::Value::List list;
+  list.Append(20);
+  list.Append(21);
+  list.Append(22);
+  SetList(std::move(list));
   auto ports = ConvertExplicitlyAllowedNetworkPortsPref(local_state());
   EXPECT_THAT(ports, ElementsAre(20, 21, 22));
 }
 
 // This shouldn't happen, but we handle it.
 TEST_F(ConvertExplicitlyAllowedNetworkPortsPrefTest, ListOfBools) {
-  base::Value list(base::Value::Type::LIST);
-  list.Append(base::Value(false));
-  list.Append(base::Value(true));
-  SetManagedPref(std::move(list));
+  base::Value::List list;
+  list.Append(false);
+  list.Append(true);
+  SetList(std::move(list));
   auto ports = ConvertExplicitlyAllowedNetworkPortsPref(local_state());
   EXPECT_THAT(ports, IsEmpty());
 }
 
 // This really shouldn't happen.
 TEST_F(ConvertExplicitlyAllowedNetworkPortsPrefTest, MixedTypesList) {
-  base::Value list(base::Value::Type::LIST);
-  list.Append(base::Value(true));
-  list.Append(base::Value("79"));
-  list.Append(base::Value(554));
-  SetManagedPref(std::move(list));
+  base::Value::List list;
+  list.Append(true);
+  list.Append("79");
+  list.Append(554);
+  SetList(std::move(list));
   auto ports = ConvertExplicitlyAllowedNetworkPortsPref(local_state());
   EXPECT_THAT(ports, ElementsAre(554));
 }
@@ -78,11 +77,11 @@
       100000,  // Too big.
       119,     // Valid.
   };
-  base::Value list(base::Value::Type::LIST);
+  base::Value::List list;
   for (const auto& value : kValues) {
-    list.Append(base::Value(value));
+    list.Append(value);
   }
-  SetManagedPref(std::move(list));
+  SetList(std::move(list));
   auto ports = ConvertExplicitlyAllowedNetworkPortsPref(local_state());
   EXPECT_THAT(ports, ElementsAre(119));
 }
diff --git a/chrome/browser/net/explicitly_allowed_network_ports_browsertest.cc b/chrome/browser/net/explicitly_allowed_network_ports_browsertest.cc
index 24a67ba..6ccbbb6 100644
--- a/chrome/browser/net/explicitly_allowed_network_ports_browsertest.cc
+++ b/chrome/browser/net/explicitly_allowed_network_ports_browsertest.cc
@@ -39,12 +39,12 @@
 
   void EnablePort79ByPolicy() {
     PolicyMap policies;
-    base::Value list(base::Value::Type::LIST);
+    base::Value::List list;
     // Port 25 is just ignored, because it is not on the allowable ports list.
-    list.Append(base::Value("25"));
-    list.Append(base::Value("79"));
+    list.Append("25");
+    list.Append("79");
     SetPolicy(&policies, policy::key::kExplicitlyAllowedNetworkPorts,
-              std::move(list));
+              base::Value(std::move(list)));
     UpdateProviderPolicy(policies);
   }
 
diff --git a/chrome/browser/net/samesite_cookies_policy_browsertest.cc b/chrome/browser/net/samesite_cookies_policy_browsertest.cc
index 5e5f3cc1..186195a6 100644
--- a/chrome/browser/net/samesite_cookies_policy_browsertest.cc
+++ b/chrome/browser/net/samesite_cookies_policy_browsertest.cc
@@ -115,13 +115,13 @@
   GURL other_domain_url("http://other-domain.example");
 
   // Set a policy to allow Legacy cookie access for one domain only.
-  base::Value policy_value(base::Value::Type::LIST);
+  base::Value::List policy_value;
   policy_value.Append(legacy_allowed_domain_url.host());
 
   PolicyMap policies;
   // Set a policy to allow Legacy access for the given domain only.
   SetPolicy(&policies, key::kLegacySameSiteCookieBehaviorEnabledForDomainList,
-            std::move(policy_value));
+            base::Value(std::move(policy_value)));
   UpdateProviderPolicy(policies);
 
   Profile* profile = browser()->profile();
@@ -234,10 +234,10 @@
                        AllowCrossSchemeFrameLegacyCookies) {
   PolicyMap policies;
   // Set a policy to force legacy access for our cookies.
-  base::Value policy_value(base::Value::Type::LIST);
+  base::Value::List policy_value;
   policy_value.Append(GURL("http://a.test").host());
   SetPolicy(&policies, key::kLegacySameSiteCookieBehaviorEnabledForDomainList,
-            std::move(policy_value));
+            base::Value(std::move(policy_value)));
   PolicyTest::UpdateProviderPolicy(policies);
 
   // Set a cookie that will only be sent with legacy behavior.
@@ -291,10 +291,10 @@
                        AllowStrictOnCrossSchemeNavigation) {
   PolicyMap policies;
   // Set a policy to force legacy access for our cookies.
-  base::Value policy_value(base::Value::Type::LIST);
+  base::Value::List policy_value;
   policy_value.Append(GURL("http://a.test").host());
   SetPolicy(&policies, key::kLegacySameSiteCookieBehaviorEnabledForDomainList,
-            std::move(policy_value));
+            base::Value(std::move(policy_value)));
   PolicyTest::UpdateProviderPolicy(policies);
 
   // Set a cookie that will only be sent with legacy behavior.
diff --git a/chrome/browser/net/system_network_context_manager_browsertest.cc b/chrome/browser/net/system_network_context_manager_browsertest.cc
index f60bf49..b0af8f24 100644
--- a/chrome/browser/net/system_network_context_manager_browsertest.cc
+++ b/chrome/browser/net/system_network_context_manager_browsertest.cc
@@ -196,12 +196,11 @@
   EXPECT_TRUE(dynamic_params->patterns_allowed_to_use_all_schemes.empty());
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
-  base::Value patterns_allowed_to_use_all_schemes(base::Value::Type::LIST);
-  patterns_allowed_to_use_all_schemes.Append(
-      base::Value("*.allowed.google.com"));
-  patterns_allowed_to_use_all_schemes.Append(base::Value("*.youtube.com"));
-  local_state->Set(prefs::kAllHttpAuthSchemesAllowedForOrigins,
-                   std::move(patterns_allowed_to_use_all_schemes));
+  base::Value::List patterns_allowed_to_use_all_schemes;
+  patterns_allowed_to_use_all_schemes.Append("*.allowed.google.com");
+  patterns_allowed_to_use_all_schemes.Append("*.youtube.com");
+  local_state->SetList(prefs::kAllHttpAuthSchemesAllowedForOrigins,
+                       std::move(patterns_allowed_to_use_all_schemes));
   dynamic_params =
       SystemNetworkContextManager::GetHttpAuthDynamicParamsForTesting();
 
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index 9f0809c9..f7f6a65 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -2256,16 +2256,18 @@
 
 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityEnableLater) {
   // In this test, load the PDF file first, with accessibility off.
-  WebContents* guest_contents = LoadPdfGetGuestContents(
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf"));
-  ASSERT_TRUE(guest_contents);
+  ASSERT_TRUE(guest);
 
-  // Now enable accessibility globally, and assert that the PDF accessibility
-  // tree loads.
-  EnableAccessibilityForWebContents(guest_contents);
-  WaitForAccessibilityTreeToContainNodeWithName(guest_contents,
+  // Now enable accessibility globally, and assert that the PDF
+  // accessibility tree loads.
+  content::BrowserAccessibilityState::GetInstance()->EnableAccessibility();
+
+  WebContents* contents = GetActiveWebContents();
+  WaitForAccessibilityTreeToContainNodeWithName(contents,
                                                 "1 First Section\r\n");
-  ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshotForPdf(guest_contents);
+  ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshotForPdf(contents);
   std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree);
   ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump);
 }
@@ -2340,20 +2342,21 @@
 }
 
 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilitySelection) {
-  WebContents* guest_contents = LoadPdfGetGuestContents(
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf"));
-  ASSERT_TRUE(guest_contents);
+  ASSERT_TRUE(guest);
 
+  WebContents* contents = GetActiveWebContents();
   ASSERT_TRUE(content::ExecuteScript(
-      GetActiveWebContents(),
+      contents,
       "document.getElementsByTagName('embed')[0].postMessage("
       "{type: 'selectAll'});"));
 
-  EnableAccessibilityForWebContents(guest_contents);
-  WaitForAccessibilityTreeToContainNodeWithName(guest_contents,
+  content::BrowserAccessibilityState::GetInstance()->EnableAccessibility();
+  WaitForAccessibilityTreeToContainNodeWithName(contents,
                                                 "1 First Section\r\n");
   ui::AXTreeUpdate ax_tree_update =
-      GetAccessibilityTreeSnapshotForPdf(guest_contents);
+      GetAccessibilityTreeSnapshotForPdf(contents);
   ui::AXTree ax_tree(ax_tree_update);
 
   // Ensure that the selection spans the beginning of the first text
@@ -2398,28 +2401,29 @@
       "2 Second Section\n"
       "3";
 
-  WebContents* guest_contents = LoadPdfGetGuestContents(
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf"));
-  ASSERT_TRUE(guest_contents);
+  ASSERT_TRUE(guest);
 
+  WebContents* contents = GetActiveWebContents();
   ASSERT_TRUE(content::ExecuteScript(
-      GetActiveWebContents(),
+      contents,
       "document.getElementsByTagName('embed')[0].postMessage("
       "{type: 'selectAll'});"));
 
-  EnableAccessibilityForWebContents(guest_contents);
-  WaitForAccessibilityTreeToContainNodeWithName(guest_contents,
+  content::BrowserAccessibilityState::GetInstance()->EnableAccessibility();
+  WaitForAccessibilityTreeToContainNodeWithName(contents,
                                                 "1 First Section\r\n");
 
   // Find pdfRoot node in the accessibility tree.
   content::FindAccessibilityNodeCriteria find_criteria;
   find_criteria.role = ax::mojom::Role::kPdfRoot;
   ui::AXPlatformNodeDelegate* pdf_root =
-      content::FindAccessibilityNode(guest_contents, find_criteria);
+      content::FindAccessibilityNode(contents, find_criteria);
   ASSERT_TRUE(pdf_root);
 
   content::ContextMenuInterceptor context_menu_interceptor(
-      GetPluginFrame(guest_contents));
+      GetPluginFrame(guest));
 
   ContextMenuWaiter menu_waiter;
   // Invoke kShowContextMenu accessibility action on the node with the kPdfRoot
diff --git a/chrome/browser/prefetch/prefetch_prefs.cc b/chrome/browser/prefetch/prefetch_prefs.cc
index d14cc84..1a755cd 100644
--- a/chrome/browser/prefetch/prefetch_prefs.cc
+++ b/chrome/browser/prefetch/prefetch_prefs.cc
@@ -72,12 +72,13 @@
 
 content::PreloadingEligibility IsSomePreloadingEnabledIgnoringFinch(
     const PrefService& prefs) {
-  if (battery::IsBatterySaverEnabled()) {
-    return content::PreloadingEligibility::kBatterySaverEnabled;
-  }
+  // Arrange the results roughly in order of decreasing transience.
   if (GetPreloadPagesState(prefs) == PreloadPagesState::kNoPreloading) {
     return content::PreloadingEligibility::kPreloadingDisabled;
   }
+  if (battery::IsBatterySaverEnabled()) {
+    return content::PreloadingEligibility::kBatterySaverEnabled;
+  }
 
   return content::PreloadingEligibility::kEligible;
 }
diff --git a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
index e280462..2b1f0ba 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
+++ b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
@@ -77,7 +77,6 @@
     ":emoji_data",
     ":emoji_data_remaining",
     ":emoticon_data",
-    ":gif_test_data",
     ":symbol_data",
     ":symbol_test_data",
   ]
@@ -193,11 +192,6 @@
   outputs = [ "$target_gen_dir/symbol_test_ordering.json" ]
 }
 
-copy("gif_test_data") {
-  sources = [ "./gif_test_ordering.json" ]
-  outputs = [ "$target_gen_dir/gif_test_ordering.json" ]
-}
-
 html_to_wrapper("html_wrapper_files") {
   in_files = html_files
   out_folder = preprocessed_folder
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_ordering.grdp b/chrome/browser/resources/chromeos/emoji_picker/emoji_ordering.grdp
index 47fa671..0aa2eb1 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_ordering.grdp
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_ordering.grdp
@@ -8,5 +8,4 @@
       <include name="IDR_EMOJI_PICKER_EMOTICON_TEST_ORDERING_JSON" compress="gzip" file="${root_gen_dir}/chrome/browser/resources/chromeos/emoji_picker/emoticon_test_ordering.json" resource_path="emoticon_test_ordering.json" use_base_dir="false" type="chrome_html" />
       <include name="IDR_EMOJI_PICKER_SYMBOL_ORDERING_JSON" compress="gzip" file="${root_gen_dir}/chrome/browser/resources/chromeos/emoji_picker/symbol_ordering.json" resource_path="symbol_ordering.json" use_base_dir="false" type="chrome_html" />
       <include name="IDR_EMOJI_PICKER_SYMBOL_TEST_ORDERING_JSON" compress="gzip" file="${root_gen_dir}/chrome/browser/resources/chromeos/emoji_picker/symbol_test_ordering.json" resource_path="symbol_test_ordering.json" use_base_dir="false" type="chrome_html" />
-      <include name="IDR_EMOJI_PICKER_GIF_TEST_ORDERING_JSON" compress="gzip" file="${root_gen_dir}/chrome/browser/resources/chromeos/emoji_picker/gif_test_ordering.json" resource_path="gif_test_ordering.json" use_base_dir="false" type="chrome_html" />
 </grit-part>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts
index b0cf82b..30e534a6 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts
@@ -23,7 +23,7 @@
 import * as events from './events.js';
 import {CATEGORY_METADATA, CATEGORY_TABS, EMOJI_GROUP_TABS, GIF_CATEGORY_METADATA, gifCategoryTabs, SUBCATEGORY_TABS, TABS_CATEGORY_START_INDEX} from './metadata_extension.js';
 import {RecentlyUsedStore} from './store.js';
-import {CategoryEnum, EmojiGroupData, EmojiGroupElement, EmojiVariants, GifSubcategoryData, SubcategoryData} from './types.js';
+import {CategoryEnum, Emoji, EmojiGroupData, EmojiGroupElement, EmojiVariants, SubcategoryData} from './types.js';
 
 export class EmojiPicker extends PolymerElement {
   static get is() {
@@ -226,7 +226,7 @@
         await Promise
             .all(
                 [
-                  this.fetchOrderingData<EmojiGroupData>(firstResult.url),
+                  this.fetchOrderingData(firstResult.url),
                   this.apiProxy.getFeatureList().then(
                       (response: {featureList: number[]}) =>
                           this.setActiveFeatures(response.featureList)),
@@ -296,7 +296,7 @@
     this.gifSupport = featureList.includes(Feature.EMOJI_PICKER_GIF_SUPPORT);
   }
 
-  fetchOrderingData<T>(url: string): Promise<T> {
+  fetchOrderingData(url: string): Promise<EmojiGroupData> {
     return new Promise((resolve) => {
       const xhr = new XMLHttpRequest();
       xhr.onloadend = () => resolve(JSON.parse(xhr.responseText));
@@ -422,7 +422,7 @@
     emoji: string,
     isVariant: boolean,
     baseEmoji: string,
-    allVariants?: string[], name: string, text: string,
+    allVariants?: Emoji[], name: string, text: string,
   }) {
     const {text, isVariant, baseEmoji, allVariants, name} = item;
     const message = this.getMessage();
@@ -707,7 +707,7 @@
    * Gets recently used emojis for a category. It gets the history items
    * and convert them to emojis.
    */
-  getHistoryEmojis(category: CategoryEnum) {
+  getHistoryEmojis(category: CategoryEnum): EmojiVariants[] {
     if (this.incognito) {
       return [];
     }
@@ -715,9 +715,15 @@
     return this.categoriesHistory[category]?.data?.history?.map(
                emoji => ({
                  base: {string: emoji.base, name: emoji.name, keywords: []},
-                 alternates: emoji.alternates.map(alternate => {
-                   return {string: alternate, name: emoji.name, keywords: []};
-                 }),
+                 alternates: emoji.alternates.map(
+                     (alternate: Emoji):
+                         Emoji => {
+                           return {
+                             string: alternate.string,
+                             name: alternate.name,
+                             keywords: [...(alternate.keywords ?? [])],
+                           };
+                         }),
                })) ??
         [];
   }
@@ -771,7 +777,7 @@
   insertHistoryItem(category: CategoryEnum, item: {
     selectedEmoji: string,
     baseEmoji: string,
-    alternates: string[],
+    alternates: Emoji[],
     name: string,
   }) {
     if (this.incognito) {
@@ -942,17 +948,15 @@
         this.allCategoryTabs.every(
             (subCategoryData) =>
                 subCategoryData.category !== CategoryEnum.GIF)) {
-      const dataUrl = EmojiPicker.configs().dataUrls.gif[0];
-      // Fetch the mock json data for categories in tests instead of the
-      // real tenor API
-      const categories: GifSubcategoryData[] = dataUrl ?
-          (await this.fetchOrderingData<GifSubcategoryData[]>(dataUrl)) :
-          (await this.apiProxy.getCategories()).categories;
+      const {categories} = await this.apiProxy.getCategories();
       const categoryTabs = {
         ...CATEGORY_TABS,
         gif: categories,
       };
       this.allCategoryTabs = gifCategoryTabs(categoryTabs);
+
+      const {featured} = await this.apiProxy.getFeaturedGifs();
+      console.warn(featured);
     }
 
     this.set('category', newCategory);
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker_api_proxy.ts b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker_api_proxy.ts
index 20b4864..4e66c36 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker_api_proxy.ts
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker_api_proxy.ts
@@ -137,4 +137,8 @@
     }
     return EmojiPickerApiProxyImpl.instance;
   }
+
+  static setInstance(instance: EmojiPickerApiProxy): void {
+    EmojiPickerApiProxyImpl.instance = instance;
+  }
 }
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/emoji_picker/events.ts b/chrome/browser/resources/chromeos/emoji_picker/events.ts
index a6d9c18..c9b1f1a 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/events.ts
+++ b/chrome/browser/resources/chromeos/emoji_picker/events.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {CategoryEnum} from './types';
+import {CategoryEnum, Emoji} from './types';
 
 export type CategoryButtonClickEvent =
     CustomEvent<{categoryName: CategoryEnum}>;
@@ -17,7 +17,7 @@
   emoji: string,
   isVariant: boolean,
   baseEmoji: string,
-  allVariants: string[],
+  allVariants: Emoji[],
   name: string,
   text: string,
   category: CategoryEnum,
diff --git a/chrome/browser/resources/chromeos/emoji_picker/gif_test_ordering.json b/chrome/browser/resources/chromeos/emoji_picker/gif_test_ordering.json
deleted file mode 100644
index 00867f0..0000000
--- a/chrome/browser/resources/chromeos/emoji_picker/gif_test_ordering.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"name":"#EXCITED"},{"name":"#ANGRY"},{"name":"#CRY"},{"name":"#CHILL OUT"},{"name":"#KISS"}]
diff --git a/chrome/browser/resources/chromeos/emoji_picker/types.ts b/chrome/browser/resources/chromeos/emoji_picker/types.ts
index d01bc7f..73996bf 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/types.ts
+++ b/chrome/browser/resources/chromeos/emoji_picker/types.ts
@@ -30,7 +30,7 @@
 
 export interface StoredItem {
   base: string;
-  alternates: string[];
+  alternates: Emoji[];
   name: string;
 }
 
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn
index 54dd118..3c2c4a3 100644
--- a/chrome/browser/resources/chromeos/login/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -273,6 +273,7 @@
     "screens/common/user_creation.js",
     "screens/common/wrong_hwid.js",
     "screens/login/active_directory_password_change.js",
+    "screens/login/arc_vm_data_migration.js",
     "screens/login/checking_downloading_update.js",
     "screens/login/cryptohome_recovery.js",
     "screens/login/encryption_migration.js",
diff --git a/chrome/browser/resources/chromeos/login/debug/debug.js b/chrome/browser/resources/chromeos/login/debug/debug.js
index e014eaba..454fd34e 100644
--- a/chrome/browser/resources/chromeos/login/debug/debug.js
+++ b/chrome/browser/resources/chromeos/login/debug/debug.js
@@ -1331,6 +1331,10 @@
       ],
     },
     {
+      id: 'arc-vm-data-migration',
+      kind: ScreenKind.NORMAL,
+    },
+    {
       // TODO(https://crbug.com/1261902): update debug overlay
       id: 'recommend-apps',
       kind: ScreenKind.NORMAL,
diff --git a/chrome/browser/resources/chromeos/login/screens.js b/chrome/browser/resources/chromeos/login/screens.js
index d36a2060..60e786c2 100644
--- a/chrome/browser/resources/chromeos/login/screens.js
+++ b/chrome/browser/resources/chromeos/login/screens.js
@@ -46,6 +46,7 @@
 import './screens/common/wrong_hwid.js';
 // SCREENS USED DURING THE LOGIN FLOW
 import './screens/login/active_directory_password_change.js';
+import './screens/login/arc_vm_data_migration.js';
 import './screens/login/cryptohome_recovery.js';
 import './screens/login/encryption_migration.js';
 import './screens/login/gaia_password_changed.js';
@@ -128,6 +129,11 @@
  */
 export const loginScreensList = [
   {tag: 'active-directory-password-change-element', id: 'ad-password-change'},
+  {
+    tag: 'arc-vm-data-migration-element',
+    id: 'arc-vm-data-migration',
+    condition: 'isArcVmDataMigrationEnabled',
+  },
   {tag: 'cryptohome-recovery-element', id: 'cryptohome-recovery'},
   {tag: 'encryption-migration-element', id: 'encryption-migration'},
   {tag: 'gaia-password-changed-element', id: 'gaia-password-changed'},
@@ -165,4 +171,4 @@
   {tag: 'quick-start-element', id: 'quick-start'},
   {tag: 'update-element', id: 'oobe-update'},
   {tag: 'oobe-welcome-element', id: 'connect'},
-];
\ No newline at end of file
+];
diff --git a/chrome/browser/resources/chromeos/login/screens/login/BUILD.gn b/chrome/browser/resources/chromeos/login/screens/login/BUILD.gn
index fc34b81..891f6fd 100644
--- a/chrome/browser/resources/chromeos/login/screens/login/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/screens/login/BUILD.gn
@@ -11,6 +11,7 @@
   closure_flags = default_closure_args
   deps = [
     ":active_directory_password_change",
+    ":arc_vm_data_migration",
     ":checking_downloading_update",
     ":cryptohome_recovery",
     ":encryption_migration",
@@ -41,6 +42,18 @@
   extra_deps = [ ":web_components" ]
 }
 
+js_library("arc_vm_data_migration") {
+  sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.js" ]
+  deps = [
+    "../../components/behaviors:login_screen_behavior",
+    "../../components/behaviors:multi_step_behavior",
+    "../../components/behaviors:oobe_dialog_host_behavior",
+    "../../components/behaviors:oobe_i18n_behavior",
+    "../../components/dialogs:oobe_adaptive_dialog",
+  ]
+  extra_deps = [ ":web_components" ]
+}
+
 js_library("cryptohome_recovery") {
   sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.js" ]
   deps = [
@@ -166,6 +179,7 @@
 html_to_js("web_components") {
   js_files = [
     "active_directory_password_change.js",
+    "arc_vm_data_migration.js",
     "checking_downloading_update.js",
     "cryptohome_recovery.js",
     "encryption_migration.js",
diff --git a/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.html b/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.html
new file mode 100644
index 0000000..421d2c6d
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.html
@@ -0,0 +1,34 @@
+<!--
+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.
+-->
+
+<style include="oobe-dialog-host-styles">
+  #description-body {
+    margin: 8px 0 8px 0;
+  }
+</style>
+
+<oobe-adaptive-dialog id="welcome-dialog" for-step="welcome" role="dialog">
+  <iron-icon slot="icon" icon="oobe-32:googleg"></iron-icon>
+  <h1 slot="title">[[i18nDynamic(locale, 'welcomeScreenTitle')]]</h1>
+  <div slot="content" class="landscape-header-aligned">
+    <div id="description-header">
+      <b>[[i18nDynamic(locale, 'welcomeScreenDescriptionHeader')]]</b>
+    </div>
+    <div id="description-body">
+      [[i18nDynamic(locale, 'welcomeScreenDescriptionBody')]]
+    </div>
+  </div>
+  <div slot="bottom-buttons">
+    <oobe-text-button id="skip-button"
+        on-click="onSkipButtonClicked_"
+        text-key="skipButtonLabel">
+    </oobe-text-button>
+    <oobe-text-button inverse id="update-button"
+        on-click="onUpdateButtonClicked_"
+        text-key="updateButtonLabel">
+    </oobe-text-button>
+  </div>
+</oobe-adaptive-dialog>
diff --git a/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.js b/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.js
new file mode 100644
index 0000000..d8e5fcd0
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/screens/login/arc_vm_data_migration.js
@@ -0,0 +1,103 @@
+// 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.
+
+/**
+ * @fileoverview Polymer element for ARCVM /data migration screen.
+ */
+
+import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
+import '//resources/polymer/v3_0/paper-styles/color.js';
+import '../../components/common_styles/oobe_dialog_host_styles.css.js';
+import '../../components/dialogs/oobe_adaptive_dialog.js';
+import '../../components/oobe_icons.html.js';
+
+import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {LoginScreenBehavior, LoginScreenBehaviorInterface} from '../../components/behaviors/login_screen_behavior.js';
+import {MultiStepBehavior, MultiStepBehaviorInterface} from '../../components/behaviors/multi_step_behavior.js';
+import {OobeDialogHostBehavior} from '../../components/behaviors/oobe_dialog_host_behavior.js';
+import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
+import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
+
+// Keep in sync with ArcVmDataMigrationScreenView::UIState.
+var ArcVmDataMigrationUIState = {
+  WELCOME: 'welcome',
+};
+
+// Keep in sync with kUserAction* in arc_vm_data_migration_screen.cc.
+var ArcVmDataMigrationUserAction = {
+  SKIP: 'skip',
+  UPDATE: 'update',
+};
+
+/**
+ * @constructor
+ * @extends {PolymerElement}
+ * @implements {LoginScreenBehaviorInterface}
+ * @implements {OobeI18nBehaviorInterface}
+ * @implements {MultiStepBehaviorInterface}
+ */
+const ArcVmDataMigrationScreenElementBase = mixinBehaviors(
+    [
+      OobeDialogHostBehavior,
+      OobeI18nBehavior,
+      LoginScreenBehavior,
+      MultiStepBehavior,
+    ],
+    PolymerElement);
+
+class ArcVmDataMigrationScreen extends ArcVmDataMigrationScreenElementBase {
+  static get is() {
+    return 'arc-vm-data-migration-element';
+  }
+
+  static get template() {
+    return html`{__html_template__}`;
+  }
+
+  static get properties() {
+    return {};
+  }
+
+  constructor() {
+    super();
+  }
+
+  defaultUIStep() {
+    return ArcVmDataMigrationUIState.WELCOME;
+  }
+
+  get UI_STEPS() {
+    return ArcVmDataMigrationUIState;
+  }
+
+  get EXTERNAL_API() {
+    return [
+      'setUIState',
+    ];
+  }
+
+  ready() {
+    super.ready();
+    this.initializeLoginScreen('ArcVmDataMigrationScreen');
+  }
+
+  getOobeUIInitialState() {
+    return OOBE_UI_STATE.MIGRATION;
+  }
+
+  setUIState(state) {
+    this.setUIStep(Object.values(ArcVmDataMigrationUIState)[state]);
+  }
+
+  onSkipButtonClicked_() {
+    this.userActed(ArcVmDataMigrationUserAction.SKIP);
+  }
+
+  onUpdateButtonClicked_() {
+    this.userActed(ArcVmDataMigrationUserAction.UPDATE);
+  }
+}
+
+customElements.define(ArcVmDataMigrationScreen.is, ArcVmDataMigrationScreen);
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts
index 3ea127c..5cfe6d0 100644
--- a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts
+++ b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts
@@ -20,9 +20,9 @@
 
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {PrefsMixin} from '../../prefs/prefs_mixin.js';
 import {DeepLinkingMixin} from '../deep_linking_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/timezone_selector.ts b/chrome/browser/resources/settings/chromeos/date_time_page/timezone_selector.ts
index fea84a0..32789b53 100644
--- a/chrome/browser/resources/settings/chromeos/date_time_page/timezone_selector.ts
+++ b/chrome/browser/resources/settings/chromeos/date_time_page/timezone_selector.ts
@@ -9,10 +9,10 @@
 import '../../settings_shared.css.js';
 import '../../controls/settings_dropdown_menu.js';
 
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {DropdownMenuOptionList} from '../../controls/settings_dropdown_menu.js';
-import {loadTimeData} from '../../i18n_setup.js';
 import {PrefsMixin} from '../../prefs/prefs_mixin.js';
 import {CrSettingsPrefs} from '../../prefs/prefs_types.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/device_page/keyboard.ts b/chrome/browser/resources/settings/chromeos/device_page/keyboard.ts
index f16a499..5ada994 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/keyboard.ts
+++ b/chrome/browser/resources/settings/chromeos/device_page/keyboard.ts
@@ -16,11 +16,11 @@
 
 import {focusWithoutInk} from 'chrome://resources/ash/common/focus_without_ink_js.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {afterNextRender, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {DropdownMenuOptionList} from '../../controls/settings_dropdown_menu.js';
 import {FocusConfig} from '../../focus_config.js';
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {castExists} from '../assert_extras.js';
 import {DeepLinkingMixin} from '../deep_linking_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.ts b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.ts
index 0b54f717..7064c2f 100644
--- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.ts
+++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.ts
@@ -21,9 +21,9 @@
 import {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {DomRepeatEvent, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {cast, castExists} from '../assert_extras.js';
 import {DeepLinkingMixin} from '../deep_linking_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/lazy_load.js b/chrome/browser/resources/settings/chromeos/lazy_load.js
index 42d3d24..81941c5 100644
--- a/chrome/browser/resources/settings/chromeos/lazy_load.js
+++ b/chrome/browser/resources/settings/chromeos/lazy_load.js
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '../strings.m.js';
 import './crostini_page/bruschetta_subpage.js';
 import './crostini_page/crostini_arc_adb.js';
 import './crostini_page/crostini_arc_adb_confirmation_dialog.js';
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js
index cf36cfe..5768f68 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js
@@ -17,20 +17,20 @@
 import './multidevice_permissions_setup_dialog.js';
 import './multidevice_subpage.js';
 
+import {assert, assertNotReached} from 'chrome://resources/ash/common/assert.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/ash/common/web_ui_listener_behavior.js';
-import {assert, assertNotReached} from 'chrome://resources/ash/common/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {beforeNextRender, html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
-import {Route, Router} from '../router.js';
 import {NearbyShareSettingsBehavior, NearbyShareSettingsBehaviorInterface} from '../../shared/nearby_share_settings_behavior.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {recordSettingChange} from '../metrics_recorder.js';
 import {routes} from '../os_route.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs_behavior.js';
 import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js';
+import {Route, Router} from '../router.js';
 
 import {MultiDeviceBrowserProxy, MultiDeviceBrowserProxyImpl} from './multidevice_browser_proxy.js';
 import {MultiDeviceFeature, MultiDeviceFeatureState, MultiDevicePageContentData, MultiDeviceSettingsMode, PhoneHubFeatureAccessStatus, PhoneHubPermissionsSetupAction, PhoneHubPermissionsSetupFlowScreens} from './multidevice_constants.js';
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_item.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_item.js
index 2e99bc3..4733eaff 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_item.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_item.js
@@ -15,7 +15,6 @@
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/ash/common/web_ui_listener_behavior.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {recordSettingChange} from '../metrics_recorder.js';
 import {routes} from '../os_route.js';
 import {OsSettingsRoutes} from '../os_settings_routes.js';
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
index d129afe..f0d8caf8 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
@@ -23,7 +23,6 @@
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {Route} from '../router.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js
index 04c9a71..164d614 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js
@@ -19,11 +19,11 @@
 import {MojoInterfaceProviderImpl} from 'chrome://resources/ash/common/network/mojo_interface_provider.js';
 import {NetworkListenerBehavior, NetworkListenerBehaviorInterface} from 'chrome://resources/ash/common/network/network_listener_behavior.js';
 import {OncMojo} from 'chrome://resources/ash/common/network/onc_mojo.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {CrosNetworkConfigRemote, FilterType, InhibitReason, NetworkStateProperties} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/cros_network_config.mojom-webui.js';
 import {DeviceStateType, NetworkType} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-webui.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {routes} from '../os_route.js';
 import {OsSettingsRoutes} from '../os_settings_routes.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_receive_dialog.js b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_receive_dialog.js
index 65f3e8a..717f302 100644
--- a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_receive_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_receive_dialog.js
@@ -30,9 +30,9 @@
 import 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js';
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {NearbySettings} from '../../shared/nearby_share_settings_behavior.js';
 
 import {getReceiveManager, observeReceiveManager} from './nearby_share_receive_manager.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
index 792a389..116d8b2a1 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
@@ -21,9 +21,9 @@
 import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
 import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {PrefsMixin} from '../../prefs/prefs_mixin.js';
 import {castExists} from '../assert_extras.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts
index e39b938..636b944 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts
@@ -29,10 +29,10 @@
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {sanitizeInnerHtml} from 'chrome://resources/js/parse_html_subset.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {LifetimeBrowserProxyImpl} from '../../lifetime_browser_proxy.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {DeepLinkingMixin} from '../deep_linking_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_forget_device_dialog.ts b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_forget_device_dialog.ts
index 55573fe7..796f483 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_forget_device_dialog.ts
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_forget_device_dialog.ts
@@ -13,11 +13,10 @@
 import {getDeviceName} from 'chrome://resources/ash/common/bluetooth/bluetooth_utils.js';
 import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PairedBluetoothDeviceProperties} from 'chrome://resources/mojo/chromeos/ash/services/bluetooth_config/public/mojom/cros_bluetooth_config.mojom-webui.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
-
 import {getTemplate} from './os_bluetooth_forget_device_dialog.html.js';
 
 interface SettingsBluetoothForgetDeviceDialogElement {
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.ts b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.ts
index 988838d..410a468 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.ts
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.ts
@@ -16,10 +16,10 @@
 import {getBluetoothConfig} from 'chrome://resources/ash/common/bluetooth/cros_bluetooth_config.js';
 import {getInstance as getAnnouncerInstance} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {BluetoothSystemProperties, BluetoothSystemState, DeviceConnectionState, PairedBluetoothDeviceProperties} from 'chrome://resources/mojo/chromeos/ash/services/bluetooth_config/public/mojom/cros_bluetooth_config.mojom-webui.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {routes} from '../os_route.js';
 import {RouteOriginMixin} from '../route_origin_mixin.js';
 import {Route, Router} from '../router.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_remove_saved_device_dialog.ts b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_remove_saved_device_dialog.ts
index 40991e89..e4dd2bd 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_remove_saved_device_dialog.ts
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_remove_saved_device_dialog.ts
@@ -14,10 +14,9 @@
 import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
-
 import {getTemplate} from './os_remove_saved_device_dialog.html.js';
 import {FastPairSavedDevice} from './settings_fast_pair_constants.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js
index 741cfd11..096bf09a 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js
@@ -13,11 +13,11 @@
 import './os_japanese_clear_ime_data_dialog.js';
 import './os_japanese_manage_user_dictionary_page.js';
 
-import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {assert, assertNotReached} from 'chrome://resources/ash/common/assert.js';
+import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {afterNextRender, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {routes} from '../os_route.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs_behavior.js';
 import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js
index 176d2770..a63a552 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js
@@ -2,19 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {assert, assertNotReached} from 'chrome://resources/ash/common/assert.js';
+/**
+ * @fileoverview constants related to input method options.
+ */
 
-import {loadTimeData} from '../../i18n_setup.js';
-import {Route} from '../router.js';
+import {assert, assertNotReached} from 'chrome://resources/ash/common/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
+
 import {routes} from '../os_route.js';
+import {Route} from '../router.js';
 
 import {getInputMethodSettings, SettingsType} from './input_method_settings.js';
 import {JAPANESE_INPUT_MODE, JAPANESE_KEYMAP_STYLE, JAPANESE_PUNCTUATION_STYLE, JAPANESE_SECTION_SHORTCUT, JAPANESE_SHIFT_KEY_MODE_STYLE, JAPANESE_SPACE_INPUT_STYLE, JAPANESE_SYMBOL_STYLE} from './input_method_types.js';
 
-
-/**
- * @fileoverview constants related to input method options.
- */
 /**
  * The prefix string shared by all first party input method ID.
  * @private @const
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js
index 95ac4b07..df769ae 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js
@@ -20,19 +20,19 @@
 import '../../settings_shared.css.js';
 import '../os_settings_page/os_settings_animated_pages.js';
 
+import {assert} from 'chrome://resources/ash/common/assert.js';
 import {focusWithoutInk} from 'chrome://resources/ash/common/focus_without_ink_js.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
-import {assert} from 'chrome://resources/ash/common/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
-import {Route, Router} from '../router.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {recordSettingChange} from '../metrics_recorder.js';
 import {routes} from '../os_route.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs_behavior.js';
 import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js';
+import {Route, Router} from '../router.js';
 
 import {hasOptionsPageInSettings} from './input_method_util.js';
 import {getTemplate} from './input_page.html.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_page_v2.js b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_page_v2.js
index 3a3092c..6ca1d00 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_page_v2.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_page_v2.js
@@ -22,19 +22,19 @@
 import '../../controls/settings_toggle_button.js';
 import '../../settings_shared.css.js';
 
+import {assert} from 'chrome://resources/ash/common/assert.js';
 import {focusWithoutInk} from 'chrome://resources/ash/common/focus_without_ink_js.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
-import {assert} from 'chrome://resources/ash/common/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
-import {Route, Router} from '../router.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {recordSettingChange} from '../metrics_recorder.js';
 import {routes} from '../os_route.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs_behavior.js';
 import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js';
+import {Route, Router} from '../router.js';
 
 import {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './languages_metrics_proxy.js';
 import {LanguageHelper, LanguagesModel, LanguageState} from './languages_types.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js
index 7466e98..cea7449 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js
@@ -22,16 +22,15 @@
 import '../../settings_vars.css.js';
 
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
-import {Router} from '../router.js';
 import {routes} from '../os_route.js';
+import {Router} from '../router.js';
 
 import {LanguageHelper, LanguagesModel} from './languages_types.js';
 import {getTemplate} from './os_languages_section.html.js';
 
-
 // The IME ID for the Accessibility Common extension used by Dictation.
 /** @type {string} */
 const ACCESSIBILITY_COMMON_IME_ID =
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/smart_inputs_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/smart_inputs_page.js
index 7628a042..3934e5e 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/smart_inputs_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/smart_inputs_page.js
@@ -12,15 +12,15 @@
 import '../../settings_shared.css.js';
 
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
-import {Route} from '../router.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {routes} from '../os_route.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs_behavior.js';
 import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js';
+import {Route} from '../router.js';
 
 import {getTemplate} from './smart_inputs_page.html.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js b/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
index 8f9ec9f..4457440e 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
@@ -19,9 +19,9 @@
 
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/ash/common/web_ui_listener_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {getImage} from '../icon.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
index 5b3741a1..bc5f8254 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
@@ -33,10 +33,10 @@
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {LockScreenProgress, recordLockScreenProgress} from 'chrome://resources/ash/common/quick_unlock/lock_screen_constants.js';
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/ash/common/web_ui_listener_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {AuthFactor, FactorObserverInterface, FactorObserverReceiver, ManagementType, RecoveryFactorEditor_ConfigureResult} from 'chrome://resources/mojo/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom-webui.js';
 import {afterNextRender, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {routes} from '../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
index 7a49fa4..6049036c 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
@@ -32,9 +32,9 @@
 import {focusWithoutInk} from 'chrome://resources/ash/common/focus_without_ink_js.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/ash/common/web_ui_listener_behavior.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {afterNextRender, flush, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {ProfileInfoBrowserProxyImpl} from '../../people_page/profile_info_browser_proxy.js';
 import {SyncBrowserProxyImpl} from '../../people_page/sync_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_signout_dialog.ts b/chrome/browser/resources/settings/chromeos/os_people_page/os_signout_dialog.ts
index 7abd79c..de454d85 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_signout_dialog.ts
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_signout_dialog.ts
@@ -17,11 +17,11 @@
 import {WebUiListenerMixin} from '//resources/cr_elements/web_ui_listener_mixin.js';
 import {sanitizeInnerHtml} from '//resources/js/parse_html_subset.js';
 import {microTask, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
+import {SyncBrowserProxyImpl, SyncStatus} from '../../people_page/sync_browser_proxy.js';
 
 import {getTemplate} from './os_signout_dialog.html.js';
-import {SyncBrowserProxyImpl, SyncStatus} from '../../people_page/sync_browser_proxy.js';
 
 export interface OsSettingsSignoutDialogElement {
   $: {
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_sync_page.ts b/chrome/browser/resources/settings/chromeos/os_people_page/os_sync_page.ts
index bbc5df68..9411851 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_sync_page.ts
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_sync_page.ts
@@ -33,9 +33,9 @@
 import {IronCollapseElement} from '//resources/polymer/v3_0/iron-collapse/iron-collapse.js';
 import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 
 import {FocusConfig} from '../../focus_config.js';
-import {loadTimeData} from '../../i18n_setup.js';
 import {PageStatus, StatusAction, SyncBrowserProxy, SyncBrowserProxyImpl, SyncPrefs, SyncStatus} from '../../people_page/sync_browser_proxy.js';
 import {RouteObserverMixin} from '../route_observer_mixin.js';
 import {Route, Router} from '../router.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/users_page.js b/chrome/browser/resources/settings/chromeos/os_people_page/users_page.js
index e2099c3..bbe853ab 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/users_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/users_page.js
@@ -18,9 +18,9 @@
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
 import {focusWithoutInk} from 'chrome://resources/ash/common/focus_without_ink_js.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {afterNextRender, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {DeepLinkingBehavior, DeepLinkingBehaviorInterface} from '../deep_linking_behavior.js';
 import {routes} from '../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_manufacturer_model_dialog.ts b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_manufacturer_model_dialog.ts
index 6f5153f..f909833 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_manufacturer_model_dialog.ts
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_manufacturer_model_dialog.ts
@@ -15,10 +15,9 @@
 import './cups_printer_shared.css.js';
 import './cups_printers_browser_proxy.js';
 
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
-
 import {getTemplate} from './cups_add_printer_manufacturer_model_dialog.html.js';
 import {getBaseName, getErrorText, isPPDInfoValid} from './cups_printer_dialog_util.js';
 import {CupsPrinterInfo, CupsPrintersBrowserProxy, CupsPrintersBrowserProxyImpl, ManufacturersInfo, ModelsInfo, PrinterSetupResult} from './cups_printers_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers_entry.ts b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers_entry.ts
index 823504f4..0401d3a1 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers_entry.ts
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers_entry.ts
@@ -12,10 +12,9 @@
 import './cups_printer_types.js';
 
 import {FocusRowMixin} from 'chrome://resources/js/focus_row_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
-
 import {PrinterListEntry, PrinterType} from './cups_printer_types.js';
 import {getTemplate} from './cups_printers_entry.html.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js
index 6744722..0a0c4f9d 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '../strings.m.js';
 import '../prefs/prefs.js';
 import './device_page/audio.js';
 import './device_page/cros_audio_config.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.ts b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.ts
index 742aec5..58c892d0 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.ts
+++ b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.ts
@@ -17,9 +17,9 @@
 import '../../settings_shared.css.js';
 import '../../settings_vars.css.js';
 
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {assertExists} from '../assert_extras.js';
 import {OSPageVisibility} from '../os_page_visibility.js';
 import {routes} from '../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_subpage.ts b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_subpage.ts
index d24a826..079ef11 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_subpage.ts
+++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_subpage.ts
@@ -25,8 +25,8 @@
 import {IronResizableBehavior} from '//resources/polymer/v3_0/iron-resizable-behavior/iron-resizable-behavior.js';
 import {afterNextRender, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {EventTracker} from 'chrome://resources/js/event_tracker.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {Constructor} from '../common/types.js';
 import {RouteObserverMixin, RouteObserverMixinInterface} from '../route_observer_mixin.js';
 import {Route, Router} from '../router.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.ts b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.ts
index 8414780..4b6e234 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.ts
+++ b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.ts
@@ -26,10 +26,10 @@
 import {CrDrawerElement} from 'chrome://resources/cr_elements/cr_drawer/cr_drawer.js';
 import {FindShortcutMixin} from 'chrome://resources/cr_elements/find_shortcut_mixin.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {listenOnce} from 'chrome://resources/js/util_ts.js';
 import {Debouncer, DomIf, microTask, PolymerElement, timeOut} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {SettingsPrefsElement} from '../../prefs/prefs.js';
 import {castExists} from '../assert_extras.js';
 import {setGlobalScrollTarget} from '../global_scroll_target_behavior.js';
diff --git a/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.ts b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.ts
index bfeba0c..641daaa8 100644
--- a/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.ts
+++ b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.ts
@@ -15,9 +15,9 @@
 
 import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {loadTimeData} from '../../i18n_setup.js';
 import {castExists} from '../assert_extras.js';
 
 import {ParentalControlsBrowserProxy, ParentalControlsBrowserProxyImpl} from './parental_controls_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/chromeos/router.js b/chrome/browser/resources/settings/chromeos/router.js
index 333f476..89de8a777 100644
--- a/chrome/browser/resources/settings/chromeos/router.js
+++ b/chrome/browser/resources/settings/chromeos/router.js
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '../i18n_setup.js';
-
 import {assert} from 'chrome://resources/ash/common/assert.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc
index e5d59d2..8e3bb2c 100644
--- a/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc
+++ b/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc
@@ -698,11 +698,6 @@
 }
 
 void CloudBinaryUploadService::Shutdown() {
-  if (!active_requests_.empty()) {
-    base::UmaHistogramCounts10000(
-        "SafeBrowsingCloudBinaryUploadService.ActiveRequestsAtShutdown",
-        active_requests_.size());
-  }
   if (binary_fcm_service_)
     binary_fcm_service_->Shutdown();
 }
diff --git a/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml b/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml
index cdc5774..a5d38ba 100644
--- a/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml
+++ b/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml
@@ -41,7 +41,8 @@
             android:layout_gravity="center_horizontal"
             android:background="@drawable/qrcode_background"
             android:gravity="center_horizontal"
-            android:padding="16dp" />
+            android:padding="16dp"
+            android:importantForAccessibility="no" />
 
         <TextView
             android:id="@+id/error_message"
diff --git a/chrome/browser/share/android/java/res/layout/screenshot_share_sheet.xml b/chrome/browser/share/android/java/res/layout/screenshot_share_sheet.xml
index a43c285..dbe52b1 100644
--- a/chrome/browser/share/android/java/res/layout/screenshot_share_sheet.xml
+++ b/chrome/browser/share/android/java/res/layout/screenshot_share_sheet.xml
@@ -30,7 +30,8 @@
                     android:layout_height="match_parent"
                     android:gravity="center_horizontal"
                     android:layout_gravity="center_horizontal"
-                    android:padding="16dp" />
+                    android:padding="16dp"
+                    android:importantForAccessibility="no" />
 
             </FrameLayout>
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 67ad377..acef408 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -2702,6 +2702,8 @@
       "webui/ash/login/app_launch_splash_screen_handler.h",
       "webui/ash/login/arc_terms_of_service_screen_handler.cc",
       "webui/ash/login/arc_terms_of_service_screen_handler.h",
+      "webui/ash/login/arc_vm_data_migration_screen_handler.cc",
+      "webui/ash/login/arc_vm_data_migration_screen_handler.h",
       "webui/ash/login/assistant_optin_flow_screen_handler.cc",
       "webui/ash/login/assistant_optin_flow_screen_handler.h",
       "webui/ash/login/auto_enrollment_check_screen_handler.cc",
diff --git a/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item.xml b/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item.xml
index 1c59b0c..2c70dff5 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item.xml
+++ b/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item.xml
@@ -28,5 +28,6 @@
         android:layout_gravity="end"
         android:gravity="center_vertical"
         android:tint="@macro/default_icon_color_secondary"
-        android:duplicateParentState="true" />
+        android:duplicateParentState="true"
+        android:importantForAccessibility="no" />
 </LinearLayout>
diff --git a/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item_start_with_icon.xml b/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item_start_with_icon.xml
index 37349f8..a8601eac 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item_start_with_icon.xml
+++ b/chrome/browser/ui/android/appmenu/internal/java/res/layout/menu_item_start_with_icon.xml
@@ -6,11 +6,13 @@
 -->
 <!-- Layout for each item in the menu popup -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     style="@style/AppMenuItem"
     android:layout_width="match_parent"
     android:layout_height="?android:attr/listPreferredItemHeightSmall"
     android:gravity="center_vertical"
-    android:orientation="horizontal" >
+    android:orientation="horizontal"
+    tools:ignore="UseCompoundDrawables">
 
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/menu_item_icon"
@@ -19,7 +21,8 @@
         android:gravity="center_vertical"
         android:tint="@color/default_icon_color_secondary_tint_list"
         android:tintMode="src_in"
-        android:duplicateParentState="true" />
+        android:duplicateParentState="true"
+        android:importantForAccessibility="no" />
 
     <TextView
         android:id="@+id/menu_item_text"
diff --git a/chrome/browser/ui/android/multiwindow/java/res/layout/instance_switcher_item.xml b/chrome/browser/ui/android/multiwindow/java/res/layout/instance_switcher_item.xml
index 9ecb36a..74d77f2 100644
--- a/chrome/browser/ui/android/multiwindow/java/res/layout/instance_switcher_item.xml
+++ b/chrome/browser/ui/android/multiwindow/java/res/layout/instance_switcher_item.xml
@@ -27,7 +27,8 @@
         android:layout_height="8dp"
         android:layout_marginEnd="8dp"
         android:layout_marginVertical="28dp"
-        android:layout_gravity="center_vertical" />
+        android:layout_gravity="center_vertical"
+        android:importantForAccessibility="no" />
 
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/favicon"
diff --git a/chrome/browser/ui/android/omnibox/java/res/layout/location_status_icon.xml b/chrome/browser/ui/android/omnibox/java/res/layout/location_status_icon.xml
index abb6d51..dbcbb1d 100644
--- a/chrome/browser/ui/android/omnibox/java/res/layout/location_status_icon.xml
+++ b/chrome/browser/ui/android/omnibox/java/res/layout/location_status_icon.xml
@@ -6,7 +6,7 @@
 -->
 <merge
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:tools="http://schemas.android.com/tools">
 
     <org.chromium.chrome.browser.omnibox.status.StatusIconView
         android:id="@+id/location_bar_status_icon_view"
@@ -37,7 +37,8 @@
             android:src="@android:color/transparent"
             android:visibility="visible"
             android:scaleType="center"
-            android:focusable="false" />
+            android:focusable="false"
+            tools:ignore="ContentDescription" />
 
     </FrameLayout>
 
diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/optional_button_layout.xml b/chrome/browser/ui/android/toolbar/java/res/layout/optional_button_layout.xml
index 14606bf..0bc38d5 100644
--- a/chrome/browser/ui/android/toolbar/java/res/layout/optional_button_layout.xml
+++ b/chrome/browser/ui/android/toolbar/java/res/layout/optional_button_layout.xml
@@ -17,7 +17,8 @@
         android:scaleType="fitXY"
         android:id="@+id/swappable_icon_secondary_background"
         android:layout_gravity="center"
-        android:visibility="gone" />
+        android:visibility="gone"
+        android:importantForAccessibility="no" />
     <org.chromium.components.browser_ui.widget.listmenu.ListMenuButton
         android:layout_width="match_parent"
         android:layout_height="40dp"
@@ -44,5 +45,6 @@
         android:id="@+id/swappable_icon_animation_image"
         android:layout_gravity="center"
         android:visibility="gone"
-        style="@style/ToolbarButton" />
+        style="@style/ToolbarButton"
+        android:importantForAccessibility="no" />
 </org.chromium.chrome.browser.toolbar.optional_button.OptionalButtonView>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_account_item.xml b/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_account_item.xml
index 1b2172b..b4d836c 100644
--- a/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_account_item.xml
+++ b/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_account_item.xml
@@ -24,7 +24,8 @@
         android:layout_width="@dimen/account_selection_account_avatar_size"
         android:layout_height="@dimen/account_selection_account_avatar_size"
         android:layout_marginEnd="16dp"
-        style="@style/ListItemStartIcon" />
+        style="@style/ListItemStartIcon"
+        android:importantForAccessibility="no" />
 
     <LinearLayout
         android:layout_width="0dp"
diff --git a/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_header_item.xml b/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_header_item.xml
index a0e7973a..df8a5df 100644
--- a/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_header_item.xml
+++ b/chrome/browser/ui/android/webid/internal/java/res/layout/account_selection_header_item.xml
@@ -30,7 +30,8 @@
          android:layout_height="@dimen/account_selection_sheet_icon_size"
          android:layout_gravity="center_vertical"
          android:layout_marginEnd="16dp"
-         android:visibility="gone" />
+         android:visibility="gone"
+         android:importantForAccessibility="no" />
       <TextView
           android:id="@+id/header_title"
           android:layout_width="0dp"
diff --git a/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.cc b/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.cc
new file mode 100644
index 0000000..70989c0
--- /dev/null
+++ b/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.cc
@@ -0,0 +1,38 @@
+// 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/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h"
+
+#include "chrome/browser/ash/login/screens/arc_vm_data_migration_screen.h"
+#include "components/login/localized_values_builder.h"
+
+namespace ash {
+
+ArcVmDataMigrationScreenHandler::ArcVmDataMigrationScreenHandler()
+    : BaseScreenHandler(kScreenId) {}
+
+ArcVmDataMigrationScreenHandler::~ArcVmDataMigrationScreenHandler() = default;
+
+void ArcVmDataMigrationScreenHandler::DeclareLocalizedValues(
+    ::login::LocalizedValuesBuilder* builder) {
+  // TODO(b/258278176): Replace strings with l10n ones.
+  builder->Add("welcomeScreenTitle", u"Update your Chromebook");
+  builder->Add("welcomeScreenDescriptionHeader", u"What to expect");
+  builder->Add("welcomeScreenDescriptionBody",
+               u"This is a critical update. During the update you will not be "
+               u"able to use your device for up to 10 minutes. Please keep "
+               u"your device connected to a charger during the update.");
+  builder->Add("skipButtonLabel", u"Remind me later");
+  builder->Add("updateButtonLabel", u"Next");
+}
+
+void ArcVmDataMigrationScreenHandler::Show() {
+  ShowInWebUI();
+}
+
+void ArcVmDataMigrationScreenHandler::SetUIState(UIState state) {
+  CallExternalAPI("setUIState", static_cast<int>(state));
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h b/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h
new file mode 100644
index 0000000..9686b87
--- /dev/null
+++ b/chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h
@@ -0,0 +1,57 @@
+// 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_UI_WEBUI_ASH_LOGIN_ARC_VM_DATA_MIGRATION_SCREEN_HANDLER_H_
+#define CHROME_BROWSER_UI_WEBUI_ASH_LOGIN_ARC_VM_DATA_MIGRATION_SCREEN_HANDLER_H_
+
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/ui/webui/ash/login/base_screen_handler.h"
+#include "chrome/browser/ui/webui/ash/login/oobe_ui.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace ash {
+
+// Interface for dependency injection between ArcVmDataMigrationScreen and its
+// WebUI representation.
+class ArcVmDataMigrationScreenView
+    : public base::SupportsWeakPtr<ArcVmDataMigrationScreenView> {
+ public:
+  inline constexpr static StaticOobeScreenId kScreenId{
+      "arc-vm-data-migration", "ArcVmDataMigrationScreen"};
+
+  enum class UIState {
+    kWelcome = 0,
+  };
+
+  virtual ~ArcVmDataMigrationScreenView() = default;
+
+  virtual void Show() = 0;
+  virtual void SetUIState(UIState state) = 0;
+};
+
+class ArcVmDataMigrationScreenHandler : public BaseScreenHandler,
+                                        public ArcVmDataMigrationScreenView {
+ public:
+  using TView = ArcVmDataMigrationScreenView;
+
+  ArcVmDataMigrationScreenHandler();
+  ~ArcVmDataMigrationScreenHandler() override;
+  ArcVmDataMigrationScreenHandler(const ArcVmDataMigrationScreenHandler&) =
+      delete;
+  ArcVmDataMigrationScreenHandler& operator=(
+      const ArcVmDataMigrationScreenHandler&) = delete;
+
+ private:
+  // BaseScreenHandler override:
+  void DeclareLocalizedValues(
+      ::login::LocalizedValuesBuilder* builder) override;
+
+  // ArcVmDataMigrationScreenView overrides:
+  void Show() override;
+  void SetUIState(UIState state) override;
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_UI_WEBUI_ASH_LOGIN_ARC_VM_DATA_MIGRATION_SCREEN_HANDLER_H_
diff --git a/chrome/browser/ui/webui/ash/login/oobe_ui.cc b/chrome/browser/ui/webui/ash/login/oobe_ui.cc
index 19063049..dc5854bd 100644
--- a/chrome/browser/ui/webui/ash/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/ash/login/oobe_ui.cc
@@ -10,6 +10,7 @@
 #include <string>
 #include <utility>
 
+#include "ash/components/arc/arc_features.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_switches.h"
 #include "ash/public/cpp/esim_manager.h"
@@ -44,6 +45,7 @@
 #include "chrome/browser/ui/webui/ash/login/app_downloading_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/app_launch_splash_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/arc_terms_of_service_screen_handler.h"
+#include "chrome/browser/ui/webui/ash/login/arc_vm_data_migration_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/assistant_optin_flow_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/auto_enrollment_check_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/base_screen_handler.h"
@@ -282,6 +284,9 @@
   source->AddBoolean("isOobeFlow", is_oobe_flow);
   source->AddBoolean("isOobeJelly", features::IsOobeJellyEnabled());
   source->AddBoolean("isChoobeEnabled", features::IsOobeChoobeEnabled());
+  source->AddBoolean(
+      "isArcVmDataMigrationEnabled",
+      base::FeatureList::IsEnabled(arc::kEnableArcVmDataMigration));
 
   // Configure shared resources
   AddProductLogoResources(source);
@@ -392,6 +397,10 @@
 
   AddScreenHandler(std::make_unique<ArcTermsOfServiceScreenHandler>());
 
+  if (base::FeatureList::IsEnabled(arc::kEnableArcVmDataMigration)) {
+    AddScreenHandler(std::make_unique<ArcVmDataMigrationScreenHandler>());
+  }
+
   AddScreenHandler(std::make_unique<RecommendAppsScreenHandler>());
 
   AddScreenHandler(std::make_unique<AppDownloadingScreenHandler>());
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc
index acd6267a..7e5908b7 100644
--- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/cart/cart_handler.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search/background/ntp_custom_background_service_factory.h"
+#include "chrome/browser/ui/webui/sanitized_image_source.h"
 #include "chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.h"
 #include "chrome/browser/ui/webui/webui_util.h"
 #include "chrome/common/webui_url_constants.h"
@@ -76,6 +77,9 @@
       base::make_span(kSidePanelCustomizeChromeResources,
                       kSidePanelCustomizeChromeResourcesSize),
       IDR_SIDE_PANEL_CUSTOMIZE_CHROME_CUSTOMIZE_CHROME_HTML);
+
+  content::URLDataSource::Add(profile_,
+                              std::make_unique<SanitizedImageSource>(profile_));
 }
 
 CustomizeChromeUI::~CustomizeChromeUI() = default;
diff --git a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
index 106345f0..2301028 100644
--- a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
@@ -7,18 +7,13 @@
 #include <string>
 #include <utility>
 
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/commerce/shopping_service_factory.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/reading_list/reading_list_model_factory.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/webui/favicon_source.h"
-#include "chrome/browser/ui/webui/sanitized_image_source.h"
-#include "chrome/browser/ui/webui/side_panel/bookmarks/bookmarks_page_handler.h"
-#include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.h"
 #include "chrome/browser/ui/webui/side_panel/reading_list/reading_list_page_handler.h"
 #include "chrome/browser/ui/webui/webui_util.h"
 #include "chrome/common/pref_names.h"
@@ -26,10 +21,6 @@
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/side_panel_resources.h"
 #include "chrome/grit/side_panel_resources_map.h"
-#include "components/bookmarks/browser/bookmark_model.h"
-#include "components/bookmarks/common/bookmark_pref_names.h"
-#include "components/commerce/core/shopping_service.h"
-#include "components/commerce/core/webui/shopping_list_handler.h"
 #include "components/favicon_base/favicon_url_parser.h"
 #include "components/prefs/pref_service.h"
 #include "components/reading_list/core/reading_list_model.h"
@@ -51,113 +42,36 @@
       profile, chrome::kChromeUIReadLaterHost);
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
       {"addCurrentTab", IDS_READ_LATER_ADD_CURRENT_TAB},
-      {"bookmarkCopied", IDS_BOOKMARK_MANAGER_TOAST_ITEM_COPIED},
-      {"bookmarkDeleted", IDS_BOOKMARK_MANAGER_TOAST_ITEM_DELETED},
-      {"bookmarkCreated", IDS_BOOKMARK_SCREEN_READER_CREATED},
-      {"bookmarkReordered", IDS_BOOKMARK_SCREEN_READER_REORDERED},
-      {"bookmarkMoved", IDS_BOOKMARK_SCREEN_READER_MOVED},
       {"emptyStateAddFromDialogSubheader",
        IDS_READ_LATER_MENU_EMPTY_STATE_ADD_FROM_DIALOG_SUBHEADER},
       {"emptyStateHeader", IDS_READ_LATER_MENU_EMPTY_STATE_HEADER},
       {"emptyStateSubheader", IDS_READ_LATER_MENU_EMPTY_STATE_SUBHEADER},
       {"markCurrentTabAsRead", IDS_READ_LATER_MARK_CURRENT_TAB_READ},
-      {"readAnythingTabTitle", IDS_READ_ANYTHING_TITLE},
       {"readHeader", IDS_READ_LATER_MENU_READ_HEADER},
       {"title", IDS_READ_LATER_TITLE},
       {"tooltipDelete", IDS_DELETE},
-      {"tooltipMore", IDS_BOOKMARKS_EDIT_MORE},
       {"tooltipMarkAsRead", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_READ},
       {"tooltipMarkAsUnread", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_UNREAD},
       {"unreadHeader", IDS_READ_LATER_MENU_UNREAD_HEADER},
-      {"shoppingListFolderTitle", IDS_SIDE_PANEL_TRACKED_PRODUCTS},
-      {"shoppingListTrackPriceButtonDescription",
-       IDS_PRICE_TRACKING_TRACK_PRODUCT_ACCESSIBILITY},
-      {"shoppingListUntrackPriceButtonDescription",
-       IDS_PRICE_TRACKING_UNTRACK_PRODUCT_ACCESSIBILITY},
-      {"sortByType", IDS_BOOKMARKS_SORT_BY_TYPE},
-      {"allBookmarks", IDS_BOOKMARKS_ALL_BOOKMARKS},
-      {"priceTrackingLabel", IDS_BOOKMARKS_LABEL_TRACKED_PRODUCTS},
-      {"sortNewest", IDS_BOOKMARKS_SORT_NEWEST},
-      {"sortOldest", IDS_BOOKMARKS_SORT_OLDEST},
-      {"sortAlphabetically", IDS_BOOKMARKS_SORT_ALPHABETICALLY},
-      {"sortReverseAlphabetically", IDS_BOOKMARKS_SORT_REVERSE_ALPHABETICALLY},
-      {"visualView", IDS_BOOKMARKS_VISUAL_VIEW},
-      {"compactView", IDS_BOOKMARKS_COMPACT_VIEW},
-      {"sortMenuA11yLabel", IDS_BOOKMARKS_SORT_MENU_A11Y_LABEL},
-      {"createNewFolderA11yLabel", IDS_BOOKMARKS_CREATE_NEW_FOLDER_A11Y_LABEL},
-      {"editBookmarkListA11yLabel",
-       IDS_BOOKMARKS_EDIT_BOOKMARK_LIST_A11Y_LABEL},
       {"cancelA11yLabel", IDS_CANCEL},
-      {"bookmarkNameA11yLabel", IDS_BOOKMARK_AX_EDITOR_NAME_LABEL},
-      {"emptyTitle", IDS_BOOKMARKS_EMPTY_STATE_TITLE},
-      {"emptyBody", IDS_BOOKMARKS_EMPTY_STATE_BODY},
-      {"emptyTitleGuest", IDS_BOOKMARKS_EMPTY_STATE_TITLE_GUEST},
-      {"emptyBodyGuest", IDS_BOOKMARKS_EMPTY_STATE_BODY_GUEST},
-      {"searchBookmarks", IDS_BOOKMARK_MANAGER_SEARCH_BUTTON},
-      {"clearSearch", IDS_BOOKMARK_MANAGER_CLEAR_SEARCH},
-      {"selectedBookmarkCount", IDS_BOOKMARK_MANAGER_ITEMS_SELECTED},
-      {"menuOpenNewTab", IDS_BOOKMARK_MANAGER_MENU_OPEN_IN_NEW_TAB},
-      {"menuOpenNewTabWithCount",
-       IDS_BOOKMARK_MANAGER_MENU_OPEN_ALL_WITH_COUNT},
-      {"menuOpenNewWindow", IDS_BOOKMARK_MANAGER_MENU_OPEN_IN_NEW_WINDOW},
-      {"menuOpenNewWindowWithCount",
-       IDS_BOOKMARK_MANAGER_MENU_OPEN_ALL_NEW_WINDOW_WITH_COUNT},
-      {"menuOpenIncognito", IDS_BOOKMARK_MANAGER_MENU_OPEN_INCOGNITO},
-      {"menuOpenIncognitoWithCount",
-       IDS_BOOKMARK_MANAGER_MENU_OPEN_ALL_INCOGNITO_WITH_COUNT},
-      {"newFolderTitle", IDS_BOOKMARK_EDITOR_NEW_FOLDER_NAME},
   };
   for (const auto& str : kLocalizedStrings)
     webui::AddLocalizedString(source, str.name, str.id);
 
   source->AddBoolean("useRipples", views::PlatformStyle::kUseRipples);
 
-  PrefService* prefs = profile->GetPrefs();
-  source->AddBoolean(
-      "bookmarksDragAndDropEnabled",
-      prefs->GetBoolean(bookmarks::prefs::kEditBookmarksEnabled));
-
-  bookmarks::BookmarkModel* bookmark_model =
-      BookmarkModelFactory::GetForBrowserContext(profile);
-  source->AddString(
-      "bookmarksBarId",
-      base::NumberToString(
-          bookmark_model ? bookmark_model->bookmark_bar_node()->id() : -1));
-  source->AddString(
-      "otherBookmarksId",
-      base::NumberToString(bookmark_model ? bookmark_model->other_node()->id()
-                                          : -1));
-
   ReadingListModel* const reading_list_model =
       ReadingListModelFactory::GetForBrowserContext(profile);
   source->AddBoolean(
       "hasUnseenReadingListEntries",
       reading_list_model->loaded() ? reading_list_model->unseen_size() : false);
 
-  source->AddBoolean("readAnythingEnabled", features::IsReadAnythingEnabled());
-
-  source->AddBoolean("guestMode", profile->IsGuestSession());
-  source->AddBoolean("incognitoMode", profile->IsIncognitoProfile());
-
-  source->AddBoolean(
-      "showPowerBookmarks",
-      base::FeatureList::IsEnabled(features::kPowerBookmarksSidePanel));
-
-  bool shouldShowBookmark =
-      prefs->GetBoolean(prefs::kShouldShowSidePanelBookmarkTab);
-  source->AddBoolean("shouldShowBookmark", shouldShowBookmark);
-  if (shouldShowBookmark) {
-    prefs->SetBoolean(prefs::kShouldShowSidePanelBookmarkTab, false);
-  }
-
   content::URLDataSource::Add(
       profile, std::make_unique<FaviconSource>(
                    profile, chrome::FaviconUrlFormat::kFavicon2));
   webui::SetupWebUIDataSource(
       source, base::make_span(kSidePanelResources, kSidePanelResourcesSize),
       IDR_SIDE_PANEL_READING_LIST_READING_LIST_HTML);
-  content::URLDataSource::Add(profile,
-                              std::make_unique<SanitizedImageSource>(profile));
 }
 
 ReadingListUI::~ReadingListUI() = default;
@@ -179,40 +93,6 @@
 }
 
 void ReadingListUI::BindInterface(
-    mojo::PendingReceiver<side_panel::mojom::BookmarksPageHandlerFactory>
-        receiver) {
-  bookmarks_page_factory_receiver_.reset();
-  bookmarks_page_factory_receiver_.Bind(std::move(receiver));
-}
-
-void ReadingListUI::CreateBookmarksPageHandler(
-    mojo::PendingReceiver<side_panel::mojom::BookmarksPageHandler> receiver) {
-  bookmarks_page_handler_ =
-      std::make_unique<BookmarksPageHandler>(std::move(receiver), this);
-}
-
-void ReadingListUI::BindInterface(
-    mojo::PendingReceiver<read_anything::mojom::PageHandlerFactory> receiver) {
-  read_anything_page_factory_receiver_.reset();
-  read_anything_page_factory_receiver_.Bind(std::move(receiver));
-}
-
-void ReadingListUI::CreatePageHandler(
-    mojo::PendingRemote<read_anything::mojom::Page> page,
-    mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver) {
-  DCHECK(page);
-  read_anything_page_handler_ = std::make_unique<ReadAnythingPageHandler>(
-      std::move(page), std::move(receiver), web_ui());
-}
-
-void ReadingListUI::BindInterface(
-    mojo::PendingReceiver<shopping_list::mojom::ShoppingListHandlerFactory>
-        receiver) {
-  shopping_list_factory_receiver_.reset();
-  shopping_list_factory_receiver_.Bind(std::move(receiver));
-}
-
-void ReadingListUI::BindInterface(
     mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandlerFactory>
         pending_receiver) {
   if (help_bubble_handler_factory_receiver_.is_bound())
@@ -231,21 +111,6 @@
       });
 }
 
-void ReadingListUI::CreateShoppingListHandler(
-    mojo::PendingRemote<shopping_list::mojom::Page> page,
-    mojo::PendingReceiver<shopping_list::mojom::ShoppingListHandler> receiver) {
-  Profile* const profile = Profile::FromWebUI(web_ui());
-  bookmarks::BookmarkModel* bookmark_model =
-      BookmarkModelFactory::GetForBrowserContext(profile);
-  commerce::ShoppingService* shopping_service =
-      commerce::ShoppingServiceFactory::GetForBrowserContext(profile);
-  feature_engagement::Tracker* const tracker =
-      feature_engagement::TrackerFactory::GetForBrowserContext(profile);
-  shopping_list_handler_ = std::make_unique<commerce::ShoppingListHandler>(
-      std::move(page), std::move(receiver), bookmark_model, shopping_service,
-      profile->GetPrefs(), tracker, g_browser_process->GetApplicationLocale());
-}
-
 void ReadingListUI::SetActiveTabURL(const GURL& url) {
   if (page_handler_)
     page_handler_->SetActiveTabURL(url);
diff --git a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.h b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.h
index c955718d..49d9e1b 100644
--- a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.h
+++ b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.h
@@ -7,11 +7,8 @@
 
 #include <memory>
 
-#include "chrome/browser/ui/webui/side_panel/bookmarks/bookmarks.mojom.h"
 #include "chrome/browser/ui/webui/side_panel/reading_list/reading_list.mojom.h"
 #include "chrome/browser/ui/webui/webui_load_timer.h"
-#include "chrome/common/accessibility/read_anything.mojom.h"
-#include "components/commerce/core/mojom/shopping_list.mojom.h"
 #include "components/user_education/webui/help_bubble_handler.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -19,19 +16,10 @@
 #include "ui/webui/mojo_bubble_web_ui_controller.h"
 #include "ui/webui/resources/cr_components/help_bubble/help_bubble.mojom.h"
 
-class BookmarksPageHandler;
-class ReadAnythingPageHandler;
 class ReadingListPageHandler;
 
-namespace commerce {
-class ShoppingListHandler;
-}
-
 class ReadingListUI : public ui::MojoBubbleWebUIController,
                       public reading_list::mojom::PageHandlerFactory,
-                      public side_panel::mojom::BookmarksPageHandlerFactory,
-                      public read_anything::mojom::PageHandlerFactory,
-                      public shopping_list::mojom::ShoppingListHandlerFactory,
                       public help_bubble::mojom::HelpBubbleHandlerFactory {
  public:
   explicit ReadingListUI(content::WebUI* web_ui);
@@ -45,17 +33,6 @@
       mojo::PendingReceiver<reading_list::mojom::PageHandlerFactory> receiver);
 
   void BindInterface(
-      mojo::PendingReceiver<side_panel::mojom::BookmarksPageHandlerFactory>
-          receiver);
-
-  void BindInterface(
-      mojo::PendingReceiver<read_anything::mojom::PageHandlerFactory> receiver);
-
-  void BindInterface(
-      mojo::PendingReceiver<shopping_list::mojom::ShoppingListHandlerFactory>
-          receiver);
-
-  void BindInterface(
       mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandlerFactory>
           pending_receiver);
 
@@ -67,23 +44,6 @@
                          mojo::PendingReceiver<reading_list::mojom::PageHandler>
                              receiver) override;
 
-  // side_panel::mojom::BookmarksPageHandlerFactory:
-  void CreateBookmarksPageHandler(
-      mojo::PendingReceiver<side_panel::mojom::BookmarksPageHandler> receiver)
-      override;
-
-  // read_anything::mojom::PageHandlerFactory:
-  void CreatePageHandler(
-      mojo::PendingRemote<read_anything::mojom::Page> page,
-      mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver)
-      override;
-
-  // shopping_list::mojom::ShoppingListHandlerFactory:
-  void CreateShoppingListHandler(
-      mojo::PendingRemote<shopping_list::mojom::Page> page,
-      mojo::PendingReceiver<shopping_list::mojom::ShoppingListHandler> receiver)
-      override;
-
   // help_bubble::mojom::HelpBubbleHandlerFactory:
   void CreateHelpBubbleHandler(
       mojo::PendingRemote<help_bubble::mojom::HelpBubbleClient> client,
@@ -94,18 +54,6 @@
   mojo::Receiver<reading_list::mojom::PageHandlerFactory>
       page_factory_receiver_{this};
 
-  std::unique_ptr<BookmarksPageHandler> bookmarks_page_handler_;
-  mojo::Receiver<side_panel::mojom::BookmarksPageHandlerFactory>
-      bookmarks_page_factory_receiver_{this};
-
-  std::unique_ptr<ReadAnythingPageHandler> read_anything_page_handler_;
-  mojo::Receiver<read_anything::mojom::PageHandlerFactory>
-      read_anything_page_factory_receiver_{this};
-
-  std::unique_ptr<commerce::ShoppingListHandler> shopping_list_handler_;
-  mojo::Receiver<shopping_list::mojom::ShoppingListHandlerFactory>
-      shopping_list_factory_receiver_{this};
-
   std::unique_ptr<user_education::HelpBubbleHandler> help_bubble_handler_;
   mojo::Receiver<help_bubble::mojom::HelpBubbleHandlerFactory>
       help_bubble_handler_factory_receiver_{this};
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 08ad384..5b43ac9 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -25,6 +25,8 @@
     "commands/install_from_info_command.h",
     "commands/install_from_sync_command.cc",
     "commands/install_from_sync_command.h",
+    "commands/install_placeholder_command.cc",
+    "commands/install_placeholder_command.h",
     "commands/manifest_update_data_fetch_command.cc",
     "commands/manifest_update_data_fetch_command.h",
     "commands/manifest_update_finalize_command.cc",
@@ -567,6 +569,7 @@
     "commands/fetch_installability_for_chrome_management_unittest.cc",
     "commands/fetch_manifest_and_install_command_unittest.cc",
     "commands/install_from_sync_command_unittest.cc",
+    "commands/install_placeholder_command_unittest.cc",
     "commands/manifest_update_data_fetch_command_unittest.cc",
     "commands/manifest_update_finalize_command_unittest.cc",
     "commands/os_integration_synchronize_command_unittest.cc",
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command.cc b/chrome/browser/web_applications/commands/install_placeholder_command.cc
new file mode 100644
index 0000000..b246d40
--- /dev/null
+++ b/chrome/browser/web_applications/commands/install_placeholder_command.cc
@@ -0,0 +1,207 @@
+// 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/web_applications/commands/install_placeholder_command.h"
+
+#include <utility>
+
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/install_bounce_metric.h"
+#include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/web_app_data_retriever.h"
+#include "chrome/browser/web_applications/web_app_helpers.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_params.h"
+#include "chrome/browser/web_applications/web_app_install_utils.h"
+#include "components/webapps/browser/install_result_code.h"
+#include "content/public/browser/web_contents.h"
+
+namespace web_app {
+
+namespace {
+// How often we retry to download a custom icon, not counting the first attempt.
+const int MAX_ICON_DOWNLOAD_RETRIES = 1;
+const base::TimeDelta ICON_DOWNLOAD_RETRY_DELAY = base::Seconds(5);
+}  // namespace
+
+InstallPlaceholderCommand::InstallPlaceholderCommand(
+    const ExternalInstallOptions& install_options,
+    OnceInstallCallback callback,
+    base::WeakPtr<content::WebContents> web_contents,
+    std::unique_ptr<WebAppDataRetriever> data_retriever)
+    : WebAppCommandTemplate<AppLock>("InstallFromInfoCommand"),
+      app_id_(GenerateAppId(/*manifest_id=*/"", install_options.install_url)),
+      lock_description_(
+          std::make_unique<AppLockDescription, base::flat_set<AppId>>(
+              {app_id_})),
+      install_options_(install_options),
+      callback_(std::move(callback)),
+      web_contents_(web_contents),
+      data_retriever_(std::move(data_retriever)) {
+  debug_value_.Set("external_install_options", install_options.AsDebugValue());
+  debug_value_.Set("app_id", app_id_);
+}
+
+InstallPlaceholderCommand::~InstallPlaceholderCommand() = default;
+
+void InstallPlaceholderCommand::StartWithLock(std::unique_ptr<AppLock> lock) {
+  lock_ = std::move(lock);
+  if (install_options_.override_icon_url) {
+    FetchCustomIcon(install_options_.override_icon_url.value(),
+                    MAX_ICON_DOWNLOAD_RETRIES);
+    return;
+  }
+
+  FinalizeInstall(/*bitmaps=*/absl::nullopt);
+}
+
+LockDescription& InstallPlaceholderCommand::lock_description() const {
+  return *lock_description_;
+}
+
+base::Value InstallPlaceholderCommand::ToDebugValue() const {
+  return base::Value(debug_value_.Clone());
+}
+
+void InstallPlaceholderCommand::OnSyncSourceRemoved() {}
+
+void InstallPlaceholderCommand::OnShutdown() {
+  Abort(webapps::InstallResultCode::kCancelledOnWebAppProviderShuttingDown);
+}
+
+void InstallPlaceholderCommand::Abort(webapps::InstallResultCode code) {
+  if (!callback_) {
+    return;
+  }
+  debug_value_.Set("result_code", base::StreamableToString(code));
+  webapps::InstallableMetrics::TrackInstallResult(false);
+  SignalCompletionAndSelfDestruct(
+      CommandResult::kFailure,
+      base::BindOnce(std::move(callback_), app_id_, code));
+}
+
+void InstallPlaceholderCommand::FetchCustomIcon(const GURL& url,
+                                                int retries_left) {
+  if (!web_contents_ || web_contents_->IsBeingDestroyed()) {
+    Abort(webapps::InstallResultCode::kWebContentsDestroyed);
+    return;
+  }
+
+  data_retriever_->GetIcons(
+      web_contents_.get(), {url}, /*skip_page_favicons=*/true,
+      base::BindOnce(&InstallPlaceholderCommand::OnCustomIconFetched,
+                     weak_factory_.GetWeakPtr(), url, retries_left));
+}
+
+void InstallPlaceholderCommand::OnCustomIconFetched(
+    const GURL& image_url,
+    int retries_left,
+    IconsDownloadedResult result,
+    IconsMap icons_map,
+    DownloadedIconsHttpResults icons_http_results) {
+  auto bitmaps_it = icons_map.find(image_url);
+  if (bitmaps_it != icons_map.end() && !bitmaps_it->second.empty()) {
+    // Download succeeded.
+    debug_value_.Set("custom_icon_download_success", true);
+    FinalizeInstall(bitmaps_it->second);
+    return;
+  }
+  if (retries_left <= 0) {
+    // Download failed.
+    debug_value_.Set("custom_icon_download_success", false);
+    FinalizeInstall(absl::nullopt);
+    return;
+  }
+  // Retry download.
+  base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
+      FROM_HERE,
+      base::BindOnce(&InstallPlaceholderCommand::FetchCustomIcon,
+                     weak_factory_.GetWeakPtr(), image_url, retries_left - 1),
+      ICON_DOWNLOAD_RETRY_DELAY);
+}
+
+void InstallPlaceholderCommand::FinalizeInstall(
+    absl::optional<std::reference_wrapper<const std::vector<SkBitmap>>>
+        bitmaps) {
+  WebAppInstallInfo web_app_info;
+
+#if defined(CHROMEOS)
+  web_app_info.title =
+      install_options_.override_name
+          ? base::UTF8ToUTF16(install_options_.override_name.value())
+      : install_options_.fallback_app_name
+          ? base::UTF8ToUTF16(install_options_.fallback_app_name.value())
+          : base::UTF8ToUTF16(install_options_.install_url.spec());
+
+  if (bitmaps) {
+    IconsMap icons_map;
+    icons_map.emplace(GURL(install_options_.override_icon_url.value()),
+                      bitmaps.value());
+    PopulateProductIcons(&web_app_info, &icons_map);
+  }
+
+#else   // defined(CHROMEOS)
+  web_app_info.title =
+      install_options_.fallback_app_name
+          ? base::UTF8ToUTF16(install_options_.fallback_app_name.value())
+          : base::UTF8ToUTF16(install_options_.install_url.spec());
+#endif  // defined(CHROMEOS)
+
+  web_app_info.start_url = install_options_.install_url;
+  web_app_info.install_url = install_options_.install_url;
+
+  web_app_info.user_display_mode = install_options_.user_display_mode;
+
+  WebAppInstallFinalizer::FinalizeOptions options(
+      ConvertExternalInstallSourceToInstallSource(
+          install_options_.install_source));
+  // Overwrite fields if we are doing a forced reinstall, because some
+  // values (custom name or icon) might have changed.
+  options.overwrite_existing_manifest_fields = install_options_.force_reinstall;
+
+  options.add_to_applications_menu = install_options_.add_to_applications_menu;
+  options.add_to_desktop = install_options_.add_to_desktop;
+  options.add_to_quick_launch_bar = install_options_.add_to_quick_launch_bar;
+
+  web_app_info.is_placeholder = true;
+
+  lock_->install_finalizer().FinalizeInstall(
+      web_app_info, options,
+      base::BindOnce(&InstallPlaceholderCommand::OnInstallFinalized,
+                     weak_factory_.GetWeakPtr()));
+}
+
+void InstallPlaceholderCommand::OnInstallFinalized(
+    const AppId& app_id,
+    webapps::InstallResultCode code,
+    OsHooksErrors os_hooks_errors) {
+  debug_value_.Set("result_code", base::StreamableToString(code));
+
+  if (!web_contents_ || web_contents_->IsBeingDestroyed()) {
+    Abort(webapps::InstallResultCode::kWebContentsDestroyed);
+    return;
+  }
+
+  if (code != webapps::InstallResultCode::kSuccessNewInstall) {
+    Abort(code);
+    return;
+  }
+
+  RecordWebAppInstallationTimestamp(
+      Profile::FromBrowserContext(web_contents_->GetBrowserContext())
+          ->GetPrefs(),
+      app_id,
+      (ConvertExternalInstallSourceToInstallSource(
+          install_options_.install_source)));
+
+  RecordAppBanner(web_contents_.get(), install_options_.install_url);
+
+  webapps::InstallableMetrics::TrackInstallResult(webapps::IsSuccess(code));
+  SignalCompletionAndSelfDestruct(
+      CommandResult::kSuccess,
+      base::BindOnce(std::move(callback_), app_id, code));
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command.h b/chrome/browser/web_applications/commands/install_placeholder_command.h
new file mode 100644
index 0000000..2daf24cf
--- /dev/null
+++ b/chrome/browser/web_applications/commands/install_placeholder_command.h
@@ -0,0 +1,83 @@
+// 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_WEB_APPLICATIONS_COMMANDS_INSTALL_PLACEHOLDER_COMMAND_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_INSTALL_PLACEHOLDER_COMMAND_H_
+
+#include <memory>
+
+#include "base/values.h"
+#include "chrome/browser/web_applications/commands/web_app_command.h"
+#include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_install_params.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace web_app {
+
+class AppLock;
+class AppLockDescription;
+class LockDescription;
+class WebAppDataRetriever;
+
+// This is used during externally managed app install flow to install a
+// placeholder app instead of the target app when the app's install_url fails to
+// load.
+class InstallPlaceholderCommand : public WebAppCommandTemplate<AppLock> {
+ public:
+  InstallPlaceholderCommand(
+      const ExternalInstallOptions& install_options,
+      OnceInstallCallback callback,
+      base::WeakPtr<content::WebContents> web_contents,
+      std::unique_ptr<WebAppDataRetriever> data_retriever);
+
+  ~InstallPlaceholderCommand() override;
+
+  void StartWithLock(std::unique_ptr<AppLock> lock) override;
+
+  LockDescription& lock_description() const override;
+
+  base::Value ToDebugValue() const override;
+
+  void OnSyncSourceRemoved() override;
+  void OnShutdown() override;
+
+ private:
+  void Abort(webapps::InstallResultCode code);
+  void FetchCustomIcon(const GURL& url, int retries_left);
+
+  void OnCustomIconFetched(const GURL& image_url,
+                           int retries_left,
+                           IconsDownloadedResult result,
+                           IconsMap icons_map,
+                           DownloadedIconsHttpResults icons_http_results);
+
+  void FinalizeInstall(
+      absl::optional<std::reference_wrapper<const std::vector<SkBitmap>>>
+          bitmaps);
+
+  void OnInstallFinalized(const AppId& app_id,
+                          webapps::InstallResultCode code,
+                          OsHooksErrors os_hooks_errors);
+
+  const AppId app_id_;
+  std::unique_ptr<AppLockDescription> lock_description_;
+  std::unique_ptr<AppLock> lock_;
+
+  const ExternalInstallOptions install_options_;
+  OnceInstallCallback callback_;
+  base::WeakPtr<content::WebContents> web_contents_;
+  std::unique_ptr<WebAppDataRetriever> data_retriever_;
+
+  base::Value::Dict debug_value_;
+
+  base::WeakPtrFactory<InstallPlaceholderCommand> weak_factory_{this};
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_INSTALL_PLACEHOLDER_COMMAND_H_
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc b/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc
new file mode 100644
index 0000000..199ac6c
--- /dev/null
+++ b/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc
@@ -0,0 +1,116 @@
+// 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/web_applications/commands/install_placeholder_command.h"
+
+#include <memory>
+
+#include "base/test/gmock_callback_support.h"
+#include "base/test/test_future.h"
+#include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
+#include "chrome/browser/web_applications/test/fake_web_app_provider.h"
+#include "chrome/browser/web_applications/test/mock_data_retriever.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/test/web_app_test.h"
+#include "chrome/browser/web_applications/web_app_command_manager.h"
+#include "chrome/browser/web_applications/web_app_command_scheduler.h"
+#include "chrome/browser/web_applications/web_app_constants.h"
+#include "chrome/browser/web_applications/web_app_id.h"
+#include "chrome/browser/web_applications/web_app_provider.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
+#include "components/webapps/browser/install_result_code.h"
+#include "content/public/browser/web_contents.h"
+#include "net/http/http_status_code.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace web_app {
+namespace {
+
+class InstallPlaceholderCommandTest : public WebAppTest {
+ public:
+  const int kIconSize = 96;
+  const GURL kInstallUrl = GURL("https://example.com");
+
+  void SetUp() override {
+    WebAppTest::SetUp();
+
+    test::AwaitStartWebAppProviderAndSubsystems(profile());
+  }
+
+  WebAppProvider* provider() { return WebAppProvider::GetForTest(profile()); }
+  FakeOsIntegrationManager& fake_os_integration_manager() {
+    return static_cast<FakeOsIntegrationManager&>(
+        provider()->os_integration_manager());
+  }
+};
+
+TEST_F(InstallPlaceholderCommandTest, InstallPlaceholder) {
+  ExternalInstallOptions options(kInstallUrl, mojom::UserDisplayMode::kBrowser,
+                                 ExternalInstallSource::kExternalPolicy);
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+  provider()->scheduler().InstallPlaceholder(options, future.GetCallback(),
+                                             web_contents()->GetWeakPtr());
+  EXPECT_EQ(future.Get<webapps::InstallResultCode>(),
+            webapps::InstallResultCode::kSuccessNewInstall);
+  const AppId app_id = future.Get<AppId>();
+  EXPECT_TRUE(provider()->registrar_unsafe().IsPlaceholderApp(
+      app_id, WebAppManagement::kPolicy));
+  EXPECT_EQ(fake_os_integration_manager().num_create_shortcuts_calls(), 1u);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+  }
+}
+
+TEST_F(InstallPlaceholderCommandTest, InstallPlaceholderWithOverrideIconUrl) {
+  ExternalInstallOptions options(kInstallUrl, mojom::UserDisplayMode::kBrowser,
+                                 ExternalInstallSource::kExternalPolicy);
+  const GURL icon_url("https://example.com/test.png");
+  options.override_icon_url = icon_url;
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+
+  auto data_retriever =
+      std::make_unique<testing::StrictMock<MockDataRetriever>>();
+
+  bool skip_page_favicons = true;
+  SkBitmap bitmap;
+  std::vector<gfx::Size> icon_sizes(1, gfx::Size(kIconSize, kIconSize));
+  bitmap.allocN32Pixels(kIconSize, kIconSize);
+  bitmap.eraseColor(SK_ColorRED);
+  IconsMap icons = {{icon_url, {bitmap}}};
+  DownloadedIconsHttpResults http_result = {
+      {icon_url, net::HttpStatusCode::HTTP_OK}};
+  EXPECT_CALL(*data_retriever,
+              GetIcons(testing::_, testing::ElementsAre(icon_url),
+                       skip_page_favicons, base::test::IsNotNullCallback()))
+      .WillOnce(base::test::RunOnceCallback<3>(
+          IconsDownloadedResult::kCompleted, std::move(icons), http_result));
+
+  auto command = std::make_unique<InstallPlaceholderCommand>(
+      options, future.GetCallback(), web_contents()->GetWeakPtr(),
+      std::move(data_retriever));
+  provider()->command_manager().ScheduleCommand(std::move(command));
+
+  EXPECT_EQ(future.Get<webapps::InstallResultCode>(),
+            webapps::InstallResultCode::kSuccessNewInstall);
+  const AppId app_id = future.Get<AppId>();
+  EXPECT_TRUE(provider()->registrar_unsafe().IsPlaceholderApp(
+      app_id, WebAppManagement::kPolicy));
+  EXPECT_EQ(fake_os_integration_manager().num_create_shortcuts_calls(), 1u);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+  }
+}
+
+}  // namespace
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.cc b/chrome/browser/web_applications/externally_managed_app_install_task.cc
index c3beb01..f0e7186 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.cc
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.cc
@@ -41,12 +41,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
 
-namespace {
-// How often we retry to download a custom icon, not counting the first attempt.
-const int MAX_ICON_DOWNLOAD_RETRIES = 1;
-const base::TimeDelta ICON_DOWNLOAD_RETRY_DELAY = base::Seconds(5);
-}  // namespace
-
 namespace web_app {
 
 ExternallyManagedAppInstallTask::ExternallyManagedAppInstallTask(
@@ -269,110 +263,12 @@
     return;
   }
 
-  if (install_options_.override_icon_url) {
-    FetchCustomIcon(install_options_.override_icon_url.value(), web_contents,
-                    MAX_ICON_DOWNLOAD_RETRIES, std::move(callback));
-    return;
-  }
-
-  FinalizePlaceholderInstall(std::move(callback), absl::nullopt);
-}
-
-void ExternallyManagedAppInstallTask::FetchCustomIcon(
-    const GURL& url,
-    content::WebContents* web_contents,
-    int retries_left,
-    ResultCallback callback) {
-  web_contents->DownloadImage(
-      url,
-      /*is_favicon, whether to not sent/accept cookies*/ true, gfx::Size(),
-      /*max_bitmap_size, 0=unlimited*/ 0,
-      /*bypass_cache*/ false,
-      base::BindOnce(&ExternallyManagedAppInstallTask::OnCustomIconFetched,
-                     weak_ptr_factory_.GetWeakPtr(), retries_left, web_contents,
-                     std::move(callback)));
-}
-
-void ExternallyManagedAppInstallTask::OnCustomIconFetched(
-    int retries_left,
-    content::WebContents* web_contents,
-    ResultCallback callback,
-    int id,
-    int http_status_code,
-    const GURL& image_url,
-    const std::vector<SkBitmap>& bitmaps,
-    const std::vector<gfx::Size>& sizes) {
-  if (bitmaps.size() > 0) {
-    // Download succeeded.
-    FinalizePlaceholderInstall(std::move(callback), bitmaps);
-    return;
-  }
-  if (retries_left <= 0) {
-    // Download failed.
-    FinalizePlaceholderInstall(std::move(callback), absl::nullopt);
-    return;
-  }
-  // Retry download.
-  base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
-      FROM_HERE,
-      base::BindOnce(&ExternallyManagedAppInstallTask::FetchCustomIcon,
-                     weak_ptr_factory_.GetWeakPtr(), image_url, web_contents,
-                     retries_left - 1, std::move(callback)),
-      ICON_DOWNLOAD_RETRY_DELAY);
-}
-
-void ExternallyManagedAppInstallTask::FinalizePlaceholderInstall(
-    ResultCallback callback,
-    absl::optional<std::reference_wrapper<const std::vector<SkBitmap>>>
-        bitmaps) {
-  WebAppInstallInfo web_app_info;
-
-#if defined(CHROMEOS)
-  web_app_info.title =
-      install_options_.override_name
-          ? base::UTF8ToUTF16(install_options_.override_name.value())
-          : install_options_.fallback_app_name
-                ? base::UTF8ToUTF16(install_options_.fallback_app_name.value())
-                : base::UTF8ToUTF16(install_options_.install_url.spec());
-
-  if (bitmaps) {
-    IconsMap icons_map;
-    icons_map.emplace(GURL(install_options_.override_icon_url.value()),
-                      bitmaps.value());
-    PopulateProductIcons(&web_app_info, &icons_map);
-  }
-
-#else   // defined(CHROMEOS)
-  web_app_info.title =
-      install_options_.fallback_app_name
-          ? base::UTF8ToUTF16(install_options_.fallback_app_name.value())
-          : base::UTF8ToUTF16(install_options_.install_url.spec());
-#endif  // defined(CHROMEOS)
-
-  web_app_info.start_url = install_options_.install_url;
-  web_app_info.install_url = install_options_.install_url;
-
-  web_app_info.user_display_mode = install_options_.user_display_mode;
-
-  WebAppInstallFinalizer::FinalizeOptions options(
-      ConvertExternalInstallSourceToInstallSource(
-          install_options_.install_source));
-  // Overwrite fields if we are doing a forced reinstall, because some
-  // values (custom name or icon) might have changed.
-  options.overwrite_existing_manifest_fields = install_options_.force_reinstall;
-
-  options.add_to_applications_menu = install_options_.add_to_applications_menu;
-  options.add_to_desktop = install_options_.add_to_desktop;
-  options.add_to_quick_launch_bar = install_options_.add_to_quick_launch_bar;
-
-  web_app_info.is_placeholder = true;
-
-  install_finalizer_->FinalizeInstall(
-      web_app_info, options,
-      base::BindOnce(
-          &ExternallyManagedAppInstallTask::OnWebAppInstalledWithHooksErrors,
-          weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/true,
-          /*offline_install=*/false, std::move(callback)));
+  command_scheduler_->InstallPlaceholder(
+      install_options_,
+      base::BindOnce(&ExternallyManagedAppInstallTask::OnWebAppInstalled,
+                     weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/true,
+                     /*offline_install=*/false, std::move(callback)),
+      web_contents->GetWeakPtr());
 }
 
 void ExternallyManagedAppInstallTask::OnWebAppInstalled(
@@ -381,18 +277,6 @@
     ResultCallback result_callback,
     const AppId& app_id,
     webapps::InstallResultCode code) {
-  OnWebAppInstalledWithHooksErrors(is_placeholder, offline_install,
-                                   std::move(result_callback), app_id, code,
-                                   OsHooksErrors());
-}
-
-void ExternallyManagedAppInstallTask::OnWebAppInstalledWithHooksErrors(
-    bool is_placeholder,
-    bool offline_install,
-    ResultCallback result_callback,
-    const AppId& app_id,
-    webapps::InstallResultCode code,
-    OsHooksErrors os_hooks_errors) {
   if (!IsNewInstall(code)) {
     std::move(result_callback)
         .Run(ExternallyManagedAppManager::InstallResult(code));
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.h b/chrome/browser/web_applications/externally_managed_app_install_task.h
index 5c09c28..223a7144 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.h
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.h
@@ -93,25 +93,6 @@
                           ResultCallback result_callback,
                           absl::optional<AppId> app_id);
 
-  void FetchCustomIcon(const GURL& url,
-                       content::WebContents* web_contents,
-                       int retries_left,
-                       ResultCallback callback);
-
-  void OnCustomIconFetched(int retries_left,
-                           content::WebContents* web_contents,
-                           ResultCallback callback,
-                           int id,
-                           int http_status_code,
-                           const GURL& image_url,
-                           const std::vector<SkBitmap>& bitmaps,
-                           const std::vector<gfx::Size>& sizes);
-
-  void FinalizePlaceholderInstall(
-      ResultCallback callback,
-      absl::optional<std::reference_wrapper<const std::vector<SkBitmap>>>
-          bitmaps);
-
   void UninstallPlaceholderApp(content::WebContents* web_contents,
                                ResultCallback result_callback,
                                absl::optional<AppId> app_id);
@@ -125,12 +106,6 @@
                          ResultCallback result_callback,
                          const AppId& app_id,
                          webapps::InstallResultCode code);
-  void OnWebAppInstalledWithHooksErrors(bool is_placeholder,
-                                        bool offline_install,
-                                        ResultCallback result_callback,
-                                        const AppId& app_id,
-                                        webapps::InstallResultCode code,
-                                        OsHooksErrors os_hooks_errors);
   void TryAppInfoFactoryOnFailure(
       ResultCallback result_callback,
       ExternallyManagedAppManager::InstallResult result);
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.cc b/chrome/browser/web_applications/web_app_command_scheduler.cc
index b81cf4c..4037efbd 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.cc
+++ b/chrome/browser/web_applications/web_app_command_scheduler.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/web_applications/commands/install_app_locally_command.h"
 #include "chrome/browser/web_applications/commands/install_from_info_command.h"
 #include "chrome/browser/web_applications/commands/install_from_sync_command.h"
+#include "chrome/browser/web_applications/commands/install_placeholder_command.h"
 #include "chrome/browser/web_applications/commands/manifest_update_data_fetch_command.h"
 #include "chrome/browser/web_applications/commands/manifest_update_finalize_command.h"
 #include "chrome/browser/web_applications/commands/os_integration_synchronize_command.h"
@@ -159,6 +160,24 @@
           std::move(data_retriever)));
 }
 
+void WebAppCommandScheduler::InstallPlaceholder(
+    const ExternalInstallOptions& install_options,
+    OnceInstallCallback callback,
+    base::WeakPtr<content::WebContents> web_contents) {
+  if (IsShuttingDown()) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), AppId(),
+                                  webapps::InstallResultCode::
+                                      kCancelledOnWebAppProviderShuttingDown));
+    return;
+  }
+
+  provider_->command_manager().ScheduleCommand(
+      std::make_unique<InstallPlaceholderCommand>(
+          install_options, std::move(callback), web_contents,
+          std::make_unique<WebAppDataRetriever>()));
+}
+
 void WebAppCommandScheduler::PersistFileHandlersUserChoice(
     const AppId& app_id,
     bool allowed,
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.h b/chrome/browser/web_applications/web_app_command_scheduler.h
index 225c174..57b2fc3d 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.h
+++ b/chrome/browser/web_applications/web_app_command_scheduler.h
@@ -85,13 +85,19 @@
       OnceInstallCallback install_callback,
       const WebAppInstallParams& install_params);
 
-  // Install web apps managed by `ExternallyInstalledAppsManager`.
+  // Install web apps managed by `ExternallyManagedAppManager`.
   void InstallExternallyManagedApp(
       const ExternalInstallOptions& external_install_options,
       OnceInstallCallback callback,
       base::WeakPtr<content::WebContents> contents,
       std::unique_ptr<WebAppDataRetriever> data_retriever);
 
+  // Install a placeholder app, this is used during externally managed install
+  // flow when url load fails.
+  void InstallPlaceholder(const ExternalInstallOptions& install_options,
+                          OnceInstallCallback callback,
+                          base::WeakPtr<content::WebContents> web_contents);
+
   void PersistFileHandlersUserChoice(const AppId& app_id,
                                      bool allowed,
                                      base::OnceClosure callback);
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index ce00940..21284b4f 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1672855058-73b4b6b55cddd9be774573d3b30eb6fad51dc68b.profdata
+chrome-linux-main-1672897988-86407c85ec111363be130e082b41ba1d1df37f9c.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index f4b4ae3..157557b 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1672855058-17ae3f6a67b0615e9c788d63fd3ab82e3fff6168.profdata
+chrome-mac-arm-main-1672897988-7cf3f66a5a22353b2a74c703f3435d6b47fe5eaa.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index ac0ab9a..c41008ff 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1672855058-a33ac3ea4ff5a456f12437ad8eddcafb050b74bd.profdata
+chrome-mac-main-1672876610-974d091b3bf7dd857f31b5522458c75d4bd89bf1.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 5f86480..738bcb3 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1672855058-1b8a6bf57738b2b9a3f8a89ca50fde02bf6af581.profdata
+chrome-win32-main-1672887546-e26006804449950336a5e379867479750ac9b1ff.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 9097e41..1b0a0a2 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1672855058-7b17cc3642a176b312e8c9b59c1c4159a711ab77.profdata
+chrome-win64-main-1672876610-fd0f1c9ea385065c13479bfebade47409c97c352.profdata
diff --git a/chrome/chrome_cleaner/test/cleaner_test.cc b/chrome/chrome_cleaner/test/cleaner_test.cc
index a61c626..601c2678 100644
--- a/chrome/chrome_cleaner/test/cleaner_test.cc
+++ b/chrome/chrome_cleaner/test/cleaner_test.cc
@@ -22,6 +22,7 @@
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
+#include "base/win/windows_version.h"
 #include "chrome/chrome_cleaner/buildflags.h"
 #include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
 #include "chrome/chrome_cleaner/ipc/chrome_prompt_test_util.h"
@@ -549,6 +550,13 @@
 }
 
 TEST_P(CleanerTest, NoUnsanitizedPaths) {
+  // Fails on Windows7/8/8.1
+  // TODO(crbug/1405033): This is temporary while we disable these tests in
+  // pre-M110 branches.
+  if (base::win::GetVersion() <= base::win::Version::WIN8_1) {
+    return;
+  }
+
   CreateRemovableUwS();
 
   base::CommandLine command_line = BuildCommandLine(kCleanerExecutable);
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_gif.js b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_gif.js
index 290c486..b577638 100644
--- a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_gif.js
+++ b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_gif.js
@@ -9,7 +9,8 @@
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertFalse, assertTrue} from 'chrome://webui-test/chromeos/chai_assert.js';
 
-import {deepQuerySelector, timeout, waitForCondition} from './emoji_picker_test_util.js';
+import {deepQuerySelector, waitForCondition} from './emoji_picker_test_util.js';
+import {TestEmojiPickerApiProxyImpl} from './test_emoji_picker_api_proxy.js';
 
 const ACTIVE_CATEGORY_BUTTON = 'category-button-active';
 
@@ -36,6 +37,8 @@
       document.body.innerHTML = '';
       window.localStorage.clear();
 
+      EmojiPickerApiProxyImpl.setInstance(new TestEmojiPickerApiProxyImpl());
+
       // Set default incognito state to False.
       EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
           new Promise((resolve) => resolve({incognito: false}));
@@ -47,7 +50,7 @@
           ],
           'emoticon': ['/emoticon_test_ordering.json'],
           'symbol': ['/symbol_test_ordering.json'],
-          'gif': ['/gif_test_ordering.json'],
+          'gif': [],
         },
       });
 
@@ -105,13 +108,14 @@
                   .map(item => item.shadowRoot.querySelector('cr-icon-button'));
           const categoryButton = allCategoryButtons[categoryIndex];
           categoryButton.click();
-          waitForCondition(
-              () => isCategoryButtonActive(categoryButton) &&
-                  allCategoryButtons.every(
-                      (categoryButtonItem, index) =>
-                          (index === categoryIndex ||
-                           isCategoryButtonActive(categoryButtonItem))),
+          await waitForCondition(
+              () => isCategoryButtonActive(categoryButton),
               'gif section failed to be active', 5000);
+          allCategoryButtons.forEach((categoryButtonItem, index) => {
+            if (index !== categoryIndex) {
+              assertFalse(isCategoryButtonActive(categoryButtonItem));
+            }
+          });
         });
   });
 }
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/test_emoji_picker_api_proxy.js b/chrome/test/data/webui/chromeos/emoji_picker/test_emoji_picker_api_proxy.js
new file mode 100644
index 0000000..3c16b44
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/emoji_picker/test_emoji_picker_api_proxy.js
@@ -0,0 +1,59 @@
+// 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.
+
+import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
+
+export class TestEmojiPickerApiProxyImpl extends EmojiPickerApiProxyImpl {
+  constructor() {
+    super();
+    this.gifs = {
+      next: '',
+      results: [
+        {
+          url: {
+            gif:
+                'https://media.tenor.com/TSzcha4Ohi0AAAAC/youre-a-star-star.gif',
+            gifpreview:
+                'https://media.tenor.com/TSzcha4Ohi0AAAAd/youre-a-star-star.gif',
+          },
+          previewDims: {
+            width: 640,
+            height: 640,
+          },
+          contentDescription: 'Youre A Star Star GIF',
+        },
+      ],
+    };
+  }
+
+  getCategories() {
+    return new Promise((resolve) => {
+      resolve({
+        categories: [
+          {name: '#EXCITED'},
+          {name: '#ANGRY'},
+          {name: '#CRY'},
+          {name: '#CHILL OUT'},
+          {name: '#KISS'},
+        ],
+      });
+    });
+  }
+
+  getFeaturedGifs(pos) {
+    return new Promise((resolve) => {
+      resolve({
+        featured: this.gifs,
+      });
+    });
+  }
+
+  searchGifs(query, pos) {
+    return new Promise((resolve) => {
+      resolve({
+        gifs: this.gifs,
+      });
+    });
+  }
+}
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
index 48aa433..5a10042 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
@@ -5,7 +5,7 @@
 import 'chrome://webui-test/mojo_webui_test_support.js';
 
 import {AcceleratorLookupManager} from 'chrome://shortcut-customization/js/accelerator_lookup_manager.js';
-import {fakeAcceleratorConfig, fakeLayoutInfo} from 'chrome://shortcut-customization/js/fake_data.js';
+import {fakeAcceleratorConfig, fakeAmbientConfig, fakeLayoutInfo} from 'chrome://shortcut-customization/js/fake_data.js';
 import {FakeShortcutProvider} from 'chrome://shortcut-customization/js/fake_shortcut_provider.js';
 import {Accelerator, AcceleratorCategory, AcceleratorSource, AcceleratorState, Modifier, MojoAccelerator, MojoAcceleratorInfo, StandardAcceleratorInfo} from 'chrome://shortcut-customization/js/shortcut_types.js';
 import {areAcceleratorsEqual, createEmptyAccelInfoFromAccel} from 'chrome://shortcut-customization/js/shortcut_utils.js';
@@ -84,7 +84,7 @@
         }
         for (const [action, configAccelInfoArr] of Object.entries(accelMap)) {
           const managerAccelInfoArr =
-              getManager().getAcceleratorInfos(source, action);
+              getManager().getStandardAcceleratorInfos(source, action);
           // The AcceleratorLookupManager processes the MojoAcceleratorConfig
           // into an AcceleratorConfig. Since the Mojo types (MojoAccelerator,
           // MojoAcceleratorInfo) have different properties from the non-Mojo
@@ -192,7 +192,7 @@
           createEmptyAccelInfoFromAccel(expectedNewAccel));
 
       // Check that the accelerator got updated in the lookup.
-      let lookup = getManager().getAcceleratorInfos(
+      let lookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, expectedAction);
       // Replacing a default shortcut should not remove the default. Expect
       // a new accelerator to be added instead.
@@ -217,7 +217,7 @@
           createEmptyAccelInfoFromAccel(expectedNewDefaultAccel));
 
       // Check that the accelerator got updated in the lookup.
-      lookup = getManager().getAcceleratorInfos(
+      lookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, expectedAction);
       // Expect only one accelerator since the previous accelerator has been
       // removed but the default accelerator has been re-enabled.
@@ -254,7 +254,7 @@
           createEmptyAccelInfoFromAccel(overridenAccel));
 
       // Verify that the New Desk shortcut now has the ALT + ']' accelerator.
-      const newDeskLookup = getManager().getAcceleratorInfos(
+      const newDeskLookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, newDeskAction);
       assertEquals(2, newDeskLookup.length);
       assertTrue(areAcceleratorsEqual(
@@ -263,7 +263,7 @@
 
       // There should still be 1 accelerator for snapWindowRight, but the
       // default should be disabled.
-      const snapWindowRightLookup = getManager().getAcceleratorInfos(
+      const snapWindowRightLookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, snapWindowRightAction);
       assertEquals(1, snapWindowRightLookup.length);
       assertEquals(
@@ -296,7 +296,7 @@
           createEmptyAccelInfoFromAccel(expectedNewAccel));
 
       // Check that the accelerator got updated in the lookup.
-      const lookup = getManager().getAcceleratorInfos(
+      const lookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, expectedAction);
       assertEquals(2, lookup.length);
       assertTrue(areAcceleratorsEqual(
@@ -330,7 +330,7 @@
           createEmptyAccelInfoFromAccel(overridenAccel));
 
       // Verify that the New Desk shortcut now has the ALT + ']' accelerator.
-      const newDeskLookup = getManager().getAcceleratorInfos(
+      const newDeskLookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, newDeskAction);
       assertEquals(2, newDeskLookup.length);
       assertTrue(areAcceleratorsEqual(
@@ -339,7 +339,7 @@
 
       // Replacing a default accelerator should not remove it but rather disable
       // it.
-      const snapWindowRightLookup = getManager().getAcceleratorInfos(
+      const snapWindowRightLookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, snapWindowRightAction);
       assertEquals(1, snapWindowRightLookup.length);
       assertEquals(
@@ -358,7 +358,7 @@
       const expectedAction = 1;
 
       // Initially there is only one accelerator for Snap Window Right.
-      const lookup = getManager().getAcceleratorInfos(
+      const lookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, expectedAction);
       assertEquals(1, lookup.length);
 
@@ -390,7 +390,7 @@
       const expectedAction = 1;
 
       // Initially there is only one accelerator for Snap Window Right.
-      const lookup = getManager().getAcceleratorInfos(
+      const lookup = getManager().getStandardAcceleratorInfos(
           AcceleratorSource.kAsh, expectedAction);
       assertEquals(1, lookup.length);
 
@@ -429,4 +429,25 @@
           getManager().getAcceleratorIdFromReverseLookup(removedAccelerator));
     });
   });
+
+  test('AcceleratorsAddedToCorrectLookupMap', () => {
+    getProvider().setFakeAcceleratorConfig(fakeAmbientConfig);
+    return getProvider().getAccelerators().then((result) => {
+      assertDeepEquals(fakeAmbientConfig, result.config);
+
+      getManager().setAcceleratorLookup(result.config);
+      // New tab accelerator from kAmbient[0]!.
+      const expectedNewTabAction = 0;
+      // Cycle tabs accelerator from kAmbient[1]!.
+      const expectedCycleTabsAction = 1;
+
+      const standardLookup = getManager().getStandardAcceleratorInfos(
+          AcceleratorSource.kAmbient, expectedNewTabAction);
+      assertEquals(1, standardLookup.length);
+
+      const textLookup = getManager().getTextAcceleratorInfos(
+          AcceleratorSource.kAmbient, expectedCycleTabsAction);
+      assertEquals(1, textLookup.length);
+    });
+  });
 });
\ No newline at end of file
diff --git a/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.js b/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.js
index e668df1..4fb9bad 100644
--- a/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.js
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://os-settings/chromeos/lazy_load.js';
-
 import {PrinterType} from 'chrome://os-settings/chromeos/lazy_load.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
diff --git a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
index 0385fb3..ea30682 100644
--- a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://os-settings/chromeos/lazy_load.js';
-
 import {PrivacyHubBrowserProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js';
 import {DataAccessPolicyState, PeripheralDataAccessBrowserProxyImpl, Router, routes, SecureDnsMode} from 'chrome://os-settings/chromeos/os_settings.js';
 import {assert} from 'chrome://resources/ash/common/assert.js';
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index ec51362..6ce1d18 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-15301.0.0
\ No newline at end of file
+15303.0.0
\ No newline at end of file
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper.cc b/chromeos/ash/components/browser_context_helper/browser_context_helper.cc
index aa0e43c3..39744d5 100644
--- a/chromeos/ash/components/browser_context_helper/browser_context_helper.cc
+++ b/chromeos/ash/components/browser_context_helper/browser_context_helper.cc
@@ -114,6 +114,25 @@
   return delegate_->GetUserDataDir()->Append(kSigninBrowserContextBaseName);
 }
 
+content::BrowserContext* BrowserContextHelper::GetSigninBrowserContext() {
+  content::BrowserContext* browser_context =
+      delegate_->GetBrowserContextByPath(GetSigninBrowserContextPath());
+  if (!browser_context) {
+    return nullptr;
+  }
+  return delegate_->GetOrCreatePrimaryOTRBrowserContext(browser_context);
+}
+
+content::BrowserContext*
+BrowserContextHelper::DeprecatedGetOrCreateSigninBrowserContext() {
+  content::BrowserContext* browser_context =
+      delegate_->DeprecatedGetBrowserContext(GetSigninBrowserContextPath());
+  if (!browser_context) {
+    return nullptr;
+  }
+  return delegate_->GetOrCreatePrimaryOTRBrowserContext(browser_context);
+}
+
 base::FilePath BrowserContextHelper::GetLockScreenAppBrowserContextPath()
     const {
   return delegate_->GetUserDataDir()->Append(
@@ -124,4 +143,13 @@
   return delegate_->GetUserDataDir()->Append(kLockScreenBrowserContextBaseName);
 }
 
+content::BrowserContext* BrowserContextHelper::GetLockScreenBrowserContext() {
+  content::BrowserContext* browser_context =
+      delegate_->GetBrowserContextByPath(GetLockScreenBrowserContextPath());
+  if (!browser_context) {
+    return nullptr;
+  }
+  return delegate_->GetOrCreatePrimaryOTRBrowserContext(browser_context);
+}
+
 }  // namespace ash
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper.h b/chromeos/ash/components/browser_context_helper/browser_context_helper.h
index 5425971..b96cf95 100644
--- a/chromeos/ash/components/browser_context_helper/browser_context_helper.h
+++ b/chromeos/ash/components/browser_context_helper/browser_context_helper.h
@@ -42,6 +42,11 @@
     virtual content::BrowserContext* DeprecatedGetBrowserContext(
         const base::FilePath& path) = 0;
 
+    // Returns the primary off-the-record BrowserContext instance corresponding
+    // to the given `browser_context`. If there is not, creates the one.
+    virtual content::BrowserContext* GetOrCreatePrimaryOTRBrowserContext(
+        content::BrowserContext* browser_context) = 0;
+
     // Returns the path to the user data directory.
     // If the system is not initialized, returns nullptr (for unittests).
     virtual const base::FilePath* GetUserDataDir() = 0;
@@ -98,12 +103,25 @@
   // Returns the path of signin browser context.
   base::FilePath GetSigninBrowserContextPath() const;
 
+  // Returns signin browser context instance. If not yet created, returns
+  // nullptr. Note that returned instance is off-the-record one.
+  content::BrowserContext* GetSigninBrowserContext();
+
+  // DEPRECATED. Please use GetSinginBrowserContext() instead.
+  // Similar to GetSigninBrowserContext, but if not yet created,
+  // this loads the BrowserContext instance, instead of returning nullptr.
+  content::BrowserContext* DeprecatedGetOrCreateSigninBrowserContext();
+
   // Returns the path of lock-screen-app browser context.
   base::FilePath GetLockScreenAppBrowserContextPath() const;
 
   // Returns the path of lock-screen browser context.
   base::FilePath GetLockScreenBrowserContextPath() const;
 
+  // Returns lock-screen browser context instance. If not yet created,
+  // returns nullptr. Note that returned instance is off-the-record one.
+  content::BrowserContext* GetLockScreenBrowserContext();
+
  private:
   // This is only for graceful migration.
   // TODO(crbug.com/1325210): Remove this when migration is done.
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc b/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc
index 310061e..98c2f87 100644
--- a/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc
+++ b/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc
@@ -14,19 +14,60 @@
 
 class FakeBrowserContextHelperDelegate : public BrowserContextHelper::Delegate {
  public:
+  FakeBrowserContextHelperDelegate() {
+    CHECK(user_data_dir_.CreateUniqueTempDir());
+  }
+
+  content::BrowserContext* CreateBrowserContext(const base::FilePath& path,
+                                                bool is_off_the_record) {
+    auto browser_context = std::make_unique<content::TestBrowserContext>(path);
+    browser_context->set_is_off_the_record(is_off_the_record);
+    auto* browser_context_ptr = browser_context.get();
+    browser_context_list_.push_back(std::move(browser_context));
+    return browser_context_ptr;
+  }
+
+  // BrowserContextHelper::Delegate overrides.
   content::BrowserContext* GetBrowserContextByPath(
       const base::FilePath& path) override {
+    for (auto& candidate : browser_context_list_) {
+      if (candidate->GetPath() == path && !candidate->IsOffTheRecord()) {
+        return candidate.get();
+      }
+    }
     return nullptr;
   }
+
   content::BrowserContext* DeprecatedGetBrowserContext(
       const base::FilePath& path) override {
-    return nullptr;
+    auto* browser_context = GetBrowserContextByPath(path);
+    if (browser_context) {
+      return nullptr;
+    }
+
+    return CreateBrowserContext(path, /*is_off_the_record=*/false);
   }
 
-  const base::FilePath* GetUserDataDir() override { return &user_data_dir_; }
+  content::BrowserContext* GetOrCreatePrimaryOTRBrowserContext(
+      content::BrowserContext* browser_context) override {
+    const auto& path = browser_context->GetPath();
+    for (auto& candidate : browser_context_list_) {
+      if (candidate.get() != browser_context && candidate->GetPath() == path &&
+          candidate->IsOffTheRecord()) {
+        return candidate.get();
+      }
+    }
+    return CreateBrowserContext(path, /*is_off_the_record=*/true);
+  }
+
+  const base::FilePath* GetUserDataDir() override {
+    return &user_data_dir_.GetPath();
+  }
 
  private:
-  base::FilePath user_data_dir_{"user_data_dir"};
+  base::ScopedTempDir user_data_dir_;
+  std::vector<std::unique_ptr<content::TestBrowserContext>>
+      browser_context_list_;
 };
 
 class BrowserContextHelperTest : public testing::Test {
@@ -91,16 +132,76 @@
 }
 
 TEST_F(BrowserContextHelperTest, GetBrowserContextPathByUserIdHash) {
-  BrowserContextHelper helper(
-      std::make_unique<FakeBrowserContextHelperDelegate>());
+  auto delegate = std::make_unique<FakeBrowserContextHelperDelegate>();
+  auto* delegate_ptr = delegate.get();
+  BrowserContextHelper helper(std::move(delegate));
+
   // u- prefix is expected. See GetUserBrowserContextDirName for details.
-  EXPECT_EQ(base::FilePath("user_data_dir/u-0123456789"),
+  EXPECT_EQ(delegate_ptr->GetUserDataDir()->Append("u-0123456789"),
             helper.GetBrowserContextPathByUserIdHash("0123456789"));
   // Special use name case.
-  EXPECT_EQ(base::FilePath("user_data_dir/user"),
+  EXPECT_EQ(delegate_ptr->GetUserDataDir()->Append("user"),
             helper.GetBrowserContextPathByUserIdHash("user"));
-  EXPECT_EQ(base::FilePath("user_data_dir/test-user"),
+  EXPECT_EQ(delegate_ptr->GetUserDataDir()->Append("test-user"),
             helper.GetBrowserContextPathByUserIdHash("test-user"));
 }
 
+TEST_F(BrowserContextHelperTest, GetSigninBrowserContext) {
+  auto delegate = std::make_unique<FakeBrowserContextHelperDelegate>();
+  auto* delegate_ptr = delegate.get();
+  BrowserContextHelper helper(std::move(delegate));
+
+  // If not yet loaded, GetSigninBrowserContext() should return nullptr.
+  EXPECT_FALSE(helper.GetSigninBrowserContext());
+
+  // Load the signin browser context.
+  delegate_ptr->CreateBrowserContext(
+      delegate_ptr->GetUserDataDir()->Append(
+          BrowserContextHelper::kSigninBrowserContextBaseName),
+      /*is_off_the_record=*/false);
+
+  // Then it should start returning the instance.
+  auto* signin_browser_context = helper.GetSigninBrowserContext();
+  ASSERT_TRUE(signin_browser_context);
+  EXPECT_EQ(BrowserContextHelper::kSigninBrowserContextBaseName,
+            signin_browser_context->GetPath().BaseName().value());
+  EXPECT_TRUE(signin_browser_context->IsOffTheRecord());
+}
+
+TEST_F(BrowserContextHelperTest, DeprecatedGetOrCreateSigninBrowserContext) {
+  BrowserContextHelper helper(
+      std::make_unique<FakeBrowserContextHelperDelegate>());
+
+  // DeprecatedGetOrCreateSigninBrowserContext() should create the instance,
+  // if it is not yet.
+  auto* signin_browser_context =
+      helper.DeprecatedGetOrCreateSigninBrowserContext();
+  ASSERT_TRUE(signin_browser_context);
+  // Other than that, it should work in the same way with
+  // GetSigninBrowserContext().
+  EXPECT_EQ(helper.GetSigninBrowserContext(), signin_browser_context);
+}
+
+TEST_F(BrowserContextHelperTest, GetLockScreenBrowserContext) {
+  auto delegate = std::make_unique<FakeBrowserContextHelperDelegate>();
+  auto* delegate_ptr = delegate.get();
+  BrowserContextHelper helper(std::move(delegate));
+
+  // If not yet loaded, GetLockScreenBrowserContext() should return nullptr.
+  EXPECT_FALSE(helper.GetLockScreenBrowserContext());
+
+  // Load the lock screen browser context.
+  delegate_ptr->CreateBrowserContext(
+      delegate_ptr->GetUserDataDir()->Append(
+          BrowserContextHelper::kLockScreenBrowserContextBaseName),
+      /*is_off_the_record=*/false);
+
+  // Then it should start returning the instance.
+  auto* lock_screen_browser_context = helper.GetLockScreenBrowserContext();
+  ASSERT_TRUE(lock_screen_browser_context);
+  EXPECT_EQ(BrowserContextHelper::kLockScreenBrowserContextBaseName,
+            lock_screen_browser_context->GetPath().BaseName().value());
+  EXPECT_TRUE(lock_screen_browser_context->IsOffTheRecord());
+}
+
 }  // namespace ash
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
index fa059068..5a3de27 100644
--- a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
+++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
@@ -124,6 +124,22 @@
              << ")";
 }
 
+std::ostream& operator<<(std::ostream& out, Quoter<mojom::FileChange::Type> q) {
+  using Type = mojom::FileChange::Type;
+  switch (q.value) {
+#define PRINT(s)   \
+  case Type::k##s: \
+    return out << #s;
+    PRINT(Create)
+    PRINT(Delete)
+    PRINT(Modify)
+#undef PRINT
+  }
+
+  return out << "FileChange::Type("
+             << static_cast<std::underlying_type_t<Type>>(q.value) << ")";
+}
+
 std::ostream& operator<<(std::ostream& out, Quoter<mojom::FileMetadata> q) {
   const mojom::FileMetadata& md = q.value;
   return out << "{type: " << Quote(md.type)
@@ -142,6 +158,13 @@
              << ", bytes_to_transfer: " << e.bytes_to_transfer << "}";
 }
 
+std::ostream& operator<<(std::ostream& out, Quoter<mojom::FileChange> q) {
+  const mojom::FileChange& change = q.value;
+  return out << "{path: " << Quote(change.path)
+             << ", type: " << Quote(change.type)
+             << ", stable_id: " << change.stable_id << "}";
+}
+
 constexpr int64_t kAverageHostedFileSizeInBytes = 7800;
 
 bool CanPinItem(const mojom::FileMetadata& metadata,
@@ -212,7 +235,6 @@
     PRINT(CannotRetrieveSearchResults)
     PRINT(CannotPinItem)
     PRINT(NotEnoughSpace)
-    PRINT(SearchQueryNotBound)
 #undef PRINT
   }
 
@@ -267,30 +289,29 @@
 
 int64_t DriveFsPinManager::InProgressSyncingItems::RemoveItem(
     const std::string& path,
-    const int64_t total_bytes) {
+    const int64_t bytes_transferred) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_GE(total_bytes, 0) << " for " << Quote(path);
+  DCHECK_GE(bytes_transferred, 0) << " for " << Quote(path);
 
-  const auto it = in_progress_items_.find(path);
-  if (it == in_progress_items_.end()) {
-    // TODO(b/261530520): Items can end up in this flow when a removal is
-    // attempted on an item that wasn't tracked via an explicit pin operation.
-    // In this case, gracefully degrade by responding with the total bytes
-    // transferred. This should ideally fail as all syncing operations should be
-    // identified as they affect disk space.
-    VLOG(2) << "[InProgressSyncingItems] Cannot remove " << Quote(path);
+  const InProgressMap::node_type node = in_progress_items_.extract(path);
+  if (!node) {
+    VLOG(2) << "[InProgressSyncingItems] Ignored untracked " << Quote(path)
+            << " with size " << HumanReadableSize(bytes_transferred);
     return total_bytes_transferred_;
   }
 
-  DCHECK_EQ(it->first, path);
-  const Progress& progress = it->second;
-  LOG_IF(ERROR, progress.transferred > total_bytes)
+  DCHECK_EQ(node.key(), path);
+  const Progress& progress = node.mapped();
+  LOG_IF(ERROR, progress.transferred > bytes_transferred)
       << "[InProgressSyncingItems] Progress went backwards from "
       << HumanReadableSize(progress.transferred) << " to "
-      << HumanReadableSize(total_bytes) << " for " << Quote(path);
-  total_bytes_transferred_ += total_bytes - progress.transferred;
-  in_progress_items_.erase(it);
-  VLOG(3) << "[InProgressSyncingItems] Successfully removed " << Quote(path);
+      << HumanReadableSize(bytes_transferred) << " for " << Quote(path);
+  total_bytes_transferred_ += bytes_transferred - progress.transferred;
+  LOG_IF(ERROR, progress.total != 0 && progress.total != bytes_transferred)
+      << "[InProgressSyncingItems] Expected final progress "
+      << HumanReadableSize(progress.total) << " instead of "
+      << HumanReadableSize(bytes_transferred) << " for " << Quote(path);
+  VLOG(3) << "[InProgressSyncingItems] Stopped tracking " << Quote(path);
   return total_bytes_transferred_;
 }
 
@@ -469,11 +490,8 @@
     return Complete(SetupError::kNotEnoughSpace);
   }
 
-  if (!search_query_.is_bound()) {
-    return Complete(SetupError::kSearchQueryNotBound);
-  }
-
   NotifyProgress();
+  DCHECK(search_query_);
   search_query_->GetNextPage(
       base::BindOnce(&DriveFsPinManager::OnSearchResultForSizeCalculation,
                      weak_ptr_factory_.GetWeakPtr()));
@@ -569,12 +587,8 @@
     return;
   }
 
-  if (!search_query_.is_bound()) {
-    return Complete(SetupError::kSearchQueryNotBound);
-  }
-
-  VLOG(1) << "All items in current batch are already pinned";
   VLOG(1) << "Getting next batch of items...";
+  DCHECK(search_query_);
   search_query_->GetNextPage(
       base::BindOnce(&DriveFsPinManager::OnSearchResultsForPinning,
                      weak_ptr_factory_.GetWeakPtr()));
@@ -585,6 +599,10 @@
   if (status != drive::FILE_ERROR_OK) {
     LOG(ERROR) << "Cannot pin " << Quote(path) << ": " << status;
     state_.progress.error_count++;
+    syncing_items_.AsyncCall(&InProgressSyncingItems::RemoveItem)
+        .WithArgs(path, 0)
+        .Then(base::BindOnce(&DriveFsPinManager::ReportTotalBytesTransferred,
+                             weak_ptr_factory_.GetWeakPtr()));
     return;
   }
 
@@ -651,11 +669,9 @@
 }
 
 void DriveFsPinManager::MaybeStartSearch(size_t remaining_items) {
-  if (!search_query_.is_bound()) {
-    return Complete(SetupError::kSearchQueryNotBound);
-  }
-
   if (remaining_items == 0) {
+    VLOG(1) << "Getting next batch of items...";
+    DCHECK(search_query_);
     search_query_->GetNextPage(
         base::BindOnce(&DriveFsPinManager::OnSearchResultsForPinning,
                        weak_ptr_factory_.GetWeakPtr()));
@@ -664,7 +680,11 @@
 
 void DriveFsPinManager::OnUnmounted() {}
 void DriveFsPinManager::OnFilesChanged(
-    const std::vector<mojom::FileChange>& changes) {}
+    const std::vector<mojom::FileChange>& changes) {
+  for (const auto& change : changes) {
+    VLOG(2) << " Got OnFilesChanged event: " << Quote(change);
+  }
+}
 
 void DriveFsPinManager::OnError(const mojom::DriveError& error) {
   LOG(ERROR) << "DriveFS error " << error.type << " with " << Quote(error.path);
@@ -731,24 +751,30 @@
     const mojom::FileMetadataPtr metadata) {
   if (error != drive::FILE_ERROR_OK) {
     LOG(ERROR) << "Cannot get metadata of " << Quote(path) << ": " << error;
+    syncing_items_.AsyncCall(&InProgressSyncingItems::RemoveItem)
+        .WithArgs(path, 0)
+        .Then(base::BindOnce(&DriveFsPinManager::ReportTotalBytesTransferred,
+                             weak_ptr_factory_.GetWeakPtr()));
     return;
   }
 
   DCHECK(metadata);
   VLOG(2) << "path: " << Quote(path) << ", metadata: " << Quote(*metadata);
 
-  if (metadata->available_offline || metadata->size == 0) {
+  if (!metadata->pinned || metadata->available_offline || metadata->size == 0) {
     const int64_t file_size =
-        (metadata->type == mojom::FileMetadata::Type::kHosted)
+        metadata->type == mojom::FileMetadata::Type::kHosted
             ? kAverageHostedFileSizeInBytes
             : metadata->size;
 
+    VLOG_IF(2, !metadata->pinned)
+        << "Skipped " << Quote(path) << ": Not pinned";
     VLOG_IF(2, metadata->available_offline)
         << "Skipped " << Quote(path) << ": Already available offline";
     VLOG_IF(2, metadata->size == 0)
         << "Skipped " << Quote(path) << ": Empty file";
     syncing_items_.AsyncCall(&InProgressSyncingItems::RemoveItem)
-        .WithArgs(std::move(path), file_size)
+        .WithArgs(path, file_size)
         .Then(base::BindOnce(&DriveFsPinManager::ReportTotalBytesTransferred,
                              weak_ptr_factory_.GetWeakPtr()));
   }
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.h b/chromeos/ash/components/drivefs/drivefs_pin_manager.h
index 59df693..5df94c5 100644
--- a/chromeos/ash/components/drivefs/drivefs_pin_manager.h
+++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.h
@@ -51,7 +51,6 @@
   kCannotRetrieveSearchResults,
   kCannotPinItem,
   kNotEnoughSpace,
-  kSearchQueryNotBound,
 };
 
 COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_DRIVEFS)
@@ -186,12 +185,12 @@
     // Adds an item to the map.
     void AddItem(const std::string& path);
 
-    // Removes an item from the map, if the item doesn't exist ignores the
-    // removal. Returns the total bytes transferred on every removal.
-    int64_t RemoveItem(const std::string& path, int64_t total_bytes);
+    // Removes an item from the map. Does nothing if the item is not in the map.
+    // Updates and returns the total number of bytes transferred so far.
+    int64_t RemoveItem(const std::string& path, int64_t bytes_transferred);
 
     // Adds or updates the item keyed at `path` with the new progress bytes.
-    // Returns the total bytes transferred on every update.
+    // Updates and returns the total number of bytes transferred so far.
     int64_t UpdateItem(const std::string& path,
                        int64_t bytes_transferred,
                        int64_t bytes_to_transfer);
diff --git a/chromeos/ash/components/memory/memory.cc b/chromeos/ash/components/memory/memory.cc
index 4604eb7..7ed63ea 100644
--- a/chromeos/ash/components/memory/memory.cc
+++ b/chromeos/ash/components/memory/memory.cc
@@ -21,79 +21,6 @@
 
 namespace ash {
 
-BASE_FEATURE(kCrOSLockMainProgramText,
-             "CrOSLockMainProgramText",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-// The maximum number of bytes that the browser will attempt to lock.
-const base::FeatureParam<int> kCrOSLockMainProgramTextMaxSize{
-    &kCrOSLockMainProgramText, "CrOSLockMainProgramTextMaxSize", -1};
-
-namespace {
-
-int ParseElfHeaderAndMlockBinaryText(struct dl_phdr_info* info,
-                                     size_t size,
-                                     void* data) {
-  // From dl_iterate_phdr's man page: "The first object visited by callback is
-  // the main program.  For the main program, the dlpi_name field will be an
-  // empty string." Hence, no "is this the Chrome we're looking for?" checks are
-  // necessary.
-  for (int i = 0; i < info->dlpi_phnum; i++) {
-    if (info->dlpi_phdr[i].p_type == PT_LOAD &&
-        info->dlpi_phdr[i].p_flags == (PF_R | PF_X)) {
-      void* vaddr =
-          base::bit_cast<void*>(info->dlpi_addr + info->dlpi_phdr[i].p_vaddr);
-      size_t segsize = info->dlpi_phdr[i].p_filesz;
-
-      ssize_t max_lockable_size = kCrOSLockMainProgramTextMaxSize.Get();
-      if (max_lockable_size > -1) {
-        // Note mlock/mlock2 do not require a page multiple.
-        segsize = std::min(static_cast<ssize_t>(segsize), max_lockable_size);
-      }
-
-      PLOG_IF(ERROR, !MlockMapping(vaddr, segsize))
-          << "Unable to lock memory region " << vaddr;
-      return 1;
-    }
-  }
-
-  return -1;
-}
-
-// MlockAllText will attempt to lock the memory associated with the main
-// program.
-void MlockAllText() {
-  int res = dl_iterate_phdr(ParseElfHeaderAndMlockBinaryText, nullptr);
-  LOG_IF(ERROR, res == -1)
-      << "Unable to lock main program text unable to find entry.";
-}
-
-}  // namespace
-
-// MlockMapping will attempt to lock a mapping using the newer mlock2 (if
-// available on kernels 4.4+) with the MLOCK_ONFAULT flag, if the kernel does
-// not support it then it will fall back to mlock.
-bool MlockMapping(void* addr, size_t size) {
-#if defined(__NR_mlock2)
-  int res = mlock2(addr, size, MLOCK_ONFAULT);
-  if (res == 0) {
-    return true;
-  }
-
-  // If the kernel returns ENOSYS it doesn't support mlock2 (pre v4.4) so just
-  // fall back to mlock.
-  if (res == -1 && errno != ENOSYS) {
-    return false;
-  }
-#endif
-  return mlock(addr, size) == 0;
-}
-
-COMPONENT_EXPORT(ASH_MEMORY) void LockMainProgramText() {
-  if (base::FeatureList::IsEnabled(kCrOSLockMainProgramText)) {
-    MlockAllText();
-  }
-}
-
 COMPONENT_EXPORT(ASH_MEMORY) void UpdateMemoryParameters() {
   ConfigureSwap();
 }
diff --git a/chromeos/ash/components/memory/memory.h b/chromeos/ash/components/memory/memory.h
index 172fc989..92f77d062c 100644
--- a/chromeos/ash/components/memory/memory.h
+++ b/chromeos/ash/components/memory/memory.h
@@ -18,23 +18,6 @@
 
 namespace ash {
 
-// MlockMaping will attempt to mlock a mapping using the newer mlock2 syscall
-// if available using the MLOCK_ONFAULT option. This will allow pages to be
-// locked as they are faulted in. If the running kernel does not support
-// mlock2, it was added in kernel 4.4, it will fall back to mlock where it
-// will lock all pages immediately by faulting them in.
-COMPONENT_EXPORT(ASH_MEMORY) bool MlockMapping(void* addr, size_t length);
-
-// A feature which controls the locking the main program text.
-BASE_DECLARE_FEATURE(kCrOSLockMainProgramText);
-
-// The maximum number of bytes that the browser will attempt to lock, -1 will
-// disable the max size and is the default option.
-extern const base::FeatureParam<int> kCrOSLockMainProgramTextMaxSize;
-
-// Lock main program text segments fully.
-COMPONENT_EXPORT(ASH_MEMORY) void LockMainProgramText();
-
 // It should be called when some memory configuration is changed.
 COMPONENT_EXPORT(ASH_MEMORY) void UpdateMemoryParameters();
 
diff --git a/codelabs/BUILD.gn b/codelabs/BUILD.gn
index 882fc39c..8b1cd33 100644
--- a/codelabs/BUILD.gn
+++ b/codelabs/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/dcheck_always_on.gni")
+
 group("codelabs") {
   testonly = true
   deps = [
@@ -10,7 +12,15 @@
     ":codelab_hello_world",
     ":codelab_mojo",
     ":codelab_sleep",
+
+    # threading_and_scheduling examples:
+    ":codelab_multiple_threads",
+    ":codelab_single_task_queue",
+    ":codelab_task_queue_priorities",
   ]
+  if (is_debug || dcheck_always_on) {
+    deps += [ ":codelab_randomized_task_queues" ]
+  }
 }
 
 executable("codelab_hello_world") {
@@ -52,3 +62,25 @@
     "//mojo/public/cpp/base",
   ]
 }
+
+executable("codelab_single_task_queue") {
+  sources = [ "threading_and_scheduling/01-single-task-queue.cc" ]
+  deps = [ "//base" ]
+}
+
+executable("codelab_task_queue_priorities") {
+  sources = [ "threading_and_scheduling/02-task-queue-priorities.cc" ]
+  deps = [ "//base" ]
+}
+
+if (is_debug || dcheck_always_on) {
+  executable("codelab_randomized_task_queues") {
+    sources = [ "threading_and_scheduling/03-randomized-task-queues.cc" ]
+    deps = [ "//base" ]
+  }
+}
+
+executable("codelab_multiple_threads") {
+  sources = [ "threading_and_scheduling/04-multiple-threads.cc" ]
+  deps = [ "//base" ]
+}
diff --git a/codelabs/OWNERS b/codelabs/OWNERS
index aa911409..cf890cc 100644
--- a/codelabs/OWNERS
+++ b/codelabs/OWNERS
@@ -1,4 +1,6 @@
 *
 
-# Primary
+# For `cpp101/`
 asully@chromium.org
+# For examples outside of `cpp101/`
+dom@chromium.org
diff --git a/codelabs/README.md b/codelabs/README.md
index def37a73..d5ff5c2 100644
--- a/codelabs/README.md
+++ b/codelabs/README.md
@@ -3,6 +3,9 @@
 See the `cpp101/` directory for the Chromium C++ codelab,
 including example solutions.
 
+See the `threading_and_scheduling/` directory for more elaborate usages of the
+threading and scheduling primitives in Chromium.
+
 ## Motivation
 
 The goal of this codelab is to introduce new Chromium developers to both the
diff --git a/codelabs/threading_and_scheduling/01-single-task-queue.cc b/codelabs/threading_and_scheduling/01-single-task-queue.cc
new file mode 100644
index 0000000..c9c3ceab
--- /dev/null
+++ b/codelabs/threading_and_scheduling/01-single-task-queue.cc
@@ -0,0 +1,79 @@
+// 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 "base/logging.h"
+#include "base/message_loop/message_pump.h"
+#include "base/run_loop.h"
+#include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/sequence_manager/task_queue.h"
+
+// See the documentation below.
+enum class TaskType : unsigned char {
+  kMain = 1,
+};
+
+void RunTaskAndQuit(base::OnceClosure quit_closure) {
+  LOG(INFO) << "Whoah, we're doing a task! Now let's quit";
+  std::move(quit_closure).Run();
+}
+
+int main() {
+  base::PlatformThread::SetName("SchedulingDemoMain");
+
+  // Create MessagePump that drives the SequenceManager that gets bound to this
+  // thread further down. This pump's type is "default", which is a really
+  // simple kind of platform-agtnostic message pump that only has the ability to
+  // listen for tasks (possibly with delays) and run them; it can't, for
+  // example:
+  //   1.) Watch file descriptors or native sockets
+  //   2.) Listen to platform-specific UI events, such as WM_PAINT on Windows or
+  //       `NSEvent*`s on macOS.
+  std::unique_ptr<base::MessagePump> pump =
+      base::MessagePump::Create(base::MessagePumpType::DEFAULT);
+
+  // Create the thread's SequenceManager.
+  //
+  // What this really does is:
+  //   1.) Creates an unbound SequenceManager (the default)
+  //   2.) Immediately "binds" it to the current thread
+  // What (2) really means is that we invoke
+  // `SequenceManagerImpl::CompleteInitializationOnBoundThread()`, which sets
+  // the thread-local storage SequenceManager to `sequence_manager` below.
+  // That's important so that `RunLoop` objects that have no direct access to
+  // `sequence_manager` know which manager to tell to "run" later on.
+  std::unique_ptr<base::sequence_manager::SequenceManager> sequence_manager =
+      base::sequence_manager::CreateSequenceManagerOnCurrentThreadWithPump(
+          std::move(pump),
+          base::sequence_manager::SequenceManager::Settings::Builder().Build());
+
+  // Create a default TaskQueue that feeds into the SequenceManager. Inside a
+  // SequenceManager, TaskQueue is the basic unit of scheduling...
+  scoped_refptr<base::sequence_manager::TaskQueue> default_task_queue =
+      sequence_manager->CreateTaskQueue(base::sequence_manager::TaskQueue::Spec(
+          base::sequence_manager::QueueName::DEFAULT_TQ));
+
+  // ... and from a TaskQueue you can get an arbitrary number of TaskRunners,
+  // which actually let you post tasks to the underlying/internal queue.
+  //
+  // Why do we even have this distinction? Why even have multiple TaskRunners
+  // associated with the same underlying queue? Answer: this is for task
+  // attribution purposes, so you can query metrics to see which TaskRunners
+  // (used by different places in your code) are posting what kind of tasks
+  // and get other interesting information about them.
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner =
+      default_task_queue->CreateTaskRunner(static_cast<int>(TaskType::kMain));
+  sequence_manager->SetDefaultTaskRunner(task_runner);
+
+  // Now that this thread has a bound sequence manager set up, we can:
+  //   1.) Start posting tasks to its queues which are not yet being processed
+  //   2.) Start processing tasks from the queues by "running" the loop, which
+  //       runs the sequence manager's underlying message pump.
+  base::RunLoop run_loop;
+  task_runner->PostTask(
+      FROM_HERE, base::BindOnce(&RunTaskAndQuit, run_loop.QuitClosure()));
+  // This synchronously blocks (by running this thread's loop) until the quit
+  // closure is called.
+  run_loop.Run();
+  return 0;
+}
diff --git a/codelabs/threading_and_scheduling/02-task-queue-priorities.cc b/codelabs/threading_and_scheduling/02-task-queue-priorities.cc
new file mode 100644
index 0000000..f12a078
--- /dev/null
+++ b/codelabs/threading_and_scheduling/02-task-queue-priorities.cc
@@ -0,0 +1,92 @@
+// 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 "base/logging.h"
+#include "base/message_loop/message_pump.h"
+#include "base/rand_util.h"
+#include "base/run_loop.h"
+#include "base/strings/string_piece.h"
+#include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/sequence_manager/task_queue.h"
+
+enum class TaskType : unsigned char {
+  kSource1 = 1,
+  kSource2 = 2,
+};
+
+void Task(base::StringPiece tq, int task_number) {
+  if (tq == "A") {
+    LOG(INFO) << "TaskQueue(" << tq << "): " << task_number;
+  } else {
+    LOG(INFO) << "    TaskQueue(" << tq << "): " << task_number;
+  }
+}
+
+void QuitTask(base::OnceClosure quit_closure) {
+  LOG(INFO) << "Quittin' time!";
+  std::move(quit_closure).Run();
+}
+
+int main() {
+  base::PlatformThread::SetName("SchedulingDemoMain");
+
+  std::unique_ptr<base::MessagePump> pump =
+      base::MessagePump::Create(base::MessagePumpType::DEFAULT);
+
+  // Create the main thread's SequenceManager; it will choose which of the two
+  // below TaskQueues will be served at each spin of the loop, based on their
+  // priority.
+  std::unique_ptr<base::sequence_manager::SequenceManager> sequence_manager =
+      base::sequence_manager::CreateSequenceManagerOnCurrentThreadWithPump(
+          std::move(pump),
+          base::sequence_manager::SequenceManager::Settings::Builder().Build());
+
+  // Create two TaskQueues that feed into the main thread's SequenceManager,
+  // each with a different priority to demonstrate that TaskQueue is the
+  // principal unit of ordering, and that tasks across queues don't have to run
+  // in posting-order, while non-delayed tasks posted to the same queue are
+  // always run in FIFO order.
+  scoped_refptr<base::sequence_manager::TaskQueue> tq_a =
+      sequence_manager->CreateTaskQueue(base::sequence_manager::TaskQueue::Spec(
+          base::sequence_manager::QueueName::TEST_TQ));
+  tq_a->SetQueuePriority(
+      base::sequence_manager::TaskQueue::QueuePriority::kNormalPriority);
+  scoped_refptr<base::sequence_manager::TaskQueue> tq_b =
+      sequence_manager->CreateTaskQueue(base::sequence_manager::TaskQueue::Spec(
+          base::sequence_manager::QueueName::TEST2_TQ));
+  tq_b->SetQueuePriority(
+      base::sequence_manager::TaskQueue::QueuePriority::kHighPriority);
+
+  // Get TaskRunners for both TaskQueues.
+  scoped_refptr<base::SingleThreadTaskRunner> a_runner_1 =
+      tq_a->CreateTaskRunner(static_cast<int>(TaskType::kSource1));
+  sequence_manager->SetDefaultTaskRunner(a_runner_1);
+  scoped_refptr<base::SingleThreadTaskRunner> a_runner_2 =
+      tq_a->CreateTaskRunner(static_cast<int>(TaskType::kSource2));
+  scoped_refptr<base::SingleThreadTaskRunner> b_runner =
+      tq_b->CreateTaskRunner(static_cast<int>(TaskType::kSource2));
+
+  base::RunLoop run_loop;
+
+  // This example shows that the TaskRunner you choose to post a task with to a
+  // TaskQueue doesn't affect the ordering of the tasks in the queue. It is
+  // TaskQueue that is the principal unit of ordering, not TaskRunner; all tasks
+  // in a queue run in FIFO order with respect to each other, but tasks *across*
+  // queues are run in queue priority order. We post all of the tasks to `tq_a`
+  // before posting any to `tq_b`, but observe that `tq_b` tasks run first due
+  // to priority.
+  for (int i = 1; i <= 20;) {
+    a_runner_1->PostTask(FROM_HERE, base::BindOnce(&Task, "A", i++));
+    a_runner_2->PostTask(FROM_HERE, base::BindOnce(&Task, "A", i++));
+  }
+  for (int i = 1; i <= 20; ++i) {
+    b_runner->PostTask(FROM_HERE, base::BindOnce(&Task, "B", i));
+  }
+
+  a_runner_1->PostDelayedTask(FROM_HERE,
+                              base::BindOnce(&QuitTask, run_loop.QuitClosure()),
+                              base::Seconds(1));
+  run_loop.Run();
+  return 0;
+}
diff --git a/codelabs/threading_and_scheduling/03-randomized-task-queues.cc b/codelabs/threading_and_scheduling/03-randomized-task-queues.cc
new file mode 100644
index 0000000..1b73f7a
--- /dev/null
+++ b/codelabs/threading_and_scheduling/03-randomized-task-queues.cc
@@ -0,0 +1,80 @@
+// 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 "base/logging.h"
+#include "base/message_loop/message_pump.h"
+#include "base/rand_util.h"
+#include "base/run_loop.h"
+#include "base/strings/string_piece.h"
+#include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/sequence_manager/task_queue.h"
+
+enum class TaskType : unsigned char {
+  kSource1 = 1,
+};
+
+void Task(base::StringPiece tq, int task_number) {
+  if (tq == "A") {
+    LOG(INFO) << "TaskQueue(" << tq << "): " << task_number;
+  } else {
+    LOG(INFO) << "    TaskQueue(" << tq << "): " << task_number;
+  }
+}
+
+void QuitTask(base::OnceClosure quit_closure) {
+  LOG(INFO) << "Quittin' time!";
+  std::move(quit_closure).Run();
+}
+
+int main() {
+  base::PlatformThread::SetName("SchedulingDemoMain");
+
+  std::unique_ptr<base::MessagePump> pump =
+      base::MessagePump::Create(base::MessagePumpType::DEFAULT);
+
+  // Create the main thread's SequenceManager; it will choose at random which of
+  // the two below TaskQueues will be served at each spin of the loop, despite
+  // them being the same priority.
+  std::unique_ptr<base::sequence_manager::SequenceManager> sequence_manager =
+      base::sequence_manager::CreateSequenceManagerOnCurrentThreadWithPump(
+          std::move(pump),
+          base::sequence_manager::SequenceManager::Settings::Builder()
+              .SetRandomTaskSelectionSeed(base::RandUint64())
+              .Build());
+
+  // Create two same-priority TaskQueues that feed into the main thread's
+  // SequenceManager.
+  scoped_refptr<base::sequence_manager::TaskQueue> tq_a =
+      sequence_manager->CreateTaskQueue(base::sequence_manager::TaskQueue::Spec(
+          base::sequence_manager::QueueName::TEST_TQ));
+  scoped_refptr<base::sequence_manager::TaskQueue> tq_b =
+      sequence_manager->CreateTaskQueue(base::sequence_manager::TaskQueue::Spec(
+          base::sequence_manager::QueueName::TEST2_TQ));
+
+  // Get TaskRunners for both TaskQueues.
+  scoped_refptr<base::SingleThreadTaskRunner> a_runner_1 =
+      tq_a->CreateTaskRunner(static_cast<int>(TaskType::kSource1));
+  sequence_manager->SetDefaultTaskRunner(a_runner_1);
+  scoped_refptr<base::SingleThreadTaskRunner> b_runner =
+      tq_b->CreateTaskRunner(static_cast<int>(TaskType::kSource1));
+
+  base::RunLoop run_loop;
+
+  // Like the last example, this shows that TaskQueue is the principal unit of
+  // ordering. All non-delayed tasks posted to the same queue run in FIFO order,
+  // but tasks *across* queues in this case run in random order, as directed by
+  // the SequenceManager that multiplexes them.
+  for (int i = 1; i <= 20; ++i) {
+    a_runner_1->PostTask(FROM_HERE, base::BindOnce(&Task, "A", i));
+  }
+  for (int i = 0; i < 20; ++i) {
+    b_runner->PostTask(FROM_HERE, base::BindOnce(&Task, "B", i));
+  }
+
+  a_runner_1->PostDelayedTask(FROM_HERE,
+                              base::BindOnce(&QuitTask, run_loop.QuitClosure()),
+                              base::Seconds(1));
+  run_loop.Run();
+  return 0;
+}
diff --git a/codelabs/threading_and_scheduling/04-multiple-threads.cc b/codelabs/threading_and_scheduling/04-multiple-threads.cc
new file mode 100644
index 0000000..e2c7bf8
--- /dev/null
+++ b/codelabs/threading_and_scheduling/04-multiple-threads.cc
@@ -0,0 +1,122 @@
+// 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 "base/logging.h"
+#include "base/message_loop/message_pump.h"
+#include "base/run_loop.h"
+#include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/sequence_manager/sequence_manager_impl.h"  // For IOThreadDelegate.
+#include "base/task/sequence_manager/task_queue.h"
+#include "base/threading/thread.h"
+
+// For this example, these are global so that each task running on each thread
+// can easily grab the *other* thread's task runner to post continuation tasks
+// to.
+static scoped_refptr<base::SingleThreadTaskRunner> g_main_thread_task_runner;
+static scoped_refptr<base::SingleThreadTaskRunner> g_io_thread_task_runner;
+
+void RunOnIOThread();
+
+void RunOnUIThread() {
+  LOG(INFO) << "RunOnUIThread()";
+  g_io_thread_task_runner->PostDelayedTask(
+      FROM_HERE, base::BindOnce(&RunOnIOThread), base::Seconds(1));
+}
+
+void RunOnIOThread() {
+  LOG(INFO) << "RunOnIOThread()";
+  g_main_thread_task_runner->PostDelayedTask(
+      FROM_HERE, base::BindOnce(&RunOnUIThread), base::Seconds(1));
+}
+
+// In this example we're simulating Chromium's UI/IO thread architecture in a
+// simplified way. The `IOThreadDelegate` represents the physical "IO" thread
+// that each Chromium process has, running alongside the main thread. It is
+// similar to `content::BrowserIOThreadDelegate`, for example.
+class IOThreadDelegate : public base::Thread::Delegate {
+ public:
+  IOThreadDelegate() {
+    // Create an unbound SequenceManager{Impl}. It will be bound in
+    // `BindToCurrentThread()` on the new physical thread, once it starts
+    // running.
+    owned_sequence_manager_ =
+        base::sequence_manager::CreateUnboundSequenceManager();
+    task_queue_ = owned_sequence_manager_->CreateTaskQueue(
+        base::sequence_manager::TaskQueue::Spec(
+            base::sequence_manager::TaskQueue::Spec(
+                base::sequence_manager::QueueName::IO_DEFAULT_TQ)));
+    default_task_runner_ = task_queue_->task_runner();
+    owned_sequence_manager_->SetDefaultTaskRunner(default_task_runner_);
+    // Set the global TaskRunner-to-this-thread, so that the main thread can
+    // post tasks to the IO thread.
+    g_io_thread_task_runner = default_task_runner_;
+  }
+
+  // base::Thread::Delegate implementation.
+  // This is similar to i.e.,
+  // `content::BrowserIOThreadDelegate::BindToCurrentThread()`, and is the first
+  // function to run on the new physical thread.
+  void BindToCurrentThread(base::TimerSlack timer_slack) override {
+    owned_sequence_manager_->BindToMessagePump(
+        base::MessagePump::Create(base::MessagePumpType::IO));
+    owned_sequence_manager_->SetTimerSlack(timer_slack);
+    owned_sequence_manager_->SetDefaultTaskRunner(GetDefaultTaskRunner());
+  }
+  scoped_refptr<base::SingleThreadTaskRunner> GetDefaultTaskRunner() override {
+    return default_task_runner_;
+  }
+
+ private:
+  std::unique_ptr<base::sequence_manager::SequenceManager>
+      owned_sequence_manager_;
+  scoped_refptr<base::sequence_manager::TaskQueue> task_queue_;
+  scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
+};
+
+int main() {
+  base::PlatformThread::SetName("SchedulingDemoMain");
+
+  std::unique_ptr<base::MessagePump> pump =
+      base::MessagePump::Create(base::MessagePumpType::UI);
+
+  std::unique_ptr<base::sequence_manager::SequenceManager> sequence_manager =
+      base::sequence_manager::CreateSequenceManagerOnCurrentThreadWithPump(
+          std::move(pump));
+
+  // Create a default TaskQueue that feeds into the SequenceManager.
+  scoped_refptr<base::sequence_manager::TaskQueue> main_task_queue =
+      sequence_manager
+          ->CreateTaskQueueWithType<base::sequence_manager::TaskQueue>(
+              base::sequence_manager::TaskQueue::Spec(
+                  base::sequence_manager::TaskQueue::Spec(
+                      base::sequence_manager::QueueName::DEFAULT_TQ)));
+
+  // Get a default TaskRunner for the main (UI) thread.
+  scoped_refptr<base::SingleThreadTaskRunner> default_task_runner =
+      main_task_queue->task_runner();
+  sequence_manager->SetDefaultTaskRunner(default_task_runner);
+
+  // Set the global TaskRunner-to-this-thread, so that the IO thread can post
+  // tasks to the main thread.
+  g_main_thread_task_runner = default_task_runner;
+
+  // Create an IO thread to run alongside the main thread.
+  std::unique_ptr<IOThreadDelegate> delegate =
+      std::make_unique<IOThreadDelegate>();
+  base::Thread io_thread("IOThread");
+  base::Thread::Options options;
+  options.delegate = std::move(delegate);
+  if (!io_thread.StartWithOptions(std::move(options))) {
+    LOG(FATAL) << "The thread failed to start!";
+  }
+  // END create a new thread.
+
+  base::RunLoop run_loop;
+  g_main_thread_task_runner->PostTask(FROM_HERE,
+                                      base::BindOnce(&RunOnUIThread));
+  g_main_thread_task_runner->PostDelayedTask(FROM_HERE, run_loop.QuitClosure(),
+                                             base::Seconds(10));
+  run_loop.Run();
+  return 0;
+}
diff --git a/codelabs/threading_and_scheduling/README.md b/codelabs/threading_and_scheduling/README.md
new file mode 100644
index 0000000..82f6231e
--- /dev/null
+++ b/codelabs/threading_and_scheduling/README.md
@@ -0,0 +1,82 @@
+# Threading & scheduling
+
+This directory contains three examples of threading & primitives in Chromium's
+`//base` library that build off of the basic `cpp101` [threading and task runner
+introduction][1]. In particular, these examples aim to give more insight into
+how task scheduling works by introducing `TaskQueue` as the basic unit of
+scheduling, and showing how multiple `TaskQueue`s can interact within the same
+thread and across threads.
+
+Additionally, these examples show direct usage of some of the foundational
+scheduling primitives in `//base` as they would be used in any program, to
+demystify their usage and help illustrate how core pieces of Chromium work under
+the hood.
+
+These examples offer a deep dive into the threading & scheduling machinery that
+Chromium developers will rarely interact with directly. In practice, much of
+Chromium's threading & scheduling is exposed through things like
+`base::ThreadPool`, `base::SequencedTaskRunner::GetCurrentDefault()`, or
+`ExecutionContext::GetTaskRunner()` in Blink, etc.
+
+## 01-single-task-queue
+
+This first example is the simplest, but illustrates direct usage of the
+following task scheduling primitives:
+
+ - `SequenceManager(Impl)`
+ - `MessagePump`
+ - `TaskQueue` / `TaskRunner`
+ - `RunLoop`
+
+This example goes further than the ones in `cpp101/`, as those defer the setup
+of the main thread scheduling infra to `base::test::TaskEnvironment`, whereas
+this example shows how to manually use such infrastructure and customize it
+accordingly.
+
+## 02-task-queue-priorities
+
+This example shows how `TaskQueue`s allow a thread to multiplex many sources of
+tasks. This effectively means that each `TaskQueue` is a "sequence", allowing
+the same physical thread to host multiple sequences that can be scheduled
+independently. This is an inversion from the standard usage of "sequence", which
+often involves a sequential ordering of tasks that may opaquely span multiple
+physical threads.
+
+This example works by creating two `TaskQueue`s with different priorities to
+show that the ordering _across_ queues is not guaranteed, while the ordering of
+non-delayed tasks _within_ a queue — regardless of which `TaskRunner` is
+used to post the task — is always FIFO order.
+
+## 03-randomized-task-queues
+
+(Requires DCHECKs to be enabled to build. Either set `is_debug = true` or
+`dcheck_always_enabled = true` in your gn args).
+
+This example is similar to the previous one, however we schedule two
+identical-priority `TaskQueue`s independently from each other using a
+[randomized task selection seed option][2] exposed via the `SequenceManager`
+API. This shows that in our contrived example, ordering _across_ queues of the
+same priority is not guaranteed to be in FIFO task posting order, while the
+ordering of non-delayed tasks _within_ the same queue is _still_ always FIFO
+order.
+
+Note that in practice and by default, the ordering of tasks _across_ task queues
+with the same priority _is_ in fact guaranteed to be in FIFO posting-order
+because legacy code has come to depend on this behavior, although it should not
+be relied upon, as queues can dynamically [change priority][3] and get
+[frozen][4]/unfrozen arbitrarily.
+
+## 04-multiple-threads
+
+So far the threading and task posting examples have been either single-threaded,
+or utilize the thread pool. But in Chromium, especially in renderer processes,
+it's common to post tasks on specific threads that the platform maintains.
+That's exactly what the scenario that this example reproduces. First we setup
+the main thread task scheduling infra, and then spin up a new `base::Thread`
+which represents a new physical thread. Then we explicitly post tasks back and
+forth between the main and secondary thread, via a cross-thread `TaskRunner`.
+
+[1]: https://chromium.googlesource.com/chromium/src/+/refs/heads/main/codelabs/cpp101/codelab.md#part-3_threads-and-task-runners
+[2]: https://source.chromium.org/chromium/chromium/src/+/main:base/task/sequence_manager/sequence_manager.h;l=122-125;drc=c70927109b0861ba4642416cb4689b4bf9d25ad0
+[3]: https://source.chromium.org/chromium/chromium/src/+/main:base/task/sequence_manager/task_queue.cc;l=246;drc=566a5d280c3f78e073c435a5218021ce15d1f004
+[4]: https://source.chromium.org/chromium/chromium/src/+/main:base/task/sequence_manager/task_queue_impl.cc;l=1132;drc=74e2db96056dd0265b7e527a58b50036c07d7031
diff --git a/components/autofill/core/browser/payments/legal_message_line.cc b/components/autofill/core/browser/payments/legal_message_line.cc
index fa3ba5e..aeca609 100644
--- a/components/autofill/core/browser/payments/legal_message_line.cc
+++ b/components/autofill/core/browser/payments/legal_message_line.cc
@@ -87,8 +87,9 @@
     for (const base::Value& single_line : *lines_list) {
       lines.emplace_back();
       if (!single_line.is_dict() ||
-          !lines.back().ParseLine(single_line, escape_apostrophes))
+          !lines.back().ParseLine(single_line.GetDict(), escape_apostrophes)) {
         return false;
+      }
     }
 
     out->swap(lines);
@@ -96,34 +97,32 @@
   return true;
 }
 
-bool LegalMessageLine::ParseLine(const base::Value& line,
+bool LegalMessageLine::ParseLine(const base::Value::Dict& line,
                                  bool escape_apostrophes) {
   DCHECK(text_.empty());
   DCHECK(links_.empty());
-  DCHECK(line.is_dict());
 
   // |display_texts| elements are the strings that will be substituted for
   // "{0}", "{1}", etc. in the template string.
   std::vector<std::u16string> display_texts;
 
   // Process all the template parameters.
-  const base::Value* template_parameters =
-      line.FindKeyOfType("template_parameter", base::Value::Type::LIST);
+  const base::Value::List* template_parameters =
+      line.FindList("template_parameter");
   if (template_parameters) {
-    const base::Value::List& template_parameters_view =
-        template_parameters->GetList();
-    display_texts.reserve(template_parameters_view.size());
-    links_.reserve(template_parameters_view.size());
+    display_texts.reserve(template_parameters->size());
+    links_.reserve(template_parameters->size());
 
-    for (const base::Value& parameter : template_parameters_view) {
+    for (const base::Value& parameter : *template_parameters) {
       if (!parameter.is_dict())
         return false;
 
-      const std::string* display_text = parameter.FindStringKey("display_text");
+      const std::string* display_text =
+          parameter.GetDict().FindString("display_text");
       if (!display_text)
         return false;
 
-      const std::string* url = parameter.FindStringKey("url");
+      const std::string* url = parameter.GetDict().FindString("url");
       if (!url)
         return false;
 
@@ -134,7 +133,7 @@
 
   // Read the template string. It's a small subset of the ICU message format
   // syntax.
-  const std::string* template_icu_utf8 = line.FindStringKey("template");
+  const std::string* template_icu_utf8 = line.FindString("template");
   if (!template_icu_utf8)
     return false;
 
diff --git a/components/autofill/core/browser/payments/legal_message_line.h b/components/autofill/core/browser/payments/legal_message_line.h
index 9fa590dd..f7aa164 100644
--- a/components/autofill/core/browser/payments/legal_message_line.h
+++ b/components/autofill/core/browser/payments/legal_message_line.h
@@ -74,7 +74,7 @@
  private:
   friend class TestLegalMessageLine;
 
-  bool ParseLine(const base::Value& line, bool escape_apostrophes);
+  bool ParseLine(const base::Value::Dict& line, bool escape_apostrophes);
 
   std::u16string text_;
   Links links_;
diff --git a/components/autofill/core/browser/payments/payments_requests/get_unmask_details_request.cc b/components/autofill/core/browser/payments/payments_requests/get_unmask_details_request.cc
index 900875f..254ef82 100644
--- a/components/autofill/core/browser/payments/payments_requests/get_unmask_details_request.cc
+++ b/components/autofill/core/browser/payments/payments_requests/get_unmask_details_request.cc
@@ -35,17 +35,15 @@
 }
 
 std::string GetUnmaskDetailsRequest::GetRequestContent() {
-  base::Value request_dict(base::Value::Type::DICTIONARY);
-  base::Value context(base::Value::Type::DICTIONARY);
-  context.SetKey("language_code", base::Value(app_locale_));
-  context.SetKey("billable_service",
-                 base::Value(kUnmaskCardBillableServiceNumber));
-  request_dict.SetKey("context", std::move(context));
+  base::Value::Dict request_dict;
+  base::Value::Dict context;
+  context.Set("language_code", app_locale_);
+  context.Set("billable_service", kUnmaskCardBillableServiceNumber);
+  request_dict.Set("context", std::move(context));
 
-  base::Value chrome_user_context(base::Value::Type::DICTIONARY);
-  chrome_user_context.SetKey("full_sync_enabled",
-                             base::Value(full_sync_enabled_));
-  request_dict.SetKey("chrome_user_context", std::move(chrome_user_context));
+  base::Value::Dict chrome_user_context;
+  chrome_user_context.Set("full_sync_enabled", full_sync_enabled_);
+  request_dict.Set("chrome_user_context", std::move(chrome_user_context));
 
   std::string request_content;
   base::JSONWriter::Write(request_dict, &request_content);
@@ -67,8 +65,7 @@
 
   const absl::optional<bool> offer_fido_opt_in =
       response.FindBool("offer_fido_opt_in");
-  unmask_details_.offer_fido_opt_in =
-      offer_fido_opt_in.has_value() && *offer_fido_opt_in;
+  unmask_details_.offer_fido_opt_in = offer_fido_opt_in.value_or(false);
 
   const base::Value::Dict* dictionary_value =
       response.FindDict("fido_request_options");
diff --git a/components/autofill/core/browser/payments/payments_requests/migrate_cards_request.cc b/components/autofill/core/browser/payments/payments_requests/migrate_cards_request.cc
index 13584b2..9ddd7d8 100644
--- a/components/autofill/core/browser/payments/payments_requests/migrate_cards_request.cc
+++ b/components/autofill/core/browser/payments/payments_requests/migrate_cards_request.cc
@@ -97,8 +97,8 @@
       std::make_unique<std::unordered_map<std::string, std::string>>();
   for (const base::Value& result : *found_list) {
     if (result.is_dict()) {
-      const std::string* unique_id = result.FindStringKey("unique_id");
-      const std::string* status = result.FindStringKey("status");
+      const std::string* unique_id = result.GetDict().FindString("unique_id");
+      const std::string* status = result.GetDict().FindString("status");
       save_result_->insert(
           std::make_pair(unique_id ? *unique_id : std::string(),
                          status ? *status : std::string()));
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc
index ad55ee10..3c6c6c1 100644
--- a/components/autofill/core/common/autofill_payments_features.cc
+++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -85,7 +85,7 @@
 // out.
 BASE_FEATURE(kAutofillEnableMerchantOptOutErrorDialog,
              "AutofillEnableMerchantOptOutErrorDialog",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // When enabled, a notification will be displayed on page navigation if the
 // domain has an eligible merchant promo code offer or reward.
diff --git a/components/browser_ui/contacts_picker/android/java/res/layout/contacts_list_item_view.xml b/components/browser_ui/contacts_picker/android/java/res/layout/contacts_list_item_view.xml
index cf3495c..465d6c3 100644
--- a/components/browser_ui/contacts_picker/android/java/res/layout/contacts_list_item_view.xml
+++ b/components/browser_ui/contacts_picker/android/java/res/layout/contacts_list_item_view.xml
@@ -11,7 +11,8 @@
 
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/icon_view"
-        style="@style/ListItemStartIcon" />
+        style="@style/ListItemStartIcon"
+        android:importantForAccessibility="no" />
 
     <LinearLayout
         android:layout_width="0dp"
diff --git a/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml b/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
index 25171b9..fe0686a 100644
--- a/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
+++ b/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
@@ -19,7 +19,8 @@
         android:id="@+id/menu_item_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        app:tint="@color/default_icon_color_secondary_tint_list" />
+        app:tint="@color/default_icon_color_secondary_tint_list"
+        android:importantForAccessibility="no" />
 
     <TextView
         android:id="@+id/menu_item_text"
@@ -35,6 +36,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:visibility="gone"
-        app:tint="@color/default_icon_color_secondary_tint_list" />
+        app:tint="@color/default_icon_color_secondary_tint_list"
+        android:importantForAccessibility="no" />
 
 </LinearLayout>
diff --git a/components/browser_ui/widget/android/java/res/layout/modern_list_item_view.xml b/components/browser_ui/widget/android/java/res/layout/modern_list_item_view.xml
index 02e14bb6..d6bed9c 100644
--- a/components/browser_ui/widget/android/java/res/layout/modern_list_item_view.xml
+++ b/components/browser_ui/widget/android/java/res/layout/modern_list_item_view.xml
@@ -12,7 +12,8 @@
 
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/start_icon"
-        style="@style/ListItemStartIcon" />
+        style="@style/ListItemStartIcon"
+        android:importantForAccessibility="no" />
 
     <!-- Common title/description shared between list item views. -->
     <include layout="@layout/title_and_description_layout" />
diff --git a/components/browser_ui/widget/android/java/res/layout/radio_button_with_description.xml b/components/browser_ui/widget/android/java/res/layout/radio_button_with_description.xml
index 95265194..bc2d0d3 100644
--- a/components/browser_ui/widget/android/java/res/layout/radio_button_with_description.xml
+++ b/components/browser_ui/widget/android/java/res/layout/radio_button_with_description.xml
@@ -35,7 +35,8 @@
             android:layout_centerVertical="true"
             android:scaleType="fitCenter"
             android:tint="@macro/default_icon_color"
-            android:visibility="gone" />
+            android:visibility="gone"
+            android:importantForAccessibility="no" />
 
         <TextView
             android:id="@+id/primary"
diff --git a/components/download/OWNERS b/components/download/OWNERS
index c13a0fe..89e6508 100644
--- a/components/download/OWNERS
+++ b/components/download/OWNERS
@@ -1,3 +1,5 @@
 dtrainor@chromium.org
 qinmin@chromium.org
 shaktisahu@chromium.org
+xinghuilu@chromium.org
+
diff --git a/components/exo/text_input.cc b/components/exo/text_input.cc
index 52b4e0c..89bb8e7 100644
--- a/components/exo/text_input.cc
+++ b/components/exo/text_input.cc
@@ -132,7 +132,9 @@
                                  bool should_do_learning) {
   if (!input_method_)
     return;
-  bool changed = (input_type_ != type);
+  bool changed = (input_type_ != type) || (input_mode_ != mode) ||
+                 (flags_ != flags) ||
+                 (should_do_learning_ != should_do_learning);
   input_type_ = type;
   input_mode_ = mode;
   flags_ = flags;
diff --git a/components/exo/wayland/zaura_shell.cc b/components/exo/wayland/zaura_shell.cc
index e6e970a..b6e3252 100644
--- a/components/exo/wayland/zaura_shell.cc
+++ b/components/exo/wayland/zaura_shell.cc
@@ -348,6 +348,7 @@
   if (surface_) {
     surface_->RemoveSurfaceObserver(this);
     surface_->SetProperty(kSurfaceHasAuraSurfaceKey, false);
+    wm::SetTooltipText(surface_->window(), nullptr);
   }
 }
 
diff --git a/components/history_clusters/core/BUILD.gn b/components/history_clusters/core/BUILD.gn
index ce49bed55..e157bc6 100644
--- a/components/history_clusters/core/BUILD.gn
+++ b/components/history_clusters/core/BUILD.gn
@@ -44,6 +44,8 @@
     "history_clusters_service_task_get_most_recent_clusters.h",
     "history_clusters_service_task_get_most_recent_clusters_for_ui.cc",
     "history_clusters_service_task_get_most_recent_clusters_for_ui.h",
+    "history_clusters_service_task_update_cluster_triggerability.cc",
+    "history_clusters_service_task_update_cluster_triggerability.h",
     "history_clusters_service_task_update_clusters.cc",
     "history_clusters_service_task_update_clusters.h",
     "history_clusters_types.cc",
diff --git a/components/history_clusters/core/config.cc b/components/history_clusters/core/config.cc
index 01e7722..79baeb3 100644
--- a/components/history_clusters/core/config.cc
+++ b/components/history_clusters/core/config.cc
@@ -384,6 +384,12 @@
         internal::kHistoryClustersNavigationContextClustering,
         "persist_context_clusters_at_navigation",
         persist_context_clusters_at_navigation);
+
+    cluster_triggerability_cutoff_duration =
+        base::Minutes(GetFieldTrialParamByFeatureAsInt(
+            internal::kHistoryClustersNavigationContextClustering,
+            "cluster_triggerability_cutoff_duration_minutes",
+            cluster_triggerability_cutoff_duration.InMinutes()));
   }
 
   // Lonely features without child params.
diff --git a/components/history_clusters/core/config.h b/components/history_clusters/core/config.h
index 5c5ca450..679124a 100644
--- a/components/history_clusters/core/config.h
+++ b/components/history_clusters/core/config.h
@@ -364,6 +364,10 @@
   // navigation time.
   bool persist_context_clusters_at_navigation = false;
 
+  // The duration since the most recent visit for which a context cluster is
+  // considered to be fully frozen and triggerability can be finalized.
+  base::TimeDelta cluster_triggerability_cutoff_duration = base::Minutes(120);
+
   // Lonely features without child params.
 
   // Enables debug info in non-user-visible surfaces, like Chrome Inspector.
diff --git a/components/history_clusters/core/history_clusters_debug_jsons.cc b/components/history_clusters/core/history_clusters_debug_jsons.cc
index 20ffb2d1..cded27f 100644
--- a/components/history_clusters/core/history_clusters_debug_jsons.cc
+++ b/components/history_clusters/core/history_clusters_debug_jsons.cc
@@ -97,6 +97,8 @@
                       std::move(debug_keyword_to_data_map));
     debug_cluster.Set("should_show_on_prominent_ui_surfaces",
                       cluster.should_show_on_prominent_ui_surfaces);
+    debug_cluster.Set("triggerability_calculated",
+                      cluster.triggerability_calculated);
 
     base::Value::List debug_visits;
     for (const auto& visit : cluster.visits) {
diff --git a/components/history_clusters/core/history_clusters_service.cc b/components/history_clusters/core/history_clusters_service.cc
index 697271f..16f0a38 100644
--- a/components/history_clusters/core/history_clusters_service.cc
+++ b/components/history_clusters/core/history_clusters_service.cc
@@ -26,6 +26,7 @@
 #include "components/history_clusters/core/file_clustering_backend.h"
 #include "components/history_clusters/core/history_clusters_debug_jsons.h"
 #include "components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters_for_ui.h"
+#include "components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.h"
 #include "components/history_clusters/core/history_clusters_service_task_update_clusters.h"
 #include "components/history_clusters/core/history_clusters_types.h"
 #include "components/history_clusters/core/history_clusters_util.h"
@@ -254,10 +255,18 @@
   // Reset the timer.
   update_clusters_timer_ = {};
 
-  update_clusters_task_ =
-      std::make_unique<HistoryClustersServiceTaskUpdateClusters>(
-          weak_ptr_factory_.GetWeakPtr(), incomplete_visit_context_annotations_,
-          backend_.get(), history_service_, base::DoNothing());
+  if (GetConfig().use_navigation_context_clusters) {
+    update_clusters_task_ =
+        std::make_unique<HistoryClustersServiceTaskUpdateClusterTriggerability>(
+            weak_ptr_factory_.GetWeakPtr(), backend_.get(), history_service_,
+            base::DoNothing());
+  } else {
+    update_clusters_task_ =
+        std::make_unique<HistoryClustersServiceTaskUpdateClusters>(
+            weak_ptr_factory_.GetWeakPtr(),
+            incomplete_visit_context_annotations_, backend_.get(),
+            history_service_, base::DoNothing());
+  }
 }
 
 absl::optional<history::ClusterKeywordData>
diff --git a/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.cc b/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.cc
new file mode 100644
index 0000000..dec686f
--- /dev/null
+++ b/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.cc
@@ -0,0 +1,142 @@
+// 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 "components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/metrics/histogram_functions.h"
+#include "base/strings/stringprintf.h"
+#include "components/history/core/browser/history_service.h"
+#include "components/history_clusters/core/clustering_backend.h"
+#include "components/history_clusters/core/config.h"
+#include "components/history_clusters/core/history_clusters_debug_jsons.h"
+#include "components/history_clusters/core/history_clusters_service.h"
+
+namespace history_clusters {
+
+HistoryClustersServiceTaskUpdateClusterTriggerability::
+    HistoryClustersServiceTaskUpdateClusterTriggerability(
+        base::WeakPtr<HistoryClustersService> weak_history_clusters_service,
+        ClusteringBackend* const backend,
+        history::HistoryService* const history_service,
+        base::OnceClosure callback)
+    : weak_history_clusters_service_(std::move(weak_history_clusters_service)),
+      backend_(backend),
+      history_service_(history_service),
+      callback_(std::move(callback)),
+      task_created_time_(base::Time::Now()) {
+  DCHECK(weak_history_clusters_service_);
+  DCHECK(history_service_);
+  DCHECK(backend_);
+
+  continuation_time_ = task_created_time_;
+  Start();
+}
+
+HistoryClustersServiceTaskUpdateClusterTriggerability::
+    ~HistoryClustersServiceTaskUpdateClusterTriggerability() = default;
+
+void HistoryClustersServiceTaskUpdateClusterTriggerability::Start() {
+  history_service_->GetMostRecentClusters(
+      base::Time::Min(), continuation_time_,
+      GetConfig().max_persisted_clusters_to_fetch,
+      GetConfig().max_persisted_cluster_visits_to_fetch_soft_cap,
+      base::BindOnce(&HistoryClustersServiceTaskUpdateClusterTriggerability::
+                         OnGotPersistedClusters,
+                     weak_ptr_factory_.GetWeakPtr()),
+      /*include_keywords_and_duplicates=*/false, &task_tracker_);
+}
+
+void HistoryClustersServiceTaskUpdateClusterTriggerability::
+    OnGotPersistedClusters(std::vector<history::Cluster> clusters) {
+  if (!weak_history_clusters_service_) {
+    return;
+  }
+
+  if (weak_history_clusters_service_->ShouldNotifyDebugMessage()) {
+    weak_history_clusters_service_->NotifyDebugMessage(base::StringPrintf(
+        "UPDATE CLUSTER TRIGGERABILITY TASK - PERSISTED CLUSTERS %zu:",
+        clusters.size()));
+    weak_history_clusters_service_->NotifyDebugMessage(
+        GetDebugJSONForClusters(clusters));
+  }
+
+  // TODO(b/259466296): Record metrics.
+
+  if (clusters.empty()) {
+    // TODO(manukh): If the most recent cluster is invalid (due to DB
+    //  corruption), `GetMostRecentClusters()` will return no clusters. We
+    //  should handle this case and not assume we've exhausted history.
+    done_ = true;
+    std::move(callback_).Run();
+    return;
+  }
+  continuation_time_ =
+      clusters.back().GetMostRecentVisit().annotated_visit.visit_row.visit_time;
+
+  std::vector<history::Cluster> filtered_clusters;
+  base::ranges::copy_if(clusters, std::back_inserter(filtered_clusters),
+                        [&](const history::Cluster& cluster) {
+                          return !cluster.triggerability_calculated;
+                        });
+
+  if (filtered_clusters.empty()) {
+    // Get more persisted clusters and see if the clusters need to be updated if
+    // visits have not been exhausted yet.
+    Start();
+    return;
+  }
+
+  backend_->GetClusterTriggerability(
+      base::BindOnce(&HistoryClustersServiceTaskUpdateClusterTriggerability::
+                         OnGotModelClusters,
+                     weak_ptr_factory_.GetWeakPtr()),
+      std::move(filtered_clusters));
+}
+
+void HistoryClustersServiceTaskUpdateClusterTriggerability::OnGotModelClusters(
+    std::vector<history::Cluster> clusters) {
+  if (!weak_history_clusters_service_) {
+    return;
+  }
+
+  // TODO(b/259466296): Record metrics.
+
+  if (weak_history_clusters_service_->ShouldNotifyDebugMessage()) {
+    weak_history_clusters_service_->NotifyDebugMessage(base::StringPrintf(
+        "UPDATE CLUSTER TRIGGERABILITY TASK - MODEL CLUSTERS %zu:",
+        clusters.size()));
+    weak_history_clusters_service_->NotifyDebugMessage(
+        GetDebugJSONForClusters(clusters));
+  }
+
+  // Override the triggerability persistence if the most recent visit is within
+  // the cutoff period.
+  for (auto& cluster : clusters) {
+    base::Time cluster_most_recent_visit_time =
+        cluster.GetMostRecentVisit().annotated_visit.visit_row.visit_time;
+    if (task_created_time_ - cluster_most_recent_visit_time <
+        GetConfig().cluster_triggerability_cutoff_duration) {
+      cluster.triggerability_calculated = false;
+    }
+  }
+
+  history_service_->UpdateClusterTriggerability(
+      clusters,
+      base::BindOnce(&HistoryClustersServiceTaskUpdateClusterTriggerability::
+                         OnPersistedClusterTriggerability,
+                     weak_ptr_factory_.GetWeakPtr()),
+      &task_tracker_);
+}
+
+void HistoryClustersServiceTaskUpdateClusterTriggerability::
+    OnPersistedClusterTriggerability() {
+  // TODO(b/259466296): Record metrics.
+
+  Start();
+}
+
+}  // namespace history_clusters
diff --git a/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.h b/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.h
new file mode 100644
index 0000000..2c7e4bb
--- /dev/null
+++ b/components/history_clusters/core/history_clusters_service_task_update_cluster_triggerability.h
@@ -0,0 +1,100 @@
+// 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 COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTER_TRIGGERABILITY_H_
+#define COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTER_TRIGGERABILITY_H_
+
+#include <vector>
+
+#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/task/cancelable_task_tracker.h"
+#include "base/time/time.h"
+#include "components/history/core/browser/history_types.h"
+#include "components/history_clusters/core/clustering_backend.h"
+#include "components/history_clusters/core/history_clusters_service_task.h"
+#include "components/history_clusters/core/history_clusters_types.h"
+
+namespace history {
+class HistoryService;
+}  // namespace history
+
+namespace history_clusters {
+
+class HistoryClustersService;
+
+// `HistoryClustersServiceTaskUpdateClusterTriggerability` gets the most recent
+// persisted clusters and updates their triggering metadata. It continues doing
+// so, moving the threshold forward 1 day each time, until reaching today.
+class HistoryClustersServiceTaskUpdateClusterTriggerability
+    : public HistoryClustersServiceTask {
+ public:
+  HistoryClustersServiceTaskUpdateClusterTriggerability(
+      base::WeakPtr<HistoryClustersService> weak_history_clusters_service,
+      ClusteringBackend* const backend,
+      history::HistoryService* const history_service,
+      base::OnceClosure callback);
+  ~HistoryClustersServiceTaskUpdateClusterTriggerability() override;
+
+ private:
+  // When there remain clusters without their triggerability calculated,
+  // calculate them and persist the new values:
+  //   Start() ->
+  //   OnGotPersistedClusters() ->
+  //   OnGotModelClusters() ->
+  //   OnPersistedClusterTriggerability() ->
+  //   Start()
+
+  // When neither clusters were fetched nor was history exhausted:
+  //   Start() ->
+  //   OnGotPersistedClusters() ->
+  //   Start()
+
+  // Invoked syncly during construction, after `OnGotPersistedClusters()`
+  // receives no clusters while history isn't exhuasted, and after
+  // `OnPersistedClusterTriggerability()` records metrics. This fetches
+  // persisted clusters.
+  void Start();
+
+  // Invoked after `Start()` asyncly fetches clusters. May syncly invoke
+  // `callback_` if no clusters were returned. If clusters are returned, this
+  // will filter for clusters that do not have their triggerability calculated
+  // yet so that triggerability metadata can be calculated. Otherwise, it
+  // invokes `Start()` to fetch more clusters.
+  void OnGotPersistedClusters(std::vector<history::Cluster> clusters);
+
+  // Invoked after `OnGotPersistedClusters()` asyncly obtains clusters.
+  void OnGotModelClusters(std::vector<history::Cluster> clusters);
+
+  // Invoked after `OnGotModelClusters()` asyncly persists clusters. Will syncly
+  // invoke `Start()` to initiate the next iteration.
+  void OnPersistedClusterTriggerability();
+
+  // Never nullptr.
+  base::WeakPtr<HistoryClustersService> weak_history_clusters_service_;
+  // Non-owning pointer, but never nullptr.
+  const raw_ptr<ClusteringBackend> backend_;
+  // Non-owning pointer, but never nullptr.
+  const raw_ptr<history::HistoryService> history_service_;
+
+  // Used to make requests to `HistoryService`.
+  base::Time continuation_time_;
+  base::CancelableTaskTracker task_tracker_;
+
+  // Invoked after `OnGotPersistedClusters()` when all clusters have been
+  // exhausted.
+  base::OnceClosure callback_;
+
+  // Tracks the time `this` was created to use for the max time we should update
+  // clusters for.
+  base::Time task_created_time_;
+
+  // Used for async callbacks.
+  base::WeakPtrFactory<HistoryClustersServiceTaskUpdateClusterTriggerability>
+      weak_ptr_factory_{this};
+};
+
+}  // namespace history_clusters
+
+#endif  // COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTER_TRIGGERABILITY_H_
diff --git a/components/omnibox/browser/autocomplete_scoring_model_executor.cc b/components/omnibox/browser/autocomplete_scoring_model_executor.cc
index 8cdaf79..7149719 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_executor.cc
+++ b/components/omnibox/browser/autocomplete_scoring_model_executor.cc
@@ -4,7 +4,11 @@
 
 #include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
 
+#include <vector>
+
 #include "base/check_op.h"
+#include "base/notreached.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/tflite/src/tensorflow/lite/c/common.h"
 #include "third_party/tflite_support/src/tensorflow_lite_support/cc/task/core/task_utils.h"
 
diff --git a/components/omnibox/browser/autocomplete_scoring_model_executor.h b/components/omnibox/browser/autocomplete_scoring_model_executor.h
index dc1c472..9abc360 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_executor.h
+++ b/components/omnibox/browser/autocomplete_scoring_model_executor.h
@@ -5,7 +5,11 @@
 #ifndef COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_EXECUTOR_H_
 #define COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_EXECUTOR_H_
 
+#include <vector>
+
 #include "components/optimization_guide/core/base_model_executor.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/tflite/src/tensorflow/lite/c/common.h"
 
 // Implements BaseModelExecutor to execute models with float vector input and
 // output. Input represents scoring signals associated one autocomplete match
@@ -36,4 +40,4 @@
       const std::vector<const TfLiteTensor*>& output_tensors) override;
 };
 
-#endif  // COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_EXECUTOR_H_
\ No newline at end of file
+#endif  // COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_EXECUTOR_H_
diff --git a/components/omnibox/browser/autocomplete_scoring_model_handler.cc b/components/omnibox/browser/autocomplete_scoring_model_handler.cc
index 196dedc..7feb8bc 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_handler.cc
+++ b/components/omnibox/browser/autocomplete_scoring_model_handler.cc
@@ -4,9 +4,15 @@
 
 #include "components/omnibox/browser/autocomplete_scoring_model_handler.h"
 
-#include "components/optimization_guide/core/model_executor.h"
+#include <memory>
+
+#include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
+#include "components/optimization_guide/proto/models.pb.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 using ModelInput = AutocompleteScoringModelExecutor::ModelInput;
 using ModelOutput = AutocompleteScoringModelExecutor::ModelOutput;
diff --git a/components/omnibox/browser/autocomplete_scoring_model_handler.h b/components/omnibox/browser/autocomplete_scoring_model_handler.h
index 8d0690e..90b7295 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_handler.h
+++ b/components/omnibox/browser/autocomplete_scoring_model_handler.h
@@ -5,10 +5,12 @@
 #ifndef COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_HANDLER_H_
 #define COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_HANDLER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
 #include "components/optimization_guide/core/model_handler.h"
-
-class OptimizationGuideModelProvider;
+#include "components/optimization_guide/core/optimization_guide_model_provider.h"
+#include "components/optimization_guide/proto/models.pb.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 // Implements optimization_guide::ModelHandler for autocomplete scoring.
 // Keeps scoring model in memory.
@@ -31,4 +33,4 @@
       const AutocompleteScoringModelHandler&) = delete;
 };
 
-#endif  // COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_HANDLER_H_
\ No newline at end of file
+#endif  // COMPONENTS_OMNIBOX_BROWSER_AUTOCOMPLETE_SCORING_MODEL_HANDLER_H_
diff --git a/components/omnibox/browser/autocomplete_scoring_model_service.cc b/components/omnibox/browser/autocomplete_scoring_model_service.cc
index 0502b75..53629eb 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_service.cc
+++ b/components/omnibox/browser/autocomplete_scoring_model_service.cc
@@ -4,9 +4,16 @@
 
 #include "components/omnibox/browser/autocomplete_scoring_model_service.h"
 
-#include "base/task/sequenced_task_runner.h"
-#include "components/omnibox/browser/autocomplete_match.h"
+#include <utility>
+
+#include "base/functional/callback.h"
+#include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
+#include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
+#include "components/omnibox/browser/autocomplete_scoring_model_handler.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
+#include "components/optimization_guide/proto/models.pb.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 AutocompleteScoringModelService::AutocompleteScoringModelService(
     optimization_guide::OptimizationGuideModelProvider* model_provider) {
diff --git a/components/omnibox/browser/autocomplete_scoring_model_service.h b/components/omnibox/browser/autocomplete_scoring_model_service.h
index d54c4cd8..c9e93b5b 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_service.h
+++ b/components/omnibox/browser/autocomplete_scoring_model_service.h
@@ -7,11 +7,13 @@
 
 #include <memory>
 
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
 #include "components/omnibox/browser/autocomplete_scoring_model_handler.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 // Autocomplete scoring service using machine learning models via
 // OptimizationGuide's model handler.
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
index cf283a24..ea3afa1 100644
--- a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
+++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
@@ -96,19 +96,8 @@
           &SegmentationPlatformServiceImpl::OnModelRefreshNeeded,
           weak_ptr_factory_.GetWeakPtr()));
 
-  std::map<std::string, std::unique_ptr<SegmentResultProvider>>
-      result_providers;
-  for (const auto& config : configs_) {
-    result_providers[config->segmentation_key] = SegmentResultProvider::Create(
-        storage_service_->segment_info_database(),
-        storage_service_->signal_storage_config(),
-        storage_service_->default_model_manager(), &execution_service_, clock_,
-        platform_options_.force_refresh_results);
-  }
-
   // Central class to delegate the client requests.
-  request_dispatcher_ = std::make_unique<RequestDispatcher>(
-      configs_, std::move(result_providers));
+  request_dispatcher_ = std::make_unique<RequestDispatcher>(configs_);
 
   for (const auto& config : configs_) {
     segment_selectors_[config->segmentation_key] =
@@ -254,7 +243,18 @@
     selector.second->OnPlatformInitialized(&execution_service_);
   }
 
-  request_dispatcher_->OnPlatformInitialized(success);
+  std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+      result_providers;
+  for (const auto& config : configs_) {
+    result_providers[config->segmentation_key] = SegmentResultProvider::Create(
+        storage_service_->segment_info_database(),
+        storage_service_->signal_storage_config(),
+        storage_service_->default_model_manager(), &execution_service_, clock_,
+        platform_options_.force_refresh_results);
+  }
+
+  request_dispatcher_->OnPlatformInitialized(success, &execution_service_,
+                                             std::move(result_providers));
 
   // Run any method calls that were received during initialization.
   while (!pending_actions_.empty()) {
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher.cc b/components/segmentation_platform/internal/selection/request_dispatcher.cc
index a550160..007f163d 100644
--- a/components/segmentation_platform/internal/selection/request_dispatcher.cc
+++ b/components/segmentation_platform/internal/selection/request_dispatcher.cc
@@ -14,21 +14,27 @@
 namespace segmentation_platform {
 
 RequestDispatcher::RequestDispatcher(
-    const std::vector<std::unique_ptr<Config>>& configs,
-    std::map<std::string, std::unique_ptr<SegmentResultProvider>>
-        result_providers)
-    : configs_(configs) {
-  for (const auto& config : configs_) {
-    request_handlers_[config->segmentation_key] = RequestHandler::Create(
-        *config, std::move(result_providers[config->segmentation_key]));
-  }
-}
+    const std::vector<std::unique_ptr<Config>>& configs)
+    : configs_(configs) {}
 
 RequestDispatcher::~RequestDispatcher() = default;
 
-void RequestDispatcher::OnPlatformInitialized(bool success) {
+void RequestDispatcher::OnPlatformInitialized(
+    bool success,
+    ExecutionService* execution_service,
+    std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+        result_providers) {
   storage_init_status_ = success;
 
+  // Only set request handlers if it has not been set for testing already.
+  if (request_handlers_.empty()) {
+    for (const auto& config : configs_) {
+      request_handlers_[config->segmentation_key] = RequestHandler::Create(
+          *config, std::move(result_providers[config->segmentation_key]),
+          execution_service);
+    }
+  }
+
   // Run any method calls that were received during initialization.
   while (!pending_actions_.empty()) {
     auto callback = std::move(pending_actions_.front());
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher.h b/components/segmentation_platform/internal/selection/request_dispatcher.h
index 3bf8c8a..85b953f 100644
--- a/components/segmentation_platform/internal/selection/request_dispatcher.h
+++ b/components/segmentation_platform/internal/selection/request_dispatcher.h
@@ -28,10 +28,8 @@
 // 2. Dispatching requests to client specific request handlers.
 class RequestDispatcher {
  public:
-  RequestDispatcher(
-      const std::vector<std::unique_ptr<Config>>& configs,
-      std::map<std::string, std::unique_ptr<SegmentResultProvider>>
-          result_providers);
+  explicit RequestDispatcher(
+      const std::vector<std::unique_ptr<Config>>& configs);
   ~RequestDispatcher();
 
   // Disallow copy/assign.
@@ -39,7 +37,11 @@
   RequestDispatcher& operator=(RequestDispatcher&) = delete;
 
   // Called when platform and database initializations are completed.
-  void OnPlatformInitialized(bool success);
+  void OnPlatformInitialized(
+      bool success,
+      ExecutionService* execution_service,
+      std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+          result_providers);
 
   // Client API. See `SegmentationPlatformService::GetClassificationResult`.
   void GetClassificationResult(const std::string& segmentation_key,
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc b/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc
index bef502b..98c405b 100644
--- a/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc
+++ b/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc
@@ -55,10 +55,8 @@
 
     configs_.emplace_back(CreateTestConfig(kTestClient1));
     configs_.emplace_back(CreateTestConfig(kTestClient2));
-    std::map<std::string, std::unique_ptr<SegmentResultProvider>>
-        result_providers;
-    request_dispatcher_ = std::make_unique<RequestDispatcher>(
-        configs_, std::move(result_providers));
+
+    request_dispatcher_ = std::make_unique<RequestDispatcher>(configs_);
 
     auto handler1 = std::make_unique<MockRequestHandler>();
     request_handler1_ = handler1.get();
@@ -106,7 +104,11 @@
 
   // Finish platform initialization with failure. The request queue is flushed
   // and callbacks are invoked with empty results.
-  request_dispatcher_->OnPlatformInitialized(false);
+  std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+      result_providers;
+  ExecutionService execution_service;
+  request_dispatcher_->OnPlatformInitialized(false, &execution_service,
+                                             std::move(result_providers));
   loop.Run();
   EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing());
 }
@@ -152,7 +154,11 @@
 
   // Finish platform initialization with success. The request queue is flushed,
   // and the request handler is invoked.
-  request_dispatcher_->OnPlatformInitialized(true);
+  std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+      result_providers;
+  ExecutionService execution_service;
+  request_dispatcher_->OnPlatformInitialized(true, &execution_service,
+                                             std::move(result_providers));
   loop.Run();
   EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing());
 }
@@ -163,7 +169,11 @@
   options.on_demand_execution = true;
 
   // Init platform.
-  request_dispatcher_->OnPlatformInitialized(true);
+  std::map<std::string, std::unique_ptr<SegmentResultProvider>>
+      result_providers;
+  ExecutionService execution_service;
+  request_dispatcher_->OnPlatformInitialized(true, &execution_service,
+                                             std::move(result_providers));
 
   // Request from client 1.
   ClassificationResult result1(PredictionStatus::kSucceeded);
diff --git a/components/segmentation_platform/internal/selection/request_handler.cc b/components/segmentation_platform/internal/selection/request_handler.cc
index aac19f3..f25406c 100644
--- a/components/segmentation_platform/internal/selection/request_handler.cc
+++ b/components/segmentation_platform/internal/selection/request_handler.cc
@@ -34,7 +34,8 @@
 class RequestHandlerImpl : public RequestHandler {
  public:
   RequestHandlerImpl(const Config& config,
-                     std::unique_ptr<SegmentResultProvider> result_provider);
+                     std::unique_ptr<SegmentResultProvider> result_provider,
+                     ExecutionService* execution_service);
   ~RequestHandlerImpl() override;
 
   // Disallow copy/assign.
@@ -52,6 +53,7 @@
                       SegmentResultProvider::SegmentResultCallback callback);
 
   void OnGetModelResultForClassification(
+      scoped_refptr<InputContext> input_context,
       ClassificationResultCallback classification_callback,
       std::unique_ptr<SegmentResultProvider::SegmentResult> result);
 
@@ -62,13 +64,19 @@
   // the model or getting results from the cache as necessary.
   std::unique_ptr<SegmentResultProvider> result_provider_;
 
+  // Pointer to the execution service.
+  const raw_ptr<ExecutionService> execution_service_{};
+
   base::WeakPtrFactory<RequestHandlerImpl> weak_ptr_factory_{this};
 };
 
 RequestHandlerImpl::RequestHandlerImpl(
     const Config& config,
-    std::unique_ptr<SegmentResultProvider> result_provider)
-    : config_(config), result_provider_(std::move(result_provider)) {}
+    std::unique_ptr<SegmentResultProvider> result_provider,
+    ExecutionService* execution_service)
+    : config_(config),
+      result_provider_(std::move(result_provider)),
+      execution_service_(execution_service) {}
 
 RequestHandlerImpl::~RequestHandlerImpl() = default;
 
@@ -80,7 +88,8 @@
   GetModelResult(
       options, input_context,
       base::BindOnce(&RequestHandlerImpl::OnGetModelResultForClassification,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+                     weak_ptr_factory_.GetWeakPtr(), input_context,
+                     std::move(callback)));
 }
 
 void RequestHandlerImpl::GetModelResult(
@@ -101,6 +110,7 @@
 }
 
 void RequestHandlerImpl::OnGetModelResultForClassification(
+    scoped_refptr<InputContext> input_context,
     ClassificationResultCallback classification_callback,
     std::unique_ptr<SegmentResultProvider::SegmentResult> result) {
   PostProcessor post_processor;
@@ -109,6 +119,14 @@
   if (result) {
     ordered_labels = post_processor.GetClassifierResults(result->result);
     status = ResultStateToPredictionStatus(result->state);
+
+    // Collect training data. The execution service and training data collector
+    // might be null in testing.
+    if (execution_service_ && execution_service_->training_data_collector()) {
+      execution_service_->training_data_collector()->OnDecisionTime(
+          config_.segments.begin()->first, input_context,
+          proto::TrainingOutputs::TriggerConfig::ONDEMAND);
+    }
   }
   ClassificationResult classification_result(status);
   classification_result.ordered_labels = ordered_labels;
@@ -122,9 +140,10 @@
 // static
 std::unique_ptr<RequestHandler> RequestHandler::Create(
     const Config& config,
-    std::unique_ptr<SegmentResultProvider> result_provider) {
-  return std::make_unique<RequestHandlerImpl>(config,
-                                              std::move(result_provider));
+    std::unique_ptr<SegmentResultProvider> result_provider,
+    ExecutionService* execution_service) {
+  return std::make_unique<RequestHandlerImpl>(
+      config, std::move(result_provider), execution_service);
 }
 
 }  // namespace segmentation_platform
diff --git a/components/segmentation_platform/internal/selection/request_handler.h b/components/segmentation_platform/internal/selection/request_handler.h
index c61cb38..d7b413c 100644
--- a/components/segmentation_platform/internal/selection/request_handler.h
+++ b/components/segmentation_platform/internal/selection/request_handler.h
@@ -7,6 +7,8 @@
 
 #include "base/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
+#include "components/segmentation_platform/internal/data_collection/training_data_collector.h"
+#include "components/segmentation_platform/internal/scheduler/execution_service.h"
 #include "components/segmentation_platform/internal/selection/segment_result_provider.h"
 #include "components/segmentation_platform/public/input_context.h"
 #include "components/segmentation_platform/public/result.h"
@@ -26,7 +28,8 @@
   // Creates the instance.
   static std::unique_ptr<RequestHandler> Create(
       const Config& config,
-      std::unique_ptr<SegmentResultProvider> result_provider);
+      std::unique_ptr<SegmentResultProvider> result_provider,
+      ExecutionService* execution_service);
 
   // Client API. See `SegmentationPlatformService::GetClassificationResult`.
   virtual void GetClassificationResult(
diff --git a/components/segmentation_platform/internal/selection/request_handler_unittest.cc b/components/segmentation_platform/internal/selection/request_handler_unittest.cc
index 999a4c8..5256aea 100644
--- a/components/segmentation_platform/internal/selection/request_handler_unittest.cc
+++ b/components/segmentation_platform/internal/selection/request_handler_unittest.cc
@@ -64,7 +64,8 @@
     config_ = CreateTestConfig();
     auto provider = std::make_unique<MockResultProvider>();
     result_provider_ = provider.get();
-    request_handler_ = RequestHandler::Create(*config_, std::move(provider));
+    request_handler_ =
+        RequestHandler::Create(*config_, std::move(provider), nullptr);
   }
 
   void OnGetClassificationResult(base::RepeatingClosure closure,
diff --git a/components/translate/content/android/java/res/layout/translate_menu_item_checked.xml b/components/translate/content/android/java/res/layout/translate_menu_item_checked.xml
index 93cebc2..a44f650 100644
--- a/components/translate/content/android/java/res/layout/translate_menu_item_checked.xml
+++ b/components/translate/content/android/java/res/layout/translate_menu_item_checked.xml
@@ -17,7 +17,8 @@
     <LinearLayout
         style="@style/AppMenuItem"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content" >
+        android:layout_height="wrap_content"
+        tools:ignore="UseCompoundDrawables">
 
         <TextView
             android:id="@+id/menu_item_text"
@@ -37,7 +38,8 @@
             android:layout_height="match_parent"
             android:layout_gravity="end"
             android:gravity="center_vertical"
-            app:tint="@color/default_icon_color_tint_list" />
+            app:tint="@color/default_icon_color_tint_list"
+            android:importantForAccessibility="no" />
 
     </LinearLayout>
 
@@ -49,4 +51,3 @@
         android:visibility="gone" />
 
 </LinearLayout>
-
diff --git a/components/translate/core/browser/translate_infobar_delegate.cc b/components/translate/core/browser/translate_infobar_delegate.cc
index fbf4386..e270c236 100644
--- a/components/translate/core/browser/translate_infobar_delegate.cc
+++ b/components/translate/core/browser/translate_infobar_delegate.cc
@@ -123,6 +123,10 @@
   return language_name_at(ui_delegate_.GetSourceLanguageIndex());
 }
 
+std::u16string TranslateInfoBarDelegate::initial_source_language_name() const {
+  return language_name_at(ui_delegate_.GetInitialSourceLanguageIndex());
+}
+
 std::u16string TranslateInfoBarDelegate::target_language_name() const {
   return language_name_at(ui_delegate_.GetTargetLanguageIndex());
 }
diff --git a/components/translate/core/browser/translate_infobar_delegate.h b/components/translate/core/browser/translate_infobar_delegate.h
index f3db7d91..587c80e1 100644
--- a/components/translate/core/browser/translate_infobar_delegate.h
+++ b/components/translate/core/browser/translate_infobar_delegate.h
@@ -102,6 +102,8 @@
 
   virtual std::u16string source_language_name() const;
 
+  virtual std::u16string initial_source_language_name() const;
+
   virtual std::u16string unknown_language_name() const;
 
   virtual void UpdateSourceLanguage(const std::string& language_code);
diff --git a/components/translate/core/browser/translate_ui_delegate.h b/components/translate/core/browser/translate_ui_delegate.h
index 41dea2c..793339b 100644
--- a/components/translate/core/browser/translate_ui_delegate.h
+++ b/components/translate/core/browser/translate_ui_delegate.h
@@ -61,6 +61,11 @@
   // Returns the source language index.
   size_t GetSourceLanguageIndex() const { return source_language_index_; }
 
+  // Returns the initial source language index.
+  size_t GetInitialSourceLanguageIndex() const {
+    return initial_source_language_index_;
+  }
+
   // Returns the source language code.
   std::string GetSourceLanguageCode() const;
 
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index a00f476..854ec92 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4273,7 +4273,7 @@
   // happens, delete the frame and both the new and old documents. Unload
   // handlers aren't guaranteed to run here.
   if (is_waiting_for_unload_ack_) {
-    parent_->RemoveChild(frame_tree_node_);
+    parent_->RemoveChild(GetFrameTreeNodeForUnload());
     return;
   }
 
@@ -4304,7 +4304,7 @@
   // descendant frames to execute unload handlers. Start executing those
   // handlers now.
   StartPendingDeletionOnSubtree(PendingDeletionReason::kFrameDetach);
-  frame_tree()->FrameUnloading(frame_tree_node_);
+  frame_tree()->FrameUnloading(GetFrameTreeNodeForUnload());
 
   // Some children with no unload handler may be eligible for immediate
   // deletion. Cut the dead branches now. This is a performance optimization.
@@ -4827,7 +4827,7 @@
   // Start pending deletion on this frame and its children.
   DeleteRenderFrame(mojom::FrameDeleteIntention::kNotMainFrame);
   StartPendingDeletionOnSubtree(PendingDeletionReason::kFrameDetach);
-  frame_tree()->FrameUnloading(frame_tree_node_);
+  frame_tree()->FrameUnloading(GetFrameTreeNodeForUnload());
 
   // Some children with no unload handler may be eligible for immediate
   // deletion. Cut the dead branches now. This is a performance optimization.
@@ -5072,7 +5072,8 @@
   }
 
   bool deleted =
-      frame_tree_node_->render_manager()->DeleteFromPendingList(this);
+      GetFrameTreeNodeForUnload()->render_manager()->DeleteFromPendingList(
+          this);
   CHECK(deleted);
 }
 
@@ -5549,7 +5550,7 @@
   proto.Set(TraceProto::kRenderFrameHostId, GetGlobalId());
   proto->set_frame_tree_node_id(frame_tree_node_->frame_tree_node_id());
   proto->set_lifecycle_state(LifecycleStateToProto());
-  proto->set_frame_type(FrameTypeToProto(frame_tree_node_->GetFrameType()));
+  proto->set_frame_type(GetFrameTypeProto());
   proto->set_origin(GetLastCommittedOrigin().GetDebugString());
   proto->set_url(GetLastCommittedURL().possibly_invalid_spec());
   proto.Set(TraceProto::kProcess, GetProcess());
@@ -5591,6 +5592,26 @@
   return RFHProto::UNSPECIFIED;
 }
 
+perfetto::protos::pbzero::FrameTreeNodeInfo::FrameType
+RenderFrameHostImpl::GetFrameTypeProto() const {
+  using RFHProto = perfetto::protos::pbzero::FrameTreeNodeInfo;
+
+  if (GetParent())
+    return RFHProto::SUBFRAME;
+  if (const_cast<RenderFrameHostImpl*>(this)->GetPage().IsPrimary())
+    return RFHProto::PRIMARY_MAIN_FRAME;
+  if (lifecycle_state() == LifecycleStateImpl::kPrerendering)
+    return RFHProto::PRERENDER_MAIN_FRAME;
+  if (IsFencedFrameRoot())
+    return RFHProto::FENCED_FRAME_ROOT;
+
+  // It returns a different value from FrameTreeNode::GetFrameType() when
+  // - `this` is a speculative RFH or
+  // - `this` is not in a frame tree (e.g., IsInBackForwardCache() or
+  // IsPendingDeletion()).
+  return RFHProto::UNSPECIFIED_FRAME_TYPE;
+}
+
 StoragePartitionImpl* RenderFrameHostImpl::GetStoragePartition() {
   // Both RenderProcessHostImpl and MockRenderProcessHost obtain the
   // StoragePartition instance through BrowserContext::GetStoragePartition()
@@ -8788,7 +8809,7 @@
       OnUnloaded();  // Delete |this|.
       // Do not add code after this.
     } else {
-      parent_->RemoveChild(frame_tree_node_);
+      parent_->RemoveChild(GetFrameTreeNodeForUnload());
     }
   }
 }
@@ -8870,7 +8891,7 @@
 
 void RenderFrameHostImpl::OnUnloadTimeout() {
   DCHECK(IsPendingDeletion());
-  parent_->RemoveChild(frame_tree_node_);
+  parent_->RemoveChild(GetFrameTreeNodeForUnload());
 }
 
 void RenderFrameHostImpl::SetFocusedFrame() {
@@ -12720,24 +12741,25 @@
 }
 
 void RenderFrameHostImpl::EnsureDescendantsAreUnloading() {
-  std::vector<RenderFrameHostImpl*> parents_to_be_checked = {this};
-  std::vector<RenderFrameHostImpl*> rfhs_to_be_checked;
-  while (!parents_to_be_checked.empty()) {
-    RenderFrameHostImpl* document = parents_to_be_checked.back();
-    parents_to_be_checked.pop_back();
+  std::vector<FrameTreeNode*> frame_to_remove;
+  std::vector<RenderFrameHostImpl*> rfh_to_be_checked = {this};
+  while (!rfh_to_be_checked.empty()) {
+    RenderFrameHostImpl* document = rfh_to_be_checked.back();
+    rfh_to_be_checked.pop_back();
 
-    for (auto& subframe : document->children_) {
-      RenderFrameHostImpl* child = subframe->current_frame_host();
-      // Every child is expected to be pending deletion. If it isn't the
-      // case, their FrameTreeNode is immediately removed from the tree.
-      if (!child->IsPendingDeletion())
-        rfhs_to_be_checked.push_back(child);
-      else
-        parents_to_be_checked.push_back(child);
+    // Every child is expected to be pending deletion. If it isn't the case,
+    // their FrameTreeNode is immediately removed from the tree.
+    for (auto& iframe : document->children_) {
+      if (iframe->current_frame_host()->IsPendingDeletion()) {
+        rfh_to_be_checked.push_back(iframe->current_frame_host());
+      } else {
+        frame_to_remove.push_back(iframe.get());
+      }
     }
   }
-  for (RenderFrameHostImpl* document : rfhs_to_be_checked)
-    document->parent_->RemoveChild(document->frame_tree_node());
+  for (FrameTreeNode* child : frame_to_remove) {
+    child->parent()->RemoveChild(child);
+  }
 }
 
 void RenderFrameHostImpl::AddMessageToConsoleImpl(
@@ -13551,6 +13573,11 @@
       .GetBackForwardCache();
 }
 
+FrameTreeNode* RenderFrameHostImpl::GetFrameTreeNodeForUnload() {
+  DCHECK(IsPendingDeletion());
+  return frame_tree_node_;
+}
+
 void RenderFrameHostImpl::MaybeEvictFromBackForwardCache() {
   if (!IsInBackForwardCache())
     return;
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index ad89c4e..4e0276c 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -35,6 +35,7 @@
 #include "base/threading/sequence_bound.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "base/tracing/protos/chrome_track_event.pbzero.h"
 #include "base/types/pass_key.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
@@ -3697,6 +3698,9 @@
 
   TraceProto::LifecycleState LifecycleStateToProto() const;
 
+  perfetto::protos::pbzero::FrameTreeNodeInfo::FrameType GetFrameTypeProto()
+      const;
+
   void BindCacheStorageInternal(
       mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
       const storage::BucketLocator& bucket_locator);
@@ -3707,6 +3711,14 @@
   // Returns the BackForwardCacheImpl for the outermost main frame.
   BackForwardCacheImpl& GetBackForwardCache();
 
+  // Return the FrameTreeNode currently owning this RenderFrameHost. In general,
+  // we don't want the RenderFrameHost to depend on it, because it might change,
+  // or might be missing. An exception is made here during unload. It is invalid
+  // to use this function elsewhere.
+  // In other cases, the use of the RenderFrameHostOwner interface should be
+  // used for communicating with the FrameTreeNode.
+  FrameTreeNode* GetFrameTreeNodeForUnload();
+
   // Stores an override of this document's base URL when it does not match the
   // last committed URL or an inherited value (e.g., if a <base> element is
   // added). This is tracked for all frames, for the purpose of GetBaseUrl. This
diff --git a/content/browser/renderer_host/render_frame_host_manager_unittest.cc b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
index c74de9d1..9d8b701 100644
--- a/content/browser/renderer_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
@@ -219,34 +219,6 @@
   bool created_;
 };
 
-// This WebContents observer keep track of its RVH change.
-class RenderViewHostChangedObserver : public WebContentsObserver {
- public:
-  explicit RenderViewHostChangedObserver(WebContents* web_contents)
-      : WebContentsObserver(web_contents), host_changed_(false) {}
-
-  RenderViewHostChangedObserver(const RenderViewHostChangedObserver&) = delete;
-  RenderViewHostChangedObserver& operator=(
-      const RenderViewHostChangedObserver&) = delete;
-
-  // WebContentsObserver.
-  void RenderViewHostChanged(RenderViewHost* old_host,
-                             RenderViewHost* new_host) override {
-    host_changed_ = true;
-  }
-
-  bool DidHostChange() {
-    bool host_changed = host_changed_;
-    Reset();
-    return host_changed;
-  }
-
-  void Reset() { host_changed_ = false; }
-
- private:
-  bool host_changed_;
-};
-
 // This observer is used to check whether IPC messages are being filtered for
 // swapped out RenderFrameHost objects. It observes the plugin crash and favicon
 // update events, which the FilterMessagesWhileSwappedOut test simulates being
@@ -906,11 +878,11 @@
 TEST_P(RenderFrameHostManagerTest, Navigate) {
   std::unique_ptr<TestWebContents> web_contents(TestWebContents::Create(
       browser_context(), SiteInstance::Create(browser_context())));
-  RenderViewHostChangedObserver change_observer(web_contents.get());
 
   RenderFrameHostManager* manager =
       web_contents->GetPrimaryFrameTree().root()->render_manager();
   RenderFrameHostImpl* host = nullptr;
+  RenderViewHost* initial_render_view_host = nullptr;
 
   // 1) The first navigation. --------------------------
   const GURL kUrl1("http://www.google.com/");
@@ -948,6 +920,8 @@
       true /* is_renderer_init */, nullptr /* blob_url_loader_factory */,
       false /* is_initial_entry */);
   host = NavigateToEntry(manager, &entry2);
+  initial_render_view_host = host->GetRenderViewHost();
+  EXPECT_TRUE(initial_render_view_host);
 
   // The RenderFrameHost created in Init will be reused.
   EXPECT_TRUE(host == manager->current_frame_host());
@@ -978,19 +952,16 @@
   EXPECT_TRUE(GetPendingFrameHost(manager));
   ASSERT_EQ(host, GetPendingFrameHost(manager));
 
-  change_observer.Reset();
-
   // Commit.
   DidNavigateFrame(manager, GetPendingFrameHost(manager));
   EXPECT_TRUE(host == manager->current_frame_host());
   ASSERT_TRUE(host);
   EXPECT_TRUE(host->GetSiteInstance()->HasSite());
+  EXPECT_NE(initial_render_view_host, host->GetRenderViewHost());
+
   // Check the pending RenderFrameHost has been committed.
   EXPECT_FALSE(GetPendingFrameHost(manager));
 
-  // We should observe RVH changed event.
-  EXPECT_TRUE(change_observer.DidHostChange());
-
   ASSERT_TRUE(manager->GetRenderWidgetHostView()->GetBackgroundColor());
   EXPECT_EQ(SK_ColorRED,
             *manager->GetRenderWidgetHostView()->GetBackgroundColor());
@@ -1618,7 +1589,6 @@
   BeforeUnloadFiredWebContentsDelegate delegate;
   std::unique_ptr<TestWebContents> web_contents(
       TestWebContents::Create(browser_context(), instance));
-  RenderViewHostChangedObserver change_observer(web_contents.get());
   web_contents->SetDelegate(&delegate);
 
   RenderFrameHostManager* manager =
@@ -1638,9 +1608,6 @@
   EXPECT_EQ(host, manager->current_frame_host());
   EXPECT_FALSE(GetPendingFrameHost(manager));
 
-  // We should observe RVH changed event.
-  EXPECT_TRUE(change_observer.DidHostChange());
-
   // Commit.
   DidNavigateFrame(manager, host);
 
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 98f1e35a5..b5edd46 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -5006,6 +5006,12 @@
     DCHECK(!child_process_launcher_->IsStarting());
 #if BUILDFLAG(IS_ANDROID)
     child_process_launcher_->SetRenderProcessPriority(priority_);
+#elif BUILDFLAG(IS_MAC)
+    if (base::FeatureList::IsEnabled(
+            features::kMacAllowBackgroundingRenderProcesses)) {
+      child_process_launcher_->SetProcessBackgrounded(
+          priority_.is_background());
+    }
 #else
     child_process_launcher_->SetProcessBackgrounded(priority_.is_background());
 #endif
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 271ff02..c679be4 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -6875,8 +6875,6 @@
   // notification so that clients that pick up a pointer to |this| can NULL the
   // pointer.  See Bug 1230284.
   notify_disconnection_ = true;
-  observers_.NotifyObservers(&WebContentsObserver::RenderViewHostChanged,
-                             old_view, new_view);
   view_->RenderViewHostChanged(old_view, new_view);
 
   // If this is an inner WebContents that has swapped views, we need to reattach
@@ -8202,10 +8200,6 @@
   DCHECK_NE(new_frame->lifecycle_state(),
             RenderFrameHostImpl::LifecycleStateImpl::kSpeculative);
 
-  // Only fire RenderViewHostChanged if it is related to our FrameTree, as
-  // observers can not deal with events coming from non-primary FrameTree.
-  // TODO(https://crbug.com/1168562): Update observers to deal with the events,
-  // and fire events for all frame trees.
   if (new_frame->IsInPrimaryMainFrame()) {
     // The |new_frame| and its various compadres are already swapped into place
     // for the WebContentsImpl when this method is called.
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 7ee1ce2..c5fabefe 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -187,7 +187,6 @@
     "frame_accept_header.cc",
     "frame_accept_header.h",
     "frame_rate_throttling.h",
-    "frame_type.cc",
     "frame_type.h",
     "generated_code_cache_settings.h",
     "global_request_id.cc",
diff --git a/content/public/browser/frame_type.cc b/content/public/browser/frame_type.cc
deleted file mode 100644
index d197076..0000000
--- a/content/public/browser/frame_type.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/public/browser/frame_type.h"
-
-#include "base/tracing/protos/chrome_track_event.pbzero.h"
-
-namespace content {
-
-perfetto::protos::pbzero::FrameTreeNodeInfo::FrameType FrameTypeToProto(
-    FrameType frame_type) {
-  using RFHProto = perfetto::protos::pbzero::FrameTreeNodeInfo;
-  switch (frame_type) {
-    case FrameType::kSubframe:
-      return RFHProto::SUBFRAME;
-    case FrameType::kPrimaryMainFrame:
-      return RFHProto::PRIMARY_MAIN_FRAME;
-    case FrameType::kPrerenderMainFrame:
-      return RFHProto::PRERENDER_MAIN_FRAME;
-    case FrameType::kFencedFrameRoot:
-      return RFHProto::FENCED_FRAME_ROOT;
-  }
-
-  return RFHProto::UNSPECIFIED_FRAME_TYPE;
-}
-
-}  // namespace content
diff --git a/content/public/browser/frame_type.h b/content/public/browser/frame_type.h
index 30e3afb..b7a743f5 100644
--- a/content/public/browser/frame_type.h
+++ b/content/public/browser/frame_type.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_PUBLIC_BROWSER_FRAME_TYPE_H_
 #define CONTENT_PUBLIC_BROWSER_FRAME_TYPE_H_
 
-#include "base/tracing/protos/chrome_track_event.pbzero.h"
 #include "content/common/content_export.h"
 
 namespace content {
@@ -44,9 +43,6 @@
   // or guestviews.
 };
 
-perfetto::protos::pbzero::FrameTreeNodeInfo::FrameType FrameTypeToProto(
-    FrameType frame_type);
-
 }  // namespace content
 
 #endif  // CONTENT_PUBLIC_BROWSER_FRAME_TYPE_H_
diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h
index d89d18e..7038d905 100644
--- a/content/public/browser/web_contents_observer.h
+++ b/content/public/browser/web_contents_observer.h
@@ -242,13 +242,6 @@
   virtual void PrimaryMainFrameRenderProcessGone(
       base::TerminationStatus status) {}
 
-  // This method is invoked when a WebContents swaps its visible RenderViewHost
-  // with another one, possibly changing processes. The RenderViewHost that has
-  // been replaced is in |old_host|, which is nullptr if the old RVH was shut
-  // down.
-  virtual void RenderViewHostChanged(RenderViewHost* old_host,
-                                     RenderViewHost* new_host) {}
-
   // This method is invoked when a process in the WebContents becomes
   // unresponsive.
   virtual void OnRendererUnresponsive(RenderProcessHost* render_process_host) {}
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index b3bf4ff1..b38e833a 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -1477,6 +1477,11 @@
              "IOSurfaceCapturer",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+// Enables backgrounding hidden renderers on Mac.
+BASE_FEATURE(kMacAllowBackgroundingRenderProcesses,
+             "MacAllowBackgroundingRenderProcesses",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kMacSyscallSandbox,
              "MacSyscallSandbox",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 5915dcd..8fc0ec7 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -328,6 +328,7 @@
 #if BUILDFLAG(IS_MAC)
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kDeviceMonitorMac);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kIOSurfaceCapturer);
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacAllowBackgroundingRenderProcesses);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacSyscallSandbox);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacWebContentsOcclusion);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kRetryGetVideoCaptureDeviceInfos);
diff --git a/content/public/test/mock_web_contents_observer.h b/content/public/test/mock_web_contents_observer.h
index 90ce0176..ec6f18056 100644
--- a/content/public/test/mock_web_contents_observer.h
+++ b/content/public/test/mock_web_contents_observer.h
@@ -60,10 +60,6 @@
               (base::TerminationStatus status),
               (override));
   MOCK_METHOD(void,
-              RenderViewHostChanged,
-              (RenderViewHost* old_host, RenderViewHost* new_host),
-              (override));
-  MOCK_METHOD(void,
               OnRendererUnresponsive,
               (RenderProcessHost* render_process_host),
               (override));
diff --git a/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt
index 0a1e925..ac33adc3 100644
--- a/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt
@@ -106,6 +106,9 @@
 # Seems to kill the system UI/otherwise make the device unusable.
 crbug.com/1294065 [ android android-shield-android-tv ] GpuProcess_visibility [ Skip ]
 
+# SwiftShader is disabled on Mac M1
+crbug.com/1378476 [ mac mac-arm64 angle-swiftshader ] GpuProcess_swiftshader_for_webgl [ Skip ]
+
 ###################
 # Failures/Flakes #
 ###################
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 d7d83f5..db9340c 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -394,7 +394,6 @@
 crbug.com/1376927 [ win10 target-cpu-32 nvidia-0x2184 ] Pixel_MediaFoundationClearDirectComposition [ Failure ]
 
 # Pixel_MediaRecorderFromVideoElement fails on several FYI bots
-crbug.com/1382332 [ win10 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ win10 ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ mac ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ mac ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
index b679a6d..a255fcf 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -543,10 +543,7 @@
 crbug.com/982292 [ mac nvidia angle-opengl passthrough ] deqp/functional/gles3/instancedrendering.html [ Failure ]
 
 # Mac ASAN
-crbug.com/1403824 [ mac asan passthrough ] deqp/functional/gles3/vertexarrays/multiple_attributes.stride.html [ RetryOnFailure ]
 crbug.com/1403824 [ mac asan passthrough ] deqp/functional/gles3/vertexarrays/single_attribute.first.html [ RetryOnFailure ]
-crbug.com/1403824 [ mac asan passthrough ] deqp/functional/gles3/vertexarrays/single_attribute.usage.stream_copy.html [ RetryOnFailure ]
-crbug.com/1403830 [ mac asan passthrough ] deqp/data/gles3/shaders/declarations.html [ RetryOnFailure ]
 
 ####################
 # Linux failures   #
@@ -596,8 +593,6 @@
 crbug.com/1176485 [ android qualcomm ] conformance2/glsl3/uint-int-shift-bug.html [ Failure ]
 crbug.com/1000354 [ android android-pixel-2 passthrough ] conformance2/reading/read-pixels-from-fbo-test.html [ Failure ]
 crbug.com/1027125 [ android qualcomm ] deqp/functional/gles3/negativetextureapi.html [ Failure ]
-crbug.com/1092734 [ android android-pixel-2 passthrough ] conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ]
-crbug.com/1092734 [ android android-pixel-2 passthrough ] conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ]
 crbug.com/1143323 [ android android-pixel-2 passthrough ] conformance/rendering/draw-arrays-out-of-bounds.html [ Failure ]
 crbug.com/1276186 [ android android-pixel-2 ] conformance2/glsl3/array-equality.html [ Failure ]
 crbug.com/angleproject/7421 [ android android-pixel-2 ] conformance2/renderbuffers/invalidate-framebuffer.html [ 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 04d3b4d04..6c80fdd8 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
@@ -270,6 +270,9 @@
 # Skip test that breaks subsequent tests.
 crbug.com/1043953 [ chromeos chromeos-board-amd64-generic ] conformance/textures/misc/texture-size-limit.html [ Skip ]
 
+# SwiftShader is disabled on Mac M1
+crbug.com/1378476 [ mac mac-arm64 angle-swiftshader ] conformance/rendering/gl-drawelements.html [ Skip ]
+
 ###################
 # Failures/Flakes #
 ###################
diff --git a/ios/chrome/browser/download/confirm_download_closing_overlay.mm b/ios/chrome/browser/download/confirm_download_closing_overlay.mm
index 9ac9850..9c141a0 100644
--- a/ios/chrome/browser/download/confirm_download_closing_overlay.mm
+++ b/ios/chrome/browser/download/confirm_download_closing_overlay.mm
@@ -21,18 +21,18 @@
 
 void ConfirmDownloadClosingRequest::CreateAuxiliaryData(
     base::SupportsUserData* user_data) {
-  const std::vector<alert_overlays::ButtonConfig> buttons{
-      alert_overlays::ButtonConfig(
+  const std::vector<std::vector<alert_overlays::ButtonConfig>> buttons{
+      {alert_overlays::ButtonConfig(
           l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_STOP),
-          kDownloadCloseActionName),
-      alert_overlays::ButtonConfig(
+          kDownloadCloseActionName)},
+      {alert_overlays::ButtonConfig(
           l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_CONTINUE),
-          kDownloadDoNotCloseActionName, UIAlertActionStyleCancel)};
+          kDownloadDoNotCloseActionName, UIAlertActionStyleCancel)}};
   alert_overlays::AlertRequest::CreateForUserData(
       user_data,
       l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_CANCEL_CONFIRMATION),
       /*message=*/nil,
       /*accessibility_identifier=*/nil,
       /*text_fields=*/nil, buttons,
-      GetConfirmationResponseConverter(/*confirm_button_index=*/0));
+      GetConfirmationResponseConverter(/*confirm_button_row_index=*/0));
 }
diff --git a/ios/chrome/browser/download/confirm_download_replacing_overlay.mm b/ios/chrome/browser/download/confirm_download_replacing_overlay.mm
index 43b1e384..989c94922 100644
--- a/ios/chrome/browser/download/confirm_download_replacing_overlay.mm
+++ b/ios/chrome/browser/download/confirm_download_replacing_overlay.mm
@@ -23,16 +23,16 @@
 
 void ConfirmDownloadReplacingRequest::CreateAuxiliaryData(
     base::SupportsUserData* user_data) {
-  const std::vector<alert_overlays::ButtonConfig> buttons{
-      alert_overlays::ButtonConfig(GetNSString(IDS_OK),
-                                   kDownloadReplaceActionName),
-      alert_overlays::ButtonConfig(GetNSString(IDS_CANCEL),
-                                   kDownloadDoNotReplaceActionName,
-                                   UIAlertActionStyleCancel)};
+  const std::vector<std::vector<alert_overlays::ButtonConfig>> buttons{
+      {alert_overlays::ButtonConfig(GetNSString(IDS_OK),
+                                    kDownloadReplaceActionName)},
+      {alert_overlays::ButtonConfig(GetNSString(IDS_CANCEL),
+                                    kDownloadDoNotReplaceActionName,
+                                    UIAlertActionStyleCancel)}};
   alert_overlays::AlertRequest::CreateForUserData(
       user_data, GetNSString(IDS_IOS_DOWNLOAD_MANAGER_REPLACE_CONFIRMATION),
       GetNSString(IDS_IOS_DOWNLOAD_MANAGER_REPLACE_CONFIRMATION_MESSAGE),
       /*accessibility_identifier=*/nil,
       /*text_fields=*/nil, buttons,
-      GetConfirmationResponseConverter(/*confirm_button_index=*/0));
+      GetConfirmationResponseConverter(/*confirm_button_row_index=*/0));
 }
diff --git a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.h b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.h
index e67d7bc..5d1a0fb 100644
--- a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.h
+++ b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.h
@@ -8,9 +8,10 @@
 #import "ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h"
 
 // Utility function for creating a ResponseConverter that returns a
-// ConfirmationOverlayResponse.  `confirm_button_index` is the button index of
-// an AlertRequest's button configs that corresponds with a confirm action.
+// ConfirmationOverlayResponse.  `confirm_button_row_index` is the button row
+// index of an AlertRequest's button configs that corresponds with a confirm
+// action.
 alert_overlays::ResponseConverter GetConfirmationResponseConverter(
-    size_t confirm_button_index);
+    size_t confirm_button_row_index);
 
 #endif  // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_COMMON_CONFIRMATION_CONFIRMATION_OVERLAY_RESPONSE_UTIL_H_
diff --git a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.mm b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.mm
index 6b50895b..035d493 100644
--- a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.mm
+++ b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util.mm
@@ -18,19 +18,19 @@
 namespace {
 // Parses the AlertResponse from `response` and produces a
 // ConfirmationOverlayResponse if the alert response's tapped button is
-// `confirm_button_index`.
+// `confirm_button_row_index`.
 std::unique_ptr<OverlayResponse> CreateConfirmResponse(
-    size_t confirm_button_index,
+    size_t confirm_button_row_index,
     std::unique_ptr<OverlayResponse> response) {
   AlertResponse* alert_response = response->GetInfo<AlertResponse>();
   if (!alert_response)
     return nullptr;
   return OverlayResponse::CreateWithInfo<ConfirmationOverlayResponse>(
-      alert_response->tapped_button_index() == confirm_button_index);
+      alert_response->tapped_button_row_index() == confirm_button_row_index);
 }
 }
 
 alert_overlays::ResponseConverter GetConfirmationResponseConverter(
-    size_t confirm_button_index) {
-  return base::BindRepeating(&CreateConfirmResponse, confirm_button_index);
+    size_t confirm_button_row_index) {
+  return base::BindRepeating(&CreateConfirmResponse, confirm_button_row_index);
 }
diff --git a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util_unittest.mm b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util_unittest.mm
index 018d5a4..4469bb6 100644
--- a/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util_unittest.mm
+++ b/ios/chrome/browser/overlays/public/common/confirmation/confirmation_overlay_response_util_unittest.mm
@@ -31,7 +31,9 @@
       GetConfirmationResponseConverter(kOkButtonIndex);
 
   std::unique_ptr<OverlayResponse> confirmed_alert_response =
-      OverlayResponse::CreateWithInfo<AlertResponse>(kOkButtonIndex, nil);
+      OverlayResponse::CreateWithInfo<AlertResponse>(
+          /*tapped_button_row_index=*/kOkButtonIndex,
+          /*tapped_button_column_index=*/0, nil);
   std::unique_ptr<OverlayResponse> confirmed_response =
       converter.Run(std::move(confirmed_alert_response));
   ASSERT_TRUE(confirmed_response);
@@ -49,7 +51,9 @@
       GetConfirmationResponseConverter(kOkButtonIndex);
 
   std::unique_ptr<OverlayResponse> denied_alert_response =
-      OverlayResponse::CreateWithInfo<AlertResponse>(kOkButtonIndex + 1, nil);
+      OverlayResponse::CreateWithInfo<AlertResponse>(
+          /*tapped_button_row_index=*/kOkButtonIndex + 1,
+          /*tapped_button_column_index=*/0, nil);
   std::unique_ptr<OverlayResponse> denied_response =
       converter.Run(std::move(denied_alert_response));
   ASSERT_TRUE(denied_response);
diff --git a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
index 1e44f76..c0cbac1 100644
--- a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
@@ -27,6 +27,10 @@
   translate::TranslateStep current_step() const { return current_step_; }
   // The source language name.
   std::u16string source_language_name() const { return source_language_name_; }
+  // The initial source language name.
+  std::u16string initial_source_language_name() const {
+    return initial_source_language_name_;
+  }
   // A special language name the is used when the source language could not be
   // detected.
   std::u16string unknown_language_name() const {
@@ -62,6 +66,7 @@
   // Configuration data extracted from `infobar_`'s translate delegate.
   translate::TranslateStep current_step_;
   std::u16string source_language_name_;
+  std::u16string initial_source_language_name_;
   std::u16string unknown_language_name_;
   std::u16string target_language_name_;
   std::vector<std::u16string> language_names_;
diff --git a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.mm b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.mm
index 037346a..4cd37d93 100644
--- a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.mm
+++ b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.mm
@@ -28,6 +28,7 @@
 
   current_step_ = delegate->translate_step();
   source_language_name_ = delegate->source_language_name();
+  initial_source_language_name_ = delegate->initial_source_language_name();
   target_language_name_ = delegate->target_language_name();
   unknown_language_name_ = delegate->unknown_language_name();
   for (size_t i = 0; i < delegate->num_languages(); ++i) {
diff --git a/ios/chrome/browser/overlays/public/web_content_area/BUILD.gn b/ios/chrome/browser/overlays/public/web_content_area/BUILD.gn
index 0649293..9fe529d9 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/BUILD.gn
+++ b/ios/chrome/browser/overlays/public/web_content_area/BUILD.gn
@@ -18,6 +18,8 @@
     "java_script_dialog_overlay_utils.mm",
     "java_script_prompt_dialog_overlay.h",
     "java_script_prompt_dialog_overlay.mm",
+    "permissions_dialog_overlay.h",
+    "permissions_dialog_overlay.mm",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
@@ -27,10 +29,12 @@
     "//base",
     "//components/strings",
     "//ios/chrome/app/strings",
+    "//ios/chrome/app/strings",
     "//ios/chrome/browser/overlays",
     "//ios/chrome/browser/ui/dialogs",
     "//ios/chrome/browser/ui/elements",
     "//ios/web/public",
+    "//ios/web/public/permissions",
     "//ui/base",
     "//url",
   ]
@@ -53,6 +57,7 @@
     "java_script_confirm_dialog_overlay_unittest.mm",
     "java_script_dialog_overlay_utils_unittest.mm",
     "java_script_prompt_dialog_overlay_unittest.mm",
+    "permissions_dialog_overlay_unittest.mm",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h b/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h
index 5ba6d11..a0bd9834 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h
+++ b/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h
@@ -108,8 +108,9 @@
   NSArray<TextFieldConfiguration*>* text_field_configs() const {
     return text_field_configs_;
   }
-  // The button titles.  All alerts must have at least one button.
-  const std::vector<ButtonConfig>& button_configs() const {
+  // The button styles, titles and placement, with each child vector being a
+  // horizontal list of buttons.  All alerts must have at least one button.
+  const std::vector<std::vector<ButtonConfig>>& button_configs() const {
     return button_configs_;
   }
   // Callback that converts an alert-specific OverlayResponse to one exposing
@@ -121,7 +122,7 @@
  private:
   OVERLAY_USER_DATA_SETUP(AlertRequest);
 
-  // Constructor called by CreateForUserData().  All arguments are copied to the
+  // Constructor called by CreateForUserData(). All arguments are copied to the
   // ivars below.  `title`, `message`, or both must be non-empty strings.
   // `button_configs` must contain at least one ButtonConfig.
   // `response_converter` must be non-null.
@@ -129,14 +130,14 @@
                NSString* message,
                NSString* accessibility_identifier,
                NSArray<TextFieldConfiguration*>* text_field_configs,
-               const std::vector<ButtonConfig>& button_configs,
+               const std::vector<std::vector<ButtonConfig>>& button_configs,
                ResponseConverter response_converter);
 
   NSString* title_ = nil;
   NSString* message_ = nil;
   NSString* accessibility_identifier_ = nil;
   NSArray<TextFieldConfiguration*>* text_field_configs_ = nil;
-  const std::vector<ButtonConfig> button_configs_;
+  const std::vector<std::vector<ButtonConfig>> button_configs_;
   ResponseConverter response_converter_;
 };
 
@@ -145,17 +146,23 @@
  public:
   ~AlertResponse() override;
 
-  // The index of the button tapped by the user to close the dialog.
-  size_t tapped_button_index() const { return tapped_button_index_; }
+  // The row index of the button tapped by the user to close the dialog.
+  size_t tapped_button_row_index() const { return tapped_button_row_index_; }
+  // The column index of the button tapped by the user to close the dialog.
+  size_t tapped_button_column_index() const {
+    return tapped_button_column_index_;
+  }
   // The values of the text fields when the button was tapped.
   NSArray<NSString*>* text_field_values() const { return text_field_values_; }
 
  private:
   OVERLAY_USER_DATA_SETUP(AlertResponse);
-  AlertResponse(size_t tapped_button_index,
+  AlertResponse(size_t tapped_button_row_index,
+                size_t tapped_button_column_index,
                 NSArray<NSString*>* text_field_values);
 
-  const size_t tapped_button_index_ = 0;
+  const size_t tapped_button_row_index_ = 0;
+  const size_t tapped_button_column_index_ = 0;
   NSArray<NSString*>* text_field_values_ = nil;
 };
 
diff --git a/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.mm
index 5a7caf1..07b0a79 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/alert_overlay.mm
@@ -36,12 +36,13 @@
 
 OVERLAY_USER_DATA_SETUP_IMPL(AlertRequest);
 
-AlertRequest::AlertRequest(NSString* title,
-                           NSString* message,
-                           NSString* accessibility_identifier,
-                           NSArray<TextFieldConfiguration*>* text_field_configs,
-                           const std::vector<ButtonConfig>& button_configs,
-                           ResponseConverter response_converter)
+AlertRequest::AlertRequest(
+    NSString* title,
+    NSString* message,
+    NSString* accessibility_identifier,
+    NSArray<TextFieldConfiguration*>* text_field_configs,
+    const std::vector<std::vector<ButtonConfig>>& button_configs,
+    ResponseConverter response_converter)
     : title_(title),
       message_(message),
       accessibility_identifier_(accessibility_identifier),
@@ -59,9 +60,11 @@
 
 OVERLAY_USER_DATA_SETUP_IMPL(AlertResponse);
 
-AlertResponse::AlertResponse(size_t tapped_button_index,
+AlertResponse::AlertResponse(size_t tapped_button_row_index,
+                             size_t tapped_button_column_index,
                              NSArray<NSString*>* text_field_values)
-    : tapped_button_index_(tapped_button_index),
+    : tapped_button_row_index_(tapped_button_row_index),
+      tapped_button_column_index_(tapped_button_column_index),
       text_field_values_(text_field_values) {}
 
 AlertResponse::~AlertResponse() = default;
diff --git a/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay.mm
index 4873160..99767a1 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay.mm
@@ -29,8 +29,9 @@
 std::unique_ptr<OverlayResponse> CreateAllowAppLaunchResponse(
     std::unique_ptr<OverlayResponse> alert_response) {
   AlertResponse* alert_info = alert_response->GetInfo<AlertResponse>();
-  if (!alert_info || alert_info->tapped_button_index() != kButtonIndexOk)
+  if (!alert_info || alert_info->tapped_button_row_index() != kButtonIndexOk) {
     return nullptr;
+  }
 
   return OverlayResponse::CreateWithInfo<AllowAppLaunchResponse>();
 }
@@ -57,9 +58,9 @@
       is_repeated_request()
           ? l10n_util::GetNSString(IDS_IOS_OPEN_REPEATEDLY_ANOTHER_APP_ALLOW)
           : l10n_util::GetNSString(IDS_IOS_APP_LAUNCHER_OPEN_APP_BUTTON_LABEL);
-  const std::vector<ButtonConfig> alert_button_configs{
-      ButtonConfig(allow_button_title),
-      ButtonConfig(reject_button_title, UIAlertActionStyleCancel)};
+  const std::vector<std::vector<ButtonConfig>> alert_button_configs{
+      {ButtonConfig(allow_button_title)},
+      {ButtonConfig(reject_button_title, UIAlertActionStyleCancel)}};
   AlertRequest::CreateForUserData(
       user_data, /*title=*/nil, alert_message, /*accessibility_identifier=*/nil,
       /*text_field_configs=*/nil, alert_button_configs,
diff --git a/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay_unittest.mm
index b4c1d576..0c18a865 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay_unittest.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/app_launcher_overlay_unittest.mm
@@ -43,8 +43,8 @@
 
   // There is an OK button and a Cancel button in app launch alerts.
   ASSERT_EQ(2U, config->button_configs().size());
-  const ButtonConfig& ok_button_config = config->button_configs()[0];
-  const ButtonConfig& cancel_button_config = config->button_configs()[1];
+  const ButtonConfig& ok_button_config = config->button_configs()[0][0];
+  const ButtonConfig& cancel_button_config = config->button_configs()[1][0];
 
   EXPECT_EQ(UIAlertActionStyleDefault, ok_button_config.style);
   EXPECT_NSEQ(
@@ -71,8 +71,8 @@
 
   // There is an OK button and a Cancel button in app launch alerts.
   ASSERT_EQ(2U, config->button_configs().size());
-  const ButtonConfig& ok_button_config = config->button_configs()[0];
-  const ButtonConfig& cancel_button_config = config->button_configs()[1];
+  const ButtonConfig& ok_button_config = config->button_configs()[0][0];
+  const ButtonConfig& cancel_button_config = config->button_configs()[1][0];
 
   EXPECT_EQ(UIAlertActionStyleDefault, ok_button_config.style);
   EXPECT_NSEQ(l10n_util::GetNSString(IDS_IOS_OPEN_REPEATEDLY_ANOTHER_APP_ALLOW),
@@ -92,7 +92,8 @@
   AlertRequest* config = request->GetConfig<AlertRequest>();
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/0, /*text_field_values=*/nil);
+          /*tapped_button_row_index=*/0, /*tapped_button_column_index=*/0,
+          /*text_field_values=*/nil);
 
   // Convert the response to the AllowAppLaunchResponse.
   std::unique_ptr<OverlayResponse> response =
@@ -111,7 +112,8 @@
   AlertRequest* config = request->GetConfig<AlertRequest>();
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/1, /*text_field_values=*/nil);
+          /*tapped_button_row_index=*/1, /*tapped_button_column_index=*/0,
+          /*text_field_values=*/nil);
 
   // Convert the response and verify that no AllowAppLaunchResponse was created.
   std::unique_ptr<OverlayResponse> response =
diff --git a/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay.mm
index a6a3451..141b2c4c 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay.mm
@@ -36,8 +36,9 @@
 std::unique_ptr<OverlayResponse> CreateHttpAuthResponse(
     std::unique_ptr<OverlayResponse> alert_response) {
   AlertResponse* alert_info = alert_response->GetInfo<AlertResponse>();
-  if (!alert_info || alert_info->tapped_button_index() != kButtonIndexOk)
+  if (!alert_info || alert_info->tapped_button_row_index() != kButtonIndexOk) {
     return nullptr;
+  }
 
   NSArray<NSString*>* text_field_values = alert_info->text_field_values();
   return OverlayResponse::CreateWithInfo<HTTPAuthOverlayResponseInfo>(
@@ -84,10 +85,10 @@
   NSString* ok_label =
       l10n_util::GetNSStringWithFixup(IDS_LOGIN_DIALOG_OK_BUTTON_LABEL);
   NSString* cancel_label = l10n_util::GetNSString(IDS_CANCEL);
-  const std::vector<ButtonConfig> alert_button_configs{
-      ButtonConfig(ok_label, kHttpAuthSignInTappedActionName),
-      ButtonConfig(cancel_label, kHttpAuthCancelTappedActionName,
-                   UIAlertActionStyleCancel)};
+  const std::vector<std::vector<ButtonConfig>> alert_button_configs{
+      {ButtonConfig(ok_label, kHttpAuthSignInTappedActionName)},
+      {ButtonConfig(cancel_label, kHttpAuthCancelTappedActionName,
+                    UIAlertActionStyleCancel)}};
   AlertRequest::CreateForUserData(
       user_data, alert_title, alert_message,
       /*accessibility_identifier=*/nil, alert_text_field_configs,
diff --git a/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay_unittest.mm
index 1ac6800..bdc8591 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay_unittest.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay_unittest.mm
@@ -9,7 +9,6 @@
 #import "ios/chrome/browser/overlays/public/overlay_request.h"
 #import "ios/chrome/browser/overlays/public/overlay_response.h"
 #import "ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h"
-#import "ios/chrome/browser/overlays/public/web_content_area/http_auth_overlay.h"
 #import "ios/chrome/browser/ui/elements/text_field_configuration.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "testing/gtest_mac.h"
@@ -73,8 +72,8 @@
 
   // There should be an OK button and a Cancel button.
   ASSERT_EQ(2U, config->button_configs().size());
-  const ButtonConfig& ok_button_config = config->button_configs()[0];
-  const ButtonConfig& cancel_button_config = config->button_configs()[1];
+  const ButtonConfig& ok_button_config = config->button_configs()[0][0];
+  const ButtonConfig& cancel_button_config = config->button_configs()[1][0];
 
   EXPECT_EQ(UIAlertActionStyleDefault, ok_button_config.style);
   NSString* sign_in_label =
@@ -94,7 +93,8 @@
   // Simulate a response where the OK button is tapped.
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/0, @[ @"username", @"password" ]);
+          /*tapped_button_row_index=*/0, /*tapped_button_column_index=*/0,
+          @[ @"username", @"password" ]);
 
   // Convert the response to the HTTP auth response.
   std::unique_ptr<OverlayResponse> response =
@@ -113,7 +113,8 @@
   // Simulate a response where the OK button is tapped.
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/1, @[ @"username", @"password" ]);
+          /*tapped_button_row_index=*/1, /*tapped_button_column_index=*/0,
+          @[ @"username", @"password" ]);
 
   // Since the cancel button is tapped, a null HTTP auth response should be
   // used.
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay.mm
index f32da4b..13c682be 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay.mm
@@ -38,7 +38,7 @@
 
   JavaScriptAlertDialogResponse::Action action =
       JavaScriptAlertDialogResponse::Action::kConfirm;
-  size_t button_index = alert_response->tapped_button_index();
+  size_t button_index = alert_response->tapped_button_row_index();
   if (button_index == kAlertBlockButtonIndex) {
     action = JavaScriptAlertDialogResponse::Action::kBlockDialogs;
   }
@@ -69,10 +69,11 @@
   NSString* alert_title = DialogTitle(is_main_frame_, message());
   NSString* alert_message = DialogMessage(is_main_frame_, message());
 
-  std::vector<ButtonConfig> button_configs{
-      ButtonConfig(l10n_util::GetNSString(IDS_OK))};
+  std::vector<std::vector<ButtonConfig>> button_configs{
+      {ButtonConfig(l10n_util::GetNSString(IDS_OK))}};
   if (ShouldAddBlockDialogsButton(web_state())) {
-    button_configs.push_back(BlockDialogsButtonConfig());
+    button_configs.push_back(
+        std::vector<ButtonConfig>{BlockDialogsButtonConfig()});
   }
 
   AlertRequest::CreateForUserData(user_data, alert_title, alert_message,
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay_unittest.mm
index 55f7ce3..02e9bbea 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay_unittest.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_alert_dialog_overlay_unittest.mm
@@ -83,11 +83,13 @@
   std::unique_ptr<OverlayRequest> alert_request = CreateRequest();
   AlertRequest* alert_config = alert_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(alert_config);
-  const std::vector<ButtonConfig>& alert_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& alert_button_configs =
       alert_config->button_configs();
   ASSERT_EQ(1U, alert_button_configs.size());
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), alert_button_configs[0].title);
-  EXPECT_EQ(UIAlertActionStyleDefault, alert_button_configs[0].style);
+  ASSERT_EQ(1U, alert_button_configs[0].size());
+  ButtonConfig button_config = alert_button_configs[0][0];
+  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), button_config.title);
+  EXPECT_EQ(UIAlertActionStyleDefault, button_config.style);
 }
 
 // Tests that the blocking option is successfully added.
@@ -101,11 +103,12 @@
   std::unique_ptr<OverlayRequest> alert_request = CreateRequest();
   AlertRequest* alert_config = alert_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(alert_config);
-  const std::vector<ButtonConfig>& alert_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& alert_button_configs =
       alert_config->button_configs();
   ASSERT_FALSE(alert_button_configs.empty());
-  EXPECT_NSEQ(blocking_option_title, alert_button_configs.back().title);
-  EXPECT_EQ(UIAlertActionStyleDestructive, alert_button_configs.back().style);
+  ButtonConfig button_config = alert_button_configs.back()[0];
+  EXPECT_NSEQ(blocking_option_title, button_config.title);
+  EXPECT_EQ(UIAlertActionStyleDestructive, button_config.style);
 }
 
 // Tests that an alert is correctly converted to a JavaScriptAlertDialogResponse
@@ -118,7 +121,8 @@
   // Simulate a response where the OK button is tapped.
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/0, @[ @"" ]);
+          /*tapped_button_row_index=*/0, /*tapped_button_column_index=*/0,
+          @[ @"" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
@@ -147,7 +151,7 @@
   size_t blocking_option_button_index = config->button_configs().size() - 1;
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          blocking_option_button_index, @[ @"" ]);
+          blocking_option_button_index, 0, @[ @"" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay.mm
index 4138a54b..0df2cb73 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay.mm
@@ -40,7 +40,7 @@
 
   JavaScriptConfirmDialogResponse::Action action =
       JavaScriptConfirmDialogResponse::Action::kCancel;
-  size_t button_index = alert_response->tapped_button_index();
+  size_t button_index = alert_response->tapped_button_row_index();
   if (button_index == kButtonIndexOk) {
     action = JavaScriptConfirmDialogResponse::Action::kConfirm;
   } else if (button_index == kConfirmBlockButtonIndex) {
@@ -74,12 +74,13 @@
   NSString* alert_title = DialogTitle(is_main_frame_, message());
   NSString* alert_message = DialogMessage(is_main_frame_, message());
 
-  std::vector<ButtonConfig> button_configs{
-      ButtonConfig(l10n_util::GetNSString(IDS_OK)),
-      ButtonConfig(l10n_util::GetNSString(IDS_CANCEL),
-                   UIAlertActionStyleCancel)};
+  std::vector<std::vector<ButtonConfig>> button_configs{
+      {ButtonConfig(l10n_util::GetNSString(IDS_OK))},
+      {ButtonConfig(l10n_util::GetNSString(IDS_CANCEL),
+                    UIAlertActionStyleCancel)}};
   if (ShouldAddBlockDialogsButton(web_state())) {
-    button_configs.push_back(BlockDialogsButtonConfig());
+    button_configs.push_back(
+        std::vector<ButtonConfig>{BlockDialogsButtonConfig()});
   }
 
   AlertRequest::CreateForUserData(user_data, alert_title, alert_message,
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay_unittest.mm
index 430541dd..700df1b 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay_unittest.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_confirm_dialog_overlay_unittest.mm
@@ -80,14 +80,15 @@
   std::unique_ptr<OverlayRequest> confirm_request = CreateRequest();
   AlertRequest* confirm_config = confirm_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(confirm_config);
-  const std::vector<ButtonConfig>& confirm_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& confirm_button_configs =
       confirm_config->button_configs();
   ASSERT_EQ(2U, confirm_button_configs.size());
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), confirm_button_configs[0].title);
-  EXPECT_EQ(UIAlertActionStyleDefault, confirm_button_configs[0].style);
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_CANCEL),
-              confirm_button_configs[1].title);
-  EXPECT_EQ(UIAlertActionStyleCancel, confirm_button_configs[1].style);
+  const ButtonConfig& ok_button = confirm_button_configs[0][0];
+  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), ok_button.title);
+  EXPECT_EQ(UIAlertActionStyleDefault, ok_button.style);
+  const ButtonConfig& cancel_button = confirm_button_configs[1][0];
+  EXPECT_NSEQ(l10n_util::GetNSString(IDS_CANCEL), cancel_button.title);
+  EXPECT_EQ(UIAlertActionStyleCancel, cancel_button.style);
 }
 
 // Tests that the blocking option is successfully added.
@@ -101,11 +102,12 @@
   std::unique_ptr<OverlayRequest> confirm_request = CreateRequest();
   AlertRequest* confirm_config = confirm_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(confirm_config);
-  const std::vector<ButtonConfig>& confirm_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& confirm_button_configs =
       confirm_config->button_configs();
   ASSERT_FALSE(confirm_button_configs.empty());
-  EXPECT_NSEQ(blocking_option_title, confirm_button_configs.back().title);
-  EXPECT_EQ(UIAlertActionStyleDestructive, confirm_button_configs.back().style);
+  const ButtonConfig& button_config = confirm_button_configs.back()[0];
+  EXPECT_NSEQ(blocking_option_title, button_config.title);
+  EXPECT_EQ(UIAlertActionStyleDestructive, button_config.style);
 }
 
 // Tests that a confirmation alert is correctly converted to a
@@ -118,7 +120,8 @@
   // Simulate a response where the OK button is tapped.
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/0, @[ @"" ]);
+          /*tapped_button_row_index=*/0, /*tapped_button_column_index=*/0,
+          @[ @"" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
@@ -142,7 +145,8 @@
   // Simulate a response where the Cancel button is tapped.
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/1, @[ @"" ]);
+          /*tapped_button_row_index=*/1,
+          /*tapped_button_column_index=*/0, @[ @"" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
@@ -172,7 +176,8 @@
   size_t blocking_option_button_index = config->button_configs().size() - 1;
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          blocking_option_button_index, @[ @"" ]);
+          /*tapped_button_row_index=*/blocking_option_button_index,
+          /*tapped_button_column_index=*/0, @[ @"" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay.mm
index 95c151b..66d2595 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay.mm
@@ -43,7 +43,7 @@
   JavaScriptPromptDialogResponse::Action action =
       JavaScriptPromptDialogResponse::Action::kCancel;
   NSString* user_input = nil;
-  size_t button_index = alert_response->tapped_button_index();
+  size_t button_index = alert_response->tapped_button_row_index();
   if (button_index == kButtonIndexOk) {
     action = JavaScriptPromptDialogResponse::Action::kConfirm;
     user_input = [alert_response->text_field_values() firstObject];
@@ -91,12 +91,13 @@
            autocapitalizationType:UITextAutocapitalizationTypeSentences
                   secureTextEntry:NO] ];
   // Add the buttons.
-  std::vector<ButtonConfig> button_configs{
-      ButtonConfig(l10n_util::GetNSString(IDS_OK)),
-      ButtonConfig(l10n_util::GetNSString(IDS_CANCEL),
-                   UIAlertActionStyleCancel)};
+  std::vector<std::vector<ButtonConfig>> button_configs{
+      {ButtonConfig(l10n_util::GetNSString(IDS_OK))},
+      {ButtonConfig(l10n_util::GetNSString(IDS_CANCEL),
+                    UIAlertActionStyleCancel)}};
   if (ShouldAddBlockDialogsButton(web_state())) {
-    button_configs.push_back(BlockDialogsButtonConfig());
+    button_configs.push_back(
+        std::vector<ButtonConfig>{BlockDialogsButtonConfig()});
   }
 
   // Create the alert config.
diff --git a/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay_unittest.mm
index f9fad711..f0dd310 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay_unittest.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_dialog_overlay_unittest.mm
@@ -92,14 +92,15 @@
   std::unique_ptr<OverlayRequest> prompt_request = CreateRequest();
   AlertRequest* prompt_config = prompt_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(prompt_config);
-  const std::vector<ButtonConfig>& prompt_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& prompt_button_configs =
       prompt_config->button_configs();
   ASSERT_EQ(2U, prompt_button_configs.size());
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), prompt_button_configs[0].title);
-  EXPECT_EQ(UIAlertActionStyleDefault, prompt_button_configs[0].style);
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_CANCEL),
-              prompt_button_configs[1].title);
-  EXPECT_EQ(UIAlertActionStyleCancel, prompt_button_configs[1].style);
+  ButtonConfig ok_button = prompt_button_configs[0][0];
+  EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), ok_button.title);
+  EXPECT_EQ(UIAlertActionStyleDefault, ok_button.style);
+  ButtonConfig cancel_button = prompt_button_configs[1][0];
+  EXPECT_NSEQ(l10n_util::GetNSString(IDS_CANCEL), cancel_button.title);
+  EXPECT_EQ(UIAlertActionStyleCancel, cancel_button.style);
 }
 
 // Tests that the blocking option is successfully added.
@@ -113,11 +114,12 @@
   std::unique_ptr<OverlayRequest> prompt_request = CreateRequest();
   AlertRequest* prompt_config = prompt_request->GetConfig<AlertRequest>();
   ASSERT_TRUE(prompt_config);
-  const std::vector<ButtonConfig>& prompt_button_configs =
+  const std::vector<std::vector<ButtonConfig>>& prompt_button_configs =
       prompt_config->button_configs();
   ASSERT_FALSE(prompt_button_configs.empty());
-  EXPECT_NSEQ(blocking_option_title, prompt_button_configs.back().title);
-  EXPECT_EQ(UIAlertActionStyleDestructive, prompt_button_configs.back().style);
+  ButtonConfig button = prompt_button_configs.back()[0];
+  EXPECT_NSEQ(blocking_option_title, button.title);
+  EXPECT_EQ(UIAlertActionStyleDestructive, button.style);
 }
 
 // Tests that a prompt alert is correctly converted to a
@@ -131,7 +133,8 @@
   NSString* user_input = @"user_input";
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/0, @[ user_input ]);
+          /*tapped_button_row_index=*/0,
+          /*tapped_button_column_index=*/0, @[ user_input ]);
 
   // Since the OK button is tapped, the kConfirm action should be used and the
   // text field input should be supplied to the JavaScriptAlertDialogResponse.
@@ -159,7 +162,8 @@
   NSString* user_input = @"user_input";
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          /*tapped_button_index=*/1, @[ user_input ]);
+          /*tapped_button_row_index=*/1,
+          /*tapped_button_column_index=*/0, @[ user_input ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
@@ -190,7 +194,8 @@
   size_t blocking_option_button_index = config->button_configs().size() - 1;
   std::unique_ptr<OverlayResponse> alert_response =
       OverlayResponse::CreateWithInfo<AlertResponse>(
-          blocking_option_button_index, @[ @"user_input" ]);
+          /*tapped_button_row_index=*/blocking_option_button_index,
+          /*tapped_button_column_index=*/0, @[ @"user_input" ]);
 
   std::unique_ptr<OverlayResponse> response =
       config->response_converter().Run(std::move(alert_response));
diff --git a/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h
index ea4da52..6b64ce0 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h
+++ b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h
@@ -5,11 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_WEB_CONTENT_AREA_PERMISSIONS_DIALOG_OVERLAY_H_
 #define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_WEB_CONTENT_AREA_PERMISSIONS_DIALOG_OVERLAY_H_
 
-#import <CoreFoundation/CoreFoundation.h>
+#import <Foundation/Foundation.h>
 
 #import "ios/chrome/browser/overlays/public/overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/overlay_response_info.h"
-#import "ios/web/public/permissions/permissions.h"
+#import "url/gurl.h"
 
 // Configuration object for OverlayRequests for dialogs that ask for camera or
 // microphone permissions.
@@ -23,7 +23,7 @@
 
  private:
   OVERLAY_USER_DATA_SETUP(PermissionsDialogRequest);
-  PermissionsDialogRequest(NSString* website,
+  PermissionsDialogRequest(const GURL& url,
                            NSArray<NSNumber*>* requested_permissions);
 
   void CreateAuxiliaryData(base::SupportsUserData* user_data) override;
diff --git a/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.mm b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.mm
index f29aad8..bd63127 100644
--- a/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.mm
+++ b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.mm
@@ -4,8 +4,12 @@
 
 #import "ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h"
 
+#import "base/strings/utf_string_conversions.h"
 #import "ios/chrome/browser/overlays/public/web_content_area/alert_constants.h"
 #import "ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ios/web/public/permissions/permissions.h"
+#import "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -16,8 +20,9 @@
 using alert_overlays::ButtonConfig;
 
 namespace {
-// The index of the "Don't Allow" button in the alert button array.
-const size_t kButtonIndexDontAllow = 0;
+
+// The column index of the button that the user clicks to grant permissions.
+const size_t kPermissionsGrantedButtonIndex = 1;
 
 // Creates an permissions dialog response for a dialog, containing a boolean
 // `capture_allow()` indicating ther user's answer on the media capture request;
@@ -25,10 +30,14 @@
 std::unique_ptr<OverlayResponse> CreatePermissionsDialogResponse(
     std::unique_ptr<OverlayResponse> response) API_AVAILABLE(ios(15.0)) {
   AlertResponse* alert_response = response->GetInfo<AlertResponse>();
-  size_t button_index = alert_response->tapped_button_index();
+  if (!alert_response) {
+    return nullptr;
+  }
+  size_t button_index = alert_response->tapped_button_column_index();
   return OverlayResponse::CreateWithInfo<PermissionsDialogResponse>(
-      button_index != kButtonIndexDontAllow);
+      /*capture_allow=*/button_index == kPermissionsGrantedButtonIndex);
 }
+
 }  // namespace
 
 #pragma mark - PermissionsDialogRequest
@@ -36,23 +45,29 @@
 OVERLAY_USER_DATA_SETUP_IMPL(PermissionsDialogRequest);
 
 PermissionsDialogRequest::PermissionsDialogRequest(
-    NSString* website,
+    const GURL& url,
     NSArray<NSNumber*>* requested_permissions) {
   // Computes the dialog message based on the website and permissions requested.
-  // TODO(crbug.com/1356768): Add strings to ios_strings.grd and retrieve from
-  // there.
-  NSString* typeString;
-  BOOL cameraCapturing =
+  int string_id_for_permission = 0;
+  BOOL camera_permission_requested =
       [requested_permissions containsObject:@(web::PermissionCamera)];
-  BOOL micCapturing =
+  BOOL mic_permission_requested =
       [requested_permissions containsObject:@(web::PermissionMicrophone)];
-  if (cameraCapturing) {
-    typeString = micCapturing ? @"Microphone and Camera" : @"Camera";
+  if (camera_permission_requested && mic_permission_requested) {
+    string_id_for_permission =
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_CAMERA_AND_MICROPHONE;
+  } else if (camera_permission_requested) {
+    string_id_for_permission =
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_CAMERA;
+  } else if (mic_permission_requested) {
+    string_id_for_permission =
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_MICROPHONE;
   } else {
-    typeString = @"Microphone";
-    message_ = [NSString stringWithFormat:@"\"%@\" Would Like To Access %@",
-                                          website, typeString];
+    NOTREACHED();
   }
+  message_ = l10n_util::GetNSStringF(
+      IDS_IOS_PERMISSIONS_ALERT_DIALOG_MESSAGE, base::UTF8ToUTF16(url.host()),
+      l10n_util::GetStringUTF16(string_id_for_permission));
 }
 
 PermissionsDialogRequest::~PermissionsDialogRequest() = default;
@@ -60,11 +75,12 @@
 void PermissionsDialogRequest::CreateAuxiliaryData(
     base::SupportsUserData* user_data) {
   // Conrigure buttons.
-  NSString* dont_allow_label = @"Don't Allow";
-  NSString* allow_label = @"Allow";
-  const std::vector<ButtonConfig> button_configs{
-      ButtonConfig(dont_allow_label, UIAlertActionStyleCancel),
-      ButtonConfig(allow_label, UIAlertActionStyleDefault)};
+  std::vector<std::vector<ButtonConfig>> button_configs{
+      {ButtonConfig(l10n_util::GetNSString(
+                        IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_DENY),
+                    UIAlertActionStyleCancel),
+       ButtonConfig(l10n_util::GetNSString(
+           IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_GRANT))}};
   // Create the alert config with the buttons and other information.
   AlertRequest::CreateForUserData(
       user_data, message(), nil, kPermissionsDialogAccessibilityIdentifier, nil,
diff --git a/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay_unittest.mm b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay_unittest.mm
new file mode 100644
index 0000000..c5e54e5
--- /dev/null
+++ b/ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay_unittest.mm
@@ -0,0 +1,181 @@
+// 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.
+
+#import "ios/chrome/browser/overlays/public/web_content_area/permissions_dialog_overlay.h"
+
+#import "ios/chrome/browser/overlays/public/overlay_request.h"
+#import "ios/chrome/browser/overlays/public/overlay_response.h"
+#import "ios/chrome/browser/overlays/public/web_content_area/alert_overlay.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ios/web/public/permissions/permissions.h"
+#import "testing/gtest_mac.h"
+#import "testing/platform_test.h"
+#import "ui/base/l10n/l10n_util.h"
+#import "url/gurl.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using alert_overlays::AlertRequest;
+using alert_overlays::AlertResponse;
+using alert_overlays::ButtonConfig;
+
+// Test fixture for permissions dialog overlays.
+class PermissionsDialogOverlayTest : public PlatformTest {
+ protected:
+  std::unique_ptr<OverlayRequest> CreateRequest(NSArray<NSNumber*>* permissions)
+      API_AVAILABLE(ios(15.0)) {
+    return OverlayRequest::CreateWithConfig<PermissionsDialogRequest>(
+        GURL("http://www.chromium.test"), permissions);
+  }
+};
+
+// Tests that the alert config is set correctly for dialogs requesting only
+// camera permission.
+TEST_F(PermissionsDialogOverlayTest, DialogTitleCameraOnly) {
+  if (@available(iOS 15.0, *)) {
+    std::unique_ptr<OverlayRequest> request =
+        CreateRequest(@[ @(web::PermissionCamera) ]);
+    AlertRequest* config = request->GetConfig<AlertRequest>();
+    ASSERT_TRUE(config);
+    NSString* expected_string = l10n_util::GetNSStringF(
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_MESSAGE, u"www.chromium.test",
+        l10n_util::GetStringUTF16(
+            IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_CAMERA));
+    // Check strings.
+    EXPECT_NSEQ(expected_string, config->title());
+    EXPECT_EQ(nil, config->message());
+    // Check buttons.
+    ASSERT_EQ(1U, config->button_configs().size());
+    const std::vector<ButtonConfig>& button_configs =
+        config->button_configs()[0];
+    ASSERT_EQ(2U, button_configs.size());
+    ButtonConfig deny_button = button_configs[0];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_DENY),
+                deny_button.title);
+    EXPECT_EQ(UIAlertActionStyleCancel, deny_button.style);
+    ButtonConfig allow_button = button_configs[1];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_GRANT),
+                allow_button.title);
+    EXPECT_EQ(UIAlertActionStyleDefault, allow_button.style);
+  }
+}
+
+// Tests that the alert config is set correctly for dialogs requesting only
+// microphone permission.
+TEST_F(PermissionsDialogOverlayTest, DialogMicrophoneOnly) {
+  if (@available(iOS 15.0, *)) {
+    std::unique_ptr<OverlayRequest> request =
+        CreateRequest(@[ @(web::PermissionMicrophone) ]);
+    AlertRequest* config = request->GetConfig<AlertRequest>();
+    ASSERT_TRUE(config);
+    NSString* expected_string = l10n_util::GetNSStringF(
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_MESSAGE, u"www.chromium.test",
+        l10n_util::GetStringUTF16(
+            IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_MICROPHONE));
+    // Check strings.
+    EXPECT_NSEQ(expected_string, config->title());
+    EXPECT_EQ(nil, config->message());
+    // Check buttons.
+    ASSERT_EQ(1U, config->button_configs().size());
+    const std::vector<ButtonConfig>& button_configs =
+        config->button_configs()[0];
+    ASSERT_EQ(2U, button_configs.size());
+    ButtonConfig deny_button = button_configs[0];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_DENY),
+                deny_button.title);
+    EXPECT_EQ(UIAlertActionStyleCancel, deny_button.style);
+    ButtonConfig allow_button = button_configs[1];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_GRANT),
+                allow_button.title);
+    EXPECT_EQ(UIAlertActionStyleDefault, allow_button.style);
+  }
+}
+
+// Tests that the alert config is set correctly for dialogs requesting both
+// camera and microphone permission.
+TEST_F(PermissionsDialogOverlayTest, DialogCameraAndMicrophone) {
+  if (@available(iOS 15.0, *)) {
+    std::unique_ptr<OverlayRequest> request = CreateRequest(
+        @[ @(web::PermissionCamera), @(web::PermissionMicrophone) ]);
+    AlertRequest* config = request->GetConfig<AlertRequest>();
+    ASSERT_TRUE(config);
+    NSString* expected_string = l10n_util::GetNSStringF(
+        IDS_IOS_PERMISSIONS_ALERT_DIALOG_MESSAGE, u"www.chromium.test",
+        l10n_util::GetStringUTF16(
+            IDS_IOS_PERMISSIONS_ALERT_DIALOG_PERMISSION_CAMERA_AND_MICROPHONE));
+    // Check strings.
+    EXPECT_NSEQ(expected_string, config->title());
+    EXPECT_EQ(nil, config->message());
+    // Check buttons.
+    ASSERT_EQ(1U, config->button_configs().size());
+    const std::vector<ButtonConfig>& button_configs =
+        config->button_configs()[0];
+    ASSERT_EQ(2U, button_configs.size());
+    ButtonConfig deny_button = button_configs[0];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_DENY),
+                deny_button.title);
+    EXPECT_EQ(UIAlertActionStyleCancel, deny_button.style);
+    ButtonConfig allow_button = button_configs[1];
+    EXPECT_NSEQ(l10n_util::GetNSString(
+                    IDS_IOS_PERMISSIONS_ALERT_DIALOG_BUTTON_TEXT_GRANT),
+                allow_button.title);
+    EXPECT_EQ(UIAlertActionStyleDefault, allow_button.style);
+  }
+}
+
+// Tests that an alert is correctly converted to a
+// PermissionsDialogOverlayResponse after tapping "Don't Allow".
+TEST_F(PermissionsDialogOverlayTest, DialogResponseDeny) {
+  if (@available(iOS 15.0, *)) {
+    std::unique_ptr<OverlayRequest> request =
+        CreateRequest(@[ @(web::PermissionCamera) ]);
+    AlertRequest* config = request->GetConfig<AlertRequest>();
+    ASSERT_TRUE(config);
+    // Simulate a response where the "Don't Allow" button is tapped.
+    std::unique_ptr<OverlayResponse> alert_response =
+        OverlayResponse::CreateWithInfo<AlertResponse>(
+            /*tapped_button_row_index=*/0,
+            /*tapped_button_column_index=*/0, nil);
+    // Since the OK button is tapped, the kConfirm action should be used and the
+    // text field input should be supplied to the JavaScriptAlertDialogResponse.
+    std::unique_ptr<OverlayResponse> response =
+        config->response_converter().Run(std::move(alert_response));
+    ASSERT_TRUE(response.get());
+    PermissionsDialogResponse* permissions_response =
+        response->GetInfo<PermissionsDialogResponse>();
+    ASSERT_TRUE(permissions_response);
+    ASSERT_FALSE(permissions_response->capture_allow());
+  }
+}
+
+// Tests that an alert is correctly converted to a
+// PermissionsDialogOverlayResponse after tapping "Allow".
+TEST_F(PermissionsDialogOverlayTest, DialogResponseAllow) {
+  if (@available(iOS 15.0, *)) {
+    std::unique_ptr<OverlayRequest> request =
+        CreateRequest(@[ @(web::PermissionMicrophone) ]);
+    AlertRequest* config = request->GetConfig<AlertRequest>();
+    ASSERT_TRUE(config);
+    // Simulate a response where the "Allow" button is tapped.
+    std::unique_ptr<OverlayResponse> alert_response =
+        OverlayResponse::CreateWithInfo<AlertResponse>(
+            /*tapped_button_row_index=*/0,
+            /*tapped_button_column_index=*/1, nil);
+    // Since the OK button is tapped, the kConfirm action should be used and the
+    // text field input should be supplied to the JavaScriptAlertDialogResponse.
+    std::unique_ptr<OverlayResponse> response =
+        config->response_converter().Run(std::move(alert_response));
+    ASSERT_TRUE(response.get());
+    PermissionsDialogResponse* permissions_response =
+        response->GetInfo<PermissionsDialogResponse>();
+    ASSERT_TRUE(permissions_response && permissions_response->capture_allow());
+  }
+}
diff --git a/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm b/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
index 38089bc2..01b57ed 100644
--- a/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/download/download_manager_coordinator_unittest.mm
@@ -631,12 +631,12 @@
   EXPECT_NSEQ(@"Stop Download?", config->title());
   EXPECT_FALSE(config->message());
   ASSERT_EQ(2U, config->button_configs().size());
-  EXPECT_NSEQ(@"Stop", config->button_configs()[0].title);
-  EXPECT_EQ(kDownloadCloseActionName,
-            config->button_configs()[0].user_action_name);
-  EXPECT_NSEQ(@"Continue", config->button_configs()[1].title);
-  EXPECT_EQ(kDownloadDoNotCloseActionName,
-            config->button_configs()[1].user_action_name);
+  alert_overlays::ButtonConfig stop_button = config->button_configs()[0][0];
+  EXPECT_NSEQ(@"Stop", stop_button.title);
+  EXPECT_EQ(kDownloadCloseActionName, stop_button.user_action_name);
+  alert_overlays::ButtonConfig continue_button = config->button_configs()[1][0];
+  EXPECT_NSEQ(@"Continue", continue_button.title);
+  EXPECT_EQ(kDownloadDoNotCloseActionName, continue_button.user_action_name);
 
   // Stop to avoid holding a dangling pointer to destroyed task.
   queue->CancelAllRequests();
@@ -679,12 +679,12 @@
   EXPECT_NSEQ(@"This will stop all progress for your current download.",
               config->message());
   ASSERT_EQ(2U, config->button_configs().size());
-  EXPECT_NSEQ(@"OK", config->button_configs()[0].title);
-  EXPECT_EQ(kDownloadReplaceActionName,
-            config->button_configs()[0].user_action_name);
-  EXPECT_NSEQ(@"Cancel", config->button_configs()[1].title);
-  EXPECT_EQ(kDownloadDoNotReplaceActionName,
-            config->button_configs()[1].user_action_name);
+  alert_overlays::ButtonConfig ok_button = config->button_configs()[0][0];
+  EXPECT_NSEQ(@"OK", ok_button.title);
+  EXPECT_EQ(kDownloadReplaceActionName, ok_button.user_action_name);
+  alert_overlays::ButtonConfig cancel_button = config->button_configs()[1][0];
+  EXPECT_NSEQ(@"Cancel", cancel_button.title);
+  EXPECT_EQ(kDownloadDoNotReplaceActionName, cancel_button.user_action_name);
 
   queue->CancelAllRequests();
   @autoreleasepool {
@@ -722,12 +722,12 @@
   EXPECT_NSEQ(@"This will stop all progress for your current download.",
               config->message());
   ASSERT_EQ(2U, config->button_configs().size());
-  EXPECT_NSEQ(@"OK", config->button_configs()[0].title);
-  EXPECT_EQ(kDownloadReplaceActionName,
-            config->button_configs()[0].user_action_name);
-  EXPECT_NSEQ(@"Cancel", config->button_configs()[1].title);
-  EXPECT_EQ(kDownloadDoNotReplaceActionName,
-            config->button_configs()[1].user_action_name);
+  alert_overlays::ButtonConfig ok_button = config->button_configs()[0][0];
+  EXPECT_NSEQ(@"OK", ok_button.title);
+  EXPECT_EQ(kDownloadReplaceActionName, ok_button.user_action_name);
+  alert_overlays::ButtonConfig cancel_button = config->button_configs()[1][0];
+  EXPECT_NSEQ(@"Cancel", cancel_button.title);
+  EXPECT_EQ(kDownloadDoNotReplaceActionName, cancel_button.user_action_name);
 
   queue->CancelAllRequests();
   @autoreleasepool {
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
index 6cb0c73..2f37e87 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
@@ -80,7 +80,9 @@
   self.newTargetLanguageIndex = kInvalidLanguageIndex;
   self.sourceLanguageIsUnknown = self.config->unknown_language_name() ==
                                  self.config->source_language_name();
-  self.sourceLanguageIsInitiallyUnknown = self.sourceLanguageIsUnknown;
+  self.sourceLanguageIsInitiallyUnknown =
+      self.config->unknown_language_name() ==
+      self.config->initial_source_language_name();
 
   // The Translate button should be enabled whenever the page is untranslated,
   // which may be before any translation has been triggered or after an error
diff --git a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_coordinator_unittest.mm b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_coordinator_unittest.mm
index d37bc1e..1d3e085 100644
--- a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_coordinator_unittest.mm
@@ -34,7 +34,8 @@
 
 // Creates an AlertRequest for use in tests.
 std::unique_ptr<OverlayRequest> CreateAlertRequest() {
-  const std::vector<ButtonConfig> button_configs{ButtonConfig(kButtonTitle)};
+  const std::vector<std::vector<ButtonConfig>> button_configs{
+      {ButtonConfig(kButtonTitle)}};
   return OverlayRequest::CreateWithConfig<AlertRequest>(
       kTitle, kMessage, kAccessibilityIdentifier, nil, button_configs,
       base::BindRepeating(^std::unique_ptr<OverlayResponse>(
diff --git a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator.mm
index 200a1ff..ca80aabe 100644
--- a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator.mm
@@ -64,16 +64,21 @@
   AlertRequest* alertRequest = self.alertRequest;
   if (!alertRequest || !alertRequest->button_configs().size())
     return nil;
-  const std::vector<alert_overlays::ButtonConfig>& buttonConfigs =
+  const std::vector<std::vector<alert_overlays::ButtonConfig>>& buttonConfigs =
       alertRequest->button_configs();
+  // TODO(crbug.com/1356768): Currently the consumer could only display all the
+  // buttons verfically of buttons, so we only use the actions from the first
+  // column of each row of the button configs. Update this part when the
+  // consumer supports supporting multiple buttons on each row.
   size_t buttonCount = buttonConfigs.size();
   NSMutableArray<AlertAction*>* actions =
       [[NSMutableArray<AlertAction*> alloc] initWithCapacity:buttonCount];
   for (size_t i = 0; i < buttonCount; ++i) {
     [actions addObject:[AlertAction
-                           actionWithTitle:buttonConfigs[i].title
-                                     style:buttonConfigs[i].style
-                                   handler:[self actionForButtonAtIndex:i]]];
+                           actionWithTitle:buttonConfigs[i][0].title
+                                     style:buttonConfigs[i][0].style
+                                   handler:[self actionForButtonAtIndexRow:i
+                                                                    column:0]]];
   }
   return actions;
 }
@@ -102,15 +107,16 @@
 
 #pragma mark - Private
 
-// Sets a completion OverlayResponse after the button at `tappedButtonIndex`
-// was tapped.
-- (void)setCompletionResponse:(size_t)tappedButtonIndex {
+// Sets a completion OverlayResponse after the button at `tappedButtonIndexRow`
+// and `tappedButtonIndexColumn` was tapped.
+- (void)setCompletionResponseWithRow:(size_t)tappedButtonIndexRow
+                              column:(size_t)tappedButtonIndexColumn {
   AlertRequest* alertRequest = self.alertRequest;
   if (!alertRequest)
     return;
   std::unique_ptr<OverlayResponse> alertResponse =
-      OverlayResponse::CreateWithInfo<AlertResponse>(tappedButtonIndex,
-                                                     self.textFieldValues);
+      OverlayResponse::CreateWithInfo<AlertResponse>(
+          tappedButtonIndexRow, tappedButtonIndexColumn, self.textFieldValues);
   self.request->GetCallbackManager()->SetCompletionResponse(
       alertRequest->response_converter().Run(std::move(alertResponse)));
   // The response converter should convert the AlertResponse into a feature-
@@ -120,17 +126,18 @@
   DCHECK(!convertedResponse || !convertedResponse->GetInfo<AlertResponse>());
 }
 
-// Returns the action block for the button at `index`.
-- (void (^)(AlertAction* action))actionForButtonAtIndex:(size_t)index {
+// Returns the action block for the button at index `row` and `column`.
+- (void (^)(AlertAction* action))actionForButtonAtIndexRow:(size_t)row
+                                                    column:(size_t)column {
   __weak __typeof__(self) weakSelf = self;
   base::StringPiece actionName =
-      self.alertRequest->button_configs()[index].user_action_name;
+      self.alertRequest->button_configs()[row][column].user_action_name;
   return ^(AlertAction*) {
     if (!actionName.empty()) {
       base::RecordComputedAction(actionName.data());
     }
     __typeof__(self) strongSelf = weakSelf;
-    [strongSelf setCompletionResponse:index];
+    [strongSelf setCompletionResponseWithRow:row column:column];
     [strongSelf.delegate stopOverlayForMediator:strongSelf];
   };
 }
diff --git a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator_unittest.mm b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator_unittest.mm
index db530556..060f014 100644
--- a/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/overlays/web_content_area/alerts/alert_overlay_mediator_unittest.mm
@@ -27,7 +27,8 @@
 
 namespace {
 // Alert setup consts.
-const size_t kButtonIndexOk = 0;
+const size_t kButtonIndexOkRow = 1;
+const size_t kButtonIndexOkCol = 0;
 const size_t kTextFieldIndex = 0;
 
 // Recorded when OK button is tapped.
@@ -59,7 +60,8 @@
     std::unique_ptr<OverlayResponse> alert_response) {
   AlertResponse* alert_info = alert_response->GetInfo<AlertResponse>();
   return OverlayResponse::CreateWithInfo<FakeResponseInfo>(
-      alert_info->tapped_button_index() == kButtonIndexOk,
+      alert_info->tapped_button_row_index() == kButtonIndexOkRow &&
+          alert_info->tapped_button_column_index() == kButtonIndexOkCol,
       alert_info->text_field_values()[kTextFieldIndex]);
 }
 
@@ -83,9 +85,10 @@
            autocapitalizationType:UITextAutocapitalizationTypeSentences
                   secureTextEntry:NO],
     ];
-    const std::vector<ButtonConfig> button_configs{
-        ButtonConfig(@"OK", kOKTappedUserActionName),
-        ButtonConfig(@"Cancel", UIAlertActionStyleCancel)};
+    const std::vector<std::vector<ButtonConfig>> button_configs{
+        {ButtonConfig(@"First Row")},
+        {ButtonConfig(@"OK", kOKTappedUserActionName),
+         ButtonConfig(@"Cancel", UIAlertActionStyleCancel)}};
     AlertRequest::CreateForUserData(user_data, @"title", @"message",
                                     @"accessibility_identifier",
                                     text_field_configs, button_configs,
@@ -139,9 +142,14 @@
               consumer_.alertAccessibilityIdentifier);
   EXPECT_NSEQ(alert_request->text_field_configs(),
               consumer_.textFieldConfigurations);
+  ASSERT_EQ(2U, alert_request->button_configs().size());
+  ASSERT_EQ(1U, alert_request->button_configs()[0].size());
+  ASSERT_EQ(2U, alert_request->button_configs()[1].size());
+  // TODO(crbug.com/1356768): Update when consumer supports multiple buttons on
+  // a row.
   for (size_t i = 0; i < alert_request->button_configs().size(); ++i) {
     AlertAction* consumer_action = consumer_.actions[i];
-    const ButtonConfig& button_config = alert_request->button_configs()[i];
+    const ButtonConfig& button_config = alert_request->button_configs()[i][0];
     EXPECT_NSEQ(button_config.title, consumer_action.title);
     EXPECT_EQ(button_config.style, consumer_action.style);
   }
@@ -157,7 +165,9 @@
   mediator_.dataSource = data_source;
 
   // Simulate a tap on the OK button.
-  AlertAction* ok_button_action = consumer_.actions[kButtonIndexOk];
+  // TODO(crbug.com/1356768): Update when consumer supports multiple buttons on
+  // a row.
+  AlertAction* ok_button_action = consumer_.actions[kButtonIndexOkRow];
   ASSERT_TRUE(ok_button_action.handler);
   ok_button_action.handler(ok_button_action);
 
@@ -175,7 +185,9 @@
 // Tests UMA user action recording.
 TEST_F(AlertOverlayMediatorTest, UserActionRecording) {
   // Tapping OK button records User Action.
-  AlertAction* ok_button_action = consumer_.actions[kButtonIndexOk];
+  // TODO(crbug.com/1356768): Update when consumer supports multiple buttons on
+  // a row.
+  AlertAction* ok_button_action = consumer_.actions[kButtonIndexOkRow];
   base::UserActionTester user_action_tester;
   EXPECT_EQ(0, user_action_tester.GetActionCount(kOKTappedUserActionName));
   ok_button_action.handler(ok_button_action);
diff --git a/media/gpu/v4l2/v4l2_device.cc b/media/gpu/v4l2/v4l2_device.cc
index f7198294..fcc52dd 100644
--- a/media/gpu/v4l2/v4l2_device.cc
+++ b/media/gpu/v4l2/v4l2_device.cc
@@ -2308,8 +2308,20 @@
       continue;
     }
 
-    // We match the video device and the media controller by the driver
-    // field. The mtk-vcodec driver does not fill the card and bus fields
+    // Match the video device and the media controller by the bus_info
+    // field. This works better than the driver field if there are multiple
+    // instances of the same decoder driver in the system. However old MediaTek
+    // drivers didn't fill in the bus_info field for the media device.
+    if (strlen(reinterpret_cast<const char*>(caps.bus_info)) > 0 &&
+        strlen(reinterpret_cast<const char*>(media_info.bus_info)) > 0 &&
+        strncmp(reinterpret_cast<const char*>(caps.bus_info),
+                reinterpret_cast<const char*>(media_info.bus_info),
+                sizeof(caps.driver))) {
+      continue;
+    }
+
+    // Fall back to matching the video device and the media controller by the
+    // driver field. The mtk-vcodec driver does not fill the card and bus fields
     // properly, so those won't work.
     if (strncmp(reinterpret_cast<const char*>(caps.driver),
                 reinterpret_cast<const char*>(media_info.driver),
diff --git a/media/gpu/vaapi/vp9_vaapi_video_decoder_delegate.cc b/media/gpu/vaapi/vp9_vaapi_video_decoder_delegate.cc
index f2c8bd26..52a95c7 100644
--- a/media/gpu/vaapi/vp9_vaapi_video_decoder_delegate.cc
+++ b/media/gpu/vaapi/vp9_vaapi_video_decoder_delegate.cc
@@ -232,16 +232,32 @@
     buffers.push_back({protected_params_->id(),
                        {protected_params_->type(), protected_params_->size(),
                         amd_decrypt_params.data()}});
+
+    // For transcrypted VP9 on AMD we need to send the UCH + cypher_bytes from
+    // the buffer as the slice data per AMD's instructions.
+    base::CheckedNumeric<size_t> protected_data_size =
+        decrypt_config->subsamples()[0].cypher_bytes;
+    protected_data_size += frame_hdr->uncompressed_header_size;
+    if (!protected_data_size.IsValid()) {
+      DVLOG(1) << "Invalid protected_data_size";
+      return DecodeStatus::kFail;
+    }
     encoded_data = vaapi_wrapper_->CreateVABuffer(
-        VASliceDataBufferType,
-        base::strict_cast<size_t>(
-            decrypt_config->subsamples()[0].cypher_bytes));
+        VASliceDataBufferType, protected_data_size.ValueOrDie());
     if (!encoded_data)
       return DecodeStatus::kFail;
-    buffers.push_back(
-        {encoded_data->id(),
-         {encoded_data->type(), encoded_data->size(),
-          frame_hdr->data + decrypt_config->subsamples()[0].clear_bytes}});
+    protected_vp9_data =
+        std::make_unique<uint8_t[]>(protected_data_size.ValueOrDie());
+    // Copy the UCH.
+    memcpy(protected_vp9_data.get(), frame_hdr->data,
+           frame_hdr->uncompressed_header_size);
+    // Copy the transcrypted data.
+    memcpy(protected_vp9_data.get() + frame_hdr->uncompressed_header_size,
+           frame_hdr->data + decrypt_config->subsamples()[0].clear_bytes,
+           base::strict_cast<size_t>(decrypt_config->subsamples()[0].cypher_bytes));
+    buffers.push_back({encoded_data->id(),
+                       {encoded_data->type(), encoded_data->size(),
+                        protected_vp9_data.get()}});
   } else {
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
     encoded_data = vaapi_wrapper_->CreateVABuffer(VASliceDataBufferType,
diff --git a/media/renderers/paint_canvas_video_renderer.cc b/media/renderers/paint_canvas_video_renderer.cc
index 42ac044..16d60d8 100644
--- a/media/renderers/paint_canvas_video_renderer.cc
+++ b/media/renderers/paint_canvas_video_renderer.cc
@@ -358,6 +358,14 @@
   }
 }
 
+size_t NumConvertVideoFrameToRGBPixelsTasks(const VideoFrame* video_frame) {
+  constexpr size_t kTaskBytes = 1024 * 1024;  // 1 MiB
+  const size_t frame_size = VideoFrame::AllocationSize(
+      video_frame->format(), video_frame->visible_rect().size());
+  const size_t n_tasks = std::max<size_t>(1, frame_size / kTaskBytes);
+  return std::min<size_t>(n_tasks, base::SysInfo::NumberOfProcessors());
+}
+
 void ConvertVideoFrameToRGBPixelsTask(const VideoFrame* video_frame,
                                       void* rgb_pixels,
                                       size_t row_bytes,
@@ -1335,7 +1343,8 @@
     void* rgb_pixels,
     size_t row_bytes,
     bool premultiply_alpha,
-    FilterMode filter) {
+    FilterMode filter,
+    bool disable_threading) {
   if (!video_frame->IsMappable()) {
     NOTREACHED() << "Cannot extract pixels from non-CPU frame formats.";
     return;
@@ -1374,13 +1383,8 @@
       break;
   }
 
-  constexpr size_t kTaskBytes = 1024 * 1024;  // 1 MiB
-  const size_t n_tasks = std::min<size_t>(
-      std::max<size_t>(
-          1, VideoFrame::AllocationSize(video_frame->format(),
-                                        video_frame->visible_rect().size()) /
-                 kTaskBytes),
-      base::SysInfo::NumberOfProcessors());
+  const size_t n_tasks =
+      disable_threading ? 1 : NumConvertVideoFrameToRGBPixelsTasks(video_frame);
   base::WaitableEvent event;
   base::RepeatingClosure barrier = base::BarrierClosure(
       n_tasks,
diff --git a/media/renderers/paint_canvas_video_renderer.h b/media/renderers/paint_canvas_video_renderer.h
index f0dac77..7affccd9 100644
--- a/media/renderers/paint_canvas_video_renderer.h
+++ b/media/renderers/paint_canvas_video_renderer.h
@@ -92,7 +92,12 @@
   // indicates whether the R, G, B samples in |rgb_pixels| should be multiplied
   // by alpha. |filter| specifies the chroma upsampling filter used for pixel
   // formats with chroma subsampling. If chroma planes in the pixel format are
-  // not subsampled, |filter| is ignored.
+  // not subsampled, |filter| is ignored. |disable_threading| indicates whether
+  // this method should convert |video_frame| without posting any tasks to
+  // base::ThreadPool, regardless of the frame size. If this method is called
+  // from a task running in base::ThreadPool, setting |disable_threading| to
+  // true can avoid a potential temporary deadlock of base::ThreadPool. See
+  // crbug.com/1402841.
   //
   // NOTE: If |video_frame| doesn't have an alpha plane, all the A samples in
   // |rgb_pixels| will be 255 (equivalent to an alpha of 1.0) and therefore the
@@ -102,7 +107,8 @@
                                            void* rgb_pixels,
                                            size_t row_bytes,
                                            bool premultiply_alpha = true,
-                                           FilterMode filter = kFilterNone);
+                                           FilterMode filter = kFilterNone,
+                                           bool disable_threading = false);
 
   // The output format that ConvertVideoFrameToRGBPixels will write.
   static viz::ResourceFormat GetRGBPixelsOutputFormat();
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 1d5c8de..06164692d 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5817,9 +5817,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_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -5831,8 +5831,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -5988,9 +5988,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6002,8 +6002,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -6140,9 +6140,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6154,8 +6154,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index b0304bd..6e943a4a 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -85453,9 +85453,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_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -85467,8 +85467,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -85594,9 +85594,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -85608,8 +85608,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -85721,9 +85721,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -85735,8 +85735,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -87069,9 +87069,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_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -87082,8 +87082,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -87240,9 +87240,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -87253,8 +87253,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -87392,9 +87392,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -87405,8 +87405,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -88930,9 +88930,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_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -88943,8 +88943,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -89101,9 +89101,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89114,8 +89114,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -89253,9 +89253,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89266,8 +89266,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -90039,9 +90039,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_v111.0.5519.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -90052,8 +90052,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 7ed2cfc..ef31f4b 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -18653,12 +18653,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_v111.0.5519.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18670,8 +18670,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -18844,12 +18844,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18861,8 +18861,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
@@ -19011,12 +19011,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5519.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5519.0",
+        "description": "Run with ash-chrome version 111.0.5520.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -19028,8 +19028,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5519.0",
-              "revision": "version:111.0.5519.0"
+              "location": "lacros_version_skew_tests_v111.0.5520.0",
+              "revision": "version:111.0.5520.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 46ad18c..dd77bb9 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_v111.0.5519.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5520.0/test_ash_chrome',
     ],
-    'description': 'Run with ash-chrome version 111.0.5519.0',
+    'description': 'Run with ash-chrome version 111.0.5520.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_v111.0.5519.0',
-          'revision': 'version:111.0.5519.0',
+          'location': 'lacros_version_skew_tests_v111.0.5520.0',
+          'revision': 'version:111.0.5520.0',
         },
       ],
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 756c6180..642dc48 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -570,6 +570,21 @@
             ]
         }
     ],
+    "ArcLazyWebViewInit": [
+        {
+            "platforms": [
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "LazyWebViewInit"
+                    ]
+                }
+            ]
+        }
+    ],
     "ArcLogdSizeConfig": [
         {
             "platforms": [
@@ -991,26 +1006,6 @@
             ]
         }
     ],
-    "AutofillEnableMerchantOptOutErrorDialog": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "chromeos_lacros",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "AutofillEnableMerchantOptOutErrorDialog"
-                    ]
-                }
-            ]
-        }
-    ],
     "AutofillEnableMultiStepImports": [
         {
             "platforms": [
@@ -2165,21 +2160,6 @@
             ]
         }
     ],
-    "CacheMacSandboxProfiles": [
-        {
-            "platforms": [
-                "mac"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "CacheMacSandboxProfiles"
-                    ]
-                }
-            ]
-        }
-    ],
     "CacheTransparency": [
         {
             "platforms": [
@@ -4330,6 +4310,33 @@
             ]
         }
     ],
+    "DownweightAutocompleteSearchResultsStudy": [
+        {
+            "platforms": [
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "EnabledWithCutoff_20221221",
+                    "params": {
+                        "enable_cutoff": "true"
+                    },
+                    "enable_features": [
+                        "LauncherFuzzyMatchForOmnibox"
+                    ]
+                },
+                {
+                    "name": "EnabledWithRelevance_20221221",
+                    "params": {
+                        "enable_relevance": "true"
+                    },
+                    "enable_features": [
+                        "LauncherFuzzyMatchForOmnibox"
+                    ]
+                }
+            ]
+        }
+    ],
     "EcheSWA": [
         {
             "platforms": [
@@ -6649,7 +6656,7 @@
             ]
         }
     ],
-    "MacAllowBackgroundingProcesses": [
+    "MacAllowBackgroundingRenderProcesses": [
         {
             "platforms": [
                 "mac"
@@ -6658,7 +6665,7 @@
                 {
                     "name": "Enabled_20220218",
                     "enable_features": [
-                        "MacAllowBackgroundingProcesses"
+                        "MacAllowBackgroundingRenderProcesses"
                     ]
                 }
             ]
diff --git a/third_party/blink/common/BUILD.gn b/third_party/blink/common/BUILD.gn
index aebcee31..63dd84b4 100644
--- a/third_party/blink/common/BUILD.gn
+++ b/third_party/blink/common/BUILD.gn
@@ -393,6 +393,7 @@
     "metrics/post_message_counter_unittest.cc",
     "mime_util/mime_util_unittest.cc",
     "notifications/notification_mojom_traits_unittest.cc",
+    "notifications/platform_notification_data_unittest.cc",
     "origin_trials/origin_trials_test.cc",
     "origin_trials/trial_token_unittest.cc",
     "origin_trials/trial_token_validator_unittest.cc",
diff --git a/third_party/blink/common/notifications/platform_notification_data.cc b/third_party/blink/common/notifications/platform_notification_data.cc
index 16a6813..8408527 100644
--- a/third_party/blink/common/notifications/platform_notification_data.cc
+++ b/third_party/blink/common/notifications/platform_notification_data.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/public/common/notifications/platform_notification_data.h"
+
+#include "mojo/public/cpp/bindings/clone_traits.h"
 #include "third_party/blink/public/mojom/notifications/notification.mojom.h"
 
 namespace blink {
@@ -35,8 +37,7 @@
   silent = other.silent;
   require_interaction = other.require_interaction;
   data = other.data;
-  for (auto& action : other.actions)
-    actions.push_back(action.Clone());
+  actions = mojo::Clone(other.actions);
   show_trigger_timestamp = other.show_trigger_timestamp;
   scenario = other.scenario;
 
diff --git a/third_party/blink/common/notifications/platform_notification_data_unittest.cc b/third_party/blink/common/notifications/platform_notification_data_unittest.cc
new file mode 100644
index 0000000..74a3271d
--- /dev/null
+++ b/third_party/blink/common/notifications/platform_notification_data_unittest.cc
@@ -0,0 +1,99 @@
+// 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 "third_party/blink/public/common/notifications/platform_notification_data.h"
+
+#include "base/strings/stringprintf.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/mojom/notifications/notification.mojom.h"
+
+namespace blink {
+
+TEST(PlatformNotificationDataTest, AssignmentOperator) {
+  PlatformNotificationData notification_data;
+  notification_data.title = u"Title of my notification";
+  notification_data.direction = mojom::NotificationDirection::AUTO;
+  notification_data.lang = "test-lang";
+  notification_data.body = u"Notification body.";
+  notification_data.tag = "notification-tag";
+  notification_data.image = GURL("https://example.com/image.png");
+  notification_data.icon = GURL("https://example.com/icon.png");
+  notification_data.badge = GURL("https://example.com/badge.png");
+
+  const int vibration_pattern[] = {500, 100, 30};
+  notification_data.vibration_pattern.assign(std::begin(vibration_pattern),
+                                             std::end(vibration_pattern));
+
+  notification_data.timestamp = base::Time::FromJsTime(1513966159000.);
+  notification_data.renotify = true;
+  notification_data.silent = true;
+  notification_data.require_interaction = true;
+  notification_data.show_trigger_timestamp = base::Time::Now();
+  notification_data.scenario = mojom::NotificationScenario::INCOMING_CALL;
+
+  const char data[] = "mock binary notification data";
+  notification_data.data.assign(std::begin(data), std::end(data));
+
+  notification_data.actions.resize(2);
+  notification_data.actions[0] = blink::mojom::NotificationAction::New();
+  notification_data.actions[0]->type =
+      blink::mojom::NotificationActionType::BUTTON;
+  notification_data.actions[0]->action = "buttonAction";
+  notification_data.actions[0]->title = u"Button Title!";
+  notification_data.actions[0]->icon = GURL("https://example.com/aButton.png");
+  notification_data.actions[0]->placeholder = absl::nullopt;
+
+  notification_data.actions[1] = blink::mojom::NotificationAction::New();
+  notification_data.actions[1]->type =
+      blink::mojom::NotificationActionType::TEXT;
+  notification_data.actions[1]->action = "textAction";
+  notification_data.actions[1]->title = u"Reply Button Title";
+  notification_data.actions[1]->icon = GURL("https://example.com/reply.png");
+  notification_data.actions[1]->placeholder = u"Placeholder Text";
+
+  // Initialize the PlatformNotificationData object and then reassign it to
+  // make sure that the reassignement happens when all the internal variables
+  // are already initialized. We do that to make sure that the assignment
+  // operator is not making any implicit assumptions about the variables' state
+  // - e.g., implcitily assuming that the `actions` vector is empty.
+  PlatformNotificationData assigned_notification_data = notification_data;
+  assigned_notification_data = notification_data;
+
+  EXPECT_EQ(assigned_notification_data.title, notification_data.title);
+  EXPECT_EQ(assigned_notification_data.direction, notification_data.direction);
+  EXPECT_EQ(assigned_notification_data.lang, notification_data.lang);
+  EXPECT_EQ(assigned_notification_data.body, notification_data.body);
+  EXPECT_EQ(assigned_notification_data.tag, notification_data.tag);
+  EXPECT_EQ(assigned_notification_data.image, notification_data.image);
+  EXPECT_EQ(assigned_notification_data.icon, notification_data.icon);
+  EXPECT_EQ(assigned_notification_data.badge, notification_data.badge);
+  EXPECT_EQ(assigned_notification_data.vibration_pattern,
+            notification_data.vibration_pattern);
+  EXPECT_EQ(assigned_notification_data.timestamp, notification_data.timestamp);
+  EXPECT_EQ(assigned_notification_data.renotify, notification_data.renotify);
+  EXPECT_EQ(assigned_notification_data.silent, notification_data.silent);
+  EXPECT_EQ(assigned_notification_data.require_interaction,
+            notification_data.require_interaction);
+  EXPECT_EQ(assigned_notification_data.data, notification_data.data);
+  ASSERT_EQ(notification_data.actions.size(),
+            assigned_notification_data.actions.size());
+  for (size_t i = 0; i < notification_data.actions.size(); ++i) {
+    SCOPED_TRACE(base::StringPrintf("Action index: %zd", i));
+    EXPECT_EQ(notification_data.actions[i]->type,
+              assigned_notification_data.actions[i]->type);
+    EXPECT_EQ(notification_data.actions[i]->action,
+              assigned_notification_data.actions[i]->action);
+    EXPECT_EQ(notification_data.actions[i]->title,
+              assigned_notification_data.actions[i]->title);
+    EXPECT_EQ(notification_data.actions[i]->icon,
+              assigned_notification_data.actions[i]->icon);
+    EXPECT_EQ(notification_data.actions[i]->placeholder,
+              assigned_notification_data.actions[i]->placeholder);
+  }
+  EXPECT_EQ(assigned_notification_data.show_trigger_timestamp,
+            notification_data.show_trigger_timestamp);
+  EXPECT_EQ(assigned_notification_data.scenario, notification_data.scenario);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
index f47f8d6..d247fce 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
@@ -377,6 +377,8 @@
   if (!IsDisabledFormControl()) {
     auto popover = popoverTargetElement();
     if (popover.popover) {
+      DCHECK(RuntimeEnabledFeatures::HTMLPopoverAttributeEnabled(
+          GetDocument().GetExecutionContext()));
       auto trigger_support = SupportsPopoverTriggering();
       DCHECK_NE(popover.action, PopoverTriggerAction::kNone);
       DCHECK_NE(trigger_support, PopoverTriggerSupport::kNone);
diff --git a/third_party/blink/renderer/core/page/focus_controller.cc b/third_party/blink/renderer/core/page/focus_controller.cc
index 2f2e89c..cbd1cf67 100644
--- a/third_party/blink/renderer/core/page/focus_controller.cc
+++ b/third_party/blink/renderer/core/page/focus_controller.cc
@@ -79,10 +79,11 @@
          popover->GetPopoverData()->invoker();
 }
 
-const Element* InsideOpenPopoverWithInvoker(const Element* element) {
+const Element* InclusiveAncestorOpenPopoverWithInvoker(const Element* element) {
   for (; element; element = FlatTreeTraversal::ParentElement(*element)) {
-    if (IsOpenPopoverWithInvoker(element))
-      return element;
+    if (IsOpenPopoverWithInvoker(element)) {
+      return element;  // Return the popover
+    }
   }
   return nullptr;
 }
@@ -92,9 +93,10 @@
   if (!invoker)
     return false;
   HTMLElement* popover = invoker->popoverTargetElement().popover;
-  if (!popover)
-    return false;
-  return popover->popoverOpen();
+  // There could be more than one invoker for a given popover. Only return true
+  // if this invoker was the one that was actually used.
+  return popover && popover->popoverOpen() &&
+         popover->GetPopoverData()->invoker() == invoker;
 }
 
 // This class defines the navigation order.
@@ -324,7 +326,7 @@
           ScopedFocusNavigation::FindFallbackScopeOwnerSlot(current)) {
     return ScopedFocusNavigation(*slot, &current, owner_map);
   }
-  if (auto* popover = InsideOpenPopoverWithInvoker(&current)) {
+  if (auto* popover = InclusiveAncestorOpenPopoverWithInvoker(&current)) {
     return ScopedFocusNavigation(const_cast<Element&>(*popover), &current,
                                  owner_map);
   }
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth.cc b/third_party/blink/renderer/modules/bluetooth/bluetooth.cc
index ea6d67ca..b9a8b4a 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth.cc
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth.cc
@@ -75,6 +75,14 @@
   } else if (window->GetFrame()->IsInFencedFrameTree()) {
     exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError,
                                       kFencedFrameError);
+  } else if (window->GetFrame()
+                 ->Top()
+                 ->GetSecurityContext()
+                 ->GetSecurityOrigin()
+                 ->IsOpaque()) {
+    exception_state.ThrowSecurityError(
+        "Access to the Web Bluetooth API is denied from contexts where the "
+        "top-level document has an opaque origin.");
   }
 
   return exception_state.HadException();
@@ -291,6 +299,7 @@
 ScriptPromise Bluetooth::getAvailability(ScriptState* script_state,
                                          ExceptionState& exception_state) {
   LocalDOMWindow* window = GetSupplementable()->DomWindow();
+
   if (IsRequestDenied(window, exception_state)) {
     return ScriptPromise();
   }
@@ -353,6 +362,7 @@
 ScriptPromise Bluetooth::getDevices(ScriptState* script_state,
                                     ExceptionState& exception_state) {
   LocalDOMWindow* window = GetSupplementable()->DomWindow();
+
   if (IsRequestDenied(window, exception_state)) {
     return ScriptPromise();
   }
@@ -380,6 +390,7 @@
                                        const RequestDeviceOptions* options,
                                        ExceptionState& exception_state) {
   LocalDOMWindow* window = GetSupplementable()->DomWindow();
+
   if (IsRequestDenied(window, exception_state)) {
     return ScriptPromise();
   }
@@ -484,6 +495,7 @@
                                        const BluetoothLEScanOptions* options,
                                        ExceptionState& exception_state) {
   LocalDOMWindow* window = GetSupplementable()->DomWindow();
+
   if (IsRequestDenied(window, exception_state)) {
     return ScriptPromise();
   }
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder_test.h b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder_test.h
index 7864e11a..357bb72 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder_test.h
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder_test.h
@@ -45,6 +45,9 @@
                          const Vector<uint32_t>& dimensions,
                          V8MLOperandType::Enum type);
 
+NotShared<DOMArrayBufferView> CreateArrayBufferViewForOperand(
+    const MLOperand* operand);
+
 MLOperand* BuildClamp(V8TestingScope& scope,
                       MLGraphBuilder* builder,
                       const MLOperand* input,
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
index 777fe9a..7ee0482 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "base/numerics/checked_math.h"
+#include "base/ranges/algorithm.h"
 #include "base/synchronization/lock.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
@@ -15,6 +16,7 @@
 #include "build/buildflag.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/modules/ml/ml.h"
 #include "third_party/blink/renderer/modules/ml/ml_context.h"
 #include "third_party/blink/renderer/modules/ml/webnn/ml_operand.h"
 #include "third_party/blink/renderer/modules/ml/webnn/ml_operator.h"
@@ -534,14 +536,21 @@
   return toposorted_operators;
 }
 
-const ExternalValueIdMap& MLGraphXnnpack::GetInputExternalValueIdMap() const {
+const ExternalValueIdMap& MLGraphXnnpack::GetInputExternalValueIdMapForTesting()
+    const {
   return input_external_value_id_map_;
 }
 
-const ExternalValueIdMap& MLGraphXnnpack::GetOutputExternalValueIdMap() const {
+const ExternalValueIdMap&
+MLGraphXnnpack::GetOutputExternalValueIdMapForTesting() const {
   return output_external_value_id_map_;
 }
 
+const Vector<xnn_external_value>& MLGraphXnnpack::GetXnnExternalValuesTesting()
+    const {
+  return xnn_external_values_;
+}
+
 void MLGraphXnnpack::BuildAsyncImpl(const MLNamedOperands& named_outputs,
                                     ScriptPromiseResolver* resolver) {
   // TODO(crbug.com/1273291): Revisit whether the topological sorting should run
@@ -628,9 +637,11 @@
 void MLGraphXnnpack::ComputeAsyncImpl(const MLNamedArrayBufferViews& inputs,
                                       const MLNamedArrayBufferViews& outputs,
                                       ScriptPromiseResolver* resolver) {
-  // TODO(ningxin.hu@intel.com): Implement this method by posting the inputs and
-  // outputs to a background thread and invoking XNNPACK Runtime object in the
-  // background thread.
+  // TODO(crbug.com/1273291): There is an issue of current WebNN asynchronous
+  // execution design: https://github.com/webmachinelearning/webnn/issues/318.
+  // After the spec issue is fixed, implement this method by posting the inputs
+  // and outputs to a background thread and invoking XNNPACK Runtime object in
+  // the background thread.
 
   resolver->Reject(MakeGarbageCollected<DOMException>(
       DOMExceptionCode::kNotSupportedError, "Not implemented."));
@@ -639,12 +650,12 @@
 void MLGraphXnnpack::ComputeSyncImpl(const MLNamedArrayBufferViews& inputs,
                                      const MLNamedArrayBufferViews& outputs,
                                      ExceptionState& exception_state) {
-  // TODO(ningxin.hu@intel.com): Setup the external values of the XNNPACK
-  // Runtime object by input and output buffers, and invoke the XNNPACK Runtime
-  // object for accelerated execution in the caller's thread.
-
-  exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
-                                    "Not implemented.");
+  String error_message;
+  xnn_status status = InvokeXnnRuntime(inputs, outputs, error_message);
+  if (status != xnn_status_success) {
+    exception_state.ThrowDOMException(XnnStatusToDOMExceptionCode(status),
+                                      error_message);
+  }
 }
 
 xnn_status MLGraphXnnpack::CreateXnnSubgraphAndRuntime(
@@ -783,4 +794,56 @@
   return xnn_status_success;
 }
 
+Vector<xnn_external_value> MLGraphXnnpack::CreateExternalValues(
+    const MLNamedArrayBufferViews& inputs,
+    const MLNamedArrayBufferViews& outputs) const {
+  Vector<xnn_external_value> external_values;
+  external_values.reserve((inputs.size() + outputs.size()));
+  // Although XNNPACK doesn't validate the pointers, the base address and the
+  // byte length of the array buffer views are already validated by
+  // ValidateNamedArrayBufferViews(). It should be safe to setup XNNPACK Runtime
+  // object with them.
+  for (const auto& [name, array_buffer_view] : inputs) {
+    DCHECK(input_external_value_id_map_.Contains(name));
+    external_values.emplace_back(
+        xnn_external_value{.id = input_external_value_id_map_.at(name),
+                           .data = array_buffer_view->BaseAddress()});
+  }
+  for (const auto& [name, array_buffer_view] : outputs) {
+    DCHECK(output_external_value_id_map_.Contains(name));
+    external_values.emplace_back(
+        xnn_external_value{.id = output_external_value_id_map_.at(name),
+                           .data = array_buffer_view->BaseAddress()});
+  }
+  base::ranges::sort(external_values, base::ranges::less{},
+                     &xnn_external_value::id);
+  return external_values;
+}
+
+bool MLGraphXnnpack::NeedToSetupExternalValues(
+    const Vector<xnn_external_value>& external_values) const {
+  return !base::ranges::equal(external_values, xnn_external_values_,
+                              [](const auto& a, const auto& b) {
+                                return a.id == b.id && a.data == b.data;
+                              });
+}
+
+xnn_status MLGraphXnnpack::InvokeXnnRuntime(
+    const MLNamedArrayBufferViews& inputs,
+    const MLNamedArrayBufferViews& outputs,
+    String& error_message) {
+  TRACE_EVENT("blink", "MLGraphXnnpack::InvokeXnnRuntime");
+
+  auto external_values = CreateExternalValues(inputs, outputs);
+  if (NeedToSetupExternalValues(external_values)) {
+    XNN_CHECK_STATUS_AND_SET_ERROR_MESSAGE(xnn_setup_runtime(
+        xnn_runtime_.get(), external_values.size(), external_values.data()));
+    xnn_external_values_ = external_values;
+  }
+
+  XNN_CHECK_STATUS_AND_SET_ERROR_MESSAGE(
+      xnn_invoke_runtime(xnn_runtime_.get()));
+  return xnn_status_success;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
index c756a90..c87098f 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
@@ -19,7 +19,9 @@
 class SharedXnnpackContext;
 }
 
+// Map the MLGraph's input or output name to the XNNPACK external Value ID.
 using ExternalValueIdMap = HashMap<String, uint32_t>;
+
 using DataBufferPtr = std::unique_ptr<uint8_t[]>;
 
 class MODULES_EXPORT MLGraphXnnpack final : public MLGraph {
@@ -47,14 +49,15 @@
   // Return the operators in topological order by searching from the named
   // output operands. It ensures operator 'j' appears before operator 'i' in the
   // result, if 'i' depends on 'j'.
-
+  //
   // The sorted operators will be used by CreateXnnSubgraphAndRuntime() that
   // defines the subgraph Nodes for operators in topological order.
   static HeapVector<Member<const MLOperator>>* GetOperatorsInTopologicalOrder(
       const MLNamedOperands& named_outputs);
 
-  const ExternalValueIdMap& GetInputExternalValueIdMap() const;
-  const ExternalValueIdMap& GetOutputExternalValueIdMap() const;
+  const ExternalValueIdMap& GetInputExternalValueIdMapForTesting() const;
+  const ExternalValueIdMap& GetOutputExternalValueIdMapForTesting() const;
+  const Vector<xnn_external_value>& GetXnnExternalValuesTesting() const;
 
  private:
   // Post the XNNPACK Subgraph and Runtime building to a background thread.
@@ -83,7 +86,7 @@
   MLGraph* BuildSyncImpl(const MLNamedOperands& named_outputs,
                          ExceptionState& exception_state) override;
 
-  // Post the XNNPACK Runtime invocation to a background thread.
+  // Post the XNNPACK Runtime object invocation to a background thread.
   void ComputeAsyncImpl(const MLNamedArrayBufferViews& inputs,
                         const MLNamedArrayBufferViews& outputs,
                         ScriptPromiseResolver* resolver) override;
@@ -106,6 +109,36 @@
       const HeapVector<Member<const MLOperator>>& toposorted_operators,
       String& error_message);
 
+  // This method creates the xnn_external_value vector from named input and
+  // output array buffer views. The xnn_external_value vector is used to set up
+  // the XNNPACK Runtime object. The returned vector is sorted by
+  // `xnn_external_value::id`, and can be passed to
+  // `NeedToSetupExternalValues()`.
+  Vector<xnn_external_value> CreateExternalValues(
+      const MLNamedArrayBufferViews& inputs,
+      const MLNamedArrayBufferViews& outputs) const;
+
+  // This method checks if any data pointers of the provided
+  // `xnn_external_values` changed against the pointers that has been setup
+  // (stored in `xnn_external_values_`).
+  //
+  // The change may be caused by user providing a different ArrayBufferView that
+  // is backed by a newly allocated or reallocated store.
+  //
+  // The XNNPACK Runtime object setup may be expensive. If the data pointers
+  // haven't changed, there's no need to redo the setup.
+  bool NeedToSetupExternalValues(
+      const Vector<xnn_external_value>& xnn_external_values) const;
+
+  // This method sets up data pointers for XNNPACK external values, performs the
+  // forward pass, then stores the result in the array buffer views provided by
+  // `outputs`.
+  //
+  // This method can be called in the main thread or a background thread.
+  xnn_status InvokeXnnRuntime(const MLNamedArrayBufferViews& inputs,
+                              const MLNamedArrayBufferViews& outputs,
+                              String& error_message);
+
   // The SharedXnnpackContext is shared and reference-counted by all instances
   // of MLGraphXnnpack. It initializes (and also deinitializes) the XNNPACK
   // library for graph building and execution.
@@ -122,6 +155,11 @@
   ExternalValueIdMap input_external_value_id_map_;
   ExternalValueIdMap output_external_value_id_map_;
 
+  // Used to track external values that have been setup, to avoid unnecessary
+  // xnn_runtime_setup calls (which may be expensive). Sorted by
+  // `xnn_external_value::id`.
+  Vector<xnn_external_value> xnn_external_values_;
+
   // The XNNPACK Runtime object for the accelerated executions.
   std::unique_ptr<xnn_runtime, decltype(&xnn_delete_runtime)> xnn_runtime_{
       nullptr, &xnn_delete_runtime};
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack_test.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack_test.cc
index b79f6a7..ea9994d 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack_test.cc
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack_test.cc
@@ -138,12 +138,14 @@
     auto [graph, exception] = BuildGraph(scope, builder, {{"output", output}});
     EXPECT_NE(graph, nullptr);
     MLGraphXnnpack* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
-    const auto& output_externals = xnnpack_graph->GetOutputExternalValueIdMap();
+    const auto& output_externals =
+        xnnpack_graph->GetOutputExternalValueIdMapForTesting();
     EXPECT_EQ(output_externals.size(), 1u);
     EXPECT_EQ(output_externals.Contains("output"), true);
     // MLGraphXnnpack defines output external Values first.
     EXPECT_EQ(output_externals.at("output"), 0u);
-    const auto& input_externals = xnnpack_graph->GetInputExternalValueIdMap();
+    const auto& input_externals =
+        xnnpack_graph->GetInputExternalValueIdMapForTesting();
     EXPECT_EQ(input_externals.size(), 2u);
     EXPECT_EQ(input_externals.Contains("input0"), true);
     EXPECT_EQ(input_externals.Contains("input1"), true);
@@ -166,12 +168,14 @@
     auto [graph, exception] = BuildGraph(scope, builder, {{"output", output}});
     EXPECT_NE(graph, nullptr);
     MLGraphXnnpack* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
-    const auto& output_externals = xnnpack_graph->GetOutputExternalValueIdMap();
+    const auto& output_externals =
+        xnnpack_graph->GetOutputExternalValueIdMapForTesting();
     EXPECT_EQ(output_externals.size(), 1u);
     EXPECT_EQ(output_externals.Contains("output"), true);
     // MLGraphXnnpack defines output external Values first.
     EXPECT_EQ(output_externals.at("output"), 0u);
-    const auto& input_externals = xnnpack_graph->GetInputExternalValueIdMap();
+    const auto& input_externals =
+        xnnpack_graph->GetInputExternalValueIdMapForTesting();
     EXPECT_EQ(input_externals.size(), 1u);
     EXPECT_EQ(input_externals.Contains("input"), true);
     EXPECT_EQ(input_externals.at("input"), 1u);
@@ -200,13 +204,15 @@
     auto [graph, exception] = BuildGraph(scope, builder, {{"output", output}});
     EXPECT_NE(graph, nullptr);
     MLGraphXnnpack* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
-    const auto& output_externals = xnnpack_graph->GetOutputExternalValueIdMap();
+    const auto& output_externals =
+        xnnpack_graph->GetOutputExternalValueIdMapForTesting();
     EXPECT_EQ(output_externals.size(), 1u);
     EXPECT_EQ(output_externals.Contains("output"), true);
     // MLGraphXnnpack defines output external Values first, so the external
     // Value's ID of the output operand should start from 0.
     EXPECT_EQ(output_externals.at("output"), 0u);
-    const auto& input_externals = xnnpack_graph->GetInputExternalValueIdMap();
+    const auto& input_externals =
+        xnnpack_graph->GetInputExternalValueIdMapForTesting();
     EXPECT_EQ(input_externals.size(), 1u);
     EXPECT_EQ(input_externals.Contains("input"), true);
     EXPECT_EQ(input_externals.at("input"), 1u);
@@ -237,7 +243,8 @@
         scope, builder, {{"output0", output0}, {"output1", output1}});
     EXPECT_NE(graph, nullptr);
     MLGraphXnnpack* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
-    const auto& output_externals = xnnpack_graph->GetOutputExternalValueIdMap();
+    const auto& output_externals =
+        xnnpack_graph->GetOutputExternalValueIdMapForTesting();
     EXPECT_EQ(output_externals.size(), 2u);
     EXPECT_EQ(output_externals.Contains("output0"), true);
     EXPECT_EQ(output_externals.Contains("output1"), true);
@@ -245,7 +252,8 @@
     // Value's ID of the output operand should start from 0.
     EXPECT_EQ(output_externals.at("output0"), 0u);
     EXPECT_EQ(output_externals.at("output1"), 1u);
-    const auto& input_externals = xnnpack_graph->GetInputExternalValueIdMap();
+    const auto& input_externals =
+        xnnpack_graph->GetInputExternalValueIdMapForTesting();
     EXPECT_EQ(input_externals.size(), 3u);
     EXPECT_EQ(input_externals.Contains("input0"), true);
     EXPECT_EQ(input_externals.Contains("input1"), true);
@@ -259,18 +267,54 @@
   }
 }
 
+template <typename T>
 struct OperandInfo {
   V8MLOperandType::Enum type;
   Vector<uint32_t> dimensions;
+  Vector<T> values;
 };
 
+// Helper function to set the data of an ArrayBufferView from a vector.
+template <typename T>
+void SetArrayBufferViewValues(NotShared<DOMArrayBufferView> array_buffer_view,
+                              const Vector<T>& values) {
+  DCHECK_EQ(array_buffer_view->byteLength(), values.size() * sizeof(T));
+  memcpy(array_buffer_view->BaseAddress(), values.data(),
+         values.size() * sizeof(T));
+}
+
+// Overrode helper function to create an ArrayBufferView given an operand and
+// set its data from a vector.
+template <typename T>
+NotShared<DOMArrayBufferView> CreateArrayBufferViewForOperand(
+    const MLOperand* operand,
+    const Vector<T>& values) {
+  auto array_buffer_view = CreateArrayBufferViewForOperand(operand);
+  SetArrayBufferViewValues(array_buffer_view, values);
+  return array_buffer_view;
+}
+
+// Helper function to get the data of an ArrayBufferView into a vector.
+template <typename T>
+Vector<T> GetArrayBufferViewValues(
+    NotShared<DOMArrayBufferView> array_buffer_view) {
+  Vector<T> values(base::checked_cast<wtf_size_t>(
+      array_buffer_view->byteLength() / array_buffer_view->TypeSize()));
+  memcpy(values.data(), array_buffer_view->BaseAddress(),
+         array_buffer_view->byteLength());
+  return values;
+}
+
+template <typename T>
 struct ElementWiseBinaryTester {
   MLGraphXnnpackTest* helper;
   ElementWiseBinaryKind kind;
-  OperandInfo lhs;
-  OperandInfo rhs;
+  OperandInfo<T> lhs;
+  OperandInfo<T> rhs;
+  Vector<T> expected;
 
   void Test(V8TestingScope& scope) {
+    // Build the graph.
     auto* builder = CreateMLGraphBuilder(scope);
     auto* lhs_operand =
         BuildInput(scope, builder, "lhs", lhs.dimensions, lhs.type);
@@ -278,9 +322,20 @@
         BuildInput(scope, builder, "rhs", rhs.dimensions, rhs.type);
     auto* output_operand =
         BuildElementWiseBinary(scope, builder, kind, lhs_operand, rhs_operand);
-    auto [graph, exception] =
+    auto [graph, build_exception] =
         helper->BuildGraph(scope, builder, {{"output", output_operand}});
     EXPECT_NE(graph, nullptr);
+
+    // Compute the graph.
+    auto lhs_buffer = CreateArrayBufferViewForOperand(lhs_operand, lhs.values);
+    auto rhs_buffer = CreateArrayBufferViewForOperand(rhs_operand, rhs.values);
+    auto output_buffer = CreateArrayBufferViewForOperand(output_operand);
+    auto* compute_exception = helper->ComputeGraph(
+        scope, graph, {{"lhs", lhs_buffer}, {"rhs", rhs_buffer}},
+        {{"output", output_buffer}});
+    EXPECT_EQ(compute_exception, nullptr);
+    auto results = GetArrayBufferViewValues<T>(output_buffer);
+    EXPECT_EQ(results, expected);
   }
 };
 
@@ -288,118 +343,185 @@
   V8TestingScope scope;
   {
     // Test element-wise add operator for two 1-D tensors.
-    ElementWiseBinaryTester{
+    // The expected results should be the sum of the values of the two input
+    // tensors, element-wise.
+    ElementWiseBinaryTester<float>{
         .helper = this,
         .kind = ElementWiseBinaryKind::kAdd,
-        .lhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2}},
-        .rhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2}}}
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2},
+                .values = {1.0, 2.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2},
+                .values = {3.0, 4.0}},
+        .expected = {4.0, 6.0}}
         .Test(scope);
   }
   {
     // Test element-wise add operator for two 2-D tensors.
-    ElementWiseBinaryTester{
+    ElementWiseBinaryTester<float>{
         .helper = this,
         .kind = ElementWiseBinaryKind::kAdd,
-        .lhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2, 2}},
-        .rhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2, 2}}}
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2, 2},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2, 2},
+                .values = {5.0, 6.0, 7.0, 8.0}},
+        .expected = {6.0, 8.0, 10.0, 12.0}}
         .Test(scope);
   }
   {
     // Test element-wise add operator for 1-D tensor broadcasting to 2-D
     // tensor.
-    ElementWiseBinaryTester{
+    ElementWiseBinaryTester<float>{
         .helper = this,
         .kind = ElementWiseBinaryKind::kAdd,
-        .lhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2, 2}},
-        .rhs = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2}}}
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2, 2},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2},
+                .values = {5.0, 6.0}},
+        .expected = {6.0, 8.0, 8.0, 10.0}}
         .Test(scope);
   }
   {
     // Test element-wise add operator for 3-D tensor broadcasting to 3-D
     // tensor.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kAdd,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {2, 1, 2}}}
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kAdd,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {2, 1, 2},
+                .values = {5.0, 6.0, 7.0, 8.0}},
+        .expected = {6.0, 8.0, 8.0, 10.0, 8.0, 10.0, 10.0, 12.0}}
         .Test(scope);
   }
   {
-    // Test element-wise add operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kAdd,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // Test element-wise add operator for two 4-D tensors
+    ElementWiseBinaryTester<float>{
+        .kind = ElementWiseBinaryKind::kAdd,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {5.0, 6.0, 7.0, 8.0}},
+        .expected = {6.0, 8.0, 10.0, 12.0}}
         .Test(scope);
   }
   {
     // Test element-wise sub operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kSub,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // The expected results should be the difference of the values of the two
+    // input tensors, element-wise.
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kSub,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {5.0, 6.0, 7.0, 8.0}},
+        .expected = {-4.0, -4.0, -4.0, -4.0}}
         .Test(scope);
   }
   {
     // Test element-wise mul operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kMul,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // The expected results should be the prdocut of the values of the two input
+    // tensors, element-wise.
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kMul,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 2.0, 3.0, 4.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {5.0, 6.0, 7.0, 8.0}},
+        .expected = {5.0, 12.0, 21.0, 32.0}}
         .Test(scope);
   }
   {
     // Test element-wise div operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kDiv,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // The expected results should be the quotient of the values of the two
+    // input tensors, element-wise.
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kDiv,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {3.0, 4.0, 6.0, 8.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 2.0, 2.0, 2.0}},
+        .expected = {3.0, 2.0, 3.0, 4.0}}
         .Test(scope);
   }
   {
     // Test element-wise min operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kMin,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // The expected results should be the lesser values of the two input
+    // tensors, element-wise.
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kMin,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 4.0, 5.0, 8.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {2.0, 3.0, 6.0, 7.0}},
+        .expected = {1.0, 3.0, 5.0, 7.0}}
         .Test(scope);
   }
   {
     // Test element-wise max operator for two 4-D tensors.
-    ElementWiseBinaryTester{.helper = this,
-                            .kind = ElementWiseBinaryKind::kMax,
-                            .lhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}},
-                            .rhs = {.type = V8MLOperandType::Enum::kFloat32,
-                                    .dimensions = {1, 2, 2, 1}}}
+    // The expected results should be the greater values of the two input
+    // tensors, element-wise.
+    ElementWiseBinaryTester<float>{
+        .helper = this,
+        .kind = ElementWiseBinaryKind::kMax,
+        .lhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {1.0, 4.0, 5.0, 8.0}},
+        .rhs = {.type = V8MLOperandType::Enum::kFloat32,
+                .dimensions = {1, 2, 2, 1},
+                .values = {2.0, 3.0, 6.0, 7.0}},
+        .expected = {2.0, 4.0, 6.0, 8.0}}
         .Test(scope);
   }
 }
 
+template <typename T>
 struct ReluTester {
   MLGraphXnnpackTest* helper;
-  OperandInfo input;
+  OperandInfo<T> input;
+  Vector<T> expected;
 
   void Test(V8TestingScope& scope) {
+    // Build the graph.
     auto* builder = CreateMLGraphBuilder(scope);
     auto* input_operand =
         BuildInput(scope, builder, "input", input.dimensions, input.type);
     auto* output_operand =
         builder->relu(input_operand, scope.GetExceptionState());
-    auto [graph, exception] =
+    auto [graph, build_exception] =
         helper->BuildGraph(scope, builder, {{"output", output_operand}});
     EXPECT_NE(graph, nullptr);
+
+    // Compute the graph.
+    auto input_buffer =
+        CreateArrayBufferViewForOperand(input_operand, input.values);
+    auto output_buffer = CreateArrayBufferViewForOperand(output_operand);
+    auto* compute_exception = helper->ComputeGraph(
+        scope, graph, {{"input", input_buffer}}, {{"output", output_buffer}});
+    EXPECT_EQ(compute_exception, nullptr);
+    auto results = GetArrayBufferViewValues<T>(output_buffer);
+    EXPECT_EQ(results, expected);
   }
 };
 
@@ -407,38 +529,258 @@
   V8TestingScope scope;
   {
     // Test relu operator for 1-D tensor.
-    ReluTester{
-        .helper = this,
-        .input = {.type = V8MLOperandType::Enum::kFloat32, .dimensions = {2}}}
+    // The expected results should be the result of the rectified linear
+    // function, y = max(0, x), applied to the input tensor, element-wise.
+    ReluTester<float>{.helper = this,
+                      .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                .dimensions = {2},
+                                .values = {-1.0, 1.0}},
+                      .expected = {0.0, 1.0}}
         .Test(scope);
   }
   {
     // Test relu operator for 2-D tensor.
-    ReluTester{.helper = this,
-               .input = {.type = V8MLOperandType::Enum::kFloat32,
-                         .dimensions = {2, 2}}}
+    ReluTester<float>{.helper = this,
+                      .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                .dimensions = {2, 2},
+                                .values = {-10.0, -0.5, 0.5, 10.0}},
+                      .expected = {0.0, 0.0, 0.5, 10.0}}
         .Test(scope);
   }
   {
     // Test relu operator for 3-D tensor.
-    ReluTester{.helper = this,
-               .input = {.type = V8MLOperandType::Enum::kFloat32,
-                         .dimensions = {1, 2, 2}}}
+    ReluTester<float>{.helper = this,
+                      .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                .dimensions = {1, 2, 2},
+                                .values = {-10.0, -0.5, 0.5, 10.0}},
+                      .expected = {0.0, 0.0, 0.5, 10.0}}
         .Test(scope);
   }
   {
     // Test relu operator for 4-D tensor.
-    ReluTester{.helper = this,
-               .input = {.type = V8MLOperandType::Enum::kFloat32,
-                         .dimensions = {1, 2, 2, 1}}}
+    ReluTester<float>{.helper = this,
+                      .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                .dimensions = {1, 2, 2, 1},
+                                .values = {-10.0, -0.5, 0.5, 10.0}},
+                      .expected = {0.0, 0.0, 0.5, 10.0}}
         .Test(scope);
   }
 }
 
+void CheckExternalValues(const MLGraphXnnpack* xnnpack_graph,
+                         const MLNamedArrayBufferViews& inputs,
+                         const MLNamedArrayBufferViews& outputs) {
+  const auto& external_values = xnnpack_graph->GetXnnExternalValuesTesting();
+  for (const auto& [name, array_buffer_view] : inputs) {
+    const auto& input_external_values =
+        xnnpack_graph->GetInputExternalValueIdMapForTesting();
+    DCHECK(input_external_values.Contains(name));
+    const auto& value_id = input_external_values.at(name);
+    const auto* it =
+        std::find_if(external_values.begin(), external_values.end(),
+                     [value_id](const auto& external_value) {
+                       return external_value.id == value_id;
+                     });
+    DCHECK(it);
+    EXPECT_EQ(it->data, array_buffer_view->BaseAddress());
+  }
+  for (const auto& [name, array_buffer_view] : outputs) {
+    const auto& output_external_values =
+        xnnpack_graph->GetOutputExternalValueIdMapForTesting();
+    DCHECK(output_external_values.Contains(name));
+    const auto& value_id = output_external_values.at(name);
+    const auto* it =
+        std::find_if(external_values.begin(), external_values.end(),
+                     [value_id](const auto& external_value) {
+                       return external_value.id == value_id;
+                     });
+    DCHECK(it);
+    EXPECT_EQ(it->data, array_buffer_view->BaseAddress());
+  }
+}
+
+TEST_P(MLGraphXnnpackTest, InvokeXnnpackRuntimeTest) {
+  V8TestingScope scope;
+  auto* builder = CreateMLGraphBuilder(scope);
+  Vector<uint32_t> shape({1, 2, 2, 1});
+  // Create an MLGraphXnnpack with the following topology:
+  //       [input0] [input1]
+  //           \   /
+  //            add
+  //             |
+  //          [output]
+  auto* input0 = BuildInput(scope, builder, "input0", shape,
+                            V8MLOperandType::Enum::kFloat32);
+  auto* input1 = BuildInput(scope, builder, "input1", shape,
+                            V8MLOperandType::Enum::kFloat32);
+  auto* output = BuildElementWiseBinary(
+      scope, builder, ElementWiseBinaryKind::kAdd, input0, input1);
+  auto [graph, exception] = BuildGraph(scope, builder, {{"output", output}});
+  ASSERT_NE(graph, nullptr);
+  auto* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
+  {
+    // Test invoking XNNPACK Runtimbe object twice with the same buffers.
+    auto input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {1.0, 2.0, 3.0, 4.0});
+    auto input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {5.0, 6.0, 7.0, 8.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"input0", input0_buffer},
+                                      {"input1", input1_buffer}};
+    MLNamedArrayBufferViews outputs = {{"output", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+    compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+  }
+  {
+    // Test invoking XNNPACK Runtimbe object twice with the same buffers, but
+    // for each invocation the buffers are set to different values.
+    auto input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {1.0, 2.0, 3.0, 4.0});
+    auto input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {5.0, 6.0, 7.0, 8.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"input0", input0_buffer},
+                                      {"input1", input1_buffer}};
+    MLNamedArrayBufferViews outputs = {{"output", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+    SetArrayBufferViewValues<float>(input0_buffer, {2.0, 3.0, 4.0, 5.0});
+    SetArrayBufferViewValues<float>(input1_buffer, {6.0, 7.0, 8.0, 9.0});
+    compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({8.0, 10.0, 12.0, 14.0}));
+  }
+  {
+    // Test invoking XNNPACK Runtimbe object twice with different input buffers.
+    auto input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {1.0, 2.0, 3.0, 4.0});
+    auto input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {5.0, 6.0, 7.0, 8.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"input0", input0_buffer},
+                                      {"input1", input1_buffer}};
+    MLNamedArrayBufferViews outputs = {{"output", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+    auto new_input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {2.0, 3.0, 4.0, 5.0});
+    auto new_input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {6.0, 7.0, 8.0, 9.0});
+    inputs = {{"input0", new_input0_buffer}, {"input1", new_input1_buffer}};
+    compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({8.0, 10.0, 12.0, 14.0}));
+  }
+  {
+    // Test invoking XNNPACK Runtimbe object twice with different output buffer.
+    auto input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {1.0, 2.0, 3.0, 4.0});
+    auto input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {5.0, 6.0, 7.0, 8.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"input0", input0_buffer},
+                                      {"input1", input1_buffer}};
+    MLNamedArrayBufferViews outputs = {{"output", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+    auto new_output_buffer = CreateArrayBufferViewForOperand(output);
+    outputs = {{"output", new_output_buffer}};
+    compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    results = GetArrayBufferViewValues<float>(new_output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+  }
+}
+
+// Test invoking XNNPACK Runtimbe object when input and output use the same
+// name.
+TEST_P(MLGraphXnnpackTest, InputAndOutputUseSameNameTest) {
+  V8TestingScope scope;
+  auto* builder = CreateMLGraphBuilder(scope);
+  Vector<uint32_t> shape({1, 2, 2, 1});
+  {
+    // Create an MLGraphXnnpack with the following topology:
+    //            [x]
+    //             |
+    //            relu
+    //             |
+    //            [x]
+    auto* input =
+        BuildInput(scope, builder, "x", shape, V8MLOperandType::Enum::kFloat32);
+    auto* output = builder->relu(input, scope.GetExceptionState());
+    auto [graph, exception] = BuildGraph(scope, builder, {{"x", output}});
+    ASSERT_NE(graph, nullptr);
+    auto* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
+    auto input_buffer =
+        CreateArrayBufferViewForOperand<float>(input, {-10.0, -0.5, 0.5, 10.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"x", input_buffer}};
+    MLNamedArrayBufferViews outputs = {{"x", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({0.0, 0.0, 0.5, 10.0}));
+  }
+  {
+    // Create an MLGraphXnnpack with the following topology:
+    //         [x]   [y]
+    //           \   /
+    //            add
+    //             |
+    //            [y]
+    auto* input0 =
+        BuildInput(scope, builder, "x", shape, V8MLOperandType::Enum::kFloat32);
+    auto* input1 =
+        BuildInput(scope, builder, "y", shape, V8MLOperandType::Enum::kFloat32);
+    auto* output = BuildElementWiseBinary(
+        scope, builder, ElementWiseBinaryKind::kAdd, input0, input1);
+    auto [graph, exception] = BuildGraph(scope, builder, {{"y", output}});
+    ASSERT_NE(graph, nullptr);
+    auto* xnnpack_graph = static_cast<MLGraphXnnpack*>(graph.Get());
+    auto input0_buffer =
+        CreateArrayBufferViewForOperand<float>(input0, {1.0, 2.0, 3.0, 4.0});
+    auto input1_buffer =
+        CreateArrayBufferViewForOperand<float>(input1, {5.0, 6.0, 7.0, 8.0});
+    auto output_buffer = CreateArrayBufferViewForOperand(output);
+    MLNamedArrayBufferViews inputs = {{"x", input0_buffer},
+                                      {"y", input1_buffer}};
+    MLNamedArrayBufferViews outputs = {{"y", output_buffer}};
+    auto* compute_exception = ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    CheckExternalValues(xnnpack_graph, inputs, outputs);
+    auto results = GetArrayBufferViewValues<float>(output_buffer);
+    EXPECT_EQ(results, Vector<float>({6.0, 8.0, 10.0, 12.0}));
+  }
+}
+
+// TODO(crbug.com/1273291): Test the async execution mode once the
+// MLGraphXnnpack implements it.
 INSTANTIATE_TEST_SUITE_P(All,
                          MLGraphXnnpackTest,
-                         ::testing::Values(ExecutionMode::kAsync,
-                                           ExecutionMode::kSync),
+                         ::testing::Values(ExecutionMode::kSync),
                          ExecutionModeParamToString);
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/member.h b/third_party/blink/renderer/platform/heap/member.h
index d340300..0854ac7 100644
--- a/third_party/blink/renderer/platform/heap/member.h
+++ b/third_party/blink/renderer/platform/heap/member.h
@@ -128,15 +128,6 @@
 
   static PeekOutType Peek(const MemberType& value) { return value; }
 
-  static IteratorReferenceType GetToReferenceConversion(IteratorGetType x) {
-    return *x;
-  }
-
-  static IteratorConstReferenceType GetToReferenceConstConversion(
-      IteratorConstGetType x) {
-    return *x;
-  }
-
   template <typename U>
   static void Store(const U& value, MemberType& storage) {
     storage = value;
diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h
index d189aaa8..5f66ae73e 100644
--- a/third_party/blink/renderer/platform/heap/persistent.h
+++ b/third_party/blink/renderer/platform/heap/persistent.h
@@ -99,13 +99,6 @@
   using IteratorConstGetType = const PersistentType*;
   using IteratorReferenceType = PersistentType&;
   using IteratorConstReferenceType = const PersistentType&;
-  static IteratorReferenceType GetToReferenceConversion(IteratorGetType x) {
-    return *x;
-  }
-  static IteratorConstReferenceType GetToReferenceConstConversion(
-      IteratorConstGetType x) {
-    return *x;
-  }
 
   using PeekOutType = T*;
 
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
index 60ad947..989a6277 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -1150,7 +1150,8 @@
     // https://bugs.chromium.org/p/libyuv/issues/detail?id=845
     media::PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
         frame.get(), rgba_8888, frame->visible_rect().width() * 4,
-        premultiply_alpha, media::PaintCanvasVideoRenderer::kFilterBilinear);
+        premultiply_alpha, media::PaintCanvasVideoRenderer::kFilterBilinear,
+        /*disable_threading=*/true);
 
     if (save_top_row) {
       base::ranges::copy(previous_last_decoded_row_, rgba_8888);
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
index 9b880904..4f446bd 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
@@ -10,8 +10,13 @@
 #include <utility>
 #include <vector>
 
+#include "base/barrier_closure.h"
 #include "base/bit_cast.h"
+#include "base/functional/bind.h"
 #include "base/strings/stringprintf.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/task/thread_pool.h"
+#include "base/test/task_environment.h"
 #include "media/media_buildflags.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder_test_helpers.h"
@@ -726,6 +731,24 @@
   EXPECT_NEAR(decoded_pixel.z(), 0, kMinError);  // B
 }
 
+void DecodeTask(const SharedBuffer* data, base::RepeatingClosure* done) {
+  std::unique_ptr<ImageDecoder> decoder = CreateAVIFDecoder();
+
+  scoped_refptr<SharedBuffer> data_copy = SharedBuffer::Create();
+  data_copy->Append(*data);
+  decoder->SetData(std::move(data_copy), true);
+
+  EXPECT_TRUE(decoder->IsSizeAvailable());
+  EXPECT_FALSE(decoder->Failed());
+  EXPECT_EQ(decoder->FrameCount(), 1u);
+  ImageFrame* frame = decoder->DecodeFrameBufferAtIndex(0);
+  ASSERT_TRUE(frame);
+  EXPECT_EQ(ImageFrame::kFrameComplete, frame->GetStatus());
+  EXPECT_FALSE(decoder->Failed());
+
+  done->Run();
+}
+
 }  // namespace
 
 TEST(AnimatedAVIFTests, ValidImages) {
@@ -1030,6 +1053,43 @@
   }
 }
 
+// Reproduces crbug.com/1402841. Decodes a large AVIF image 104 times in
+// parallel from base::ThreadPool. Should not cause temporary deadlock of
+// base::ThreadPool.
+TEST(StaticAVIFTests, ParallelDecoding) {
+  // The base::test::TaskEnvironment constructor creates a base::ThreadPool
+  // instance with 4 foreground threads. The number 4 comes from the
+  // test::TaskEnvironment::kNumForegroundThreadPoolThreads constant.
+  base::test::TaskEnvironment task_environment;
+
+  // This test image is fast to decode (all neutral gray pixels) and its
+  // allocation size is large enough to cause
+  // media::PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels() to pick
+  // n_tasks > 1 if AVIFImageDecoder did not pass disable_threading=true to it.
+  scoped_refptr<SharedBuffer> data =
+      ReadFile("/images/resources/avif/gray1024x704.avif");
+  ASSERT_TRUE(data.get());
+
+  // Task timeout in tests is 30 seconds (see https://crrev.com/c/1949028).
+  // Four blocking tasks cause a temporary deadlock (1.2 seconds) of
+  // base::ThreadPool, so we need at least 30 / 1.2 * 4 = 100 decodes for the
+  // test to time out without the bug fix. We add a margin of 4 decodes, i.e.,
+  // (30 / 1.2 + 1) * 4 = 104.
+  const size_t n_decodes = 104;
+  base::WaitableEvent event;
+  base::RepeatingClosure barrier = base::BarrierClosure(
+      n_decodes,
+      base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(&event)));
+
+  for (size_t i = 0; i < n_decodes; ++i) {
+    base::ThreadPool::PostTask(
+        FROM_HERE,
+        base::BindOnce(DecodeTask, base::Unretained(data.get()), &barrier));
+  }
+
+  event.Wait();
+}
+
 TEST(StaticAVIFTests, AlphaHasNoIspeProperty) {
   std::unique_ptr<ImageDecoder> decoder = CreateAVIFDecoder();
   decoder->SetData(ReadFile("/images/resources/avif/green-no-alpha-ispe.avif"),
diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h
index e5d135c9..fe32713 100644
--- a/third_party/blink/renderer/platform/wtf/hash_table.h
+++ b/third_party/blink/renderer/platform/wtf/hash_table.h
@@ -360,7 +360,7 @@
     return position_;
   }
   typename Traits::IteratorConstReferenceType operator*() const {
-    return Traits::GetToReferenceConstConversion(Get());
+    return *Get();
   }
   GetType operator->() const { return Get(); }
 
@@ -501,9 +501,7 @@
   // default copy, assignment and destructor are OK
 
   GetType Get() const { return const_cast<GetType>(iterator_.Get()); }
-  typename Traits::IteratorReferenceType operator*() const {
-    return Traits::GetToReferenceConversion(Get());
-  }
+  typename Traits::IteratorReferenceType operator*() const { return *Get(); }
   GetType operator->() const { return Get(); }
 
   iterator& operator++() {
@@ -2260,7 +2258,7 @@
     return const_cast<GetType>(SourceGetType(impl_.Get()));
   }
   typename Traits::IteratorConstReferenceType operator*() const {
-    return Traits::GetToReferenceConstConversion(Get());
+    return *Get();
   }
   GetType operator->() const { return Get(); }
 
@@ -2305,9 +2303,7 @@
   GetType Get() const {
     return const_cast<GetType>(SourceGetType(impl_.get()));
   }
-  typename Traits::IteratorReferenceType operator*() const {
-    return Traits::GetToReferenceConversion(Get());
-  }
+  typename Traits::IteratorReferenceType operator*() const { return *Get(); }
   GetType operator->() const { return Get(); }
 
   HashTableIteratorAdapter& operator++() {
diff --git a/third_party/blink/renderer/platform/wtf/hash_traits.h b/third_party/blink/renderer/platform/wtf/hash_traits.h
index 31710543..812e3693 100644
--- a/third_party/blink/renderer/platform/wtf/hash_traits.h
+++ b/third_party/blink/renderer/platform/wtf/hash_traits.h
@@ -131,13 +131,6 @@
   typedef const T* IteratorConstGetType;
   typedef T& IteratorReferenceType;
   typedef const T& IteratorConstReferenceType;
-  static IteratorReferenceType GetToReferenceConversion(IteratorGetType x) {
-    return *x;
-  }
-  static IteratorConstReferenceType GetToReferenceConstConversion(
-      IteratorConstGetType x) {
-    return *x;
-  }
 
   template <typename IncomingValueType>
   static void Store(IncomingValueType&& value, T& storage) {
@@ -273,13 +266,6 @@
   typedef const scoped_refptr<P>* IteratorConstGetType;
   typedef scoped_refptr<P>& IteratorReferenceType;
   typedef const scoped_refptr<P>& IteratorConstReferenceType;
-  static IteratorReferenceType GetToReferenceConversion(IteratorGetType x) {
-    return *x;
-  }
-  static IteratorConstReferenceType GetToReferenceConstConversion(
-      IteratorConstGetType x) {
-    return *x;
-  }
 
   static void Store(scoped_refptr<P> value, scoped_refptr<P>& storage) {
     storage = std::move(value);
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 7d7d3f7..7513d7f7 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -3006,6 +3006,27 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-center.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-end.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-left.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-right.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-start.html [ Failure ]
+crbug.com/626703 [ Mac11-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Timeout ]
+crbug.com/626703 [ Mac12-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Timeout ]
+crbug.com/626703 [ Mac11-arm64 ] external/wpt/density-size-correction/density-corrected-image-in-canvas.html [ Timeout ]
+crbug.com/626703 [ Mac12-arm64 ] external/wpt/density-size-correction/density-corrected-image-in-canvas.html [ Timeout ]
+crbug.com/626703 [ Mac11-arm64 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ]
+crbug.com/626703 [ Mac12-arm64 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ]
+crbug.com/626703 [ Mac11-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Timeout ]
+crbug.com/626703 [ Mac12-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Timeout ]
+crbug.com/626703 [ Mac11-arm64 ] wpt_internal/webxr/ar/iframe-oopif.sub.https.html [ Timeout ]
+crbug.com/626703 [ Mac12-arm64 ] wpt_internal/webxr/ar/iframe-oopif.sub.https.html [ Timeout ]
+crbug.com/626703 [ Mac12 ] external/wpt/html/cross-origin-opener-policy/resource-popup.https.html [ Timeout ]
 crbug.com/626703 external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/resource-timing/response-status-code.html [ Skip Timeout ]
 crbug.com/626703 [ Win ] external/wpt/resource-timing/response-status-code.html [ Skip Timeout ]
@@ -6786,6 +6807,8 @@
 
 # TODO(crbug.com/1401396): Re-enable this test
 external/wpt/webrtc/simulcast/setParameters-active.https.html [ Pass Timeout ]
+# Temporarily disable to unblock WebRTC roll. Two of the expectations will go from FAIL to PASS.
+crbug.com/webrtc/14175 external/wpt/webrtc/RTCRtpReceiver-getStats.https.html [ Pass Failure ]
 
 # image-set() failures (sheriff 2022-12-16)
 external/wpt/css/css-images/image-set/image-set-empty-url-rendering.html [ Failure Pass ]
@@ -6817,4 +6840,4 @@
 crbug.com/1404614 [ Mac ] external/wpt/url/url-setters-a-area.window.html?exclude=(file|javascript|mailto) [ Failure Pass ]
 
 # Sheriff 2023-01-04
-crbug.com/1404951 external/wpt/credential-management/fedcm-network-requests.https.html [ Timeout Pass ]
+crbug.com/1404951 external/wpt/credential-management/fedcm-network-requests.https.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 5c29c39e..40c2d3f6 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -1335,6 +1335,13 @@
       }
      },
      "content-visibility": {
+      "content-visibility-auto-selection-crash.html": [
+       "4cfe62eaca276dbd07f0d049e1d77b23ba898b65",
+       [
+        null,
+        {}
+       ]
+      ],
       "content-visibility-continuations-crash.html": [
        "e20d26fceedfc0071c61750776afa62c346d308e",
        [
@@ -2737,6 +2744,13 @@
      ]
     },
     "css-nesting": {
+     "delete-other-rule-crash.html": [
+      "bde7c554e8f1cceb4e4dc58d549e0c7bc9a264be",
+      [
+       null,
+       {}
+      ]
+     ],
      "implicit-parent-insertion-crash.html": [
       "4be1e1c8f9ed31c386c70bd8744219346ef4637e",
       [
@@ -120332,6 +120346,32 @@
        {}
       ]
      ],
+     "font-size-adjust-order-001.html": [
+      "a8b56a3083f31e90cbbdee507f263cc884db6c66",
+      [
+       null,
+       [
+        [
+         "/css/css-fonts/font-size-adjust-order-001-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
+     "font-size-adjust-units-001.html": [
+      "4e27ef1116ed7ba48fb5fbc38b49c315eeeef71c",
+      [
+       null,
+       [
+        [
+         "/css/css-fonts/font-size-adjust-units-001-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "font-size-adjust-zero-1.html": [
       "a34a38b570db8fe80b32c29d329cb212a5e72ec5",
       [
@@ -130341,6 +130381,34 @@
           {}
          ]
         ]
+       },
+       "track-sizing": {
+        "masonry-track-sizing-overflow-left-side.html": [
+         "cd1b78a47b6d2f9feed861a75ba19b4331c748a1",
+         [
+          null,
+          [
+           [
+            "/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side-ref.html",
+            "=="
+           ]
+          ],
+          {}
+         ]
+        ],
+        "masonry-track-sizing-overflow-right-side.html": [
+         "e4c17fd7b7793b23a80d15c4fa1440da21b5ecfb",
+         [
+          null,
+          [
+           [
+            "/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side-ref.html",
+            "=="
+           ]
+          ],
+          {}
+         ]
+        ]
        }
       }
      },
@@ -178607,19 +178675,6 @@
         {}
        ]
       ],
-      "text-align-008.html": [
-       "f1afda9a03c27e4bba3107bfd01511ef52c57db1",
-       [
-        null,
-        [
-         [
-          "/css/css-text/text-align/text-align-007-ref.html",
-          "=="
-         ]
-        ],
-        {}
-       ]
-      ],
       "text-align-center-last-center.html": [
        "97c2b7840f6b17985ac80ee59cecf4871ea51f2f",
        [
@@ -179314,6 +179369,19 @@
         {}
        ]
       ],
+      "text-align-match-parent-001.html": [
+       "f1afda9a03c27e4bba3107bfd01511ef52c57db1",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-align/text-align-007-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "text-align-match-parent-01.html": [
        "7560a425ea3f5b351dbdc64d4c7426c630696620",
        [
@@ -179817,6 +179885,138 @@
        ]
       ]
      },
+     "text-group-align": {
+      "text-group-align-center-vlr.html": [
+       "e18cf34830454a65a42dfe064576ff308b0bf9a0",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-center-vlr-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-center.html": [
+       "e4acc744c28562fa2a897f0990175c0c9623bd99",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-center-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-end-vlr.html": [
+       "1f690b44d313f68d22993f9ca595df88f9a1a1dc",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-end-vlr-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-end.html": [
+       "1929f59ee0d6f19d0242bae8398dc21e6f757330",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-end-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-left-vlr.html": [
+       "4a9ed599b7ff06ef5306294a25515918f794a977",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-left-vlr-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-left.html": [
+       "e74de0e1a807d7300449662ad05c570b89cf0a99",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-left-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-right-vlr.html": [
+       "9f612aa9106d1ae9bf9280ae25bc27dbc7defc47",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-right-vlr-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-right.html": [
+       "688022a5bbfc5f677a10f623d0bdeff7bca41b23",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-right-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-start-vlr.html": [
+       "6dce935f118b7a64065f7267985ea26c102884cb",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-start-vlr-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "text-group-align-start.html": [
+       "0951f2c50ac82c54b1f99bed7a1763479949de2a",
+       [
+        null,
+        [
+         [
+          "/css/css-text/text-group-align/text-group-align-start-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ]
+     },
      "text-indent": {
       "anonymous-flex-item-001.html": [
        "0b305fc307be36e5a5d61c4ae686c40b76b8f359",
@@ -261126,11 +261326,11 @@
   "support": {
    ".cache": {
     "gitignore2.json": [
-     "29f8bd322490a46bcdcdd73756440d01065ad00d",
+     "2119e9028efb512ee364384b190cefd11fc6ede4",
      []
     ],
     "mtime.json": [
-     "8d3d8e2196c95692774434e80568c52142dd2580",
+     "5827e41dd8891f9a7490768b75a6c91a04b8fa9a",
      []
     ]
    },
@@ -261412,7 +261612,7 @@
      []
     ],
     "idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini": [
-     "5d511eff9d381582a787724cb7b1d78afbb9b362",
+     "8378ee77c20adedbcc1e1eb0aa0bdac3fcbcd291",
      []
     ],
     "resources": {
@@ -262366,7 +262566,7 @@
      []
     ],
     "playback-rate.https.html.ini": [
-     "6cc1e2702190aca88224f2b51bd060b15399ae45",
+     "cb4ee3514f792720f3701d871684f7db670d61ab",
      []
     ],
     "references": {
@@ -263511,6 +263711,18 @@
      "6f46ae913a279b23c8debe1bb2d27e558499f37c",
      []
     ],
+    "getAvailability": {
+     "reject_opaque_origin.https.html.headers": [
+      "c7e4e7cc5bd3fa25851c1e26c3c04eb95050d94b",
+      []
+     ]
+    },
+    "getDevices": {
+     "reject_opaque_origin.https.html.headers": [
+      "c7e4e7cc5bd3fa25851c1e26c3c04eb95050d94b",
+      []
+     ]
+    },
     "idl": {
      "idlharness.tentative.https.window-expected.txt": [
       "0ad43dafb348853b70d12bb5c960e18b5bc8ff55",
@@ -263521,6 +263733,18 @@
       []
      ]
     },
+    "requestDevice": {
+     "reject_opaque_origin.https.html.headers": [
+      "c7e4e7cc5bd3fa25851c1e26c3c04eb95050d94b",
+      []
+     ]
+    },
+    "requestLEScan": {
+     "reject_opaque_origin.https.html.headers": [
+      "c7e4e7cc5bd3fa25851c1e26c3c04eb95050d94b",
+      []
+     ]
+    },
     "resources": {
      "bluetooth-fake-devices.js": [
       "b718ab579a1822e08d7f9026ceb519eccabca39f",
@@ -263535,7 +263759,7 @@
       []
      ],
      "health-thermometer-iframe.html": [
-      "78774b4d158f6ad69c3161207bc4549d01b3dda5",
+      "f9f7a6f0d7d9cff3e2c24edba6751292a003f6de",
       []
      ]
     },
@@ -265235,14 +265459,6 @@
      "94e875de071bb838887e77a0bba13b6c0cdbf2b5",
      []
     ],
-    "idlharness.https.window-expected.txt": [
-     "4a4555977a3fe8e968600cc7925501e8f22c9fe1",
-     []
-    ],
-    "idlharness.https.window.js.ini": [
-     "abd6630dacc1a4befafc624651bc05f9c3c3e0e2",
-     []
-    ],
     "permissions-policy": {
      "compute-pressure-allowed-by-permissions-policy-attribute-redirect-on-load.https.html.ini": [
       "008cc9a7433e5f142fc624313d6127b7864224c0",
@@ -266327,7 +266543,7 @@
         []
        ],
        "sharedworker-import.http.html.ini": [
-        "862676a5970cb7b160e139b4ea072a7888b81913",
+        "6116a21fc4e7749fc2751c9197322b1ac98fac38",
         []
        ],
        "sharedworker-import.https-expected.txt": [
@@ -266594,6 +266810,10 @@
       "3d47c07320d23e9f61a5faf20eee5119d20d0b8a",
       []
      ],
+     "history.sub.html.ini": [
+      "9728b70673c3922eafeeb1decc0608dd5a1ab388",
+      []
+     ],
      "iframe-all-local-schemes.sub.html.ini": [
       "759ae54e5d7bdae75a5974acef0ff19a3d11f4df",
       []
@@ -266889,7 +267109,7 @@
       []
      ],
      "prefetch-header-allowed.html.ini": [
-      "05edd2d5dbf006abbab8e3f902505b39883c4b4f",
+      "6e7329975c051970ecaa4aca2829e1904f5b07d4",
       []
      ],
      "prefetch-header-blocked-by-default.html.headers": [
@@ -267825,16 +268045,16 @@
      "3ed59de4b9b64c51453b937fcdfd43c5896692f3",
      []
     ],
-    "cookieListItem_attributes.https.any.js.ini": [
-     "6bd74be822f2ed4b9e864bbea8dbcc14236e835d",
-     []
-    ],
     "cookieStore_get_set_across_origins.sub.https.html.ini": [
      "cbb01649c32968e14bbf2f712f7a02ed628fc7fe",
      []
     ],
+    "cookieStore_set_arguments.https.any.js.ini": [
+     "c228d130bcdda92ebccc29ce19ffefda9c018194",
+     []
+    ],
     "cookieStore_subscribe_arguments.https.any.js.ini": [
-     "ced6aca6a7c11717408c84bc79b1ab6b41e3dcd6",
+     "c6bd59e96c5e108f44bc860ef34de0d4b36ea839",
      []
     ],
     "resources": {
@@ -268306,7 +268526,7 @@
      ]
     },
     "fedcm-network-requests.https.html.ini": [
-     "12ce602cecbfe3da3820b5c1b611c02d8f99e59f",
+     "14f5926ca2a04ae196d5790b037cc2bf662c9b2a",
      []
     ],
     "federatedcredential-framed-get.sub.https-expected.txt": [
@@ -277030,10 +277250,6 @@
       "2f6987b7cac6728749fc0c3f308bbb2e8684d276",
       []
      ],
-     "anchor-position-inline-004.html.ini": [
-      "4b68313d9e00e1237cfe7e80e447ef5092f2bdc6",
-      []
-     ],
      "anchor-position-top-layer-ref.html": [
       "dc7f77f2b3441ebee25f3e40a9480b668ee79ea4",
       []
@@ -277109,7 +277325,7 @@
       []
      ],
      "Element-getAnimations-dynamic-changes.tentative.html.ini": [
-      "90372850a2b15bec987edeacd277c571fa2bae64",
+      "02694929677056c713869f66cc6b6381ee7f7098",
       []
      ],
      "KeyframeEffect-getKeyframes.tentative-expected.txt": [
@@ -277169,11 +277385,11 @@
       []
      ],
      "idlharness-expected.txt": [
-      "2036d89986205ec04448e7d5bab4d8eb39099fc2",
+      "f5a629d7414fd33dc1913a2a9a4308209b577ce6",
       []
      ],
      "idlharness.html.ini": [
-      "c676700c037b1a86b6596580dc618aecd3ba2a36",
+      "f0c5706029832454834d9fac1d7058f141612c1f",
       []
      ],
      "inheritance-pseudo-element-ref.html": [
@@ -287887,7 +288103,7 @@
       []
      ],
      "image-as-flexitem-size-007v.html.ini": [
-      "0ef2b0d64488868411a54acb4d11982c06bd85d6",
+      "88bd2eab6e7f0bfafe6d320b3a9c5ba2ad3096e6",
       []
      ],
      "interactive": {
@@ -289390,6 +289606,14 @@
       "ed92a71ebeb760a271b46e34b67acff5ef8f75ca",
       []
      ],
+     "font-size-adjust-order-001-ref.html": [
+      "0c68e1396adf54957271b8c3611d3af4189b0375",
+      []
+     ],
+     "font-size-adjust-units-001-ref.html": [
+      "008c500d08b239192b742fb4e5e4a507d97a9f4a",
+      []
+     ],
      "font-size-monospace-adjust-ref.html": [
       "098fca5ea76ff3dd31633dc1c7c7166fa7cf076a",
       []
@@ -298661,6 +298885,16 @@
          "4750c1899e34d6855203d802b9000179163cb172",
          []
         ]
+       },
+       "track-sizing": {
+        "masonry-track-sizing-overflow-left-side-ref.html": [
+         "5a31517183244d714a18e48bec3e65d890a5434d",
+         []
+        ],
+        "masonry-track-sizing-overflow-right-side-ref.html": [
+         "51e657e2a4292fa97bd2617114509a6bd0ba48d7",
+         []
+        ]
        }
       }
      },
@@ -299190,7 +299424,7 @@
        []
       ],
       "subgrid-baseline-002.html.ini": [
-       "c8f5d5e48be8ad5beb292de4b0b9e096c087a92d",
+       "4300e380326adc7f4c7a700306fde72b33e7eb1b",
        []
       ],
       "subgrid-baseline-003-ref.html": [
@@ -301148,7 +301382,7 @@
        []
       ],
       "Initial-letter-breaking-rtl.html.ini": [
-       "9451204c3f8e54260349e0a2b1aaf03911bce7bd",
+       "46ebc05b8e015794e21ad5efbbb278c2a1c4a978",
        []
       ],
       "Initial-letter-breaking-vlr-ref.html": [
@@ -301164,7 +301398,7 @@
        []
       ],
       "Initial-letter-breaking-vrl.html.ini": [
-       "e5040afd3078b86080090466669e3b0db6411fad",
+       "5e2b2a74cc4d9e4f8705bcd7b03560faf6b02136",
        []
       ],
       "Initial-letter-breaking.html.ini": [
@@ -301232,7 +301466,7 @@
        []
       ],
       "initial-letter-block-position-margins.html.ini": [
-       "ca081035386879b52323ef148464adcb96c06986",
+       "902a0ff998628256e4816c17c02c9242b57dc389",
        []
       ],
       "initial-letter-block-position-raise-over-ruby-ref.html": [
@@ -301264,7 +301498,7 @@
        []
       ],
       "initial-letter-block-position-raise-under-ruby.html.ini": [
-       "1136475e22104014fed3be82b9c07d8e27771af5",
+       "eede05d174440899bdc8f37125124321ef974f11",
        []
       ],
       "initial-letter-computed.html.ini": [
@@ -301288,7 +301522,7 @@
        []
       ],
       "initial-letter-drop-initial-vlr.html.ini": [
-       "1e3e90322b20750c45315a4553d727d330e621e8",
+       "984123ce1ba95aaa082597019805d29f51c77e3b",
        []
       ],
       "initial-letter-drop-initial-vrl-ref.html": [
@@ -301300,7 +301534,7 @@
        []
       ],
       "initial-letter-drop-initial.html.ini": [
-       "bda49d3ccb569063ca848311b14c11d0f95c0743",
+       "497ccbc87b10a361c6b9e430069b7a98ab683bcf",
        []
       ],
       "initial-letter-float-001-ref.html": [
@@ -301320,7 +301554,7 @@
        []
       ],
       "initial-letter-float-001-vlr.html.ini": [
-       "72b9d1f623146292108a7bcad02e61f0d85da5b0",
+       "bd18bc07afa5ee270669f57cba44bb0655e9b384",
        []
       ],
       "initial-letter-float-001-vrl-ref.html": [
@@ -301388,7 +301622,7 @@
        []
       ],
       "initial-letter-layout-text-decoration-underline.html.ini": [
-       "7b6eb186ade47b702b61254c2e72aeab888433e7",
+       "6679ea68f5c7d1fd3727277a901eecbbc1bed2e5",
        []
       ],
       "initial-letter-raise-initial-ref.html": [
@@ -301416,7 +301650,7 @@
        []
       ],
       "initial-letter-raise-initial-vrl.html.ini": [
-       "4f49317efbbf4f4031cde2ce5db278d585983354",
+       "1bf7046aff7b0cfc821b8d11522c00f723cf31f6",
        []
       ],
       "initial-letter-raise-initial.html.ini": [
@@ -301480,7 +301714,7 @@
        []
       ],
       "initial-letter-sunk-initial-vrl.html.ini": [
-       "77a501b58596bd661170dd5bd74ceaac0d7c228d",
+       "145423c11791d55ae88c994d027a2d62c7a4c7e1",
        []
       ],
       "initial-letter-sunk-initial.html.ini": [
@@ -304091,7 +304325,7 @@
       []
      ],
      "getclientrects-000.html.ini": [
-      "78f81bd358fc69d813a81cd385f5dd52f34cd545",
+      "44c5cfb6bd9fb600f11bedf1580eeac57562e6aa",
       []
      ],
      "hit-test-transformed-child.html.ini": [
@@ -305981,17 +306215,13 @@
       []
      ],
      "scrollable-overflow-input-001.html.ini": [
-      "0fd1d59cb6c19d9b4b5345ed50e850ffaa5eafd8",
+      "6351a3d300d23195dab2184d6186ddabe934b9f4",
       []
      ],
      "scrollable-overflow-input-002-ref.html": [
       "782ffab9da1c1cb55b4488e7fc8f913dd18857f3",
       []
      ],
-     "scrollable-overflow-input-002.html.ini": [
-      "6e03ac5f353bb60fc0f81f763375e7aac0cbbbd1",
-      []
-     ],
      "scrollable-overflow-padding.html.ini": [
       "6eed083f037d166b20a812075b8f16cf47d19183",
       []
@@ -306557,7 +306787,7 @@
       []
      ],
      "parse-input-arguments-018.https.html.ini": [
-      "44bac5302b65c8d9f1907e6c029154a6fd30f0cd",
+      "21e3049291e42e35c5677278dee44fcdbf0635f3",
       []
      ],
      "parse-input-arguments-019.https.html.ini": [
@@ -306594,6 +306824,10 @@
       "b2b188736e5d8414f75f2c1a0f369c78f6dcbcef",
       []
      ],
+     "setTransform-001.https.html.ini": [
+      "6af47e05f38f207396a4161ba934ed079003a815",
+      []
+     ],
      "setTransform-003.https.html.ini": [
       "d0efa93db40ca63414b4f80a9ad702f62aac1e15",
       []
@@ -307583,11 +307817,11 @@
       []
      ],
      "registered-property-cssom-expected.txt": [
-      "e4c9ae0a79284fc18c3e3c37a5bfdbc78a03b642",
+      "41455cdf06d3c72799b5ccf57cf4e74a89aade9f",
       []
      ],
      "registered-property-cssom.html.ini": [
-      "8a56b75e9a8171943f2cba156b44b2a3c50a16a7",
+      "d1d9acd1e5c11785ce2e48d47549947ef16b7eab",
       []
      ],
      "resources": {
@@ -309340,10 +309574,6 @@
       "1bb4386e7abfb468de92edcb9a2633d5ceb96174",
       []
      ],
-     "ruby-text-combine-upright-002a.html.ini": [
-      "894ea23afe9741293f87e2b20eecbc56dacc8921",
-      []
-     ],
      "ruby-text-combine-upright-002b.html.ini": [
       "626dae64840efc0302b1f4550d606d467037bced",
       []
@@ -316000,6 +316230,102 @@
        []
       ]
      },
+     "text-group-align": {
+      "support": {
+       "fake-group-align.css": [
+        "d1a7d1aab077cc447167209d5e7878e7e7f3f654",
+        []
+       ],
+       "test-helpers.css": [
+        "d79e79cd86d46096f75632c0ad76efe561c82ef4",
+        []
+       ],
+       "test-helpers.js": [
+        "27b6a7baf160b6a6ebcd14ccc7f51c56b930c15c",
+        []
+       ]
+      },
+      "text-group-align-center-ref.html": [
+       "919747cebb95bccca2c6f9256997a16b9eb330b9",
+       []
+      ],
+      "text-group-align-center-vlr-ref.html": [
+       "6b74aac823bbf5ca0974fb4fac352f9a67617f81",
+       []
+      ],
+      "text-group-align-center-vlr.html.ini": [
+       "e745a34ece80017ab4a4fca7ef2bc909c319515a",
+       []
+      ],
+      "text-group-align-center.html.ini": [
+       "cb703fd56d29845b0e11f9e269a535551b689271",
+       []
+      ],
+      "text-group-align-end-ref.html": [
+       "2c8d2da99d9c5e2a78a2e15c6ff3375578dc7806",
+       []
+      ],
+      "text-group-align-end-vlr-ref.html": [
+       "9ea04f6c6de06b5cb5a938f1c9410caf6de92135",
+       []
+      ],
+      "text-group-align-end-vlr.html.ini": [
+       "9b7c668c224d1427a11973f292993af7c73140c7",
+       []
+      ],
+      "text-group-align-end.html.ini": [
+       "181d3b1f66ccd5dd3ea700c5b4898b22b42bc26f",
+       []
+      ],
+      "text-group-align-left-ref.html": [
+       "f04180608ad05194476268e8e72af835b06f6220",
+       []
+      ],
+      "text-group-align-left-vlr-ref.html": [
+       "a7df839259bcad0c79fdcf05a752981e7f0d5804",
+       []
+      ],
+      "text-group-align-left-vlr.html.ini": [
+       "b25086d95a0669f36b90a3e4c958383b21fdaa9e",
+       []
+      ],
+      "text-group-align-left.html.ini": [
+       "91966281efd78aa1865395c5bf5b4ba4fea1799d",
+       []
+      ],
+      "text-group-align-right-ref.html": [
+       "1b11e6183661e4bea157c161c7eaad6196b5abf4",
+       []
+      ],
+      "text-group-align-right-vlr-ref.html": [
+       "5bfe0a766ad9adbee87dd9500601b5bba7eabb02",
+       []
+      ],
+      "text-group-align-right-vlr.html.ini": [
+       "b4d729f337dddd33411b718c8f36703e6222d8e3",
+       []
+      ],
+      "text-group-align-right.html.ini": [
+       "fe721b69bbbfcab14bf217deca6546927481a33a",
+       []
+      ],
+      "text-group-align-start-ref.html": [
+       "4c57fcbdcdc88e88cb1204b51e9aacd65d48d364",
+       []
+      ],
+      "text-group-align-start-vlr-ref.html": [
+       "051c622bb4bbe3ac7cfd36281222a17994384f26",
+       []
+      ],
+      "text-group-align-start-vlr.html.ini": [
+       "a1ebbbf4ef3d1117614e735d086061a893eabf57",
+       []
+      ],
+      "text-group-align-start.html.ini": [
+       "6de7b74d9b37f63fbc9cde941ba64cf13ad8f979",
+       []
+      ]
+     },
      "text-indent": {
       "reference": {
        "anonymous-flex-grid-item-001-ref.html": [
@@ -316626,11 +316952,15 @@
        ]
       },
       "text-transform-capitalize-001.html.ini": [
-       "83483d77631ebaa0a77a19d292f9ff840793b675",
+       "8b9bfa40f90d4c1d006a0f75f24a3a31bacd69bd",
        []
       ],
       "text-transform-capitalize-003.html.ini": [
-       "38e66a2dc4a6c69a3dd79df3f84abe55bd072294",
+       "b989cd58434ad1c2651edd89edb3b96331cff4bd",
+       []
+      ],
+      "text-transform-capitalize-005.html.ini": [
+       "c06d2b0fcf72d84e5512352f5f74279544c73498",
        []
       ],
       "text-transform-capitalize-007.html.ini": [
@@ -316641,12 +316971,16 @@
        "892a514c8de51b620ba30af9b89244aaa370327e",
        []
       ],
+      "text-transform-capitalize-014.html.ini": [
+       "f0b7504e565abdf6d671ad61ed287bc662140cf7",
+       []
+      ],
       "text-transform-capitalize-016.html.ini": [
        "869d3178e27f1539e32ecd49339a5d6b2db5956f",
        []
       ],
       "text-transform-capitalize-018.html.ini": [
-       "87e51404e16bbebfa59694f95dfaa34426e0f4b4",
+       "c1e2194aeb0292472cc9aa12358f6b1d4f62de7c",
        []
       ],
       "text-transform-capitalize-026.html.ini": [
@@ -321740,6 +322074,14 @@
         "fa11815c34456b23ec7f2cecba409d20e8d156f1",
         []
        ],
+       "block-size-expected.txt": [
+        "206ec0c54c6990036b2f166294a9acb1f3f09613",
+        []
+       ],
+       "block-size.html.ini": [
+        "7384c11e28812eb1bd05475ec49e3de948035d13",
+        []
+       ],
        "border-image-outset-expected.txt": [
         "544158d5314751036f5a833009fecfbf7a57a7e6",
         []
@@ -321832,6 +322174,30 @@
         "dbe8cc535f4a5550e9be13173890262a04459ce2",
         []
        ],
+       "flex-basis-expected.txt": [
+        "2e977c2f5dc1d3ef3c95242502341702b0c62d49",
+        []
+       ],
+       "flex-basis.html.ini": [
+        "62c3e2c0da0f47cc8da2da9eefc1d4cdf2d5ff13",
+        []
+       ],
+       "flex-grow-expected.txt": [
+        "27e9785950101070e12050a69fb9476df45c9e57",
+        []
+       ],
+       "flex-grow.html.ini": [
+        "d8f6e47a26a6ce96afa14aff4dc14e539c8d53ac",
+        []
+       ],
+       "flex-shrink-expected.txt": [
+        "6c4448181680165ff9ee830c94bd031c050f5cc9",
+        []
+       ],
+       "flex-shrink.html.ini": [
+        "5c7a77092388973734be3539584e720418fad159",
+        []
+       ],
        "flood-opacity-expected.txt": [
         "3bbcaf4990f69584471cb3b3dfa3ef5f2d637626",
         []
@@ -321864,6 +322230,14 @@
         "f7ae7751fdf7f2b3434395517518f65e2a696a65",
         []
        ],
+       "font-size-adjust-expected.txt": [
+        "163d9cdc0309c7f952b2f8d9a709336b336a157a",
+        []
+       ],
+       "font-size-adjust.html.ini": [
+        "64e92c75075f0184164479c1a354a368f49b5236",
+        []
+       ],
        "font-size-expected.txt": [
         "70b3fbdabab2752d8cd5f6499ab4e13740a51d0d",
         []
@@ -321873,7 +322247,7 @@
         []
        ],
        "font-stretch-expected.txt": [
-        "7a061b485b31c4060cacbf19704fcbae1b5485dd",
+        "52cbbc41877a52075d76a284fc60486ead715fd3",
         []
        ],
        "font-stretch.html.ini": [
@@ -321912,6 +322286,14 @@
         "2299fec2a724c653fd04c1058db1c2c3ab20cf44",
         []
        ],
+       "gap-expected.txt": [
+        "b522f1f81779c3059494757822d72e5a22b5d13a",
+        []
+       ],
+       "gap.html.ini": [
+        "0addf0e29d58c2e5e96994353a8338c8374af6a8",
+        []
+       ],
        "grid-auto-columns-rows-expected.txt": [
         "d784e94f1e25a902d6d6d81c9504e57f8105b592",
         []
@@ -321960,14 +322342,6 @@
         "65e308f89b3cdcca101594d52672619711934331",
         []
        ],
-       "letter-spacing-expected.txt": [
-        "fc2c9333460bb16ffa4d8341ca0a5969938ec182",
-        []
-       ],
-       "letter-spacing.html.ini": [
-        "3f3e4c7e76f8bc3d840b969b274d9c8a28213200",
-        []
-       ],
        "line-height-expected.txt": [
         "9fd526acde4856fe0ddc4ac7ed5224ce4321f09f",
         []
@@ -322134,6 +322508,14 @@
         "173fcd7d1f056ef4dc289da0dab561fcc0957fec",
         []
        ],
+       "shape-margin-expected.txt": [
+        "e1dac7fcc191ee59e2b7d25263d46f4355758a86",
+        []
+       ],
+       "shape-margin.html.ini": [
+        "1325fffddd125e0e49e1caa0e0fc940eb6e3ac48",
+        []
+       ],
        "shape-outside-expected.txt": [
         "bc8c5b78739f1412df6f63b0bf4aa6eb29d72222",
         []
@@ -322310,6 +322692,14 @@
         "5130c07d0d2b7ec9f7846ae98c36ca0fbd378bba",
         []
        ],
+       "width-expected.txt": [
+        "310989396a549f891c8377d08e7ecca777137850",
+        []
+       ],
+       "width.html.ini": [
+        "c6c0b0a6bc45138cf8ac64a06271595971d17298",
+        []
+       ],
        "word-spacing-expected.txt": [
         "5c446c816a27ce4a6cdebca27bffa1ff1d53460d",
         []
@@ -330593,11 +330983,11 @@
       []
      ],
      "idlharness-expected.txt": [
-      "b1725607ca99168f686e617b774afab082102936",
+      "8001b22951eb4ea522ed7856745f5186c52c7c44",
       []
      ],
      "idlharness.html.ini": [
-      "8f5c2762a1cf5ae4231890743ec976e8f27f27f1",
+      "6e3277406bb2b98cfbe7328de8f01b03679053d3",
       []
      ],
      "iframe.html": [
@@ -330658,10 +331048,6 @@
       "d5fe958db40f7f781b73cd31f82757a981f171da",
       []
      ],
-     "scroll-behavior-main-frame-window.html.ini": [
-      "dc6759f838e3e537aaf4ef03c47c3b52e1458640",
-      []
-     ],
      "scroll-behavior-scrollintoview-nested.html.ini": [
       "2bfa1166f1dae5798d20be4cde49808b376cfd6d",
       []
@@ -332382,7 +332768,7 @@
        []
       ],
       "has-complexity.html.ini": [
-       "abe15aeacde200f0388f4f5429cb6dcc5498773e",
+       "c58a580bf38b9de40c071eeffddf9a7a42280983",
        []
       ],
       "logical-combinations-in-has-expected.txt": [
@@ -332872,6 +333258,10 @@
       "e8d3a523477e11650bea357b1e891faa1a3d9e26",
       []
      ],
+     "delete-other-rule-crash.css": [
+      "13f5d6acf006d3ee655a7821d7e9468310fc0f08",
+      []
+     ],
      "green.ico": [
       "691f61166f0d8f3c51d8e6441c9584c858223686",
       []
@@ -333158,10 +333548,6 @@
       "d26dc7f131b91cd452355a6259d0baff7aaffc5c",
       []
      ],
-     "ElementInternals-target-element-is-held-strongly.html.ini": [
-      "fdce5ad83e1ee4393bd7eff4269cd10b729f35a0",
-      []
-     ],
      "ElementInternals-validation-expected.txt": [
       "ed5a28ed1e0622c5fb7749d1ed189191ed746998",
       []
@@ -334095,7 +334481,7 @@
       []
      ],
      "EventListener-incumbent-global-2.sub.html.ini": [
-      "f7633f9781262ce61c8387b522dc5dd4e07b723e",
+      "fe841b994ae87561b29461c29866187b7329d53b",
       []
      ],
      "EventListener-incumbent-global-subframe-1.sub.html": [
@@ -334782,14 +335168,6 @@
       "2657bb761955202e50cd65f00431fdc415a09eb3",
       []
      ],
-     "Range-mutations-dataChange.html.ini": [
-      "c1f1d46ce54df403fe78ec637233281dbb7e2fef",
-      []
-     ],
-     "Range-mutations-deleteData.html.ini": [
-      "8a4d2feb07a10de291aaf74a7996c09fef195942",
-      []
-     ],
      "Range-mutations-insertData.html.ini": [
       "68d21f87b4c182cc3cf799202ad5c108fd19f577",
       []
@@ -336273,7 +336651,7 @@
       []
      ],
      "formatblock.html.ini": [
-      "cf2a6f46cc2706010a1b8f94a9ce7e9176ca2784",
+      "8247fe6b6b711d75c510c855a63b8d0fd0023edc",
       []
      ],
      "formatblock_1-1000-expected.txt": [
@@ -336613,7 +336991,7 @@
       []
      ],
      "removeformat.html.ini": [
-      "e938d3adb87c29a2a33cb1ccd7ca4a3db3237830",
+      "3515b068077074c4786e086ab2d99038803b10a2",
       []
      ],
      "strikethrough.html.ini": [
@@ -336676,7 +337054,7 @@
      []
     ],
     "image-src-change.html.ini": [
-     "23803ef3a129782dacf4440beb982386608de5ac",
+     "f090197a3ee0516c717cc6d31208947ba1e608aa",
      []
     ],
     "images-repeated-resource.html.ini": [
@@ -336931,10 +337309,6 @@
        "742519bd05366561b598d57fd19ca8b859e6a6cc",
        []
       ],
-      "iso2022jp-decode.html.ini": [
-       "6f52998fafee1951702b906b6c79dd09c58bcf35",
-       []
-      ],
       "iso2022jp-decoder.js": [
        "f4bcd863ef54f9aaa907e5da4bf3c5857f5adb8f",
        []
@@ -337700,7 +338074,7 @@
      []
     ],
     "unsupported-labels.window.js.ini": [
-     "450e960b98d0e4b0d49c321f740d312acdb15b08",
+     "c967c0a2dec75056a76da2b1e151372d540fa120",
      []
     ]
    },
@@ -337964,7 +338338,7 @@
      []
     ],
     "uk-KOI8-U-late.tentative.html.ini": [
-     "e4495a31d7a57197ae39ae8da893c085bd0b7ada",
+     "f5bc063e5e08b91e7c4c9f402c3b36054660381d",
      []
     ],
     "uk-KOI8-U.tentative-expected.txt": [
@@ -337984,7 +338358,7 @@
      []
     ],
     "vi-windows-1258-late.tentative.html.ini": [
-     "78be944beb26b89d5bbbe8e5c18af90e38024edf",
+     "317a3ccf86f0199530e6231d6ee24ccb78e4e598",
      []
     ],
     "vi-windows-1258.tentative-expected.txt": [
@@ -338850,23 +339224,23 @@
      []
     ],
     "idlharness.any-expected.txt": [
-     "4fe4540271c298c38658dbe0e1b24e5fede9363f",
+     "6e6763ddef7801866f506fff3ca335ca68fe046b",
      []
     ],
     "idlharness.any.js.ini": [
-     "59677c6882f20565a74f2df9402af78df88d89d5",
+     "10efdbe7dca5f15f365b74ffafa69bb0180eec63",
      []
     ],
     "idlharness.any.serviceworker-expected.txt": [
-     "a4f87f4c76c614417d98929d55dec8ff0a4121ca",
+     "f0d0c35bba7275b4cd039a81c12b20ec2fcaa107",
      []
     ],
     "idlharness.any.sharedworker-expected.txt": [
-     "a4f87f4c76c614417d98929d55dec8ff0a4121ca",
+     "f0d0c35bba7275b4cd039a81c12b20ec2fcaa107",
      []
     ],
     "idlharness.any.worker-expected.txt": [
-     "a4f87f4c76c614417d98929d55dec8ff0a4121ca",
+     "f0d0c35bba7275b4cd039a81c12b20ec2fcaa107",
      []
     ],
     "interactionid-tap.html.ini": [
@@ -339542,7 +339916,7 @@
      },
      "cors": {
       "cors-cookies.any.js.ini": [
-       "25463cf3ec256911e62621e37ad60edeada1f2ea",
+       "319b1b751831ac2ae7a7c0fb6519f3ebf37fb754",
        []
       ],
       "cors-preflight-redirect.any-expected.txt": [
@@ -340955,8 +341329,8 @@
        "686364eb61cdefa16dc669fef7e6a2b3742561b4",
        []
       ],
-      "element-iframe.sub.html.ini": [
-       "96b1dbd1f4dd749b14c3bf115ba193d92c7fa8bd",
+      "element-frame.sub.html.ini": [
+       "fc10a51810062eed1b71a83eb620349128c45a13",
        []
       ],
       "element-img.https.sub-expected.txt": [
@@ -340992,11 +341366,11 @@
        []
       ],
       "element-meta-refresh.https.optional.sub.html.ini": [
-       "9874a8c90794c6daa1e2289e60a7982173db62b8",
+       "d25631d2d52ce8929152d33d3f59664f6921d304",
        []
       ],
       "element-meta-refresh.optional.sub.html.ini": [
-       "a74997843d6ea5b0677898fdf5310497fd62bc78",
+       "b31f66ee59e12105b675c2923c4162731387e129",
        []
       ],
       "element-picture.https.sub.html.ini": [
@@ -341047,6 +341421,10 @@
        "be183287eb3b80035a7bb3d1a3843fce41ffe7d5",
        []
       ],
+      "window-history.https.sub.html.ini": [
+       "b15ba7535f6af7b4e611a21a37c0a745fc32ffb0",
+       []
+      ],
       "worker-dedicated-constructor.sub.html.ini": [
        "da6289c1350e26985fe621228331fbcfb802ce0d",
        []
@@ -341463,7 +341841,7 @@
       []
      ],
      "assorted.window.js.ini": [
-      "550507e604c63727f15daf39877102cff1a983b0",
+      "40e6698bfb61bd9e7429863b9b0be7045854a092",
       []
      ],
      "resources": {
@@ -341491,7 +341869,7 @@
       []
      ],
      "iframe.tentative.https.window.js.ini": [
-      "abc126ce81bb6af375b9c4ed6a18aeb02945bebc",
+      "9132c01faa9ecb90ffa56c2d0b6596b61f8a0507",
       []
      ],
      "iframe.tentative.window-expected.txt": [
@@ -341601,11 +341979,11 @@
       ]
      },
      "service-worker-background-fetch.https.window.js.ini": [
-      "ff15806f1f68c5f74a9a324a6338986be83e3b09",
+      "1efc63a8b12cf6d1173d286215ef2a9757a94dd8",
       []
      ],
      "service-worker-fetch.https.window.js.ini": [
-      "8ad3d983f5f9151f6b499743a4b99dcd1306dec4",
+      "eaa7acf656311a660b824eedda6b958feb5d0e34",
       []
      ],
      "shared-worker.window.js.ini": [
@@ -341942,7 +342320,7 @@
      []
     ],
     "focus-already-focused-iframe-same-site.html.ini": [
-     "4f0bb0ce512506e160d3de8c8bdf6bbc231d11df",
+     "cd78228dd3869ed7ac233ad82d076832dd8df95e",
      []
     ],
     "focus-event-after-focusing-iframes-expected.txt": [
@@ -342026,7 +342404,7 @@
      []
     ],
     "iframe-focus-with-different-site-intermediate-frame.html.ini": [
-     "a4e9ffefd3d4c43282dea6fd72191db23d6006cb",
+     "501950368012f28203aead245411c7e608f36c68",
      []
     ],
     "iframe-focus-with-same-as-top-intermediate-frame-expected.txt": [
@@ -343470,7 +343848,7 @@
      []
     ],
     "FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini": [
-     "2d96c8eae5cc46b3d3602a0ad255c0c3de110c81",
+     "c3348a5c9aef335e28df011c41c92883beabaef3",
      []
     ],
     "META.yml": [
@@ -343996,11 +344374,11 @@
      []
     ],
     "idlharness-extensions.https.window-expected.txt": [
-     "2add0e7fd942673ae9c2b9deb57a862e2916864e",
+     "8bf042233bf225974c19a7b23d72c072bc8ef7d2",
      []
     ],
     "idlharness-extensions.https.window.js.ini": [
-     "1d70350c172ac21435fe1254a6b0de845b3e4667",
+     "c9dd14c3b317f44bbf8a47591793b07f95065f5e",
      []
     ],
     "idlharness-extensions.window-expected.txt": [
@@ -344304,7 +344682,7 @@
      []
     ],
     "clamped-time-origin.html.ini": [
-     "ab661818c92ffc42c403c6c65cbb42645b627317",
+     "9ce379403377a4f2a7e413462fbb5c53d78d2bf7",
      []
     ],
     "cross-origin-isolated-timing-attack.https.html.headers": [
@@ -344368,12 +344746,16 @@
      []
     ],
     "anonymous-iframe": {
+     "anonymous-iframe-popup.tentative.https.window.js.ini": [
+      "e222dfd551725762c48d5b69537476e130995685",
+      []
+     ],
      "cookie-store.tentative.https.window.js.ini": [
       "f9ef8df9679b96f3645832ded00a205bf6aaf236",
       []
      ],
      "embedding.tentative.https.window.js.ini": [
-      "21e5d4fae70b75cd36b1a9daa85da4e9a841668b",
+      "9bd26c2358c62e0a6b90d4c63bf08ce9325e35d4",
       []
      ],
      "fenced-frame-bypass.tentative.https.window-expected.txt": [
@@ -344539,7 +344921,7 @@
         []
        ],
        "service-worker-controlled-after-restore.https.html.ini": [
-        "33ae6cd3b8e4ec3c488be40135c9595cf611c14e",
+        "947eebb79e872c0b41bbc874374501b302b00766",
         []
        ],
        "service-worker-unregister.https-expected.txt": [
@@ -344640,6 +345022,10 @@
         "before-load-hash-twice.html.ini": [
          "5827e20f32e674c3ac9966a1f11d5562542481b9",
          []
+        ],
+        "before-load-hash.html.ini": [
+         "951dcfce22ed3ca1d359f7193b57b8134c5fcedd",
+         []
         ]
        },
        "persisted-user-state-restoration": {
@@ -345255,7 +345641,7 @@
         []
        ],
        "same-document-traversal-cross-document-traversal.html.ini": [
-        "71dab1dde8f9cd56e469d48031b7028e256f5e9e",
+        "2ff88dbb4d2cd2746227b2b7e11436d22ae3cc27",
         []
        ],
        "same-document-traversal-same-document-traversal-hashchange.html.ini": [
@@ -345749,7 +346135,7 @@
         []
        ],
        "history_pushstate_url_rewriting.html.ini": [
-        "0eb3574961ce94252f312b80d9312a9cd539dedd",
+        "d28878e35aacebc03efcf47444d4c520fbd60f91",
         []
        ],
        "joint_session_history": {
@@ -345814,6 +346200,10 @@
         "64920b4f4f5a4682f32b6fc37ddf89a198a0b3ef",
         []
        ],
+       "traverse_the_history_2.html.ini": [
+        "9f1fd20a0bd7a61e1eb2592927afca530ba5b1d6",
+        []
+       ],
        "traverse_the_history_3-1.html": [
         "c49bfd384a29a509fd1ecd764c3b6f895dbec31d",
         []
@@ -345929,7 +346319,7 @@
         []
        ],
        "location-protocol-setter-non-broken.html.ini": [
-        "218b1cc1d61b5431ae3e46cc81b67f3082d7929a",
+        "74dcce93246ac325a91beaca6f4d04332bbfb647",
         []
        ],
        "location-prototype-setting-cross-origin-domain.sub-expected.txt": [
@@ -346159,7 +346549,7 @@
         []
        ],
        "cross-origin-objects.html.ini": [
-        "6502952eab898e3cb6dbc43600dacdb12eb72b5a",
+        "fa4bd4663ca6ec6c152c3f6e3f58a442dbe82a88",
         []
        ],
        "frame-with-then.html": [
@@ -346234,7 +346624,7 @@
          []
         ],
         "parent-yes-child-no-subdomain.sub.https.html.ini": [
-         "1524e6e285a6186fe7dd732b0faf4db6e3ea8ebf",
+         "9759a2896fb41ba60d224030864328515fc12c8c",
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.headers": [
@@ -346242,7 +346632,7 @@
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.ini": [
-         "1fe764980cdb004b33f17ae5ae9329436157fe58",
+         "5f428d85c58be189cc011c3e8b44b6892f5b6083",
          []
         ],
         "parent-yes-child-yes-same.sub.https.html.headers": [
@@ -346250,7 +346640,7 @@
          []
         ],
         "parent-yes-child-yes-same.sub.https.html.ini": [
-         "e3a89c0f7ce9961f842110f8818e4e27fd505f8b",
+         "2b7fa4f27546ce75c088fb484df17a380bfb685f",
          []
         ],
         "parent-yes-child-yes-subdomain.sub.https.html.headers": [
@@ -346258,7 +346648,7 @@
          []
         ],
         "parent-yes-child-yes-subdomain.sub.https.html.ini": [
-         "428253fdf40cc6bdee2242af4fe458fdb741e1e6",
+         "c5b33c34d9421058bf9af4a4af7c192dd1a96468",
          []
         ]
        },
@@ -346276,7 +346666,11 @@
          []
         ],
         "parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini": [
-         "e5fb8dea59a6a992a74d4e88f84bb1078d1e04dd",
+         "ef214e6217597055b9f26ffbe8353d03cff7cac6",
+         []
+        ],
+        "parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini": [
+         "2a0462ef0b1606a5eff1448b2695394a50f998f0",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.headers": [
@@ -346284,7 +346678,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini": [
-         "1d37b551b8796e43084bd8f689e46e21474382f2",
+         "58f748d83e50a665f7036f1516379567eebf014f",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.headers": [
@@ -346292,7 +346686,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini": [
-         "5671887b26e265cf9ca1574df4eca12c8c4369bc",
+         "e5bf5d7d5b132c53ecf6d454686fb7da2d8d5942",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.headers": [
@@ -346300,23 +346694,19 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "55c9507947dd54f89a1ba668d8a092793a789cc8",
+         "870d618369d11b43e52dc7c558668b4de5cd8807",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
-        "parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini": [
-         "9bcd06566805156e9c14fabd814b7d34a3a803aa",
-         []
-        ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "ce259823becd55217b53ed2a8347f27771d28166",
+         "55806ef001609af9235592387679abd651d7046f",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.headers": [
@@ -346324,7 +346714,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini": [
-         "d9ff6bde0a80622e37e7a08e8f5e16b2257c85d7",
+         "106475c717f61598f20664c33c404c9557599dc3",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.headers": [
@@ -346332,7 +346722,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini": [
-         "71b884a38cb29b9ec5ed7504e50a3aad3f2a674f",
+         "5bd867877daf92d7e1d983b24ea07c375a13b7ad",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.headers": [
@@ -346340,23 +346730,19 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "8651d2934d723b9f6c0a22b0131f52c01516fc11",
+         "3be8b66c60fbd9a158e332ffde611ae30634ba03",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
-        "parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini": [
-         "785b82bcbee81c3cc4c76982e3b589be6de6148a",
-         []
-        ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "55092ef7500f2092b4ef7e5c787589b55ffe0166",
+         "e3b0508f4657609580638d04ce6d4902d3c18ee9",
          []
         ]
        },
@@ -346385,7 +346771,7 @@
         []
        ],
        "document-domain.sub.https.html.ini": [
-        "d4bd40414d6af8e843189c6196a75f53f02afa70",
+        "acfa7b8b4fdd50604a63553313b331bb0609b854",
         []
        ],
        "getter-special-cases": {
@@ -346421,6 +346807,10 @@
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
+        "javascript-url-yes.https.html.ini": [
+         "189de0412095c179a135e6aa017e6c204b9e0446",
+         []
+        ],
         "removed-iframe.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
@@ -346460,7 +346850,7 @@
          []
         ],
         "sandboxed-same-origin-iframe-no.https.html.ini": [
-         "27d7b90a39f0b3627a686e2a6c41bd450bbc5872",
+         "e890d00d3b419bdec5486783adba60620b86972b",
          []
         ],
         "sandboxed-same-origin-iframe-yes.https.html.headers": [
@@ -346468,7 +346858,7 @@
          []
         ],
         "sandboxed-same-origin-iframe-yes.https.html.ini": [
-         "805a17e15d672b160c0c087c55acb1fd91cf8ce3",
+         "14cb1e6c42653c1e9878b1b91c0d340f355c96a9",
          []
         ]
        },
@@ -346477,32 +346867,32 @@
         []
        ],
        "going-back.sub.https.html.ini": [
-        "b8b3d6a7c0bfac2f3b71e6593f59743f498cbc95",
+        "9f1f582920d6579cb959b2e532f081cb5c381068",
         []
        ],
        "iframe-navigation": {
         "parent-no-1-no-same-2-yes-port.sub.https.html.ini": [
-         "ec2a502d92a980ccdf4976cc1155f85ad599095b",
+         "fbb118dcc01a3a8d051de3a925d773c8fef29a98",
          []
         ],
         "parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini": [
-         "29d716063918c30f789ec92576f7e6dec2901fbe",
+         "d2d5d09345895be4919f76f10b769d852734f8bd",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini": [
-         "076b56dbf568243af2939dd9c4a28a3aef8b1963",
+         "5ca14add06a3599fa45246416cfc5125a8a396f4",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini": [
-         "0f6e6c5cc697b85bb3b915839572761b59421017",
+         "10a484bb04ac63e9bf7deaa45b6b45d19697df25",
          []
         ],
         "parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini": [
-         "80582a0bda86f9a1fe51800c41e0d32fa97dea52",
+         "29817d3ce6772f9d9a9547561e709cbe471d006f",
          []
         ],
         "parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini": [
-         "2d7a272b30800f5e65aa37b4f60b1caf199bc06d",
+         "88927c4b28d125a44c3875aad74858a81a7133ef",
          []
         ],
         "parent-yes-1-no-same-2-no-port.sub.https.html.headers": [
@@ -346510,7 +346900,7 @@
          []
         ],
         "parent-yes-1-no-same-2-no-port.sub.https.html.ini": [
-         "011d73afdc0110dbe8de576ed8fdce3909094f0d",
+         "8215e4ce046000d54a9b788291bfafdfa4509367",
          []
         ],
         "parent-yes-1-no-same-2-no-subdomain.sub.https.html.headers": [
@@ -346518,7 +346908,7 @@
          []
         ],
         "parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini": [
-         "b8ea2ca58bb23a1ff95204f2ab640907ffac4c58",
+         "1ef993a1bda6a1bfc50f74461113f4e615317fad",
          []
         ]
        },
@@ -346531,8 +346921,16 @@
         []
        ],
        "popups": {
+        "opener-no-openee-yes-port.sub.https.html.ini": [
+         "c74f36ebda0f675ad69d8be4d43586cd94e1cab9",
+         []
+        ],
+        "opener-no-openee-yes-same.sub.https.html.ini": [
+         "58ef35f2c80c17debb94ae8430ca3e3095773256",
+         []
+        ],
         "opener-no-openee-yes-subdomain.sub.https.html.ini": [
-         "1368d4ebe063c13c54fee10ae3d296b08c8ba5ff",
+         "efdfcc444e51e4fd1b5f3feb1ead320b10cf9622",
          []
         ],
         "opener-yes-openee-no-port.sub.https.html.headers": [
@@ -346540,7 +346938,7 @@
          []
         ],
         "opener-yes-openee-no-port.sub.https.html.ini": [
-         "9b1a10aa46e106fe931b8c0ec758ed5b5297f91e",
+         "6cfbabff6796ee5a36819a9e2bbbd64e655f33e4",
          []
         ],
         "opener-yes-openee-no-same.sub.https.html.headers": [
@@ -346556,7 +346954,7 @@
          []
         ],
         "opener-yes-openee-no-subdomain.sub.https.html.ini": [
-         "83fcc1fe1ce693d1b36c9ca3daef9ab38cb52aa6",
+         "061e3f18656cfe8c5d730ac570d4e5483124f418",
          []
         ],
         "opener-yes-openee-yes-port.sub.https.html.headers": [
@@ -346564,23 +346962,19 @@
          []
         ],
         "opener-yes-openee-yes-port.sub.https.html.ini": [
-         "9f1c64b95be44d2188f1edc5dd3368ce3fbe45ea",
+         "e1431348cca8f106345fbafd820354e60e87f00c",
          []
         ],
         "opener-yes-openee-yes-same.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
-        "opener-yes-openee-yes-same.sub.https.html.ini": [
-         "851a368312622c507f15313d07d8639a593a7979",
-         []
-        ],
         "opener-yes-openee-yes-subdomain.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "opener-yes-openee-yes-subdomain.sub.https.html.ini": [
-         "3cc93c11dae56f86ae7b8d6cbd614c0743649202",
+         "29471533d75b0b9f62a218025ff28fffbc50ed76",
          []
         ]
        },
@@ -346593,7 +346987,7 @@
         []
        ],
        "removing-iframes.sub.https.html.ini": [
-        "45bad45437ae9feeabcb5419604a82c069208990",
+        "b5682cab8d8632e28e940af85337c53fed5f45a0",
         []
        ],
        "resources": {
@@ -346649,7 +347043,7 @@
       },
       "relaxing-the-same-origin-restriction": {
        "document_domain_access_details.sub.html.ini": [
-        "61766e689ec4224e9dae6a463eff726dc29b6fbe",
+        "29f86924eef02d1e3b0ae455083488ecd296a665",
         []
        ],
        "document_domain_setter.html.ini": [
@@ -346871,6 +347265,10 @@
        "8e27e3b6177b42f374a333f285a09cf1323ada9a",
        []
       ],
+      "noopener-noreferrer-sizing.window.js.ini": [
+       "15e7fae81bce896a22c8d22593a5bbc3e4c95bab",
+       []
+      ],
       "open-close": {
        "callback.js": [
         "ae51265a213b228282aee82f30496e31f9d417ef",
@@ -346938,6 +347336,10 @@
          []
         ]
        },
+       "open-features-is-popup-condition.html.ini": [
+        "e992545926abf7429b3ec9a22669cacceb710ca3",
+        []
+       ],
        "open-features-negative-innerwidth-innerheight.html.ini": [
         "ad6ace0710760cedf3840baf02a126775e92c870",
         []
@@ -346998,10 +347400,6 @@
         "97ab60773abb587368339945de01df4af993a54b",
         []
        ],
-       "open-features-non-integer-width.html.ini": [
-        "1e059b010bdfe835d5f64e515f658e60674c8e98",
-        []
-       ],
        "open-features-tokenization-noopener.html.ini": [
         "efce1ae6e9edcabfa74899c229df8f185f87e1d4",
         []
@@ -347019,7 +347417,7 @@
         []
        ],
        "open-features-tokenization-top-left.html.ini": [
-        "a5ba4c24deabf5feac62e046e01bf9f663a60048",
+        "dc5fb3e0c6cc729507fa8c6ce9a177ce7ff3a58b",
         []
        ],
        "resources": {
@@ -347092,11 +347490,11 @@
        []
       ],
       "window-open-noopener.html.ini": [
-       "2220bb32d524339a473308465ce1fdebe7f9903e",
+       "19a9e9c62bbb23136f6dcaa7ea90b0ffc9c6425f",
        []
       ],
       "window-open-windowfeatures-values.html.ini": [
-       "ef909a9fbff128dcd041f2de23ab974043d2a261",
+       "d9e0e4f30172d211e80db333678752d7aedbe94b",
        []
       ],
       "window-properties.https-expected.txt": [
@@ -347156,8 +347554,12 @@
         "92fd5f321d0edf7af81f2e09935fde3c294d3220",
         []
        ],
+       "opener-noopener.html.ini": [
+        "08977dee0d9a7433bdef47526adb09fb77d6eab1",
+        []
+       ],
        "opener-setter.html.ini": [
-        "af4d6689fd7bbd52ef2c3b26c7735d6b29cd2b56",
+        "df656ac837b5f8d5028cda2cc9688b0464c4a451",
         []
        ],
        "opener.html.ini": [
@@ -347192,6 +347594,10 @@
        }
       },
       "browsing-context-names": {
+       "choose-_parent-003.html.ini": [
+        "83a3c62ce54a1ac6af7a67faffa030cdccf8f6b6",
+        []
+       ],
        "choose-_top-001.html.ini": [
         "32ae56a123bf75f51fdd6c2937085ed6f23ee367",
         []
@@ -348622,7 +349028,7 @@
          []
         ],
         "canvas-display-p3-drawImage-ImageBitmap-video.html.ini": [
-         "4900e47dc25bca8b98835c8fccab40a3914f150d",
+         "321a431d20f1cbb55e932d790cda08755a2d4a82",
          []
         ],
         "canvas-display-p3-drawImage-expected.txt": [
@@ -349216,7 +349622,7 @@
          []
         ],
         "offscreencanvas.resize.html.ini": [
-         "a579b95449e376bc8f99b295e27e8be94cd3e647",
+         "0a174c5f33f56c60e824245f4d664c535c6548b7",
          []
         ],
         "offscreencanvas.transferrable-expected.txt": [
@@ -349756,7 +350162,7 @@
        []
       ],
       "fetch.https.window.js.ini": [
-       "2127d139df931ad03d8dd2a8c4ae1ebd398e4cb6",
+       "3b8a30b9f6d968dc579fc5b2bd03d47ceae6e628",
        []
       ],
       "iframe-coep-credentialless.https.window.js.ini": [
@@ -349767,10 +350173,6 @@
        "5e6b9120ee147329629026318b76757a21732510",
        []
       ],
-      "image.https.window.js.ini": [
-       "a048ac86484f29356c08bbe2a935a01e5f3345c7",
-       []
-      ],
       "resources": {
        "common.js": [
         "ce21c766f6c30fcb87147611ae1a6af9aa54ce0e",
@@ -349823,7 +350225,7 @@
       []
      ],
      "dedicated-worker.https.html.ini": [
-      "6bc5f6dc9a7127f1db057f8b4c431ea962406f0a",
+      "d92ca6a545858f27ac3b4363177a4a9dd87e2d58",
       []
      ],
      "iframe-history-none-require-corp.https.html.ini": [
@@ -349937,7 +350339,7 @@
       []
      ],
      "reporting-subresource-corp.https.html.ini": [
-      "12f401ec9857d92ca399601a430344f0c46690df",
+      "92de457ea561df436883f0f32c56fbd620bd5c8e",
       []
      ],
      "reporting-to-document-reporting-endpoint.https.window.js.ini": [
@@ -350216,10 +350618,6 @@
       "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
       []
      ],
-     "coep-with-cross-origin.https.html.ini": [
-      "02e5a9832f096d302194011075c29360f3f3b83d",
-      []
-     ],
      "coep-with-same-origin.https.html.headers": [
       "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
       []
@@ -350232,10 +350630,6 @@
       "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
       []
      ],
-     "coep-with-same-site.https.html.ini": [
-      "06986c34c07abae401f3ef56c52e1eccc891aba9",
-      []
-     ],
      "coop-coep-sandbox.https.html.headers": [
       "4fff9d9fba4c81f953826ffea010a75be626b95d",
       []
@@ -350253,7 +350647,7 @@
       []
      ],
      "coop-navigate-same-origin-csp-sandbox.html.ini": [
-      "07fb88f9053cc21e8f55f14041af11eac07b4ff1",
+      "a7102153e9b504a74092eb3b3075f8a48e116557",
       []
      ],
      "coop-navigated-popup.https.html.headers": [
@@ -350276,26 +350670,22 @@
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
      ],
+     "coop-sandbox.https.html.ini": [
+      "63b8eb62b2311c7e034dec970a76ae3f167b3e9c",
+      []
+     ],
      "header-parsing-failures.https.html.ini": [
-      "0395d5862b3e044ca8194db3057565e3ad48d74c",
+      "eb30ca950fa6cdd9afae8f43e9055639335a90c6",
       []
      ],
      "header-parsing-non-ascii.https.html.headers": [
       "54e44a7113def0babd42f726c878fc90db2e99f9",
       []
      ],
-     "header-parsing-non-ascii.https.html.ini": [
-      "352e7aad6f020561a33cc066d29ae815dd33f1e0",
-      []
-     ],
      "header-parsing-repeated.https.html.headers": [
       "85c58be8a1c60ed64b2efaed8a155fc5e087537e",
       []
      ],
-     "header-parsing-repeated.https.html.ini": [
-      "0ff031216698bcc77afe7110f069d5f7d0fd27e9",
-      []
-     ],
      "header-parsing-successes.https.html.ini": [
       "f545d7b1ba24a55f980a8cfdee522fd7d71f230d",
       []
@@ -350325,10 +350715,6 @@
        "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2",
        []
       ],
-      "popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.ini": [
-       "eb3fd0485663ee6cfb5d98810486043aa6a2e766",
-       []
-      ],
       "popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.headers": [
        "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2",
        []
@@ -350349,17 +350735,9 @@
        "34bd099a302f893f92586241ea38aac812bf28d0",
        []
       ],
-      "popup-same-site-with-same-origin.https.html.ini": [
-       "4a8a69c67ce65a40e37fc817e5763a78a2cf951a",
-       []
-      ],
       "popup-same-site-with-same-site.https.html.headers": [
        "34bd099a302f893f92586241ea38aac812bf28d0",
        []
-      ],
-      "popup-same-site-with-same-site.https.html.ini": [
-       "536e2c0b58482bac177e94efbe612cc3b60d62cf",
-       []
       ]
      },
      "iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.headers": [
@@ -350391,7 +350769,7 @@
       []
      ],
      "iframe-popup-same-origin-to-same-origin.https.html.ini": [
-      "c6cd6b730183649c8f3a41dd1e35837e05470862",
+      "79b696010a173e30f79a6e092a7495b49b067323",
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.headers": [
@@ -350399,7 +350777,7 @@
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.ini": [
-      "59c33be4dc23119fc1364f47d317e10cb1c0e694",
+      "8eec1633c1b737c49a14249cda902fca3a7199de",
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.headers": [
@@ -350407,7 +350785,7 @@
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.ini": [
-      "3e09c283deb3d8ca3eb84b95803a97ca16aff88d",
+      "69d18ba491050ae07cfe15dd2a33f95540146399",
       []
      ],
      "iframe-popup-unsafe-none-to-unsafe-none.https.html.headers": [
@@ -350419,7 +350797,7 @@
       []
      ],
      "javascript-url.https.html.ini": [
-      "a613d3bad75f9c9582949bb450f3a4750c34fdd5",
+      "31b63d6fbe3a6c2aa560de421fb168005ace26f8",
       []
      ],
      "navigate-to-aboutblank.https.html.ini": [
@@ -350427,7 +350805,7 @@
       []
      ],
      "navigate-top-to-aboutblank.https.html.ini": [
-      "d5c6b7629520bbf8969208c96e72707a0ef0454e",
+      "1aeca853cfa3c55b386ca9cb36493b699d321c2b",
       []
      ],
      "no-https.html.headers": [
@@ -350443,11 +350821,7 @@
       []
      ],
      "popup-redirect-cache.https.html.ini": [
-      "5f9ca4e98d2c6479aa3793f2cea70104840669e8",
-      []
-     ],
-     "popup-redirect-same-origin-allow-popups.https.html.ini": [
-      "4cc8d43391fcd469555c9dcc045d76c782bf09eb",
+      "4cb8fb89c6d9843d523ea1b3668b9c70a9b04b53",
       []
      ],
      "popup-same-origin-allow-popups-with-cross-origin.https.html.headers": [
@@ -350455,7 +350829,7 @@
       []
      ],
      "popup-same-origin-allow-popups-with-cross-origin.https.html.ini": [
-      "ddd028e2ea76a0899bed36a40e2607dc3c213bb7",
+      "78395f064089f40dea0d537a111ffc600cd17768",
       []
      ],
      "popup-same-origin-allow-popups-with-same-origin.https.html.headers": [
@@ -350494,6 +350868,10 @@
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
      ],
+     "popup-same-origin-with-same-site.https.html.ini": [
+      "ef3655a482107a3d7f9f5dea04a0b3b74bed9fa3",
+      []
+     ],
      "popup-unsafe-none-with-cross-origin.https.html.headers": [
       "073ce7adfbd81cb7c0b2f91f96c8349b6677f26c",
       []
@@ -350515,7 +350893,7 @@
       []
      ],
      "popup-unspecified-with-same-origin.https.html.ini": [
-      "cc0aa6279c4c6300209e802cc37a9fd36f33de32",
+      "0d2dc3b16bd511d0412a206007cdf2a888350dab",
       []
      ],
      "popup-with-structured-header.https.html.headers": [
@@ -350529,7 +350907,7 @@
       ],
       "access-reporting": {
        "access-from-coop-page-to-openee_coop-ro.https.html.ini": [
-        "ef6ec988d5ce37413283b835433725af38794e01",
+        "78a07e61847da025280a55e15324eb8e6d96c235",
         []
        ],
        "access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini": [
@@ -350537,7 +350915,7 @@
         []
        ],
        "access-from-coop-page-to-opener_coop-ro.https.html.ini": [
-        "75251f82e9084a5548933004eb1a3f2d5d5efe6c",
+        "3b5e3caa0859353f0f96155790b19503393d939b",
         []
        ],
        "access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini": [
@@ -350545,19 +350923,19 @@
         []
        ],
        "access-from-coop-page-to-other_coop-ro.https.html.ini": [
-        "dd923b49d338c61b1c701f72a0fe7c9d21a51306",
+        "ad1f3046344665f83be193b63ccc46c1a691c671",
         []
        ],
        "access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini": [
-        "dd5c96b2e6d713af4e5402595b2b6e459a64352e",
+        "56b8e031cc1caaee836abb34f380ea522c92155c",
         []
        ],
        "access-to-coop-page-from-openee_coop-ro.https.html.ini": [
-        "bf827e7921d353b76aa69e62ef999129f23aa7d3",
+        "45761bcac8beb541cddf6110a9432b612089da0b",
         []
        ],
        "access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini": [
-        "a07396ec29b90d8998c0949887aa263615f8ad36",
+        "c12963c37c283f6c853bb9f9ef36b7cf83c9d0df",
         []
        ],
        "access-to-coop-page-from-opener_coop-ro.https.html.ini": [
@@ -350577,7 +350955,7 @@
         []
        ],
        "property-blur.https.html.ini": [
-        "152c3587065cb6376d75605f2797e9a2104f048c",
+        "727d82003a3f7ca6fb0edb5a0c10719dae733c93",
         []
        ],
        "property-close.https.html.ini": [
@@ -350585,7 +350963,7 @@
         []
        ],
        "property-closed.https.html.ini": [
-        "ad0e9b09c8038704d41611c2b79cea264d3166a5",
+        "3ee2c65727bbe62139956bca2812b7f5ca1986eb",
         []
        ],
        "property-focus.https.html.ini": [
@@ -350593,17 +350971,13 @@
         []
        ],
        "property-frames.https.html.ini": [
-        "21215fd305f462e4142845a404889820349c098d",
+        "f6d2d333bad5ce93e388b23469807f3f04336d18",
         []
        ],
        "property-indexed-getter.https.html.headers": [
         "64f4d5fedffd208b7174c7d8e0bce4e99ce1ac0f",
         []
        ],
-       "property-indexed-getter.https.html.ini": [
-        "4186abaa2b3e6224e09a8c01ede807a9f1651fa8",
-        []
-       ],
        "property-length.https.html.ini": [
         "5a1cdeb06f5da40830935462d15cf02f567f8dcb",
         []
@@ -350613,7 +350987,7 @@
         []
        ],
        "property-location-set.https.html.ini": [
-        "2f7117844e127f6a83ab378339e2027d18eea311",
+        "7f801da8aa2919ebc0db9e12801099b5ad2aecb2",
         []
        ],
        "property-named-getter.https.html.headers": [
@@ -350621,35 +350995,31 @@
         []
        ],
        "property-opener-get.https.html.ini": [
-        "e053a92320caf24980ff5f4d623361e7485303db",
-        []
-       ],
-       "property-opener-set.https.html.ini": [
-        "5c096b165ef8879b38c62e8c116bc3dc39ae7263",
+        "76173f058e7af335f35213295dd3b1a188840c64",
         []
        ],
        "property-postmessage-1.https.html.ini": [
-        "943353e4f9e25b62aaec539cff959e753180bc02",
+        "ab4e882800645f49b748ce816f1108237bde01a8",
         []
        ],
        "property-postmessage-2.https.html.ini": [
-        "586bba13313b39313f8fbebcc6071a2c38596100",
+        "426cf305bd7453933de82985822e531bebd9958c",
         []
        ],
        "property-self.https.html.ini": [
-        "911a48fe0d6eaeb845e1ec91e968d70a1ba6b4f2",
+        "189215bc7f4f6a65585c207e1ea409f9b0320ac5",
         []
        ],
        "property-top.https.html.ini": [
-        "f989a1455a8ba373848579c707526c997bdb5f20",
+        "7bd46c45dea7626c43b604418611570c9f08691d",
         []
        ],
        "property-window.https.html.ini": [
-        "78ab09d6a8d589bf1883847508b9769c9cd037dc",
+        "799db67cf15e60af5be3156b0c11c7bb738c4426",
         []
        ],
        "report-to-both_coop-ro.https.html.ini": [
-        "46d3e2453d8b141994297fa9ca23abea51bbb623",
+        "3533c77b1462c6bc0e3dc3c640117c164f1fdd91",
         []
        ],
        "reporting-observer.html.ini": [
@@ -350671,7 +351041,7 @@
         []
        ],
        "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [
-        "8030187e3a1965ce1f930b870396f1c180227ae5",
+        "6f1d038e5dd4f3474f52cf8d1ad4d3191d8fda2c",
         []
        ],
        "reporting-redirect-with-unsafe-none.https.html.ini": [
@@ -350773,7 +351143,7 @@
         []
        ],
        "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [
-        "8030187e3a1965ce1f930b870396f1c180227ae5",
+        "6f1d038e5dd4f3474f52cf8d1ad4d3191d8fda2c",
         []
        ]
       },
@@ -350793,7 +351163,7 @@
       }
      },
      "resource-popup.https.html.ini": [
-      "f030a189f9ec459fd336f1b123ed5796391ab211",
+      "d0377346a70f14690894f549322e3009fa10b258",
       []
      ],
      "resources": {
@@ -350869,7 +351239,7 @@
         []
        ],
        "iframe-popup-to-so.https.html.ini": [
-        "e3a14cedcbe3ad3c6aca7ec0a8af4f792a026b11",
+        "b62b4dc0b58bdd2d5f8e6f25de66a5f79fd881ac",
         []
        ],
        "iframe-popup-to-soap.https.html.headers": [
@@ -350913,7 +351283,7 @@
         []
        ],
        "iframe-popup.https.html.ini": [
-        "51dea9892a1a00fd09fb795c64c44dc95857d766",
+        "f3681f22e7aaacd0c447883a6d4c2e4b530cfde0",
         []
        ],
        "iframe-popup.https_1-2-expected.txt": [
@@ -350981,7 +351351,7 @@
         []
        ],
        "popup-un.https.html.ini": [
-        "3825ee4b58097e7262bc7d1e1cff1fcc0684f5fa",
+        "245d44f04bd04c497a587d0b1f23c067a3808476",
         []
        ],
        "popup-with-cross-origin.https-expected.txt": [
@@ -350993,7 +351363,7 @@
         []
        ],
        "popup-with-cross-origin.https.html.ini": [
-        "4e17baa0cc7389cbdb7ad5478ca25b3c307b8269",
+        "fca3b7c3e8f677f571d091f75a427352539790f5",
         []
        ],
        "popup-with-same-origin.https-expected.txt": [
@@ -351017,7 +351387,7 @@
         []
        ],
        "popup-with-same-site.https.html.ini": [
-        "38b2f93760f06bd187430b8f5f7bbf6bf5844c2b",
+        "3a041615f7f308fb0c8f2869d86440d2ef622f63",
         []
        ]
       }
@@ -351085,7 +351455,7 @@
         []
        ],
        "document-cookie.html.ini": [
-        "fc63f6d0f5c4c265aefdac70e3e4bfadb1f17af6",
+        "87ed3754a09930097225b085f7f8528dd5256968",
         []
        ],
        "document-lastModified.html.headers": [
@@ -351577,6 +351947,14 @@
       []
      ],
      "render-blocking": {
+      "remove-attr-script-keeps-blocking.tentative.html.ini": [
+       "6e59c182c3cb184fd873dc908acef135f413420b",
+       []
+      ],
+      "script-inserted-script.html.ini": [
+       "e11044cfb6253752396bd957d05295fc1d8c2c07",
+       []
+      ],
       "script-inserted-stylesheet-link.tentative.html.ini": [
        "64be6e97171f830f84edb718f094f89392c8f731",
        []
@@ -355393,6 +355771,12 @@
        "33c86ddd4cc1e31dd5451d99d1621abf6e3f8861",
        []
       ],
+      "focus-management": {
+       "focus-event-targets-simple.html.ini": [
+        "785071f129622ced228752338d96d9f1620aa3af",
+        []
+       ]
+      },
       "focusgroup": {
        "tentative": {
         "resources": {
@@ -357270,7 +357654,7 @@
          []
         ],
         "resource-selection-invoke-audio-constructor.html.ini": [
-         "832554d322a83d49960e5586a1b22eb166cf8708",
+         "a6241fe3c693f1539664cbff854a4f2741ea7202",
          []
         ],
         "resource-selection-invoke-in-sync-event-expected.txt": [
@@ -357302,7 +357686,7 @@
          []
         ],
         "resource-selection-invoke-insert-source.html.ini": [
-         "ffcd9afbc824c17e78504dcb765aa69f74d34cef",
+         "c9aa5a8a7b056ef8c40be57c89f2804e57b809e0",
          []
         ],
         "resource-selection-invoke-load.html.ini": [
@@ -357310,7 +357694,7 @@
          []
         ],
         "resource-selection-invoke-pause-networkState.html.ini": [
-         "e889ab762e3f0df906ff3f35139c60e0c4a89904",
+         "77d3898365040adfae7095931f4275904e092036",
          []
         ],
         "resource-selection-invoke-pause.html.ini": [
@@ -357325,8 +357709,12 @@
          "33e2bbbf2db5f400c6b95c9f46e33d3e663a43c5",
          []
         ],
+        "resource-selection-invoke-remove-src.html.ini": [
+         "d46d8e21a17a4bd65146835331cfbd4a54690eeb",
+         []
+        ],
         "resource-selection-invoke-set-src-not-in-document.html.ini": [
-         "7fe38a1b008003d6f1e3f989dfbec12f6ade05fc",
+         "ff3d9aa5444592ad3736b4dc0c0fd662f926278a",
          []
         ],
         "resource-selection-invoke-set-src.html.ini": [
@@ -357820,6 +358208,10 @@
           "96afaef346374e70cdf2fec425f19f7a1239e175",
           []
          ],
+         "track-cue-rendering-after-controls-removed.html.ini": [
+          "e6b2b3097264796f5b71620c20759dbdc209d6c3",
+          []
+         ],
          "track-cue-rendering-line-doesnt-fit-ref.html": [
           "8354041eb2a0aa57b283e12d9c0390f16327ac80",
           []
@@ -358287,19 +358679,19 @@
         []
        ],
        "sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini": [
-        "7774528cba503b088738104d94c86dde95a92e8b",
+        "7d22c4482048821e3c3586ad2496e0d23c9ced10",
         []
        ],
        "sandbox-top-navigation-child.tentative.sub.window.js.ini": [
-        "ce6897a13e1dfb8c0b1412cb27eff9d89af02617",
+        "4d916ea98cfcaa51a6b60d1bddcd140e3d53fb5e",
         []
        ],
        "sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini": [
-        "5a471c5d14bef67abb14524830cb1dee4d5a5683",
+        "8a0440cc94d8893999376b60e056bdea0444d13b",
         []
        ],
        "sandbox-top-navigation-grandchild.tentative.sub.window.js.ini": [
-        "f6d097fe095955bb078b69bde166b123ba27c40a",
+        "2a9af6474ceb2571eeb0f25c00742721efe87c1a",
         []
        ],
        "stash.py": [
@@ -358575,7 +358967,7 @@
         []
        ],
        "image-loading-lazy-base-url-2.html.ini": [
-        "51b5b40a4444ed297f2eb1c6a07fac84ea65894a",
+        "2e3fbd978f5bd3b40547ee704387081df3fc15fa",
         []
        ],
        "image-loading-lazy-base-url-expected.txt": [
@@ -358594,6 +358986,10 @@
         "05a60034ad0683c72db70f659c66075ac52c17bf",
         []
        ],
+       "image-loading-lazy-data-url-to-https.html.ini": [
+        "dc2ee4a3cde411b377f878919fbba20090c2111f",
+        []
+       ],
        "image-loading-lazy-expected.txt": [
         "724ecac7ecfd4ce12ff9faf48d58d6c79ef61472",
         []
@@ -358807,10 +359203,6 @@
         }
        },
        "srcset": {
-        "avoid-reload-on-resize.html.ini": [
-         "68252033ef1ac29abb24d3e42fe54d7a5c977b7a",
-         []
-        ],
         "common.js": [
          "d4d2c7534c7fadac56a59a09455180f57697a6d9",
          []
@@ -359020,8 +359412,12 @@
          []
         ]
        },
+       "text-plain.window.js.ini": [
+        "1736b695b3d69f7b52a95fccd8b6d03e90da41e6",
+        []
+       ],
        "urlencoded2.window.js.ini": [
-        "c14d03067bea6c73844940da6d6c6f69188902a6",
+        "f668ba4015561031a75d9b5da69bddce4441eb16",
         []
        ]
       },
@@ -359039,7 +359435,7 @@
         []
        ],
        "rel-button-target.html.ini": [
-        "12a80ad04dadb978f7708cf81d7932098afc3487",
+        "eaf0969a095f79638be6ac7f9e5de89eed0af65e",
         []
        ],
        "rel-form-target.html.ini": [
@@ -359375,7 +359771,7 @@
         []
        ],
        "selectmenu-form-state-restore.tentative.html.ini": [
-        "2dbfcd2a827090ec23178c8e097b29712ffd5de1",
+        "5860c3a2c6059c5e9b42492368f43b3e93764281",
         []
        ],
        "selectmenu-keyboard.tentative.html.ini": [
@@ -359783,7 +360179,7 @@
         []
        ],
        "activation-behavior.window.js.ini": [
-        "f5ddbc8ba5601734ab87044f39ecc6f83acbeddc",
+        "51f89168d66291ee98e720c1e12744e04dbd0a77",
         []
        ]
       },
@@ -359942,7 +360338,7 @@
        []
       ],
       "popover-focus-2.tentative.html.ini": [
-       "4da507b5fa6f83ea20ce950e365d0c26546cc3aa",
+       "5edd59699365bc8b848f3bab3157b2e6cf355b1e",
        []
       ],
       "popover-hidden-display-ref.tentative.html": [
@@ -361697,7 +362093,7 @@
         []
        ],
        "span-limits.html.ini": [
-        "79cf2eb0904d09e77886dd0be4ecdf5637bc6865",
+        "78bcb8cae33f014765ae3d8cb2ccb1c89fbb2021",
         []
        ]
       }
@@ -364018,7 +364414,7 @@
      },
      "timers": {
       "negative-settimeout.any.js.ini": [
-       "80e633e8f58e4fe51beac4a4ef046c40019eab2f",
+       "cac620ae34217b76f1c6e2070f003083e1734594",
        []
       ]
      },
@@ -365225,7 +365621,7 @@
       []
      ],
      "webtransport-h3.https.sub.any.js.ini": [
-      "66e623f8d70d32122d5a1abe3b40c9baf4ed21c2",
+      "56976838fb4c1a633308d33f511fd67f40327851",
       []
      ],
      "wpt-server-wpt-flags.sub.html.ini": [
@@ -365670,7 +366066,7 @@
      []
     ],
     "badging.idl": [
-     "28578621c9a4b1586798403a9c4ebc60cb5310ef",
+     "f34dfa7e04af9caedd85eecaed8acf68e65d1546",
      []
     ],
     "battery-status.idl": [
@@ -365702,7 +366098,7 @@
      []
     ],
     "compute-pressure.idl": [
-     "92a105bd52757050768247e048488214128371fa",
+     "2a11b84c45d5f14f6ec6f71961515f0b66783933",
      []
     ],
     "console.idl": [
@@ -365710,7 +366106,7 @@
      []
     ],
     "contact-api.idl": [
-     "d7f2ba5d959ee316f8045697177c0b052302107a",
+     "aece81664e4fdd3c4beec5e4d36da109f8dc5ba6",
      []
     ],
     "content-index.idl": [
@@ -365746,7 +366142,7 @@
      []
     ],
     "css-animations.idl": [
-     "eda1d0f72a4e40df879bf74ea5d862cf61598279",
+     "6620e0156dc85c040da7997d9d2e351147a47354",
      []
     ],
     "css-cascade.idl": [
@@ -365846,11 +366242,11 @@
      []
     ],
     "css-view-transitions.idl": [
-     "26c2e304066ee2e41f98acebeaacf0220124e797",
+     "c7ac9f336cfef03302c0df7db1cb1f9e573d0f1c",
      []
     ],
     "cssom-view.idl": [
-     "a61f17ea4885fb51dba7ef2d8b9780b4a67f5415",
+     "2046b38533f4c9d5f4ccd1ee709ce45208344acf",
      []
     ],
     "cssom.idl": [
@@ -365906,7 +366302,7 @@
      []
     ],
     "event-timing.idl": [
-     "2f8e031ce15d9b80a675e1c963f1c37123ee302b",
+     "741a05dc6bcd23d945577408c759b31affb15e5e",
      []
     ],
     "eyedropper-api.idl": [
@@ -365914,7 +366310,7 @@
      []
     ],
     "fetch.idl": [
-     "ba69c462f623e8d01cef07822f3b93039cf1676b",
+     "866d09d31bd9b9916dfcadefb17a9ec56a99cdf1",
      []
     ],
     "fido.idl": [
@@ -365942,7 +366338,7 @@
      []
     ],
     "gamepad-extensions.idl": [
-     "29ab815c411b4ce399570e9493f86559bfc0c85c",
+     "ddfc0d9c06ac9f4a2bff1737913097bb7ab21fcc",
      []
     ],
     "gamepad.idl": [
@@ -365982,7 +366378,7 @@
      []
     ],
     "html.idl": [
-     "d053798c05747683eb6ff5715292953490d7848e",
+     "70eb5eff761578bae240ee39987059063603994e",
      []
     ],
     "idle-detection.idl": [
@@ -366054,7 +366450,7 @@
      []
     ],
     "manifest-incubations.idl": [
-     "5342b611fcc6b7efb1b50661e804cc98fd330ba3",
+     "bab3998dedd1353ba95b824a36500f1ab9a69987",
      []
     ],
     "mathml-core.idl": [
@@ -366154,7 +366550,7 @@
      []
     ],
     "payment-handler.idl": [
-     "109e405268fbd058ad503dc08bccec3e60dc1dc4",
+     "c76ef0983f694234275a396a342ae0ab024c07fb",
      []
     ],
     "payment-request.idl": [
@@ -366166,7 +366562,7 @@
      []
     ],
     "performance-timeline.idl": [
-     "d3a5a278055eba415342f9958b6e228715dd9eb4",
+     "cdd8fafd8c64e6b50cc08e96a6b88655b34ce139",
      []
     ],
     "periodic-background-sync.idl": [
@@ -366186,7 +366582,7 @@
      []
     ],
     "permissions.idl": [
-     "701392194df95548d0f6d6f95641e4a4e3fcb557",
+     "fbcb674e5618af1e96b9044cbd0b29ef82d06c14",
      []
     ],
     "picture-in-picture.idl": [
@@ -366218,7 +366614,7 @@
      []
     ],
     "priority-hints.idl": [
-     "15c90bbe1ab7e22f9bbcb8bfac99d3b6341a07f8",
+     "cbff6a5222d0a911dd2ba041031e3027451d0609",
      []
     ],
     "private-click-measurement.idl": [
@@ -366258,7 +366654,7 @@
      []
     ],
     "resource-timing.idl": [
-     "65f0d4d4e5d9b22226bcc234aebfb21133865c53",
+     "242df0bd804af4cfa790b0f421d62beba58761b3",
      []
     ],
     "sanitizer-api.idl": [
@@ -366278,11 +366674,11 @@
      []
     ],
     "screen-capture.idl": [
-     "4c64a2f35cbeb6f8c57068dcb8216ab613d10b63",
+     "9abd4d2c1adf02fd063d24aeaeecb10e994fee1b",
      []
     ],
     "screen-orientation.idl": [
-     "62bc864282234f41cceb8d2d199af1e88a96ae78",
+     "df8a1db53920d618454e642efeec8b155097afbc",
      []
     ],
     "screen-wake-lock.idl": [
@@ -366290,7 +366686,7 @@
      []
     ],
     "scroll-animations.idl": [
-     "1ba137c3674461b55d36d2367851d46259e297eb",
+     "30ecbd81c908d8aff8b97c1b5f25b943fae2454e",
      []
     ],
     "scroll-to-text-fragment.idl": [
@@ -366298,11 +366694,11 @@
      []
     ],
     "secure-payment-confirmation.idl": [
-     "6a68f059e56b02c745ea9c224a8e30fd444ad19b",
+     "6b6083b165e77441751c56b30f2e831ec7903b2b",
      []
     ],
     "selection-api.idl": [
-     "6aaa1ae94604674cee83228cc84ea11c24f775d0",
+     "c1eed2a9cf243d27ba24a385fb15cfd691e37065",
      []
     ],
     "serial.idl": [
@@ -366418,7 +366814,11 @@
      []
     ],
     "web-animations.idl": [
-     "6030dad332f052a4a572889cde1cd73b1b128327",
+     "ed612302a47f5a9118f90288c86d1e69ab51463e",
+     []
+    ],
+    "web-app-launch.idl": [
+     "c3b6e39f3fab58e231d79625b6e3903d32edec57",
      []
     ],
     "web-bluetooth.idl": [
@@ -366442,11 +366842,11 @@
      []
     ],
     "webaudio.idl": [
-     "092ab52a01c73c16270abdf916e705cd29a2ead9",
+     "1569de204bd9ff0d8d784cd0347c35a9ab1f645f",
      []
     ],
     "webauthn.idl": [
-     "d35ebbfc919b399ce4a5edefec83958494e2ab1b",
+     "ef27322312f1cb8e9e7282a7369c0b673c113b5f",
      []
     ],
     "webcodecs-aac-codec-registration.idl": [
@@ -366486,7 +366886,7 @@
      []
     ],
     "webgpu.idl": [
-     "f2e038c2047d142fbad56312704e3ea5947988b2",
+     "5b4fcc1aa8c42aedf132d877b4f78ef1fc0ec03d",
      []
     ],
     "webhid.idl": [
@@ -366502,11 +366902,11 @@
      []
     ],
     "webnn.idl": [
-     "2f900b505b9479a9d17bc05d4f64be6c9d405238",
+     "c8a09aed9e9a72058e5c06a5483b3c740a9867fd",
      []
     ],
     "webrtc-encoded-transform.idl": [
-     "f1747f511507041740a7c69f70092540556f6555",
+     "13f3999db1222c4d8c901111ccd90cb8128ec115",
      []
     ],
     "webrtc-ice.idl": [
@@ -366522,7 +366922,7 @@
      []
     ],
     "webrtc-stats.idl": [
-     "237c7e474c974337caa37332101c16f9a8601f73",
+     "397d7838b799ed148ccd608fc27d6cbd7a39f74e",
      []
     ],
     "webrtc-svc.idl": [
@@ -366538,7 +366938,7 @@
      []
     ],
     "webtransport.idl": [
-     "1aa5a512da711faf1dea192f7d4f57250a601e99",
+     "ba705807f1298de1185c7f10231070b96fd8a3da",
      []
     ],
     "webusb.idl": [
@@ -366620,7 +367020,7 @@
      []
     ],
     "cross-origin-iframe.sub.html.ini": [
-     "547df299e57f1b3c7250a4bdc155e1a9cab3fec1",
+     "07d81d61eb21ccacea7007af6c7d05c7a789caf1",
      []
     ],
     "idlharness.window-expected.txt": [
@@ -366913,14 +367313,14 @@
      "observe-cross-origin-animated-image.tentative.html.ini": [
       "c9f0590e8b0c879d47c4d05dd889b41f18668920",
       []
-     ],
-     "observe-cross-origin-tao-animated-image.tentative.html.ini": [
-      "1cd483bde895dd98ddd0bc113ae4761fe696ccb5",
-      []
      ]
     },
+    "cross-origin-image.sub.html.ini": [
+     "c890a02a9ae5066f711b8a2aba4ca2ae8658b1ea",
+     []
+    ],
     "first-paint-equals-lcp-text.html.ini": [
-     "7d56e9397679a858bc0ea8f4e1681b27b96c2601",
+     "db9b7231021c83ea6b995cd605e1343a8fb654ce",
      []
     ],
     "image-upscaling-expected.txt": [
@@ -367056,7 +367456,7 @@
      []
     ],
     "freeze.html.ini": [
-     "38d7adaceef563a79aea605eff043db12b081828",
+     "a184acb0bf70097d4a7da5c378f85df1afdb7be3",
      []
     ],
     "resources": {
@@ -367121,7 +367521,7 @@
       []
      ],
      "csp-early-hints-absent-final-absent.h2.window.js.ini": [
-      "d55450eb4c7914d8ff9bed827e0009b15be332c1",
+      "08b5950f319480f7afd6b22093dfb2596c90661c",
       []
      ],
      "csp-early-hints-absent-final-allowed.h2.window.js.ini": [
@@ -367133,7 +367533,7 @@
       []
      ],
      "csp-early-hints-allowed-final-absent.h2.window.js.ini": [
-      "989e58ba306126ae8d3f59f6b35d13ff2eed8f5f",
+      "c53530f115a0d4227a9930724a7caf5cc7ed0e35",
       []
      ],
      "csp-early-hints-allowed-final-allowed.h2.window.js.ini": [
@@ -367153,7 +367553,7 @@
       []
      ],
      "csp-early-hints-disallowed-final-disallowed.h2.window.js.ini": [
-      "3e116223aecd0b524ef6af7118a31a9c70420c49",
+      "2aa08d2c04abd9bcf012352980a3e80d97d9b583",
       []
      ],
      "iframe-coep-disallow.h2.html.headers": [
@@ -367197,7 +367597,7 @@
       []
      ],
      "preload-without-as.h2.window.js.ini": [
-      "6ac50adc38d97bcaca9743e9e8069256b7db0bc4",
+      "ed8057a60b5c4be4ff7179c77c5f4cee2492b909",
       []
      ],
      "preload-without-csp-document-disallow.h2.window.js.ini": [
@@ -367209,11 +367609,11 @@
       []
      ],
      "redirect-cross-origin.h2.window.js.ini": [
-      "44a1ffce2d0eaaeef32194fccbf381a0ec4e9280",
+      "6210ef72820f5c5705a1302908581f096e60330f",
       []
      ],
      "redirect-same-origin-between-early-hints.h2.window.js.ini": [
-      "66bceec28452a2a6d3c4034fbbe05aed0a70024a",
+      "33dd97a825fb2ac4ed1df48bc52a614bbb5dbed1",
       []
      ],
      "redirect-same-origin.h2.window.js.ini": [
@@ -367476,7 +367876,7 @@
      []
     ],
     "longtask-in-sibling-iframe-crossorigin.html.ini": [
-     "9aec8da79cfcdf2cf8308e10bb38a7567175ddd5",
+     "1281282548f76eb5fca264b5a580bc9f37e8275d",
      []
     ],
     "longtask-sync-xhr.html.ini": [
@@ -368200,7 +368600,7 @@
        ]
       },
       "ignored-properties-001.html.ini": [
-       "72e28090ec5f96a3d73a1aa34c4b0d14a1cf2f75",
+       "f779190fb74e4065db3ee9deee4b617b02213af3",
        []
       ],
       "legacy-scriptminsize-attribute-ref.html": [
@@ -369260,7 +369660,7 @@
      []
     ],
     "mediasource-avtracks.html.ini": [
-     "395d921ffa795d66aed85c8d87f795dce25396db",
+     "cf16bf59f16ed119490b3c876b184a8af21098e2",
      []
     ],
     "mediasource-buffered-expected.txt": [
@@ -369332,7 +369732,7 @@
      []
     ],
     "mediasource-duration.html.ini": [
-     "e23991a44d05dc947b282963b19b18ecddc52cab",
+     "cbf0c1cc41c16493afc10a58bfcb4b82584c4e02",
      []
     ],
     "mediasource-endofstream-expected.txt": [
@@ -370616,40 +371016,6 @@
      []
     ]
    },
-   "native-io": {
-    "DIR_METADATA": [
-     "61612cf5bf09116a06c8fd490c40d365a3572c2f",
-     []
-    ],
-    "META.yml": [
-     "22a45c20c9b847433b0f7d9b793d8c1a96f17336",
-     []
-    ],
-    "OWNERS": [
-     "136f6d974686307d2f437c81894ede912ca656a5",
-     []
-    ],
-    "README.md": [
-     "eb1a8d268cebf1f308925cbc1fe30a2478b9fa2c",
-     []
-    ],
-    "concurrent_io": {
-     "operation_helpers.js": [
-      "8ff1ce236afd6994aff50f615b2c7e287763cb7f",
-      []
-     ]
-    },
-    "resources": {
-     "opaque-origin-sandbox.html": [
-      "b3490c3341a892052ccab603722059cf8bca0cd5",
-      []
-     ],
-     "support.js": [
-      "f7821067fbfb92566fd774f609d35412146d88a2",
-      []
-     ]
-    }
-   },
    "navigation-api": {
     "META.yml": [
      "de4f6c9a335bd4b7d5e99d14d37b904fe5d54182",
@@ -370981,6 +371347,10 @@
        "580dc21c19e71cbc51833c5d458ee34bc5e66717",
        []
       ],
+      "navigate-initial-about-blank.html.ini": [
+       "9ae2538c065ce18ef7e1b4bc224012d3483d40bc",
+       []
+      ],
       "navigate-intercept-interrupted.html.ini": [
        "5df966b3082d4dd15b10bad9ef94202e51794b84",
        []
@@ -371109,7 +371479,7 @@
     },
     "scroll-behavior": {
      "after-transition-intercept-handler-modifies.html.ini": [
-      "81269fb15e30009b5547992fbc0ca854a12ca540",
+      "61cb1657f2ae6ad5810ee5721301e6c25fbb872a",
       []
      ]
     },
@@ -371256,7 +371626,7 @@
      ]
     },
     "test-performance-attributes.sub.html.ini": [
-     "d0a1c619e930382e80cc1a15856054973d3f5ca5",
+     "d7b47d0c8300a04573cada3f3f3c7f5d6034a2a2",
      []
     ]
    },
@@ -371732,7 +372102,7 @@
      []
     ],
     "app-can-make-payment.js": [
-     "f55cf21208eb768ccbfe28ec9d939b691cb3c260",
+     "cd27bce02e0920167cf19fce4c150eeadcad949c",
      []
     ],
     "app-change-payment-method.js": [
@@ -371756,7 +372126,7 @@
      []
     ],
     "can-make-payment-event-constructor.https.serviceworker.js": [
-     "01ce642d2342accaeadbbdc1f2f022dabd7a9689",
+     "5b334d9c3aca0a974c9c32063c5b56d2214a89e2",
      []
     ],
     "can-make-payment-event.https-expected.txt": [
@@ -371768,11 +372138,11 @@
      []
     ],
     "idlharness.https.any.js.ini": [
-     "0972e39406968b317da939f18a565875a2bc12bb",
+     "e65a5dbdc49d92c78602e52edcca87b8a51e8ce1",
      []
     ],
     "idlharness.https.any.serviceworker-expected.txt": [
-     "0174ac7ddfc3ff2acd2f6614d00936b38ca15d81",
+     "4e6173b7dd1bfce8515cb71c4e96ebe9c6b58b0f",
      []
     ],
     "idlharness.https.any.sharedworker-expected.txt": [
@@ -372028,7 +372398,7 @@
      []
     ],
     "pending_beacon-sendondiscard.tentative.https.window.js.ini": [
-     "0afa3eb6ba538b31e263ed102d977b93203d55f3",
+     "f2617066b9bde1c31163f7a9ea75abd921327f74",
      []
     ],
     "pending_beacon-sendonhidden.tentative.https.window.js.ini": [
@@ -372125,7 +372495,7 @@
       []
      ],
      "performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini": [
-      "af1aaca9dc47d6b282f5743c5c7ba78d915e7528",
+      "0316ca75e06945c0d66a3102c41aad823e57e5dd",
       []
      ],
      "performance-navigation-timing-same-origin-replace.tentative.window.js.ini": [
@@ -372368,6 +372738,10 @@
       "a54ad04c8585af431bd123c07479959332908ee2",
       []
      ],
+     "unload-allowed-by-default.tentative.window.js.ini": [
+      "6360a03d9b2e0a9a6e94ac5a30cf26dc57b5e32c",
+      []
+     ],
      "vertical-scroll-main-frame-manual.tentative.html.headers": [
       "8d9c01e14835acbc0af74b5b9157a4a8b95243f8",
       []
@@ -375736,7 +376110,7 @@
      []
     ],
     "reporting-isolated-across-navigations.https.sub.html.ini": [
-     "ff4e0da62988e1ce1a8790cd7ccbb7fbc8f8f93e",
+     "a20d66455b19b74ac1f8e1f917dd2bc5e21dec8a",
      []
     ],
     "resources": {
@@ -375843,6 +376217,10 @@
      "4fe4a41af350f4987197ffa3727c3c9a0b40100a",
      []
     ],
+    "callback-exception.html.ini": [
+     "a3b72563f3722036f7798399f92a764cdb659dc2",
+     []
+    ],
     "callback-iframe.html.ini": [
      "516c69436cb5e5697f9f77fd211fd4e8e9b6ad81",
      []
@@ -375876,7 +376254,11 @@
      []
     ],
     "deadline-max-rAF-dynamic.html.ini": [
-     "f827d6250bf610959f743f72b5d29b4f9522627d",
+     "f581f8945f25e23e294a4c6eb69e03b5f16c4599",
+     []
+    ],
+    "deadline-max-rAF.html.ini": [
+     "ff1add8eb5eddf272807a4a0078afbb6ae0a2ece",
      []
     ],
     "deadline-max-timeout-dynamic.html.ini": [
@@ -375984,7 +376366,7 @@
      []
     ],
     "content-type-parsing.html.ini": [
-     "affb928e47ef29adb6b3458452c5fd797915d146",
+     "d64197bdd4f04836640e679b833b75c76e4035ed",
      []
     ],
     "frameset-timing.html": [
@@ -376024,7 +376406,7 @@
      []
     ],
     "nested-context-navigations-iframe.html.ini": [
-     "58d4c1014736b3b59f15fd1d5f7fb57a923ac48b",
+     "1c863b1c874497b9d7e062e1f223c1855f77a256",
      []
     ],
     "nextHopProtocol-is-tao-protected.https.html.ini": [
@@ -376036,7 +376418,7 @@
      []
     ],
     "no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini": [
-     "ff8840b1c4670c311ffe8732818d81842e38a5aa",
+     "95e0598cae0b74bde122230a1afb28ffaeb460fc",
      []
     ],
     "ping-rt-entries-expected.txt": [
@@ -376434,7 +376816,7 @@
      ]
     },
     "response-status-code.html.ini": [
-     "5496d8a03c56938d14b220e199ef0960a2fd1590",
+     "46b003af0cc7885ca6cce572ecfc8ffe22e2e871",
      []
     ],
     "sleep.py": [
@@ -376630,7 +377012,7 @@
      []
     ],
     "idlharness.js": [
-     "bda4a31fb0ee617b53a668325a54bb50ce46e3ba",
+     "46aa11e5ca123c2af1327fce7f9df4a1b7974fdc",
      []
     ],
     "idlharness.js.headers": [
@@ -377493,6 +377875,14 @@
      "d5d199068c5b0465f96ed643af8d7d20a889312e",
      []
     ],
+    "idlharness.window-expected.txt": [
+     "aab2a3eb9b8dff1640f41a1b2707743c8422d7a1",
+     []
+    ],
+    "idlharness.window.js.ini": [
+     "61d4af159f4ab22f4895677658e7e9710bd25491",
+     []
+    ],
     "modify-line-flex-row.tentative-expected.txt": [
      "28340e708604225d83759ee7662da3d4b90bf989",
      []
@@ -378397,7 +378787,7 @@
       []
      ],
      "cache-add.https.any.js.ini": [
-      "6af02218b5b2c5ed518ec57e09f313d9239354bc",
+      "b2db2c56e6b40c7dd380a487f6fdfd51cd292d29",
       []
      ],
      "cache-add.https.any.serviceworker-expected.txt": [
@@ -378655,11 +379045,11 @@
       []
      ],
      "about-blank-replacement.https.html.ini": [
-      "c59a16f3f05b2c5ffde6c477c227fb8ad9b3cf6a",
+      "44673f0a5f7c3367517b39b82019fb80db5262b9",
       []
      ],
      "client-navigate.https.html.ini": [
-      "3c0cf64aa232d2b5c99f8a70eec0ec3298a69ac3",
+      "19fc7b481cdc260032e848ff33dfa8dcef5fb27c",
       []
      ],
      "client-url-of-blob-url-worker.https-expected.txt": [
@@ -380555,7 +380945,7 @@
       []
      ],
      "unregister-immediately-during-extendable-events.https.html.ini": [
-      "5f5d44ef6825889ebe4a83a500c41ac97fecd7c6",
+      "4507f109d4a7c9681a8acaa819e15213d5906200",
       []
      ],
      "unregister-then-register-new-script.https-expected.txt": [
@@ -381367,7 +381757,7 @@
       []
      ],
      "navigation-timing-sizes.https.html.ini": [
-      "53d3be246cc879df8cd5fbba1dfcd751f27eaf33",
+      "ece08a3a9ffc971eddf864869e026cc95c7078a8",
       []
      ],
      "no-vary-search": {
@@ -381449,7 +381839,7 @@
     },
     "prerender": {
      "about-blank-iframes.html.ini": [
-      "555cff455097ed25c106f1cbafc86927235e9801",
+      "aa7329b40fda09970de4cfdfdb3687abdac26c78",
       []
      ],
      "accept-clint-hint-cache.https.html.ini": [
@@ -381469,7 +381859,7 @@
       []
      ],
      "cookies.https.html.ini": [
-      "e492233ce6056e6972e7fcc6cd38da4040e007c7",
+      "5a0542c78c305e8ae7c8882037c529d6cb76fd4f",
       []
      ],
      "credentialed-prerender-opt-in.html.ini": [
@@ -381477,7 +381867,7 @@
       []
      ],
      "cross-origin-iframe.html.ini": [
-      "47d7e2cbb9b011b92293505ba14572be6896b61b",
+      "1cda8fac1349b9f2d2e29f7cb4bd47f30a7991ec",
       []
      ],
      "cross-origin-isolated.https.html.ini": [
@@ -381501,7 +381891,7 @@
       []
      ],
      "csp-script-src-self.html.ini": [
-      "23f1c74d2192d78ec8bfdc0e18f8bc75d497bf36",
+      "148ccc34a2f468be254420f002ae638f46567238",
       []
      ],
      "csp-script-src-unsafe-inline.html.ini": [
@@ -381517,7 +381907,7 @@
       []
      ],
      "iframe-added-post-activation.html.ini": [
-      "6b9bf4fd20cef688bed633eea961bafe048aa419",
+      "639ddc1b8df708a9655f77e69e9ca9fe83c28ed6",
       []
      ],
      "indexeddb.html.ini": [
@@ -381549,7 +381939,7 @@
       []
      ],
      "referrer-policy-from-rules.html.ini": [
-      "c96a9be02b0806a01546d4b2c341b10d0ac3dc43",
+      "d0cdf48e1836c842433cf2c8d731e59a18443330",
       []
      ],
      "referrer-policy-mismatch.html.ini": [
@@ -381901,10 +382291,6 @@
        "f7436e42ce4c2e580e9bb7e95962fb4ba8d98405",
        []
       ],
-      "storage-foundation-access.https.html": [
-       "db965fa928f2ad01285e362d9c8fb7d374acd29c",
-       []
-      ],
       "storage-persist.https.html": [
        "ab5fabd9e3099fbf1fd47f2d01461ec64b4352fa",
        []
@@ -381987,11 +382373,11 @@
       ]
      },
      "response-code-non-successful.html.ini": [
-      "dc41559188572c33f486292f66492bb9956ba088",
+      "4b1e4a64903e62075427fb7902f93c5b28e27eec",
       []
      ],
      "response-code-successful.html.ini": [
-      "a98d0a405b61e8ed2b63e3d52c20cec2c96617ee",
+      "4a3d841c51c3b173582d290b60a027d80f4d59e6",
       []
      ],
      "restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini": [
@@ -382015,7 +382401,7 @@
       []
      ],
      "restriction-bluetooth.tentative.https.html.ini": [
-      "ebc3e375c39a321111cc155ac1f4dd9137b73fb7",
+      "8dacf33334b4b93b78abf35afd65e007ea45c378",
       []
      ],
      "restriction-broadcast-channel.html.ini": [
@@ -382023,7 +382409,7 @@
       []
      ],
      "restriction-dedicated-worker.https.html.ini": [
-      "4aeadc53fb826a843e3a9ceedf09e3d68e77daa4",
+      "9362fa3dfd23e482e1bc3618d11486040fcb6064",
       []
      ],
      "restriction-encrypted-media-unsupported-config.https.html.ini": [
@@ -382039,7 +382425,7 @@
       []
      ],
      "restriction-idle-detection.https.html.ini": [
-      "407d3c40961570600c0c4b973b71285416e8d7ca",
+      "f9c08def1f4bbd3f39648fd0af9d2505164882c8",
       []
      ],
      "restriction-local-file-system-access.https.html.ini": [
@@ -382067,7 +382453,7 @@
       []
      ],
      "restriction-message-boxes.html.ini": [
-      "a19061396a8e8780f34563f70ec2627d23d9f65a",
+      "aeb2a55b80067815a8f7a29f90ebe9516a3f2544",
       []
      ],
      "restriction-midi-sysex.https.html.ini": [
@@ -382091,7 +382477,7 @@
       []
      ],
      "restriction-prompt-by-before-unload.html.ini": [
-      "465f205d31b2c64fbf8abc8dfd6932d663df3e38",
+      "9071c15b87697193ea73217de7e7e382282251e6",
       []
      ],
      "restriction-push.https.html.ini": [
@@ -382103,7 +382489,7 @@
       []
      ],
      "restriction-screen-capture.https.html.ini": [
-      "d5fb1f04fe0f3bcad366f5563e21fbd7616ee3c7",
+      "eae5030bd126293522bc44be0c8a546ec4d529db",
       []
      ],
      "restriction-screen-orientation-lock.https.html.ini": [
@@ -382139,7 +382525,7 @@
       []
      ],
      "restriction-speech-synthesis.html.ini": [
-      "c8b329d54aa3a58e3d46a6bcf37e2690d62df42e",
+      "6984300e6cd9030dfa2b49775fba95f141b0a14c",
       []
      ],
      "restriction-storage-persist.https.html.ini": [
@@ -382151,11 +382537,11 @@
       []
      ],
      "restriction-web-hid.https.html.ini": [
-      "4491024d2e5ae8cf511a63876628a7319d0102cc",
+      "671c261bfcebc4283a2354688253e2257bb58b8a",
       []
      ],
      "restriction-web-locks.https.html.ini": [
-      "eb9f2ef76f3bb3a5a3e5124c258c2ba9d0bb3076",
+      "d55497aebf9840b327c385139090af4fabebdd0b",
       []
      ],
      "restriction-web-nfc.https.html.ini": [
@@ -382167,7 +382553,7 @@
       []
      ],
      "restriction-web-share.https.html.ini": [
-      "9e705b807a47eb8a7ae02e2c4c116679250d9b98",
+      "6a5f19de3f558db0115949b8889e905aa1e511cb",
       []
      ],
      "restriction-web-usb.https.html.ini": [
@@ -382223,31 +382609,23 @@
       []
      ],
      "session-history-subframe-navigation.https.html.ini": [
-      "ff00e55636afe27f0cbbc2f55f6f17bcddde7d85",
+      "84a416f1206f12bd4d47f090e54f4276f6db2fa4",
       []
      ],
      "session-history-subframe-reload.https.html.ini": [
-      "c8f6acf6e919124cbc6201d409da22fa221cfa92",
+      "833b7bd0c827f6b2dc1d36fffffd5b2d9302e22f",
       []
      ],
      "state-and-event.html.ini": [
       "1024f525bd89563ef01ad1c2f508ec36b8f28b41",
       []
      ],
-     "storage-foundation.https-expected.txt": [
-      "8b137891791fe96927ad78e64b0aad7bded08bdc",
-      []
-     ],
-     "storage-foundation.https.html.ini": [
-      "a2e584a5ba4ee75cb1f182211699ba662a268d4d",
-      []
-     ],
      "visibility-state.html.ini": [
       "74ef4a0fc139ef3b8530e09f82b46971cc467f68",
       []
      ],
      "web-database.https.html.ini": [
-      "178759eaa953c1f7a6472ead78acda9f925b3e56",
+      "2d394993c0aea51dfce56d09ddffa0d888ad3a2b",
       []
      ],
      "windowclient-navigate-to-cross-origin-url-on-iframe.https.html.ini": [
@@ -382263,7 +382641,7 @@
       []
      ],
      "workers.html.ini": [
-      "bea4222f27851dccbb90476168b980946342743c",
+      "a986d42ada540991b539b92e5597b2487a0aafc3",
       []
      ]
     }
@@ -382301,14 +382679,6 @@
      "9cb5880aa39ca83ee43e24622c2f18c6970a01e0",
      []
     ],
-    "SpeechSynthesisUtterance-basics.https-expected.txt": [
-     "b298faad294628c96925b89f8cacad395f00f97f",
-     []
-    ],
-    "SpeechSynthesisUtterance-basics.https.html.ini": [
-     "aee42a993935f72c91aa1925101b44466fb1d52e",
-     []
-    ],
     "historical-expected.txt": [
      "126cd0d91f1118a67579f553b521c2f77302e989",
      []
@@ -382373,6 +382743,10 @@
      "8a7d54555472bc0b62505c770b780be2302c79cd",
      []
     ],
+    "partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini": [
+     "286fa1fc75fd08c6e6765651a60bf205d054ed58",
+     []
+    ],
     "resources": {
      "partitioned-estimate-usage-details-caches-helper-frame.html": [
       "13786d7ceafca799bd44c20482085278283303ca",
@@ -386072,7 +386446,7 @@
      []
     ],
     "a-element-xhtml.xhtml.ini": [
-     "0e56240999a61fc731006830a78b69bf32d31ce0",
+     "bdea44bed35037d5e0e848cebbc0e0bba1f232f8",
      []
     ],
     "a-element-xhtml_include=javascript-expected.txt": [
@@ -386084,7 +386458,7 @@
      []
     ],
     "a-element.html.ini": [
-     "42b42a2f205f6715a88c460a185d74b6104ab8bf",
+     "09107dee302b6cb2697e9f933407ecbcaaaf2cd2",
      []
     ],
     "a-element_include=javascript-expected.txt": [
@@ -386096,7 +386470,7 @@
      []
     ],
     "failure.html.ini": [
-     "97ce9874698c763da51039b3e9d709d2bb581aff",
+     "764b2f94de861ef7f831c167e385c7c717af9ffb",
      []
     ],
     "idlharness-shadowrealm.window-expected.txt": [
@@ -386107,6 +386481,10 @@
      "1fb49415db04546f898a6416b2794ee4d1c1e4ad",
      []
     ],
+    "percent-encoding.window.js.ini": [
+     "36d57023fae6a0fbf2d834ab075a368470e527de",
+     []
+    ],
     "resources": {
      "a-element-origin.js": [
       "cb7d4a895c40c456c3f4c0ade050115319ad410c",
@@ -386142,7 +386520,7 @@
      []
     ],
     "toascii.window.js.ini": [
-     "f1a9b16df7d1ee5bef2cd897d4ab8341aa1e0cea",
+     "bfb782f6ca2103ebe15ca2d59c0db841957c0d78",
      []
     ],
     "url-constructor.any.js.ini": [
@@ -386170,7 +386548,7 @@
      []
     ],
     "url-setters-a-area.window.js.ini": [
-     "71ef2b0e1f86b48b1865eadb849054e12797e108",
+     "6dad5c955bc387a704253dfa24ef45d13517becc",
      []
     ],
     "url-setters-a-area.window_include=javascript-expected.txt": [
@@ -386186,7 +386564,7 @@
      []
     ],
     "url-setters-stripping.any.js.ini": [
-     "ad2f860fc3677f34b0f5d29d7f7248d15cd4099b",
+     "68d160ce46ff159431e4f42981317470276bf2b6",
      []
     ],
     "url-setters-stripping.any.worker-expected.txt": [
@@ -386194,7 +386572,7 @@
      []
     ],
     "url-setters.any.js.ini": [
-     "2cdb9571d4477e1a7b3ab2e4d56c4cb80477b6da",
+     "51787b791efbe3762ce212b7427c13170ed2767f",
      []
     ],
     "url-setters.any.worker_include=javascript-expected.txt": [
@@ -386218,7 +386596,7 @@
      []
     ],
     "urlsearchparams-delete.any.js.ini": [
-     "e35316b04d7b07af1c492394667bdc0a1388039d",
+     "8c158fa34ac4150093a4f6cb864d42e3e0f50722",
      []
     ],
     "urlsearchparams-delete.any.worker-expected.txt": [
@@ -386226,11 +386604,11 @@
      []
     ],
     "urlsearchparams-get.any.js.ini": [
-     "9c74fd4fd8d68e549eeced0730dbb78e09125ef9",
+     "3c8d8fe063c7c49fbcb1055276c06a368a83863c",
      []
     ],
     "urlsearchparams-stringifier.any.js.ini": [
-     "6439b79b689574cbf46c27472392e52da9df0484",
+     "e3259c3a89c26e14f9cb23a2047b939b33fdaeb8",
      []
     ]
    },
@@ -386268,7 +386646,7 @@
      []
     ],
     "case-sensitivity.any.js.ini": [
-     "81bad87251b9b211619ad95dc0c42ccdd07b796a",
+     "133dfaa7deb97cadec522c04d9b9f5730aaaf70b",
      []
     ],
     "idlharness-shadowrealm.window-expected.txt": [
@@ -386438,7 +386816,7 @@
      ],
      "constructor": {
       "compile.any.js.ini": [
-       "04173d1fcd126861ce77f457b555b4a5a2a49b2e",
+       "541072a1ad91fe9003b0d4d19928e4196a7727ba",
        []
       ]
      },
@@ -387212,7 +387590,7 @@
      }
     },
     "idlharness.window-expected.txt": [
-     "80e721fefaf6e0784a8b03e8d531c962a36089a5",
+     "c38dda9605a6aec523ada48404a5df60ff4d1c70",
      []
     ],
     "idlharness.window.js.ini": [
@@ -387240,7 +387618,7 @@
      },
      "Animation": {
       "finished.html.ini": [
-       "1311a6a60d04d6b5f64dd34510156105b8ae9754",
+       "b8cc7340df3faf93b73bab05ed350ced950ab260",
        []
       ]
      },
@@ -387460,7 +387838,7 @@
        []
       ],
       "sibling-iframe-timeline.html.ini": [
-       "fda793bb285bae3f6cddefbd47036b789da06e18",
+       "f045b6a37708965347f53163dac9716363838a90",
        []
       ],
       "timelines.html.ini": [
@@ -387867,7 +388245,7 @@
       []
      ],
      "resource-timing-attributes-consistent.https.tentative.sub.html.ini": [
-      "a0a908d6947b5061a2061c9692b18ad18b67e2c7",
+      "46f534798aa0d34229da9cfca960f7f2b6c242d6",
       []
      ],
      "resources": {
@@ -387885,7 +388263,7 @@
       ]
      },
      "reuse-web-bundle-resource.https.tentative.html.ini": [
-      "9c8170d687145a60ee382ebe341035c0d6883a15",
+      "750959d85f19b8ff6e7e3536e7e8b4d4f720af2f",
       []
      ]
     },
@@ -387939,7 +388317,7 @@
       []
      ],
      "sharedworker-multiple.tentative.https.html.ini": [
-      "d8bf264011d4080217ef892d547ee92890c3aed3",
+      "169cb7017e6155b39330d75a57e12438d22bcd2f",
       []
      ]
     },
@@ -388246,7 +388624,7 @@
      },
      "the-analysernode-interface": {
       "test-analyser-output.html.ini": [
-       "9673c067ce940429c2761735c2f54f3ac6212694",
+       "46c0f33d523445e66925373e5ff601b757d07600",
        []
       ]
      },
@@ -388347,6 +388725,10 @@
        "5574a563d6f48095e521ecc4aaf7060541d3c725",
        []
       ],
+      "audioworkletnode-output-channel-count.https.html.ini": [
+       "97f1aa6933157db4fc4564d7095f4c274919d1ec",
+       []
+      ],
       "audioworkletprocessor-promises.https-expected.txt": [
        "ecc24fe05e8a87fcd79a9de92e21f7e38207ca0f",
        []
@@ -388508,10 +388890,6 @@
       "active-processing.https.html.ini": [
        "c45c45fe5e591f0dc58cabb2654573f2813efe78",
        []
-      ],
-      "convolver-response-4-chan.html.ini": [
-       "9c0d59a77e7824048b91f56b2f8d52d4e5c76459",
-       []
       ]
      },
      "the-delaynode-interface": {
@@ -388526,11 +388904,7 @@
      },
      "the-mediaelementaudiosourcenode-interface": {
       "mediaElementAudioSourceToScriptProcessorTest.html.ini": [
-       "93fe64730d11fed13a1e159500ac6ed2bbba250a",
-       []
-      ],
-      "no-cors.https.html.ini": [
-       "af268033c7d6d8d28ea340ce3a1dfe37ad488677",
+       "a30e93bec60672e5c3ef628de095c7d7f052633b",
        []
       ]
      }
@@ -389642,6 +390016,10 @@
      []
     ],
     "broadcastchannel": {
+     "cross-partition.https.tentative.html.ini": [
+      "2362edfb754c767805ed68346edaa8a25cce04ae",
+      []
+     ],
      "opaque-origin-expected.txt": [
       "3a5c2ffe73c81c2ab474909924caf7197bc2cc92",
       []
@@ -389650,6 +390028,10 @@
       "78a2399e152728ede2bb513b81091cbdee406093",
       []
      ],
+     "origin.window.js.ini": [
+      "df1f5ad7646d059bae0d9e4c1b34180c99a3e8e3",
+      []
+     ],
      "resources": {
       "cross-origin.html": [
        "5078b6fc8e46f556fe1b86c7e1aa5a141c132be1",
@@ -389717,7 +390099,7 @@
       []
      ],
      "worker-post-after-close.any.js.ini": [
-      "be207b65f5e4c4892a8ea9cd2348035548674423",
+      "38e85428689067832d346340f862f98b5478bf08",
       []
      ]
     },
@@ -389735,7 +390117,7 @@
       []
      ],
      "broadcastchannel-incumbent.sub.html.ini": [
-      "b7ed439511b5a8337fc4d9c8cf7de759e0ea3891",
+      "6742e10278a81a61ec2e9df0addcb894fba30326",
       []
      ],
      "support": {
@@ -389860,15 +390242,15 @@
      []
     ],
     "idlharness.https.any-expected.txt": [
-     "ab8aed910df143d7f68e3bd1152b1d81f50b5584",
+     "858b47cb4486a976a4c03eb06d0ce71c1e82528a",
      []
     ],
     "idlharness.https.any.js.ini": [
-     "38d8bc33f28fe39696f388385484ffb6badec6e3",
+     "4c1b1e45742e3bb6e941f3ddf7febfa09a951fdd",
      []
     ],
     "idlharness.https.any.worker-expected.txt": [
-     "21d0d61afc33675f6780646bbefa71ca6c8728e6",
+     "a4befa254796a510009d0b0ad9fcafe85eefdb4b",
      []
     ],
     "resources": {
@@ -390060,7 +390442,7 @@
      []
     ],
     "RTCPeerConnection-onicecandidateerror.https.html.ini": [
-     "ba907ae99240675e340754dc91272e55efab18bc",
+     "14dff26b362efb1a35516e5684a2813747ea2afd",
      []
     ],
     "RTCPeerConnection-operations.https.html.ini": [
@@ -390722,11 +391104,11 @@
      []
     ],
     "supported-stats.https-expected.txt": [
-     "f16996062400725e983d7034d007d6e5a929c395",
+     "fe1bbcffbec81d71ee377f232f5b392e23edd6e3",
      []
     ],
     "supported-stats.https.html.ini": [
-     "1b34d1184b152bcae16f5256e0f9525a787255a5",
+     "a68414e979610f469861df570d128ca7cd5f9cf2",
      []
     ]
    },
@@ -391198,6 +391580,10 @@
      },
      "WebSocket": {
       "bufferedAmount": {
+       "bufferedAmount-defineProperty-setter.html.ini": [
+        "fa43da553b335be7d3bf92bc193903ba0368ae2f",
+        []
+       ],
        "bufferedAmount-getting_wpt_flags=h2-expected.txt": [
         "0eef06727c15c4c2b3cab9caa943d822ad85058b",
         []
@@ -391366,7 +391752,7 @@
        []
       ],
       "close.any.js.ini": [
-       "381caf018a44cbf4f4e93a35e8fc96bd229c3229",
+       "2dc8a8214aefa60c11c782de446684c23651a54d",
        []
       ],
       "constructor.any.serviceworker_wpt_flags=h2-expected.txt": [
@@ -392436,10 +392822,6 @@
         "d4bd2b74c2db0e560114109af960c7f38cb38575",
         []
        ],
-       "audio_has_no_subtitles.html.ini": [
-        "6a131e93824e3d10701a21726ed463f487d76d3d",
-        []
-       ],
        "background.png": [
         "6d16cc84c4dd3b8777bd83d97888eaf8d351f6b5",
         []
@@ -394910,7 +395292,7 @@
      []
     ],
     "events_referenceSpace_reset_inline.https.html.ini": [
-     "1ce49284877fef1bb51c9f36344d5b108ffe05c9",
+     "00c1d56bf0b835c4ab75baee491703b102791134",
      []
     ],
     "events_session_select.https.html.ini": [
@@ -395106,7 +395488,7 @@
      []
     ],
     "webxr_feature_policy.https.html.ini": [
-     "aca8d11e37fdb151b89e48366c881f580db8854e",
+     "3d63abd4392aee449927491e8455a99ed9b2a2fc",
      []
     ],
     "xrBoundedReferenceSpace_updates.https.html.ini": [
@@ -395266,7 +395648,7 @@
      []
     ],
     "xrSession_requestAnimationFrame_getViewerPose.https.html.ini": [
-     "13ee403018cff6c6a876a924f21469c64bebaf7a",
+     "fa08ed77a357690955e996efebc11d38a94595b4",
      []
     ],
     "xrSession_requestAnimationFrame_timestamp.https.html.ini": [
@@ -395278,7 +395660,7 @@
      []
     ],
     "xrSession_requestReferenceSpace_features.https.html.ini": [
-     "819352f75170ff7890e8f4299266d5e4e7158570",
+     "81dc9682bc0745cce68aeddc332af318428ccd6c",
      []
     ],
     "xrSession_requestSessionDuringEnd.https.html.ini": [
@@ -395691,10 +396073,6 @@
      "7459f592861bee94ea55c66b080de46afc0a6b7a",
      []
     ],
-    "data-url-shared.html.ini": [
-     "298751cfede5f6617127beeb81b91edbfa0c1477",
-     []
-    ],
     "dedicated-worker-from-blob-url.window.js.ini": [
      "282999e38b34fbb255ff0a9021e8419d9f039d02",
      []
@@ -395704,7 +396082,7 @@
      []
     ],
     "dedicated-worker-in-data-url-context.window.js.ini": [
-     "8e3ebef3e6e51467127721e825be154a6e3bcac3",
+     "491bbc07d1a0296cc85e4779c53f2d568be5445a",
      []
     ],
     "dedicated-worker-parse-error-failure-expected.txt": [
@@ -395801,7 +396179,7 @@
         []
        ],
        "setInterval.html.ini": [
-        "61d568f712814e4c0d0f4b085cc2bd14e93ab916",
+        "8cb5e5ea82fb3089324fe052166e411433315e4f",
         []
        ],
        "setInterval.js": [
@@ -395830,10 +396208,6 @@
         "1c6515f8e201ef9439a48434033acafaecd68517",
         []
        ],
-       "redirect.html.ini": [
-        "3a0f10f26cb7bf5f58f70a9cb9691f6886a5421a",
-        []
-       ],
        "redirect.js": [
         "2db48544a2d7d7f55201043e73297283cd99c263",
         []
@@ -395896,10 +396270,6 @@
         "a96c08844202e430201d9b9e32f6fef6b36f46ac",
         []
        ],
-       "003.html.ini": [
-        "a724a8c2de86b803ca7aaec68b9da645014b4a9b",
-        []
-       ],
        "003.js": [
         "e64e4e2179f0fb51347eea052f889b025af8e70a",
         []
@@ -395922,6 +396292,10 @@
         "20dd1edbee379463379621a420c8042f1c71f8dd",
         []
        ],
+       "003.html.ini": [
+        "df5625513ab314bd0b1b1468fd54a697f69f4879",
+        []
+       ],
        "003.js": [
         "6e378ef20fff1485d9e374b8bb5747d3dd12f965",
         []
@@ -395986,10 +396360,6 @@
         "a17a9a3a12cefe883a5d4dee4d5a45bef120d050",
         []
        ],
-       "report-error-cross-origin.sub.any.js.ini": [
-        "fb1eade954f9eca22934300938d415d4e2ec149a",
-        []
-       ],
        "report-error-helper.js": [
         "7fc6d0dd64bc82527621a90f848d080a195ed212",
         []
@@ -396543,6 +396913,10 @@
        "68d7e91d451e6143ef5a68c2686b785ba178e1f0",
        []
       ],
+      "003.html.ini": [
+       "df5625513ab314bd0b1b1468fd54a697f69f4879",
+       []
+      ],
       "003.js": [
        "1a9c5a7ee816a95c8bbd8510ea234c917d8df2f0",
        []
@@ -396576,7 +396950,7 @@
      []
     ],
     "shared-worker-in-data-url-context.window.js.ini": [
-     "5f4813ffa460d69a9f767322ae29502df3cdc1c1",
+     "e0d2ea3da3267420c2716d5c8b4fc826e331f0c1",
      []
     ],
     "shared-worker-parse-error-failure.html.ini": [
@@ -397007,6 +397381,10 @@
      "2fad3599d5cf2b189b422bbe2dd4ff9a2f134817",
      []
     ],
+    "get-decode-split.html.ini": [
+     "5afb0df2749d98a18d59972e8a6d999e325b6e25",
+     []
+    ],
     "multiple.html.ini": [
      "00af5bf1a025b0dd72bbf0b8b1bebe1a2f64af30",
      []
@@ -397732,7 +398110,7 @@
      []
     ],
     "send-timeout-events.htm.ini": [
-     "3811a2d18320f59f6f50d6850af08c226d38ae09",
+     "7f24ac7b6faf42128c982518b866ad564eb9a103",
      []
     ],
     "setrequestheader-combining.window-expected.txt": [
@@ -414545,6 +414923,41 @@
       ]
      }
     },
+    "getAvailability": {
+     "reject_opaque_origin.https.html": [
+      "8745fc9551bba2148632563b5f125b21e2d1427c",
+      [
+       null,
+       {}
+      ]
+     ],
+     "sandboxed_iframe.https.window.js": [
+      "c5e3d1e89038cf99bc7553ca5014e48b215dbc6d",
+      [
+       "bluetooth/getAvailability/sandboxed_iframe.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver-vendor.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-test.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-fake-devices.js"
+         ]
+        ]
+       }
+      ]
+     ]
+    },
     "getDevices": {
      "granted-devices-with-services.https.window.js": [
       "3228543617decdc9a213883d650ba33ffd9b90c1",
@@ -414598,6 +415011,13 @@
        }
       ]
      ],
+     "reject_opaque_origin.https.html": [
+      "64b2808fbce3663ee447b8ecd3d00b6fc07a73f7",
+      [
+       null,
+       {}
+      ]
+     ],
      "returns-same-bluetooth-device-object.https.window.js": [
       "81c0f6a97e947c9a469ca74a180d595f493561e2",
       [
@@ -414623,6 +415043,32 @@
         ]
        }
       ]
+     ],
+     "sandboxed_iframe.https.window.js": [
+      "22cfd17d466489b37c20e3148fb6c3f566f52263",
+      [
+       "bluetooth/getDevices/sandboxed_iframe.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver-vendor.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-test.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-fake-devices.js"
+         ]
+        ]
+       }
+      ]
      ]
     },
     "idl": {
@@ -415612,7 +416058,7 @@
       ]
      },
      "cross-origin-iframe.sub.https.window.js": [
-      "a5e6fac25e3bf2156002c21fac7bd2d46f6983f5",
+      "d802a862791e98e5a8694e34bd4fbaf554b9f9b5",
       [
        "bluetooth/requestDevice/cross-origin-iframe.sub.https.window.html",
        {
@@ -415845,6 +416291,13 @@
        }
       ]
      ],
+     "reject_opaque_origin.https.html": [
+      "df348dd39e0b62cb38605b94e0c98e4e155c1dbc",
+      [
+       null,
+       {}
+      ]
+     ],
      "request-from-iframe.https.window.js": [
       "d3f3cf897ff6f4eb97253f63843db888824a54fa",
       [
@@ -415872,7 +416325,7 @@
       ]
      ],
      "request-from-sandboxed-iframe.https.window.js": [
-      "17a9da333a5d5c8f4f5af2932ad76f01e0408475",
+      "2101cf0d6b747836f60d04c07774e3a100efed1f",
       [
        "bluetooth/requestDevice/request-from-sandboxed-iframe.https.window.html",
        {
@@ -415923,6 +416376,32 @@
        }
       ]
      ],
+     "sandboxed_iframe.https.window.js": [
+      "e9192a9305b14763d3cabe7c6ddfb3b38f1015da",
+      [
+       "bluetooth/requestDevice/sandboxed_iframe.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver-vendor.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-test.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-fake-devices.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "single-filter-single-service.https.window.js": [
       "67afad0b930c7930614f3ed17a0db78e1aa20d69",
       [
@@ -415950,6 +416429,41 @@
       ]
      ]
     },
+    "requestLEScan": {
+     "reject_opaque_origin.https.html": [
+      "272c5aa760cf7f5bedc24e2d652d68164ab353d3",
+      [
+       null,
+       {}
+      ]
+     ],
+     "sandboxed_iframe.https.window.js": [
+      "32d1e74b778d9932b5104824b69cf21cf6a3ff6b",
+      [
+       "bluetooth/requestLEScan/sandboxed_iframe.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver-vendor.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-test.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-fake-devices.js"
+         ]
+        ]
+       }
+      ]
+     ]
+    },
     "server": {
      "connect": {
       "connection-succeeds.https.window.js": [
@@ -438348,6 +438862,13 @@
         {}
        ]
       ],
+      "font-style-interpolation.html": [
+       "4666025d545860405b62a2571a0b74e3a2a06d8a",
+       [
+        null,
+        {}
+       ]
+      ],
       "font-variation-settings-composition.html": [
        "58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
        [
@@ -446714,7 +447235,7 @@
       ]
      ],
      "registered-property-cssom.html": [
-      "95c4c17b598be2109227aa0cde6e02d9e6b1147d",
+      "6231e27e770a8d68ce408ddffcda29196c74e24a",
       [
        null,
        {}
@@ -453078,6 +453599,13 @@
         {}
        ]
       ],
+      "text-align-match-parent-002.html": [
+       "19596e36aff5c532efae6fa81dc5c72887947cb6",
+       [
+        null,
+        {}
+       ]
+      ],
       "text-align-webkit-match-parent.html": [
        "aaf481a9d1e4bd6e9dc950584a9dfb4938614f3f",
        [
@@ -455817,7 +456345,7 @@
         ]
        ],
        "animation-duration.html": [
-        "d31f165dff49223e3132249abe8e7193dd1c2b77",
+        "fa78ece016dec262d5ab5d3272ac0ed9f4addeab",
         [
          null,
          {}
@@ -455831,7 +456359,7 @@
         ]
        ],
        "animation-iteration-count.html": [
-        "4ff575612e06806077fffa08edd75c9159fc2ae5",
+        "627b281c7fd8b1c970de3cd06dac850d9b43b807",
         [
          null,
          {}
@@ -455957,7 +456485,7 @@
         ]
        ],
        "block-size.html": [
-        "d1a1e0957755af2d199b5abf2e1df521bdc9eb9b",
+        "311df4d422796c298485045884a8a32c42dddc2a",
         [
          null,
          {}
@@ -456293,7 +456821,7 @@
         ]
        ],
        "flex-basis.html": [
-        "5795abbb714c08591d8e83a80cde52d916862bca",
+        "de0d62ee6b73ae897d189d32825faadb70d52876",
         [
          null,
          {}
@@ -456314,14 +456842,14 @@
         ]
        ],
        "flex-grow.html": [
-        "9c04ad30c865c5218f60b89752f64dbd90bdaeee",
+        "bee9e56eab7b36a2111a04f0a578d2858e4ca8f4",
         [
          null,
          {}
         ]
        ],
        "flex-shrink.html": [
-        "30ee7db84d810536bc00e9e8f66e94f80b23c2a3",
+        "3992fa4749bb569cf152bc790fa2bfff6bed4adf",
         [
          null,
          {}
@@ -456412,7 +456940,7 @@
         ]
        ],
        "font-size-adjust.html": [
-        "71cb54c7272896313de39551f3cb5029b4fc7de9",
+        "be065987ce13fc09abf527fe3af473b25394092e",
         [
          null,
          {}
@@ -456426,7 +456954,7 @@
         ]
        ],
        "font-stretch.html": [
-        "3871ff3e04fdd1bbf9fb55fa7d899e239995e311",
+        "40cffaf04495af0a59386e37ef1e2e54e2f9a41c",
         [
          null,
          {}
@@ -456517,7 +457045,7 @@
         ]
        ],
        "gap.html": [
-        "e07d1cd54d514b7b84867fdfafbe8f1720fdd88e",
+        "20ff5816a7c04b3868430e03d66a7dd6b17f3675",
         [
          null,
          {}
@@ -456629,7 +457157,7 @@
         ]
        ],
        "letter-spacing.html": [
-        "ccbf0a0e6ac6739617d4ea1dbee1d795427ae918",
+        "9d313c13955a385920a60fc8e836bf8b296c6e95",
         [
          null,
          {}
@@ -456678,7 +457206,7 @@
         ]
        ],
        "logical.html": [
-        "9a2b208b3832d02c49793a24d0c21a84f4e0e62b",
+        "2e451d6aa99c3a63c463eeb889cd4ddbab1db36c",
         [
          null,
          {}
@@ -457007,7 +457535,7 @@
         ]
        ],
        "shape-margin.html": [
-        "ca517bbef44e891f43006eb07ccf180852b32ad9",
+        "60adc7aff50d60355cea232a81d73869d36cbbc1",
         [
          null,
          {}
@@ -457049,7 +457577,7 @@
         ]
        ],
        "stroke-dasharray.html": [
-        "6e8fdc4a8014eaae1b96579f83cbc398bfb463bf",
+        "6c3731cc48063961395b6e729eb7e95cc148e925",
         [
          null,
          {}
@@ -457399,7 +457927,7 @@
         ]
        ],
        "width.html": [
-        "29b3382b1dd4a2eabf6f8b9a46c94c82060fdb34",
+        "9f15043733f8919f880d81d31c9b49b87788e933",
         [
          null,
          {}
@@ -464080,6 +464608,13 @@
        {}
       ]
      ],
+     "only-of-type.html": [
+      "28a0ae7655b29af9bb0a50a5f188eeb8b7e57d35",
+      [
+       null,
+       {}
+      ]
+     ],
      "parsing": {
       "parse-attribute.html": [
        "a8fcfb24f5a9b1350adda6e59af814f1111325c1",
@@ -536090,11 +536625,12 @@
     "semantics": {
      "disabled-elements": {
       "disabled-event-dispatch.tentative.html": [
-       "c5e34a2341b4108c3ba43d683c2920f4ab179ad7",
+       "e2b8846fc3dbe982b614e81c83fdfa99280bb650",
        [
         null,
         {
-         "testdriver": true
+         "testdriver": true,
+         "timeout": "long"
         }
        ]
       ],
@@ -536106,7 +536642,7 @@
        ]
       ],
       "event-propagate-disabled.tentative.html": [
-       "0c00cc8db078b027acca3eec4b70d4092c19df08",
+       "9c8642d10f99b16d41401f28489104d4b4a651cf",
        [
         null,
         {
@@ -544405,7 +544941,7 @@
        ]
       ],
       "popover-attribute-basic.tentative.html": [
-       "1bc32dbace31840ddb7d9f7bf3aedc9169067df2",
+       "d16e34f896e7bdc258595dda60319907fccb1df5",
        [
         null,
         {
@@ -544436,7 +544972,7 @@
        ]
       ],
       "popover-focus-2.tentative.html": [
-       "e0effbd866c4f512b87599931d539e460b56b9c9",
+       "569b633886cf6a77546a5bd6680b339ff05db1c3",
        [
         null,
         {
@@ -544479,7 +545015,7 @@
        ]
       ],
       "popover-light-dismiss.tentative.html": [
-       "83573c86f06f838a8d810e01c4d9f95eee256526",
+       "3c48bd9274e88e61d023071610d765b83dd68f4b",
        [
         null,
         {
@@ -563658,2442 +564194,6 @@
      ]
     ]
    },
-   "native-io": {
-    "capacity_allocation_async_basic.tentative.https.any.js": [
-     "93e2e9873a8512464344949680f318c78efa4df7",
-     [
-      "native-io/capacity_allocation_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Acquiring, displaying and releasing capacity."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Acquiring, displaying and releasing capacity."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Acquiring, displaying and releasing capacity."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Acquiring, displaying and releasing capacity."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "capacity_allocation_async_failure_handling.tentative.https.any.js": [
-     "8bbeef5f29cbf69632b92c3487b035d668d1e949",
-     [
-      "native-io/capacity_allocation_async_failure_handling.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failure handling for capacity allocation."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_failure_handling.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failure handling for capacity allocation."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_failure_handling.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failure handling for capacity allocation."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/capacity_allocation_async_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failure handling for capacity allocation."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "capacity_allocation_sync_basic.tentative.https.any.js": [
-     "3ec2db383efda674f5c1df16c964d57fd20da5c8",
-     [
-      "native-io/capacity_allocation_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Acquiring, displaying and releasing capacity."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "capacity_allocation_sync_failure_handling.tentative.https.any.js": [
-     "82ba65890b634b74fde17ad7fcd67904912d3d6a",
-     [
-      "native-io/capacity_allocation_sync_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failure handling for capacity allocation."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "close_async.tentative.https.any.js": [
-     "6913762e0cc191729628ab6bd508eb03ac1fe276",
-     [
-      "native-io/close_async.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: close()."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/close_async.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: close()."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/close_async.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: close()."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/close_async.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: close()."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ]
-    ],
-    "close_sync.tentative.https.any.js": [
-     "a063842451f8b7a32158de2ea41d313aae942d26",
-     [
-      "native-io/close_sync.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: close()."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "concurrent_io": {
-     "concurrent_io_flush_async.tentative.https.any.js": [
-      "ea51f878ad05b3d66f730a634a1fa4537f89f33e",
-      [
-       "native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while flush is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.serviceworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while flush is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.sharedworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while flush is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.worker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while flush is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ]
-     ],
-     "concurrent_io_getLength_async.tentative.https.any.js": [
-      "e34018507efd1f442c17071fddc650c01b022381",
-      [
-       "native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while getLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.serviceworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while getLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.sharedworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while getLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.worker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while getLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ]
-        ]
-       }
-      ]
-     ],
-     "concurrent_io_read_async.tentative.https.any.js": [
-      "a680ff5c8f46f12dd683a1fd9337cef70d9a624c",
-      [
-       "native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while read is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.serviceworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while read is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.sharedworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while read is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.worker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while read is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ]
-     ],
-     "concurrent_io_setLength_async.tentative.https.any.js": [
-      "39b42163562f7312df260c3c4374ef2514656cc2",
-      [
-       "native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while setLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.serviceworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while setLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.sharedworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while setLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.worker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent io while setLength is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ]
-     ],
-     "concurrent_io_write_async.tentative.https.any.js": [
-      "e71186d31169eebf172258742051288fbbb69ae6",
-      [
-       "native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while write is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.serviceworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while write is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.sharedworker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while write is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ],
-      [
-       "native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.worker.html",
-       {
-        "script_metadata": [
-         [
-          "title",
-          "NativeIO API: Concurrent IO while write is resolving."
-         ],
-         [
-          "global",
-          "window,worker"
-         ],
-         [
-          "script",
-          "operation_helpers.js"
-         ],
-         [
-          "script",
-          "../resources/support.js"
-         ],
-         [
-          "timeout",
-          "long"
-         ]
-        ],
-        "timeout": "long"
-       }
-      ]
-     ]
-    },
-    "delete_async_basic.tentative.https.any.js": [
-     "149ce2a63f4fbffd0bccf2e31dad5fe3877c4e3e",
-     [
-      "native-io/delete_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File deletion is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/delete_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File deletion is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/delete_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File deletion is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/delete_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File deletion is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "delete_sync_basic.tentative.https.any.js": [
-     "49a8292c55c0d9e59c40515612867e80c1a6c3db",
-     [
-      "native-io/delete_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: File deletion is reflected in listing."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detach_iframe_during_delete.https.window.js": [
-     "773421652a812c70e35a42f91bc5c8513d4293a0",
-     [
-      "native-io/detach_iframe_during_delete.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: delete() does not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detach_iframe_during_getAll.https.window.js": [
-     "e5e90371953634f1d6af9199e19e9f005153f155",
-     [
-      "native-io/detach_iframe_during_getAll.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: getAll() does not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detach_iframe_during_open.https.window.js": [
-     "0c6625901adf90db14ed2efa4f170f1f923f1cf1",
-     [
-      "native-io/detach_iframe_during_open.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: open() does not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detach_iframe_during_releaseCapacity.https.window.js": [
-     "a7672971306e7307b4dfea449ea0914dd1bea494",
-     [
-      "native-io/detach_iframe_during_releaseCapacity.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: releaseCapacity() does not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detach_iframe_during_requestCapacity.https.window.js": [
-     "4585c89ab64be085d4508ccf5dc3c9f2ec19e8ff",
-     [
-      "native-io/detach_iframe_during_requestCapacity.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: requestCapacity() does not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "detached_iframe.https.window.js": [
-     "1f34ab0d59bc16bbb1a6a03ba9222d64c03f656a",
-     [
-      "native-io/detached_iframe.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Do not crash in detached iframes."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "flush_async_basic.tentative.https.any.js": [
-     "eb091d237bd3a87c98470f51c70e08707adf1eed",
-     [
-      "native-io/flush_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Flushed data is read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/flush_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Flushed data is read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/flush_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Flushed data is read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/flush_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Flushed data is read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ]
-    ],
-    "flush_sync_basic.tentative.https.any.js": [
-     "8d125e2908ec8a1a524fe6f4f1bff53edee7ca91",
-     [
-      "native-io/flush_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Flushed data is read back."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "getLength_setLength_async_basic.tentative.https.any.js": [
-     "5c6f231cba207f087cec4b0a8195f20b3c8965ea",
-     [
-      "native-io/getLength_setLength_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Assigned length is observed back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/getLength_setLength_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Assigned length is observed back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/getLength_setLength_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Assigned length is observed back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/getLength_setLength_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Assigned length is observed back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "getLength_setLength_sync_basic.tentative.https.any.js": [
-     "196b20bfac83a7fe9bc6213b22329109140346b3",
-     [
-      "native-io/getLength_setLength_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Assigned length is observed back."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "opaque_origin.https.window.js": [
-     "d3d8597c54ca73731c13d8e0c351662249079f7a",
-     [
-      "native-io/opaque_origin.https.window.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Interface is not exposed in opaque origins."
-        ],
-        [
-         "global",
-         "window"
-        ]
-       ]
-      }
-     ]
-    ],
-    "open_async_failure_handling.tentative.https.any.js": [
-     "de924e4dc066d5833af4403d51791cba0a466580",
-     [
-      "native-io/open_async_failure_handling.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of open are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_async_failure_handling.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of open are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_async_failure_handling.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of open are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_async_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of open are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "open_getAll_async_basic.tentative.https.any.js": [
-     "6cb7704003c83bacf09d7ffa48999a0d188f6cbb",
-     [
-      "native-io/open_getAll_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File creation is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_getAll_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File creation is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_getAll_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File creation is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/open_getAll_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File creation is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "open_getAll_sync_basic.tentative.https.any.js": [
-     "dd7d029fb0d3fbfae4ceea20b0b1ed8565794a71",
-     [
-      "native-io/open_getAll_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: File creation is reflected in listing."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "open_sync_failure_handling.tentative.https.any.js": [
-     "cfef0f4db456aa3c15029445d4935695095c4584",
-     [
-      "native-io/open_sync_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Failures of open are properly handled."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_async_basic.tentative.https.any.js": [
-     "ef07dfca533ee89ee1facde6916b2e4b42eaf2b1",
-     [
-      "native-io/read_write_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Written bytes are read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Written bytes are read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Written bytes are read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Written bytes are read back."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_async_buffer_offset.tentative.https.any.js": [
-     "a487771065f18dbd588a22fd60dbf1adc5d99e24",
-     [
-      "native-io/read_write_async_buffer_offset.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/write correctly offsets into the source buffer"
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_buffer_offset.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/write correctly offsets into the source buffer"
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_buffer_offset.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/write correctly offsets into the source buffer"
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_buffer_offset.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/write correctly offsets into the source buffer"
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_async_bufferlength.tentative.https.any.js": [
-     "7424d24e5231fc5bafc3413cf68232773acfc883",
-     [
-      "native-io/read_write_async_bufferlength.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/Write correctly handle small buffer lengths."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_bufferlength.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/Write correctly handle small buffer lengths."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_bufferlength.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/Write correctly handle small buffer lengths."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_async_bufferlength.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/Write correctly handle small buffer lengths."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_correct_arraybufferview_async_basic.tentative.https.any.js": [
-     "46bcc8d5bd85dbb60edc4e824f6bc729f85582f4",
-     [
-      "native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Transferred buffer is of the same type as input."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Transferred buffer is of the same type as input."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Transferred buffer is of the same type as input."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Transferred buffer is of the same type as input."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_correct_arraybufferview_sync_basic.tentative.https.any.js": [
-     "82c21ff016ada626a0bf23d0c565cfbdad70fc2d",
-     [
-      "native-io/read_write_correct_arraybufferview_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Transferred buffer is of the same type as input."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_sync_basic.tentative.https.any.js": [
-     "d1db256ba30a58515c097a483cd8a72ca2c43eae",
-     [
-      "native-io/read_write_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Written bytes are read back."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_sync_buffer_offset.tentative.https.any.js": [
-     "a4b651eaa2c24f1f5b4afdb614204c67a338d457",
-     [
-      "native-io/read_write_sync_buffer_offset.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Read/write correctly offsets into the source buffer"
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "read_write_sync_bufferlength.tentative.https.any.js": [
-     "3f45f2702c3152c5ffea4c0caba6abc482f2188e",
-     [
-      "native-io/read_write_sync_bufferlength.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Read/Write correctly handle small buffer lengths."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "rename_async_basic.tentative.https.any.js": [
-     "47c9ffc6b919417dfbc47499b8029d13788cd8bf",
-     [
-      "native-io/rename_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File renaming is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/rename_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File renaming is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/rename_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File renaming is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/rename_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: File renaming is reflected in listing."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "rename_async_failure_handling.tentative.https.any.js": [
-     "59f6f83070eb4a1492252e17fdeee8ccaab81fe4",
-     [
-      "native-io/rename_async_failure_handling.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of rename are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/rename_async_failure_handling.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of rename are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/rename_async_failure_handling.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of rename are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ],
-     [
-      "native-io/rename_async_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Failures of rename are properly handled."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ],
-        [
-         "timeout",
-         "long"
-        ]
-       ],
-       "timeout": "long"
-      }
-     ]
-    ],
-    "rename_sync_basic.tentative.https.any.js": [
-     "e5183143c3b1179fc0812c799a209cd666193a6b",
-     [
-      "native-io/rename_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: File renaming is reflected in listing."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "rename_sync_failure_handling.tentative.https.any.js": [
-     "b113741981f465ce31e801777402061822b4afc1",
-     [
-      "native-io/rename_sync_failure_handling.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Failures of rename are properly handled."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "setLength_bounds_async.tentative.https.any.js": [
-     "8882bf2562f7d85097aaf8b75d747d987e5bf94d",
-     [
-      "native-io/setLength_bounds_async.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Out-of-bounds errors for setLength."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_bounds_async.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Out-of-bounds errors for setLength."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_bounds_async.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Out-of-bounds errors for setLength."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_bounds_async.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Out-of-bounds errors for setLength."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "setLength_bounds_sync.tentative.https.any.js": [
-     "99b4452be64fa59f06190121aaca7114dcfd66ff",
-     [
-      "native-io/setLength_bounds_sync.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: Out-of-bounds errors for setLength."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "setLength_capacity_allocation_async.tentative.https.any.js": [
-     "7ed3984f02aa913c334b8d2d74015c996727122f",
-     [
-      "native-io/setLength_capacity_allocation_async.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: SetLength respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_capacity_allocation_async.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: SetLength respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_capacity_allocation_async.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: SetLength respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/setLength_capacity_allocation_async.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: SetLength respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "setLength_capacity_allocation_sync.tentative.https.any.js": [
-     "f8cbb8de8db6f3a6fb4e9a2f17f4277e0cf2d643",
-     [
-      "native-io/setLength_capacity_allocation_sync.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: SetLength respects the allocated capacities."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "trustworthy_origin_failure.tentative.http.any.js": [
-     "42637160937582a13a06137da70b23ce70c3c26b",
-     [
-      "native-io/trustworthy_origin_failure.tentative.http.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Interface is not exposed in untrustworthy origin."
-        ],
-        [
-         "global",
-         "window,dedicatedworker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/trustworthy_origin_failure.tentative.http.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Interface is not exposed in untrustworthy origin."
-        ],
-        [
-         "global",
-         "window,dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "write_capacity_allocation_async.tentative.https.any.js": [
-     "91544fe7cf37ba747e29de10f79220a9496d7385",
-     [
-      "native-io/write_capacity_allocation_async.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Write respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_capacity_allocation_async.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Write respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_capacity_allocation_async.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Write respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_capacity_allocation_async.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Write respects the allocated capacities."
-        ],
-        [
-         "global",
-         "window,worker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "write_capacity_allocation_sync.tentative.https.any.js": [
-     "b72b1f645da0146ef1a9804a64a009f853239eed",
-     [
-      "native-io/write_capacity_allocation_sync.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "NativeIO API: Write respects the allocated capacities."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ]
-       ]
-      }
-     ]
-    ],
-    "write_getLength_async_basic.tentative.https.any.js": [
-     "428d63ebd577fa12d7d9d8b42e35011cab16111f",
-     [
-      "native-io/write_getLength_async_basic.tentative.https.any.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: getLength reports written bytes."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_getLength_async_basic.tentative.https.any.serviceworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: getLength reports written bytes."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_getLength_async_basic.tentative.https.any.sharedworker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: getLength reports written bytes."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ],
-     [
-      "native-io/write_getLength_async_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: getLength reports written bytes."
-        ],
-        [
-         "global",
-         "window,worker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ],
-    "write_getLength_sync_basic.tentative.https.any.js": [
-     "09e97fe6fe9639e1f1733f19b1260566f3146c85",
-     [
-      "native-io/write_getLength_sync_basic.tentative.https.any.worker.html",
-      {
-       "script_metadata": [
-        [
-         "title",
-         "Synchronous NativeIO API: getLength reports written bytes."
-        ],
-        [
-         "global",
-         "dedicatedworker"
-        ],
-        [
-         "script",
-         "resources/support.js"
-        ]
-       ]
-      }
-     ]
-    ]
-   },
    "navigation-api": {
     "currententrychange-event": {
      "anchor-click.html": [
@@ -570205,7 +568305,7 @@
      ]
     ],
     "can-make-payment-event.https.html": [
-     "28c001c654e1445dfa00193269fabadbf17fc2f0",
+     "941c206e3b36fc91175e414bf773dd54e5d7d982",
      [
       null,
       {
@@ -590827,7 +588927,7 @@
       ]
      ],
      "animation-timeline-computed.html": [
-      "a77233aab901de334e98f2e643e82a19cf8093c6",
+      "5789417c6aa4ea41fb98602b8c90dceaed185e60",
       [
        null,
        {}
@@ -590869,7 +588969,7 @@
       ]
      ],
      "animation-timeline-parsing.html": [
-      "dc22778fa7a94094b7be14d176312a01fd145f9b",
+      "1a30f11f851824801abc2b9501037c509588112d",
       [
        null,
        {}
@@ -600197,15 +598297,6 @@
        }
       ]
      ],
-     "storage-foundation.https.html": [
-      "6be77bad8fd4cf7d93b282463549323b3a918baf",
-      [
-       null,
-       {
-        "timeout": "long"
-       }
-      ]
-     ],
      "visibility-state.html": [
       "023ee512938784a9919efac7c42d9bc50be11505",
       [
@@ -626632,7 +624723,7 @@
    },
    "webnn": {
     "idlharness.https.any.js": [
-     "5f538319417294fa99adb006a490beb5fea8d176",
+     "6122134268c82dfc96327bb5fd56b248aa809076",
      [
       "webnn/idlharness.https.any.html",
       {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
index 5d511ef..8378ee77 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
@@ -1,6 +1,7 @@
 [idbobjectstore_batchGetAll_largeValue.tentative.any.html]
   expected:
     if (flag_specific == "") and (product == "chrome"): OK
+    if flag_specific == "disable-site-isolation-trials": OK
     TIMEOUT
   [Get upper/lower excluded]
     expected: [PASS, TIMEOUT]
@@ -13,9 +14,7 @@
 
 
 [idbobjectstore_batchGetAll_largeValue.tentative.any.worker.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": OK
-    TIMEOUT
+  expected: TIMEOUT
   [Get bound range with maxCount]
     expected: [PASS, TIMEOUT]
 
@@ -23,5 +22,4 @@
     expected: [PASS, TIMEOUT]
 
   [Get upper/lower excluded]
-    expected:
-      if product == "chrome": TIMEOUT
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini b/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
index 6cc1e27..cb4ee35 100644
--- a/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
@@ -16,3 +16,7 @@
 
   [When playback rate is updated, the underlying effect is properly updated with the current time of its scroll-linked WorkletAnimation and produces correct visual result.]
     expected: FAIL
+
+  [The playback rate set before the animation started playing affects the rate of progress of the current time]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html
new file mode 100644
index 0000000..8745fc9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  'use strict';
+
+  promise_test(async (t) => {
+    await promise_rejects_dom(
+        t, 'SecurityError', navigator.bluetooth.getAvailability(),
+        'getAvailability() should throw a SecurityError DOMException when called from a context where the top-level document has an opaque origin.');
+  }, 'Calls to Bluetooth APIs from an origin with opaque top origin get blocked.');
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html.headers b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html.headers
new file mode 100644
index 0000000..c7e4e7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/reject_opaque_origin.https.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: sandbox allow-scripts
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/sandboxed_iframe.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/sandboxed_iframe.https.window.js
new file mode 100644
index 0000000..c5e3d1e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getAvailability/sandboxed_iframe.https.window.js
@@ -0,0 +1,27 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+
+'use strict';
+
+let iframe = document.createElement('iframe');
+
+bluetooth_test(async () => {
+  await getConnectedHealthThermometerDevice();
+  await new Promise(resolve => {
+    iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
+    iframe.sandbox.add('allow-scripts');
+    iframe.allow = 'bluetooth';
+    document.body.appendChild(iframe);
+    iframe.addEventListener('load', resolve);
+  });
+  await new Promise(resolve => {
+    iframe.contentWindow.postMessage({type: 'GetAvailability'}, '*');
+
+    window.addEventListener('message', (messageEvent) => {
+      assert_false(/^FAIL: .*/.test(messageEvent.data));
+      resolve();
+    });
+  });
+}, 'Calls to Bluetooth APIs from a sandboxed iframe are valid.');
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html
new file mode 100644
index 0000000..64b2808
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  'use strict';
+
+  promise_test(async (t) => {
+    await promise_rejects_dom(
+        t, 'SecurityError', navigator.bluetooth.getDevices(),
+        'getDevices() should throw a SecurityError DOMException when called from a context where the top-level document has an opaque origin.');
+  }, 'Calls to Bluetooth APIs from an origin with opaque top origin get blocked.');
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html.headers b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html.headers
new file mode 100644
index 0000000..c7e4e7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/reject_opaque_origin.https.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: sandbox allow-scripts
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/sandboxed_iframe.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/sandboxed_iframe.https.window.js
new file mode 100644
index 0000000..22cfd17d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/getDevices/sandboxed_iframe.https.window.js
@@ -0,0 +1,27 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+
+'use strict';
+
+let iframe = document.createElement('iframe');
+
+bluetooth_test(async () => {
+  await getConnectedHealthThermometerDevice();
+  await new Promise(resolve => {
+    iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
+    iframe.sandbox.add('allow-scripts');
+    iframe.allow = 'bluetooth';
+    document.body.appendChild(iframe);
+    iframe.addEventListener('load', resolve);
+  });
+  await new Promise(resolve => {
+    iframe.contentWindow.postMessage({type: 'GetDevices'}, '*');
+
+    window.addEventListener('message', (messageEvent) => {
+      assert_false(/^FAIL: .*/.test(messageEvent.data));
+      resolve();
+    });
+  });
+}, 'Calls to Bluetooth APIs from a sandboxed iframe are valid.');
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/cross-origin-iframe.sub.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/cross-origin-iframe.sub.https.window.js
index a5e6fac..d802a86 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/cross-origin-iframe.sub.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/cross-origin-iframe.sub.https.window.js
@@ -24,5 +24,5 @@
   const messageEvent = await windowWatcher.wait_for('message');
   assert_equals(
       messageEvent.data,
-      'SecurityError: Failed to execute \'requestDevice\' on \'Bluetooth\': Access to the feature "bluetooth" is disallowed by permissions policy.');
+      'FAIL: SecurityError: Failed to execute \'requestDevice\' on \'Bluetooth\': Access to the feature "bluetooth" is disallowed by permissions policy.');
 }, test_desc);
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html
new file mode 100644
index 0000000..df348dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  'use strict';
+
+  promise_test(async (t) => {
+    await promise_rejects_dom(
+        t, 'SecurityError', navigator.bluetooth.requestDevice(),
+        'requestDevice() should throw a SecurityError DOMException when called from a context where the top-level document has an opaque origin.');
+  }, 'Calls to Bluetooth APIs from an origin with opaque top origin get blocked.');
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html.headers b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html.headers
new file mode 100644
index 0000000..c7e4e7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/reject_opaque_origin.https.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: sandbox allow-scripts
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/request-from-sandboxed-iframe.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/request-from-sandboxed-iframe.https.window.js
index 17a9da33..2101cf0 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/request-from-sandboxed-iframe.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/request-from-sandboxed-iframe.https.window.js
@@ -5,7 +5,8 @@
 'use strict';
 const test_desc = 'Request device from a unique origin. ' +
     'Should reject with SecurityError.';
-const expected = 'SecurityError: Failed to execute \'requestDevice\' on ' +
+const expected =
+    'FAIL: SecurityError: Failed to execute \'requestDevice\' on ' +
     '\'Bluetooth\': Access to the feature "bluetooth" is disallowed by ' +
     'permissions policy.';
 
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/sandboxed_iframe.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/sandboxed_iframe.https.window.js
new file mode 100644
index 0000000..e9192a9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/sandboxed_iframe.https.window.js
@@ -0,0 +1,27 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+
+'use strict';
+
+let iframe = document.createElement('iframe');
+
+bluetooth_test(async () => {
+  await getConnectedHealthThermometerDevice();
+  await new Promise(resolve => {
+    iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
+    iframe.sandbox.add('allow-scripts');
+    iframe.allow = 'bluetooth';
+    document.body.appendChild(iframe);
+    iframe.addEventListener('load', resolve);
+  });
+  await new Promise(resolve => {
+    iframe.contentWindow.postMessage({type: 'RequestDevice'}, '*');
+
+    window.addEventListener('message', (messageEvent) => {
+      assert_false(/^FAIL: .*/.test(messageEvent.data));
+      resolve();
+    });
+  });
+}, 'Calls to Bluetooth APIs from a sandboxed iframe are valid.');
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html
new file mode 100644
index 0000000..272c5aa7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  'use strict';
+
+  promise_test(async (t) => {
+    await promise_rejects_dom(
+        t, 'SecurityError', navigator.bluetooth.requestLEScan(),
+        'requestLEScan() should throw a SecurityError DOMException when called from a context where the top-level document has an opaque origin.');
+  }, 'Calls to Bluetooth APIs from an origin with opaque top origin get blocked.');
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html.headers b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html.headers
new file mode 100644
index 0000000..c7e4e7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/reject_opaque_origin.https.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: sandbox allow-scripts
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/sandboxed_iframe.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/sandboxed_iframe.https.window.js
new file mode 100644
index 0000000..32d1e74b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestLEScan/sandboxed_iframe.https.window.js
@@ -0,0 +1,27 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+
+'use strict';
+
+let iframe = document.createElement('iframe');
+
+bluetooth_test(async () => {
+  await getConnectedHealthThermometerDevice();
+  await new Promise(resolve => {
+    iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
+    iframe.sandbox.add('allow-scripts');
+    iframe.allow = 'bluetooth';
+    document.body.appendChild(iframe);
+    iframe.addEventListener('load', resolve);
+  });
+  await new Promise(resolve => {
+    iframe.contentWindow.postMessage({type: 'RequestLEScan'}, '*');
+
+    window.addEventListener('message', (messageEvent) => {
+      assert_false(/^FAIL: .*/.test(messageEvent.data));
+      resolve();
+    });
+  });
+}, 'Calls to Bluetooth APIs from a sandboxed iframe are valid.');
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/resources/health-thermometer-iframe.html b/third_party/blink/web_tests/external/wpt/bluetooth/resources/health-thermometer-iframe.html
index 78774b4..f9f7a6f 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/resources/health-thermometer-iframe.html
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/resources/health-thermometer-iframe.html
@@ -17,13 +17,20 @@
 window.addEventListener('message', (messageEvent) => {
   switch (messageEvent.data.type) {
     case 'GetAvailability':
-      navigator.bluetooth.getAvailability().then(
-          availability => parent.postMessage(availability, '*'));
+      navigator.bluetooth.getAvailability()
+          .then(availability => parent.postMessage(availability, '*'))
+          .catch(err => parent.postMessage(`FAIL: ${err}`, '*'));
+      break;
+    case 'GetDevices':
+      navigator.bluetooth.getDevices()
+          .then(devices => parent.postMessage('Success', '*'))
+          .catch(err => parent.postMessage(`FAIL: ${err}`, '*'));
       break;
     case 'RequestDevice':
-      test_driver.click(document.getElementsByTagName("button")[0])
-          .then(() => navigator.bluetooth
-              .requestDevice({filters: [{services: ['generic_access']}]}))
+      test_driver.click(document.getElementsByTagName('button')[0])
+          .then(
+              () => navigator.bluetooth.requestDevice(
+                  {filters: [{services: ['generic_access']}]}))
           .then(device => {
             if (device.constructor.name === 'BluetoothDevice') {
               parent.postMessage('Success', '*');
@@ -32,7 +39,22 @@
                   `FAIL: requestDevice in iframe returned ${device.name}`, '*');
             }
           })
-          .catch(err => parent.postMessage(`${err.name}: ${err.message}`, '*'));
+          .catch(err => parent.postMessage(`FAIL: ${err.name}: ${err.message}`, '*'));
+      break;
+    case 'RequestLEScan':
+      test_driver.click(document.getElementsByTagName('button')[0])
+          .then(
+              () => navigator.bluetooth.requestLEScan(
+                {filters: [{name: 'Health Thermometer'}]}))
+          .then(leScan => {
+              if (leScan.active) {
+                parent.postMessage('Success', '*');
+                leScan.stop();
+              } else {
+                parent.postMessage(`FAIL: the LE scan hasn't been initiated.`, '*');
+              }
+          })
+          .catch(err => parent.postMessage(`FAIL: ${err.name}: ${err.message}`, '*'));
       break;
     case 'RequestAndConnect':
       requestDeviceWithOptionsAndConnect(messageEvent.data.options)
diff --git a/third_party/blink/web_tests/external/wpt/compute-pressure/idlharness.https.window.js.ini b/third_party/blink/web_tests/external/wpt/compute-pressure/idlharness.https.window.js.ini
deleted file mode 100644
index abd6630..0000000
--- a/third_party/blink/web_tests/external/wpt/compute-pressure/idlharness.https.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[idlharness.https.window.html]
-  [PressureObserver interface: operation requestPermission()]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html.ini
index 862676a..6116a21f 100644
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html.ini
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html.ini
@@ -1,14 +1,38 @@
 [sharedworker-import.http.html]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
+    if (flag_specific == "") and (product == "chrome"): [OK, TIMEOUT]
   [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and keep-origin redirection from http context.: securitypolicyviolation]
-    expected: FAIL
+    expected:
+      if product == "chrome": [FAIL, NOTRUN]
+      FAIL
 
   [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and no-redirect redirection from http context.: securitypolicyviolation]
-    expected: FAIL
+    expected:
+      if product == "chrome": [FAIL, NOTRUN]
+      FAIL
 
   [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and swap-origin redirection from http context.: securitypolicyviolation]
-    expected: FAIL
+    expected:
+      if product == "chrome": [FAIL, NOTRUN]
+      FAIL
 
   [Content Security Policy: Expects blocked for sharedworker-import to same-http origin and swap-origin redirection from http context.: securitypolicyviolation]
-    expected: FAIL
+    expected:
+      if product == "chrome": [FAIL, NOTRUN]
+      FAIL
+
+  [Content Security Policy: Expects blocked for sharedworker-import to same-http origin and swap-origin redirection from http context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and swap-origin redirection from http context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and no-redirect redirection from http context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Content Security Policy: Expects blocked for sharedworker-import to cross-http origin and keep-origin redirection from http context.]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/history.sub.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/history.sub.html.ini
new file mode 100644
index 0000000..9728b70
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/history.sub.html.ini
@@ -0,0 +1,3 @@
+[history.sub.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
index 05edd2d5..6e73299 100644
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
@@ -1,4 +1,3 @@
 [prefetch-header-allowed.html]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini b/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini
deleted file mode 100644
index 6bd74be8..0000000
--- a/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[cookieListItem_attributes.https.any.serviceworker.html]
-
-[cookieListItem_attributes.https.any.html]
-  [CookieListItem - cookieStore.set with expires set to a timestamp 10 years in the future]
-    expected:
-      if os == "win": FAIL
-
-  [CookieListItem - cookieStore.set with expires set to a Date 10 years in the future]
-    expected:
-      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini
new file mode 100644
index 0000000..c228d130
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini
@@ -0,0 +1,11 @@
+[cookieStore_set_arguments.https.any.serviceworker.html]
+  [cookieStore.set with expires set to a future Date]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [cookieStore.set with expires set to a future timestamp]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+
+[cookieStore_set_arguments.https.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_subscribe_arguments.https.any.js.ini b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_subscribe_arguments.https.any.js.ini
index ced6aca..c6bd59e 100644
--- a/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_subscribe_arguments.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_subscribe_arguments.https.any.js.ini
@@ -1,9 +1,5 @@
 [cookieStore_subscribe_arguments.https.any.html]
   expected:
-    if (flag_specific == "") and (os == "win"): [OK, ERROR]
-  [CookieStore.unsubscribe is idempotent]
-    expected:
-      if (flag_specific == "") and (os == "win"): [PASS, NOTRUN]
-
+    if os == "win": ERROR
 
 [cookieStore_subscribe_arguments.https.any.serviceworker.html]
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
index 12ce602c..14f5926 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
@@ -1,8 +1,7 @@
 [fedcm-network-requests.https.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "chrome"): TIMEOUT
-    if (flag_specific == "") and (os == "win"): TIMEOUT
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
+    if product == "chrome": TIMEOUT
   [nonce is not required in FederatedIdentityProvider.]
     expected:
       if product == "chrome": NOTRUN
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-inline-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-inline-004.html.ini
deleted file mode 100644
index 4b68313d..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-position-inline-004.html.ini
+++ /dev/null
@@ -1,96 +0,0 @@
-[anchor-position-inline-004.html]
-  [.target 1]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 2]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 3]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 4]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 5]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 6]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 7]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 8]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 9]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 10]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 11]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 12]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 13]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 14]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 15]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 16]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 17]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 18]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 19]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 20]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 21]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 22]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 23]
-    expected:
-      if product == "chrome": FAIL
-
-  [.target 24]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
index 9037285..0269492 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
@@ -10,4 +10,4 @@
 
   [Animations preserve their startTime when changed]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness-expected.txt
index 2036d89..f5a629d7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 94 tests; 91 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 96 tests; 91 PASS, 5 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface CSSRule: original interface defined
@@ -63,6 +63,7 @@
 PASS CSSKeyframesRule interface: existence and properties of interface prototype object's @@unscopables property
 PASS CSSKeyframesRule interface: attribute name
 PASS CSSKeyframesRule interface: attribute cssRules
+FAIL CSSKeyframesRule interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS CSSKeyframesRule interface: operation appendRule(CSSOMString)
 PASS CSSKeyframesRule interface: operation deleteRule(CSSOMString)
 PASS CSSKeyframesRule interface: operation findRule(CSSOMString)
@@ -70,6 +71,7 @@
 PASS Stringification of keyframes
 PASS CSSKeyframesRule interface: keyframes must inherit property "name" with the proper type
 PASS CSSKeyframesRule interface: keyframes must inherit property "cssRules" with the proper type
+FAIL CSSKeyframesRule interface: keyframes must inherit property "length" with the proper type assert_inherits: property "length" not found in prototype chain
 PASS CSSKeyframesRule interface: keyframes must inherit property "appendRule(CSSOMString)" with the proper type
 PASS CSSKeyframesRule interface: calling appendRule(CSSOMString) on keyframes with too few arguments must throw TypeError
 PASS CSSKeyframesRule interface: keyframes must inherit property "deleteRule(CSSOMString)" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness.html.ini b/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness.html.ini
index c676700..f0c5706 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-animations/idlharness.html.ini
@@ -7,3 +7,9 @@
 
   [Document interface: attribute onanimationcancel]
     expected: FAIL
+
+  [CSSKeyframesRule interface: attribute length]
+    expected: FAIL
+
+  [CSSKeyframesRule interface: keyframes must inherit property "length" with the proper type]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-selection-crash.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-selection-crash.html
new file mode 100644
index 0000000..4cfe62e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-selection-crash.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+    <link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+    <meta name="assert" content="Changes to selection that result in no selection do not cause a crash.">
+    <style>
+        * {
+            content-visibility: auto;
+        }
+    </style>
+    <script>
+        document.addEventListener('DOMContentLoaded', () => {
+          document.documentElement.convertPointFromNode({}, marquee, {})
+          textarea.setSelectionRange(0, 0, 'forward')
+          input.setAttribute('type', 'number')
+          document.documentElement.getBoundingClientRect()
+        })
+    </script>
+</head>
+<body>
+    <marquee id='marquee'></marquee>
+    <textarea id='textarea'></textarea>
+    <input id='input'></input>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-007v.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-007v.html.ini
index 0ef2b0d..88bd2eab 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-007v.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-007v.html.ini
@@ -7,34 +7,34 @@
     expected:
       if flag_specific == "disable-layout-ng": FAIL
 
-  [.flexbox > img 11]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 6]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 12]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 9]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 7]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
   [.flexbox > img 14]
     expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 10]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
   [.flexbox > img 1]
     expected:
-      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 11]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 7]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 9]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 6]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 10]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [.flexbox > img 12]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001-ref.html
new file mode 100644
index 0000000..0c68e139
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts reference</title>
+<style>
+  div {
+    margin: 10px;
+    font: 20px monospace;
+    background: yellow;
+    width: 10ch;
+    font-size-adjust: 1.0;
+  }
+</style>
+<body>
+  <p>Test passes if both blocks render the same, and there is no red:</p>
+  <div>The quick brown fox jumps over the lazy dog</div>
+  <div>The quick brown fox jumps over the lazy dog</div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001.html
new file mode 100644
index 0000000..a8b56a30
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-order-001.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust effect on font-dependent units</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+      href="https://drafts.csswg.org/css-fonts/#font-size-adjust-prop">
+<link rel="help" title="6.1.1. Font-relative Lengths: the em, rem, ex, rex, cap, rcap, ch, rch, ic, ric, lh, rlh units"
+      href="https://drafts.csswg.org/css-values-4/#font-relative-lengths">
+<meta name="assert" content="font-size-adjust affects the size of the 'ch' unit consistently regardless of the ordering of properties.">
+<link rel="match" href="font-size-adjust-order-001-ref.html">
+<style>
+  div {
+    margin: 10px;
+    font: 20px monospace;
+    background: yellow;
+  }
+  #bg {
+    width: 12ch;
+    height: 2em;
+    background: red;
+    position: absolute;
+    z-index: -1;
+  }
+  #test1 {
+    /* Size the font by its ex-height; this will enlarge the glyphs
+       so the red background block is hidden. */
+    font-size-adjust: 1.0;
+    width: 10ch;
+  }
+  #test2 {
+    /* This should work exactly the same. */
+    width: 10ch;
+    font-size-adjust: 1.0;
+  }
+</style>
+<body>
+  <p>Test passes if both blocks render the same, and there is no red:</p>
+  <div id="bg"></div>
+  <div id="test1">The quick brown fox jumps over the lazy dog</div>
+  <div id="bg"></div>
+  <div id="test2">The quick brown fox jumps over the lazy dog</div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001-ref.html
new file mode 100644
index 0000000..008c500d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+  div {
+    margin: 10px;
+    font: 100px/1 Ahem;
+    font-size-adjust: 0.8;  /* this matches Ahem's ex-height metric */
+    background: orange;
+    width: 2ch;
+    height: 1ex;
+  }
+  #test1 {
+    background: blue;
+  }
+  #test2 {
+    background: blue;
+  }
+</style>
+<body>
+  <p>Test passes if the blue rectangles are both the same size as the orange one.</p>
+  <div id="test1"></div>
+  <div id="test2"></div>
+  <div></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001.html
new file mode 100644
index 0000000..4e27ef1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-size-adjust-units-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust effect on font-dependent units</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+      href="https://drafts.csswg.org/css-fonts/#font-size-adjust-prop">
+<link rel="help" title="6.1.1. Font-relative Lengths: the em, rem, ex, rex, cap, rcap, ch, rch, ic, ric, lh, rlh units"
+      href="https://drafts.csswg.org/css-values-4/#font-relative-lengths">
+<meta name="assert" content="Font-relative units like ch and ex are affected by font-size-adjust,
+because they are derived from metrics of the _used_ font.">
+<link rel="match" href="font-size-adjust-units-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+  div {
+    margin: 10px;
+    font: 100px/1 Ahem;
+    font-size-adjust: 0.8;  /* this matches Ahem's ex-height metric */
+    background: orange;
+    width: 2ch;
+    height: 1ex;
+  }
+  #test1 {
+    background: blue;
+    font-size-adjust: 0.4;
+    width: 4ch;
+    height: 2ex;
+  }
+  #test2 {
+    background: blue;
+    font-size-adjust: 1.6;
+    width: 1ch;
+    height: 0.5ex;
+  }
+</style>
+<body>
+  <p>Test passes if the blue rectangles are both the same size as the orange one.</p>
+  <div id="test1"></div>
+  <div id="test2"></div>
+  <div></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side-ref.html
new file mode 100644
index 0000000..5a31517
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side-ref.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>CSS Grid Test: Verify correct behavior of track-sizing</title>
+    <link rel="author" title="Brandon Stewart" href="mailto:brandonstewart@apple.com">
+    <link rel="help" href="https://drafts.csswg.org/css-grid-3/#track-sizing">
+</head>
+
+<body>
+<style>
+grid {
+  display: grid;
+  grid-template-columns: 50px 1fr;
+  grid-template-rows: 50px 250px;
+  width: 300px;
+  height: 100px;
+}
+
+box1 {
+    height: 50px;
+    width: 50px;
+    background-color: blue;
+}
+
+box2 {
+    height: 50px;
+    background-color: red;
+}
+
+box3 {
+    width: 100px;
+    height: 50px;
+    background-color: purple;
+    z-index: 1;
+}
+
+box4 {
+    height: 50px;
+    background-color: green;
+}
+</style>
+
+<grid>
+    <box1>1</box1>
+    <box2>2</box2>
+    <box3>3</box3>
+    <box4>4</box4>
+</grid>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side.html
new file mode 100644
index 0000000..cd1b78a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-left-side.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>CSS Grid Test: Verify correct behavior of track-sizing</title>
+    <link rel="author" title="Brandon Stewart" href="mailto:brandonstewart@apple.com">
+    <link rel="help" href="https://drafts.csswg.org/css-grid-3/#track-sizing">
+    <link rel="match" href="masonry-track-sizing-overflow-left-side-ref.html">
+</head>
+
+<body>
+<style>
+grid {
+  display: grid;
+  grid-template-columns: auto 1fr;
+  grid-template-rows: masonry;
+  width: 300px;
+  height: 100px;
+}
+
+box1 {
+    height: 50px;
+    width: 50px;
+    background-color: blue;
+}
+
+box2 {
+    height: 50px;
+    background-color: red;
+}
+
+box3 {
+    width: 100px;
+    height: 50px;
+    background-color: purple;
+    z-index: 1;
+}
+
+box4 {
+    height: 50px;
+    background-color: green;
+}
+</style>
+
+<grid>
+    <box1>1</box1>
+    <box2>2</box2>
+    <box3>3</box3>
+    <box4>4</box4>
+</grid>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side-ref.html
new file mode 100644
index 0000000..51e657e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side-ref.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>CSS Grid Test: Verify correct behavior of track-sizing</title>
+    <link rel="author" title="Brandon Stewart" href="mailto:brandonstewart@apple.com">
+    <link rel="help" href="https://drafts.csswg.org/css-grid-3/#track-sizing">
+</head>
+
+<body>
+<style>
+grid {
+  display: grid;
+  grid-template-columns: 1fr 50px;
+  grid-template-rows: 1fr 50px;
+  width: 300px;
+  height: 100px;
+}
+
+box1 {
+    height: 50px;
+    background-color: red;
+}
+
+box2 {
+    height: 50px;
+    width: 50px;
+    background-color: blue;
+}
+
+box3 {
+    height: 50px;
+    background-color: green;
+}
+
+box4 {
+    width: 100px;
+    height: 50px;
+    background-color: purple;
+    z-index: 1;
+}
+
+</style>
+
+<grid>
+    <box1>1</box1>
+    <box2>2</box2>
+    <box3>3</box3>
+    <box4>4</box4>
+</grid>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side.html
new file mode 100644
index 0000000..e4c17fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/track-sizing/masonry-track-sizing-overflow-right-side.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>CSS Grid Test: Verify correct behavior of track-sizing</title>
+    <link rel="author" title="Brandon Stewart" href="mailto:brandonstewart@apple.com">
+    <link rel="help" href="https://drafts.csswg.org/css-grid-3/#track-sizing">
+    <link rel="match" href="masonry-track-sizing-overflow-right-side-ref.html">
+</head>
+
+<body>
+<style>
+grid {
+  display: grid;
+  grid-template-columns: 1fr auto;
+  grid-template-rows: masonry;
+  width: 300px;
+  height: 100px;
+}
+
+box1 {
+    width: 1fr;
+    height: 50px;
+    background-color: red;
+}
+
+box2 {
+    height: 50px;
+    width: 50px;
+    background-color: blue;
+}
+
+box3 {
+    height: 50px;
+    background-color: green;
+}
+
+box4 {
+    width: 100px;
+    height: 50px;
+    background-color: purple;
+    z-index: 1;
+}
+
+</style>
+
+<grid>
+    <box1>1</box1>
+    <box2>2</box2>
+    <box3>3</box3>
+    <box4>4</box4>
+</grid>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
index c8f5d5e..4300e380 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
@@ -1,2 +1,4 @@
 [subgrid-baseline-002.html]
-  expected: CRASH
+  expected:
+    if os == "win": [TIMEOUT, CRASH]
+    CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
index 9451204..46ebc05b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
@@ -1,4 +1,3 @@
 [Initial-letter-breaking-rtl.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
index e5040af..5e2b2a7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
@@ -1,3 +1,4 @@
 [Initial-letter-breaking-vrl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins.html.ini
index ca081035..902a0ff9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-margins.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
index 1136475..eede05d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-block-position-raise-under-ruby.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
index 1e3e903..984123ce 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-drop-initial-vlr.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
index bda49d3..497ccbc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-drop-initial.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vlr.html.ini
index 72b9d1f..bd18bc0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vlr.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-float-001-vlr.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-layout-text-decoration-underline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-layout-text-decoration-underline.html.ini
index 7b6eb18..6679ea68 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-layout-text-decoration-underline.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-layout-text-decoration-underline.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-layout-text-decoration-underline.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vrl.html.ini
index 4f49317..1bf7046 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vrl.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-raise-initial-vrl.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
index 77a501b5..145423c1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-sunk-initial-vrl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini b/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
index 78f81bd..44c5cfb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
@@ -1,24 +1,24 @@
 [getclientrects-000.html]
   [vertical-lr ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-rl rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-lr rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [horizontal-tb ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-rl ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [horizontal-tb rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
index 0fd1d59..6351a3d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
@@ -1,4 +1,3 @@
 [scrollable-overflow-input-001.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-002.html.ini
deleted file mode 100644
index 6e03ac5..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[scrollable-overflow-input-002.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
index 44bac53..21e3049 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
@@ -1,4 +1,3 @@
 [parse-input-arguments-018.https.html]
   expected:
-    if flag_specific == "disable-layout-ng": PASS
-    CRASH
+    if (os == "linux") and (flag_specific == ""): CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/setTransform-001.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-paint-api/setTransform-001.https.html.ini
new file mode 100644
index 0000000..6af47e05
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/setTransform-001.https.html.ini
@@ -0,0 +1,3 @@
+[setTransform-001.https.html]
+  expected:
+    if os == "win": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-cssom.html.ini b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-cssom.html.ini
index 8a56b75e..d1d9acd1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-cssom.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-cssom.html.ini
@@ -1,6 +1,3 @@
 [registered-property-cssom.html]
-  [CSSOM setters function as expected for unregistered properties]
-    expected: FAIL
-
-  [Formerly valid values are still readable from inline styles but are computed as the unset value]
+  [Initially unregistered values from stylesheet]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ruby/ruby-text-combine-upright-002a.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ruby/ruby-text-combine-upright-002a.html.ini
deleted file mode 100644
index 894ea23..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ruby/ruby-text-combine-upright-002a.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[ruby-text-combine-upright-002a.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-008.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-match-parent-001.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-008.html
rename to third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-match-parent-001.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-match-parent-002.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-match-parent-002.html
new file mode 100644
index 0000000..19596e36
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-match-parent-002.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: text-align - computed value for match-parent on the root element</title>
+<link rel="help" href="https://drafts.csswg.org/css-text/#valdef-text-align-match-parent">
+<meta name="assert" content="'text-align: match-parent' on the root element with 'direction: rtl' should compute to 'start'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+  html {
+    text-align: match-parent;
+    direction: rtl;
+  }
+  #log {
+    direction: ltr;
+    text-align: start;
+  }
+</style>
+<div id="log"></div>
+<script>
+  test(() => {
+    assert_equals(getComputedStyle(document.documentElement).textAlign, 'start');
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/fake-group-align.css b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/fake-group-align.css
new file mode 100644
index 0000000..d1a7d1aa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/fake-group-align.css
@@ -0,0 +1,27 @@
+.group {
+    inline-size: min-content;
+}
+
+.group-align-left {
+    /* Only the one that matches the inline axis will apply */
+    margin-bottom: auto;
+    margin-right: auto;
+}
+
+.group-align-right {
+    /* Only the one that matches the inline axis will apply */
+    margin-top: auto;
+    margin-left: auto;
+}
+
+.group-align-center {
+    margin-inline: auto;
+}
+
+.group-align-start {
+    margin-inline-end: auto;
+}
+
+.group-align-end {
+    margin-inline-start: auto;
+}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.css b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.css
new file mode 100644
index 0000000..d79e79c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.css
@@ -0,0 +1,9 @@
+.text-container {
+    inline-size: 200px;
+    border: 1px solid black;
+    display: inline-block;
+}
+
+.pre {
+    white-space: pre;
+}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.js b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.js
new file mode 100644
index 0000000..27b6a7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/support/test-helpers.js
@@ -0,0 +1,36 @@
+const simpleTestString = `ABCDEFGHIJKLO
+AAAAAAAA
+AAAA
+AA
+A`;
+
+function generateSimpleTest({ textGroupAlign, textAlign, direction, writingMode }) {
+    if (!direction)
+        direction = "ltr";
+    if (!writingMode)
+        writingMode = "horizontal-tb";
+
+    const container = document.createElement("div");
+    container.textContent = simpleTestString;
+    container.style = `text-group-align: ${textGroupAlign}; text-align: ${textAlign}; direction: ${direction}; writing-mode: ${writingMode}`;
+    container.classList.add("text-container", "pre");
+    document.body.append(container);
+}
+
+function generateSimpleReference({ textGroupAlign, textAlign, direction, writingMode }) {
+    if (!direction)
+        direction = "ltr";
+    if (!writingMode)
+        writingMode = "horizontal-tb";
+
+    const container = document.createElement("div");
+    container.classList.add("text-container", "pre");
+    container.style = `text-align: ${textAlign}; direction: ${direction}; writing-mode: ${writingMode}`;
+
+    const group = document.createElement("div");
+    group.textContent = simpleTestString;
+    group.classList.add("group", `group-align-${textGroupAlign}`);
+    container.append(group);
+
+    document.body.append(container);
+}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-ref.html
new file mode 100644
index 0000000..919747c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: center</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "center", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr-ref.html
new file mode 100644
index 0000000..6b74aac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: center</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "center", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html
new file mode 100644
index 0000000..e18cf34
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: center</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-center-vlr-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "center", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html.ini
new file mode 100644
index 0000000..e745a34
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-center-vlr.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html
new file mode 100644
index 0000000..e4acc744
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: center</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-center-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "center", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html.ini
new file mode 100644
index 0000000..cb703fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-center.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-center.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-ref.html
new file mode 100644
index 0000000..2c8d2da9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: end</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "end", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr-ref.html
new file mode 100644
index 0000000..9ea04f6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: end</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "end", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html
new file mode 100644
index 0000000..1f690b44
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: end</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-end-vlr-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "end", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html.ini
new file mode 100644
index 0000000..9b7c668
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-end-vlr.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html
new file mode 100644
index 0000000..1929f59e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: end</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-end-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "end", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html.ini
new file mode 100644
index 0000000..181d3b1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-end.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-end.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-ref.html
new file mode 100644
index 0000000..f041806
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: left</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "left", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr-ref.html
new file mode 100644
index 0000000..a7df839
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: left</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "left", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html
new file mode 100644
index 0000000..4a9ed599
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: left</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-left-vlr-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "left", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html.ini
new file mode 100644
index 0000000..b25086d9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-left-vlr.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html
new file mode 100644
index 0000000..e74de0e1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: left</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-left-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "left", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html.ini
new file mode 100644
index 0000000..9196628
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-left.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-left.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-ref.html
new file mode 100644
index 0000000..1b11e61
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: right</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "right", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr-ref.html
new file mode 100644
index 0000000..5bfe0a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: right</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "right", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html
new file mode 100644
index 0000000..9f612aa9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: right</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-right-vlr-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "right", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html.ini
new file mode 100644
index 0000000..b4d729f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-right-vlr.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html
new file mode 100644
index 0000000..688022a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: right</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-right-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "right", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html.ini
new file mode 100644
index 0000000..fe721b69b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-right.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-right.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-ref.html
new file mode 100644
index 0000000..4c57fcbd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: start</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "start", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr-ref.html
new file mode 100644
index 0000000..051c622b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Reference: text-group-align: start</title>
+<link rel="stylesheet" href="support/test-helpers.css">
+<link rel="stylesheet" href="support/fake-group-align.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleReference({ textGroupAlign: "start", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html
new file mode 100644
index 0000000..6dce935
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: start</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-start-vlr-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "start", writingMode: "vertical-lr", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html.ini
new file mode 100644
index 0000000..a1ebbbf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-start-vlr.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html
new file mode 100644
index 0000000..0951f2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>text-group-align: start</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-group-align-property">
+<link rel="match" href="text-group-align-start-ref.html">
+<link rel="stylesheet" href="support/test-helpers.css">
+<body>
+<script src="support/test-helpers.js"></script>
+<script>
+for (let direction of ["ltr", "rtl"]) {
+    for (let textAlign of ["start", "end", "left", "right", "center"]) {
+        generateSimpleTest({ textGroupAlign: "start", direction, textAlign });
+    }
+    document.body.append(document.createElement("br"));
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html.ini
new file mode 100644
index 0000000..6de7b74
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-group-align/text-group-align-start.html.ini
@@ -0,0 +1,2 @@
+[text-group-align-start.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini
index 83483d7..8b9bfa4 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini
@@ -1,3 +1,4 @@
 [text-transform-capitalize-001.html]
   expected:
-    if product == "chrome": FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
+    if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini
index 38e66a2..b989cd5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini
@@ -1,3 +1,4 @@
 [text-transform-capitalize-003.html]
   expected:
-    if product == "chrome": FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
+    if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-005.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-005.html.ini
new file mode 100644
index 0000000..c06d2b0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-005.html.ini
@@ -0,0 +1,3 @@
+[text-transform-capitalize-005.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-014.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-014.html.ini
new file mode 100644
index 0000000..f0b7504
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-014.html.ini
@@ -0,0 +1,3 @@
+[text-transform-capitalize-014.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-018.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-018.html.ini
index 87e5140..c1e2194 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-018.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-018.html.ini
@@ -1,3 +1,3 @@
 [text-transform-capitalize-018.html]
   expected:
-    if product == "chrome": FAIL
+    if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
index d31f165df..fa78ece 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
@@ -12,10 +12,20 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_time(input, result) {
+  const time = input.to('s');
+
+  if (time.value < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 's'));
+  else
+    assert_style_value_equals(result, time);
+}
+
 runListValuedPropertyTests('animation-duration', [
   {
     syntax: '<time>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_time
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-iteration-count.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-iteration-count.html
index 4ff5756..627b281c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-iteration-count.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-iteration-count.html
@@ -13,11 +13,21 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_number(input, result) {
+  const number = input.to('number');
+
+  if (number.value < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'number'));
+  else
+    assert_style_value_equals(result, number);
+}
+
 runListValuedPropertyTests('animation-iteration-count', [
   { syntax: 'infinite' },
   {
     syntax: '<number>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_number
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size-expected.txt
new file mode 100644
index 0000000..206ec0c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size-expected.txt
@@ -0,0 +1,99 @@
+This is a testharness.js-based test.
+Found 95 tests; 92 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Can set 'block-size' to CSS-wide keywords: initial
+PASS Can set 'block-size' to CSS-wide keywords: inherit
+PASS Can set 'block-size' to CSS-wide keywords: unset
+PASS Can set 'block-size' to CSS-wide keywords: revert
+PASS Can set 'block-size' to var() references:  var(--A)
+PASS Can set 'block-size' to the 'auto' keyword: auto
+PASS Can set 'block-size' to a percent: 0%
+FAIL Can set 'block-size' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'block-size' to a percent: 3.14%
+PASS Can set 'block-size' to a percent: calc(0% + 0%)
+PASS Can set 'block-size' to a length: 0px
+PASS Can set 'block-size' to a length: -3.14em
+PASS Can set 'block-size' to a length: 3.14cm
+PASS Can set 'block-size' to a length: calc(0px + 0em)
+PASS Setting 'block-size' to a time: 0s throws TypeError
+PASS Setting 'block-size' to a time: -3.14ms throws TypeError
+PASS Setting 'block-size' to a time: 3.14s throws TypeError
+PASS Setting 'block-size' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'block-size' to an angle: 0deg throws TypeError
+PASS Setting 'block-size' to an angle: 3.14rad throws TypeError
+PASS Setting 'block-size' to an angle: -3.14deg throws TypeError
+PASS Setting 'block-size' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'block-size' to a flexible length: 0fr throws TypeError
+PASS Setting 'block-size' to a flexible length: 1fr throws TypeError
+PASS Setting 'block-size' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'block-size' to a number: 0 throws TypeError
+PASS Setting 'block-size' to a number: -3.14 throws TypeError
+PASS Setting 'block-size' to a number: 3.14 throws TypeError
+PASS Setting 'block-size' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'block-size' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'block-size' to a transform: perspective(10em) throws TypeError
+PASS Setting 'block-size' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+PASS Can set 'min-block-size' to CSS-wide keywords: initial
+PASS Can set 'min-block-size' to CSS-wide keywords: inherit
+PASS Can set 'min-block-size' to CSS-wide keywords: unset
+PASS Can set 'min-block-size' to CSS-wide keywords: revert
+PASS Can set 'min-block-size' to var() references:  var(--A)
+PASS Can set 'min-block-size' to a percent: 0%
+FAIL Can set 'min-block-size' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'min-block-size' to a percent: 3.14%
+PASS Can set 'min-block-size' to a percent: calc(0% + 0%)
+PASS Can set 'min-block-size' to a length: 0px
+PASS Can set 'min-block-size' to a length: -3.14em
+PASS Can set 'min-block-size' to a length: 3.14cm
+PASS Can set 'min-block-size' to a length: calc(0px + 0em)
+PASS Setting 'min-block-size' to a time: 0s throws TypeError
+PASS Setting 'min-block-size' to a time: -3.14ms throws TypeError
+PASS Setting 'min-block-size' to a time: 3.14s throws TypeError
+PASS Setting 'min-block-size' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'min-block-size' to an angle: 0deg throws TypeError
+PASS Setting 'min-block-size' to an angle: 3.14rad throws TypeError
+PASS Setting 'min-block-size' to an angle: -3.14deg throws TypeError
+PASS Setting 'min-block-size' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'min-block-size' to a flexible length: 0fr throws TypeError
+PASS Setting 'min-block-size' to a flexible length: 1fr throws TypeError
+PASS Setting 'min-block-size' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'min-block-size' to a number: 0 throws TypeError
+PASS Setting 'min-block-size' to a number: -3.14 throws TypeError
+PASS Setting 'min-block-size' to a number: 3.14 throws TypeError
+PASS Setting 'min-block-size' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'min-block-size' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'min-block-size' to a transform: perspective(10em) throws TypeError
+PASS Setting 'min-block-size' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+PASS Can set 'max-block-size' to CSS-wide keywords: initial
+PASS Can set 'max-block-size' to CSS-wide keywords: inherit
+PASS Can set 'max-block-size' to CSS-wide keywords: unset
+PASS Can set 'max-block-size' to CSS-wide keywords: revert
+PASS Can set 'max-block-size' to var() references:  var(--A)
+PASS Can set 'max-block-size' to the 'none' keyword: none
+PASS Can set 'max-block-size' to a percent: 0%
+FAIL Can set 'max-block-size' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'max-block-size' to a percent: 3.14%
+PASS Can set 'max-block-size' to a percent: calc(0% + 0%)
+PASS Can set 'max-block-size' to a length: 0px
+PASS Can set 'max-block-size' to a length: -3.14em
+PASS Can set 'max-block-size' to a length: 3.14cm
+PASS Can set 'max-block-size' to a length: calc(0px + 0em)
+PASS Setting 'max-block-size' to a time: 0s throws TypeError
+PASS Setting 'max-block-size' to a time: -3.14ms throws TypeError
+PASS Setting 'max-block-size' to a time: 3.14s throws TypeError
+PASS Setting 'max-block-size' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'max-block-size' to an angle: 0deg throws TypeError
+PASS Setting 'max-block-size' to an angle: 3.14rad throws TypeError
+PASS Setting 'max-block-size' to an angle: -3.14deg throws TypeError
+PASS Setting 'max-block-size' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'max-block-size' to a flexible length: 0fr throws TypeError
+PASS Setting 'max-block-size' to a flexible length: 1fr throws TypeError
+PASS Setting 'max-block-size' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'max-block-size' to a number: 0 throws TypeError
+PASS Setting 'max-block-size' to a number: -3.14 throws TypeError
+PASS Setting 'max-block-size' to a number: 3.14 throws TypeError
+PASS Setting 'max-block-size' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'max-block-size' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'max-block-size' to a transform: perspective(10em) throws TypeError
+PASS Setting 'max-block-size' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html
index d1a1e09..311df4d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html
@@ -13,11 +13,21 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('block-size', [
   { syntax: 'auto' },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
@@ -28,7 +38,8 @@
 runPropertyTests('min-block-size', [
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
@@ -40,7 +51,8 @@
   { syntax: 'none' },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
@@ -48,4 +60,4 @@
   },
 ]);
 
-</script>
\ No newline at end of file
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html.ini
new file mode 100644
index 0000000..7384c11
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/block-size.html.ini
@@ -0,0 +1,9 @@
+[block-size.html]
+  [Can set 'block-size' to a percent: -3.14%]
+    expected: FAIL
+
+  [Can set 'min-block-size' to a percent: -3.14%]
+    expected: FAIL
+
+  [Can set 'max-block-size' to a percent: -3.14%]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis-expected.txt
new file mode 100644
index 0000000..2e977c2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis-expected.txt
@@ -0,0 +1,39 @@
+This is a testharness.js-based test.
+PASS Can set 'flex-basis' to CSS-wide keywords: initial
+PASS Can set 'flex-basis' to CSS-wide keywords: inherit
+PASS Can set 'flex-basis' to CSS-wide keywords: unset
+PASS Can set 'flex-basis' to CSS-wide keywords: revert
+PASS Can set 'flex-basis' to var() references:  var(--A)
+PASS Can set 'flex-basis' to the 'auto' keyword: auto
+PASS Can set 'flex-basis' to the 'content' keyword: content
+PASS Can set 'flex-basis' to the 'fit-content' keyword: fit-content
+PASS Can set 'flex-basis' to the 'min-content' keyword: min-content
+PASS Can set 'flex-basis' to the 'max-content' keyword: max-content
+PASS Can set 'flex-basis' to a length: 0px
+PASS Can set 'flex-basis' to a length: -3.14em
+PASS Can set 'flex-basis' to a length: 3.14cm
+PASS Can set 'flex-basis' to a length: calc(0px + 0em)
+PASS Can set 'flex-basis' to a percent: 0%
+FAIL Can set 'flex-basis' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'flex-basis' to a percent: 3.14%
+PASS Can set 'flex-basis' to a percent: calc(0% + 0%)
+PASS Setting 'flex-basis' to a time: 0s throws TypeError
+PASS Setting 'flex-basis' to a time: -3.14ms throws TypeError
+PASS Setting 'flex-basis' to a time: 3.14s throws TypeError
+PASS Setting 'flex-basis' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'flex-basis' to an angle: 0deg throws TypeError
+PASS Setting 'flex-basis' to an angle: 3.14rad throws TypeError
+PASS Setting 'flex-basis' to an angle: -3.14deg throws TypeError
+PASS Setting 'flex-basis' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'flex-basis' to a flexible length: 0fr throws TypeError
+PASS Setting 'flex-basis' to a flexible length: 1fr throws TypeError
+PASS Setting 'flex-basis' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'flex-basis' to a number: 0 throws TypeError
+PASS Setting 'flex-basis' to a number: -3.14 throws TypeError
+PASS Setting 'flex-basis' to a number: 3.14 throws TypeError
+PASS Setting 'flex-basis' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'flex-basis' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'flex-basis' to a transform: perspective(10em) throws TypeError
+PASS Setting 'flex-basis' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html
index 5795abb..de0d62e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('flex-basis', [
   { syntax: 'auto' },
   { syntax: 'content' },
@@ -26,6 +35,7 @@
   {
     syntax: '<percentage>',
     specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html.ini
new file mode 100644
index 0000000..62c3e2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html.ini
@@ -0,0 +1,3 @@
+[flex-basis.html]
+  [Can set 'flex-basis' to a percent: -3.14%]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow-expected.txt
new file mode 100644
index 0000000..27e9785
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow-expected.txt
@@ -0,0 +1,34 @@
+This is a testharness.js-based test.
+PASS Can set 'flex-grow' to CSS-wide keywords: initial
+PASS Can set 'flex-grow' to CSS-wide keywords: inherit
+PASS Can set 'flex-grow' to CSS-wide keywords: unset
+PASS Can set 'flex-grow' to CSS-wide keywords: revert
+PASS Can set 'flex-grow' to var() references:  var(--A)
+PASS Can set 'flex-grow' to a number: 0
+FAIL Can set 'flex-grow' to a number: -3.14 assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'flex-grow' to a number: 3.14
+PASS Can set 'flex-grow' to a number: calc(2 + 3)
+PASS Setting 'flex-grow' to a length: 0px throws TypeError
+PASS Setting 'flex-grow' to a length: -3.14em throws TypeError
+PASS Setting 'flex-grow' to a length: 3.14cm throws TypeError
+PASS Setting 'flex-grow' to a length: calc(0px + 0em) throws TypeError
+PASS Setting 'flex-grow' to a percent: 0% throws TypeError
+PASS Setting 'flex-grow' to a percent: -3.14% throws TypeError
+PASS Setting 'flex-grow' to a percent: 3.14% throws TypeError
+PASS Setting 'flex-grow' to a percent: calc(0% + 0%) throws TypeError
+PASS Setting 'flex-grow' to a time: 0s throws TypeError
+PASS Setting 'flex-grow' to a time: -3.14ms throws TypeError
+PASS Setting 'flex-grow' to a time: 3.14s throws TypeError
+PASS Setting 'flex-grow' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'flex-grow' to an angle: 0deg throws TypeError
+PASS Setting 'flex-grow' to an angle: 3.14rad throws TypeError
+PASS Setting 'flex-grow' to an angle: -3.14deg throws TypeError
+PASS Setting 'flex-grow' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'flex-grow' to a flexible length: 0fr throws TypeError
+PASS Setting 'flex-grow' to a flexible length: 1fr throws TypeError
+PASS Setting 'flex-grow' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'flex-grow' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'flex-grow' to a transform: perspective(10em) throws TypeError
+PASS Setting 'flex-grow' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html
index 9c04ad30..bee9e56 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html
@@ -13,10 +13,20 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_number(input, result) {
+  const number = input.to('number');
+
+  if (number.value < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'number'));
+  else
+    assert_style_value_equals(result, number);
+}
+
 runPropertyTests('flex-grow', [
   {
     syntax: '<number>',
     specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_number
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html.ini
new file mode 100644
index 0000000..d8f6e47
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-grow.html.ini
@@ -0,0 +1,3 @@
+[flex-grow.html]
+  [Can set 'flex-grow' to a number: -3.14]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink-expected.txt
new file mode 100644
index 0000000..6c44481
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink-expected.txt
@@ -0,0 +1,34 @@
+This is a testharness.js-based test.
+PASS Can set 'flex-shrink' to CSS-wide keywords: initial
+PASS Can set 'flex-shrink' to CSS-wide keywords: inherit
+PASS Can set 'flex-shrink' to CSS-wide keywords: unset
+PASS Can set 'flex-shrink' to CSS-wide keywords: revert
+PASS Can set 'flex-shrink' to var() references:  var(--A)
+PASS Can set 'flex-shrink' to a number: 0
+FAIL Can set 'flex-shrink' to a number: -3.14 assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'flex-shrink' to a number: 3.14
+PASS Can set 'flex-shrink' to a number: calc(2 + 3)
+PASS Setting 'flex-shrink' to a length: 0px throws TypeError
+PASS Setting 'flex-shrink' to a length: -3.14em throws TypeError
+PASS Setting 'flex-shrink' to a length: 3.14cm throws TypeError
+PASS Setting 'flex-shrink' to a length: calc(0px + 0em) throws TypeError
+PASS Setting 'flex-shrink' to a percent: 0% throws TypeError
+PASS Setting 'flex-shrink' to a percent: -3.14% throws TypeError
+PASS Setting 'flex-shrink' to a percent: 3.14% throws TypeError
+PASS Setting 'flex-shrink' to a percent: calc(0% + 0%) throws TypeError
+PASS Setting 'flex-shrink' to a time: 0s throws TypeError
+PASS Setting 'flex-shrink' to a time: -3.14ms throws TypeError
+PASS Setting 'flex-shrink' to a time: 3.14s throws TypeError
+PASS Setting 'flex-shrink' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'flex-shrink' to an angle: 0deg throws TypeError
+PASS Setting 'flex-shrink' to an angle: 3.14rad throws TypeError
+PASS Setting 'flex-shrink' to an angle: -3.14deg throws TypeError
+PASS Setting 'flex-shrink' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'flex-shrink' to a flexible length: 0fr throws TypeError
+PASS Setting 'flex-shrink' to a flexible length: 1fr throws TypeError
+PASS Setting 'flex-shrink' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'flex-shrink' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'flex-shrink' to a transform: perspective(10em) throws TypeError
+PASS Setting 'flex-shrink' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html
index 30ee7db..3992fa4 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html
@@ -13,10 +13,20 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_number(input, result) {
+  const number = input.to('number');
+
+  if (number.value < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'number'));
+  else
+    assert_style_value_equals(result, number);
+}
+
 runPropertyTests('flex-shrink', [
   {
     syntax: '<number>',
     specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_number
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html.ini
new file mode 100644
index 0000000..5c7a770
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-shrink.html.ini
@@ -0,0 +1,3 @@
+[flex-shrink.html]
+  [Can set 'flex-shrink' to a number: -3.14]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust-expected.txt
new file mode 100644
index 0000000..163d9cdc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust-expected.txt
@@ -0,0 +1,35 @@
+This is a testharness.js-based test.
+PASS Can set 'font-size-adjust' to CSS-wide keywords: initial
+PASS Can set 'font-size-adjust' to CSS-wide keywords: inherit
+PASS Can set 'font-size-adjust' to CSS-wide keywords: unset
+PASS Can set 'font-size-adjust' to CSS-wide keywords: revert
+PASS Can set 'font-size-adjust' to var() references:  var(--A)
+PASS Can set 'font-size-adjust' to the 'none' keyword: none
+PASS Can set 'font-size-adjust' to a number: 0
+FAIL Can set 'font-size-adjust' to a number: -3.14 assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'font-size-adjust' to a number: 3.14
+PASS Can set 'font-size-adjust' to a number: calc(2 + 3)
+PASS Setting 'font-size-adjust' to a length: 0px throws TypeError
+PASS Setting 'font-size-adjust' to a length: -3.14em throws TypeError
+PASS Setting 'font-size-adjust' to a length: 3.14cm throws TypeError
+PASS Setting 'font-size-adjust' to a length: calc(0px + 0em) throws TypeError
+PASS Setting 'font-size-adjust' to a percent: 0% throws TypeError
+PASS Setting 'font-size-adjust' to a percent: -3.14% throws TypeError
+PASS Setting 'font-size-adjust' to a percent: 3.14% throws TypeError
+PASS Setting 'font-size-adjust' to a percent: calc(0% + 0%) throws TypeError
+PASS Setting 'font-size-adjust' to a time: 0s throws TypeError
+PASS Setting 'font-size-adjust' to a time: -3.14ms throws TypeError
+PASS Setting 'font-size-adjust' to a time: 3.14s throws TypeError
+PASS Setting 'font-size-adjust' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'font-size-adjust' to an angle: 0deg throws TypeError
+PASS Setting 'font-size-adjust' to an angle: 3.14rad throws TypeError
+PASS Setting 'font-size-adjust' to an angle: -3.14deg throws TypeError
+PASS Setting 'font-size-adjust' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'font-size-adjust' to a flexible length: 0fr throws TypeError
+PASS Setting 'font-size-adjust' to a flexible length: 1fr throws TypeError
+PASS Setting 'font-size-adjust' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'font-size-adjust' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'font-size-adjust' to a transform: perspective(10em) throws TypeError
+PASS Setting 'font-size-adjust' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html
index 71cb54c..be06598 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html
@@ -13,11 +13,21 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_number(input, result) {
+  const number = input.to('number');
+
+  if (number.value < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'number'));
+  else
+    assert_style_value_equals(result, number);
+}
+
 runPropertyTests('font-size-adjust', [
   { syntax: 'none' },
   {
     syntax: '<number>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_number
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html.ini
new file mode 100644
index 0000000..64e92c75
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html.ini
@@ -0,0 +1,3 @@
+[font-size-adjust.html]
+  [Can set 'font-size-adjust' to a number: -3.14]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch-expected.txt
index 7a061b4..52cbbc4 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch-expected.txt
@@ -14,7 +14,7 @@
 FAIL Can set 'font-stretch' to the 'extra-expanded' keyword: extra-expanded assert_equals: expected "CSSKeywordValue" but got "CSSUnitValue"
 FAIL Can set 'font-stretch' to the 'ultra-expanded' keyword: ultra-expanded assert_equals: expected "CSSKeywordValue" but got "CSSUnitValue"
 PASS Can set 'font-stretch' to a percent: 0%
-FAIL Can set 'font-stretch' to a percent: -3.14% assert_approx_equals: expected -3.14 +/- 0.000001 but got -3
+FAIL Can set 'font-stretch' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3
 FAIL Can set 'font-stretch' to a percent: 3.14% assert_approx_equals: expected 3.14 +/- 0.000001 but got 3
 PASS Can set 'font-stretch' to a percent: calc(0% + 0%)
 PASS Setting 'font-stretch' to a length: 0px throws TypeError
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch.html
index 3871ff3e..40cffaf 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('font-stretch', [
   { syntax: 'normal' },
   { syntax: 'ultra-condensed' },
@@ -25,7 +34,8 @@
   { syntax: 'ultra-expanded' },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap-expected.txt
new file mode 100644
index 0000000..b522f1f8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap-expected.txt
@@ -0,0 +1,68 @@
+This is a testharness.js-based test.
+Found 64 tests; 62 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Can set 'column-gap' to CSS-wide keywords: initial
+PASS Can set 'column-gap' to CSS-wide keywords: inherit
+PASS Can set 'column-gap' to CSS-wide keywords: unset
+PASS Can set 'column-gap' to CSS-wide keywords: revert
+PASS Can set 'column-gap' to var() references:  var(--A)
+PASS Can set 'column-gap' to the 'normal' keyword: normal
+PASS Can set 'column-gap' to a length: 0px
+PASS Can set 'column-gap' to a length: -3.14em
+PASS Can set 'column-gap' to a length: 3.14cm
+PASS Can set 'column-gap' to a length: calc(0px + 0em)
+PASS Can set 'column-gap' to a percent: 0%
+FAIL Can set 'column-gap' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'column-gap' to a percent: 3.14%
+PASS Can set 'column-gap' to a percent: calc(0% + 0%)
+PASS Setting 'column-gap' to a time: 0s throws TypeError
+PASS Setting 'column-gap' to a time: -3.14ms throws TypeError
+PASS Setting 'column-gap' to a time: 3.14s throws TypeError
+PASS Setting 'column-gap' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'column-gap' to an angle: 0deg throws TypeError
+PASS Setting 'column-gap' to an angle: 3.14rad throws TypeError
+PASS Setting 'column-gap' to an angle: -3.14deg throws TypeError
+PASS Setting 'column-gap' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'column-gap' to a flexible length: 0fr throws TypeError
+PASS Setting 'column-gap' to a flexible length: 1fr throws TypeError
+PASS Setting 'column-gap' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'column-gap' to a number: 0 throws TypeError
+PASS Setting 'column-gap' to a number: -3.14 throws TypeError
+PASS Setting 'column-gap' to a number: 3.14 throws TypeError
+PASS Setting 'column-gap' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'column-gap' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'column-gap' to a transform: perspective(10em) throws TypeError
+PASS Setting 'column-gap' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+PASS Can set 'row-gap' to CSS-wide keywords: initial
+PASS Can set 'row-gap' to CSS-wide keywords: inherit
+PASS Can set 'row-gap' to CSS-wide keywords: unset
+PASS Can set 'row-gap' to CSS-wide keywords: revert
+PASS Can set 'row-gap' to var() references:  var(--A)
+PASS Can set 'row-gap' to the 'normal' keyword: normal
+PASS Can set 'row-gap' to a length: 0px
+PASS Can set 'row-gap' to a length: -3.14em
+PASS Can set 'row-gap' to a length: 3.14cm
+PASS Can set 'row-gap' to a length: calc(0px + 0em)
+PASS Can set 'row-gap' to a percent: 0%
+FAIL Can set 'row-gap' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'row-gap' to a percent: 3.14%
+PASS Can set 'row-gap' to a percent: calc(0% + 0%)
+PASS Setting 'row-gap' to a time: 0s throws TypeError
+PASS Setting 'row-gap' to a time: -3.14ms throws TypeError
+PASS Setting 'row-gap' to a time: 3.14s throws TypeError
+PASS Setting 'row-gap' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'row-gap' to an angle: 0deg throws TypeError
+PASS Setting 'row-gap' to an angle: 3.14rad throws TypeError
+PASS Setting 'row-gap' to an angle: -3.14deg throws TypeError
+PASS Setting 'row-gap' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'row-gap' to a flexible length: 0fr throws TypeError
+PASS Setting 'row-gap' to a flexible length: 1fr throws TypeError
+PASS Setting 'row-gap' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'row-gap' to a number: 0 throws TypeError
+PASS Setting 'row-gap' to a number: -3.14 throws TypeError
+PASS Setting 'row-gap' to a number: 3.14 throws TypeError
+PASS Setting 'row-gap' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'row-gap' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'row-gap' to a transform: perspective(10em) throws TypeError
+PASS Setting 'row-gap' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html
index e07d1cd..20ff5816 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 for (const prefix of ['column', 'row']) {
   runPropertyTests(`${prefix}-gap`, [
     { syntax: 'normal' },
@@ -22,7 +31,8 @@
     },
     {
       syntax: '<percentage>',
-      specified: assert_is_equal_with_range_handling
+      specified: assert_is_equal_with_range_handling,
+      computed: assert_is_equal_with_clamping_percentage
     },
   ]);
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html.ini
new file mode 100644
index 0000000..0addf0e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/gap.html.ini
@@ -0,0 +1,6 @@
+[gap.html]
+  [Can set 'column-gap' to a percent: -3.14%]
+    expected: FAIL
+
+  [Can set 'row-gap' to a percent: -3.14%]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing-expected.txt
deleted file mode 100644
index fc2c933..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing-expected.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-This is a testharness.js-based test.
-PASS Can set 'letter-spacing' to CSS-wide keywords: initial
-PASS Can set 'letter-spacing' to CSS-wide keywords: inherit
-PASS Can set 'letter-spacing' to CSS-wide keywords: unset
-PASS Can set 'letter-spacing' to CSS-wide keywords: revert
-PASS Can set 'letter-spacing' to var() references:  var(--A)
-PASS Can set 'letter-spacing' to the 'normal' keyword: normal
-FAIL Can set 'letter-spacing' to a length: 0px assert_equals: expected "CSSUnitValue" but got "CSSKeywordValue"
-PASS Can set 'letter-spacing' to a length: -3.14em
-PASS Can set 'letter-spacing' to a length: 3.14cm
-FAIL Can set 'letter-spacing' to a length: calc(0px + 0em) assert_class_string: relative lengths must compute to a CSSUnitValue expected "[object CSSUnitValue]" but got "[object CSSKeywordValue]"
-PASS Setting 'letter-spacing' to a percent: 0% throws TypeError
-PASS Setting 'letter-spacing' to a percent: -3.14% throws TypeError
-PASS Setting 'letter-spacing' to a percent: 3.14% throws TypeError
-PASS Setting 'letter-spacing' to a percent: calc(0% + 0%) throws TypeError
-PASS Setting 'letter-spacing' to a time: 0s throws TypeError
-PASS Setting 'letter-spacing' to a time: -3.14ms throws TypeError
-PASS Setting 'letter-spacing' to a time: 3.14s throws TypeError
-PASS Setting 'letter-spacing' to a time: calc(0s + 0ms) throws TypeError
-PASS Setting 'letter-spacing' to an angle: 0deg throws TypeError
-PASS Setting 'letter-spacing' to an angle: 3.14rad throws TypeError
-PASS Setting 'letter-spacing' to an angle: -3.14deg throws TypeError
-PASS Setting 'letter-spacing' to an angle: calc(0rad + 0deg) throws TypeError
-PASS Setting 'letter-spacing' to a flexible length: 0fr throws TypeError
-PASS Setting 'letter-spacing' to a flexible length: 1fr throws TypeError
-PASS Setting 'letter-spacing' to a flexible length: -3.14fr throws TypeError
-PASS Setting 'letter-spacing' to a number: 0 throws TypeError
-PASS Setting 'letter-spacing' to a number: -3.14 throws TypeError
-PASS Setting 'letter-spacing' to a number: 3.14 throws TypeError
-PASS Setting 'letter-spacing' to a number: calc(2 + 3) throws TypeError
-PASS Setting 'letter-spacing' to a transform: translate(50%, 50%) throws TypeError
-PASS Setting 'letter-spacing' to a transform: perspective(10em) throws TypeError
-PASS Setting 'letter-spacing' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html
index ccbf0a0e..9d313c13 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html
@@ -13,9 +13,28 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_zero_special_handling(input, result) {
+  let is_zero_length = true;
+  if (input instanceof CSSMathSum) {
+    for (let operand of input.values)
+      is_zero_length &&= (operand.value == 0);
+  } else
+    is_zero_length = input.value == 0;
+
+  // Per the specification, a computed letter-spacing of zero yields a resolved value (getComputedStyle()
+  // return value) of normal.
+  if (is_zero_length)
+    assert_style_value_equals(result, new CSSKeywordValue("normal"));
+  else
+    assert_is_unit('px', result); // Same check as in testsuite.js
+}
+
 runPropertyTests('letter-spacing', [
   { syntax: 'normal' },
-  { syntax: '<length>' },
+  {
+    syntax: '<length>',
+    computed: assert_is_equal_with_zero_special_handling
+  },
 ]);
 
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html.ini
deleted file mode 100644
index 3f3e4c7..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[letter-spacing.html]
-  [Can set 'letter-spacing' to a length: 0px]
-    expected: FAIL
-
-  [Can set 'letter-spacing' to a length: calc(0px + 0em)]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/logical.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/logical.html
index 9a2b208..2e451d6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/logical.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/logical.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 const logical = {
   axes: ['block', 'inline'],
   sides: ['block-start', 'block-end', 'inline-start', 'inline-end'],
@@ -32,7 +41,8 @@
     // TODO: Test 'auto'
     {
       syntax: '<percentage>',
-      specified: assert_is_equal_with_range_handling
+      specified: assert_is_equal_with_range_handling,
+      computed: assert_is_equal_with_clamping_percentage
     },
     {
       syntax: '<length>',
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin-expected.txt
new file mode 100644
index 0000000..e1dac7f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin-expected.txt
@@ -0,0 +1,34 @@
+This is a testharness.js-based test.
+PASS Can set 'shape-margin' to CSS-wide keywords: initial
+PASS Can set 'shape-margin' to CSS-wide keywords: inherit
+PASS Can set 'shape-margin' to CSS-wide keywords: unset
+PASS Can set 'shape-margin' to CSS-wide keywords: revert
+PASS Can set 'shape-margin' to var() references:  var(--A)
+PASS Can set 'shape-margin' to a length: 0px
+PASS Can set 'shape-margin' to a length: -3.14em
+PASS Can set 'shape-margin' to a length: 3.14cm
+PASS Can set 'shape-margin' to a length: calc(0px + 0em)
+PASS Can set 'shape-margin' to a percent: 0%
+FAIL Can set 'shape-margin' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'shape-margin' to a percent: 3.14%
+PASS Can set 'shape-margin' to a percent: calc(0% + 0%)
+PASS Setting 'shape-margin' to a time: 0s throws TypeError
+PASS Setting 'shape-margin' to a time: -3.14ms throws TypeError
+PASS Setting 'shape-margin' to a time: 3.14s throws TypeError
+PASS Setting 'shape-margin' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'shape-margin' to an angle: 0deg throws TypeError
+PASS Setting 'shape-margin' to an angle: 3.14rad throws TypeError
+PASS Setting 'shape-margin' to an angle: -3.14deg throws TypeError
+PASS Setting 'shape-margin' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'shape-margin' to a flexible length: 0fr throws TypeError
+PASS Setting 'shape-margin' to a flexible length: 1fr throws TypeError
+PASS Setting 'shape-margin' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'shape-margin' to a number: 0 throws TypeError
+PASS Setting 'shape-margin' to a number: -3.14 throws TypeError
+PASS Setting 'shape-margin' to a number: 3.14 throws TypeError
+PASS Setting 'shape-margin' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'shape-margin' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'shape-margin' to a transform: perspective(10em) throws TypeError
+PASS Setting 'shape-margin' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html
index ca517bb..60adc7a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('shape-margin', [
   {
     syntax: '<length>',
@@ -20,7 +29,8 @@
   },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
 ]);
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html.ini
new file mode 100644
index 0000000..1325fffd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-margin.html.ini
@@ -0,0 +1,3 @@
+[shape-margin.html]
+  [Can set 'shape-margin' to a percent: -3.14%]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke-dasharray.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke-dasharray.html
index 6e8fdc4..6c3731cc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke-dasharray.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke-dasharray.html
@@ -13,6 +13,15 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('stroke-dasharray', [
   { syntax: 'none' },
   {
@@ -22,6 +31,7 @@
   {
     syntax: '<percentage>',
     specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<number>',
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width-expected.txt
new file mode 100644
index 0000000..3109893
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width-expected.txt
@@ -0,0 +1,99 @@
+This is a testharness.js-based test.
+Found 95 tests; 92 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Can set 'width' to CSS-wide keywords: initial
+PASS Can set 'width' to CSS-wide keywords: inherit
+PASS Can set 'width' to CSS-wide keywords: unset
+PASS Can set 'width' to CSS-wide keywords: revert
+PASS Can set 'width' to var() references:  var(--A)
+PASS Can set 'width' to the 'auto' keyword: auto
+PASS Can set 'width' to a percent: 0%
+FAIL Can set 'width' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'width' to a percent: 3.14%
+PASS Can set 'width' to a percent: calc(0% + 0%)
+PASS Can set 'width' to a length: 0px
+PASS Can set 'width' to a length: -3.14em
+PASS Can set 'width' to a length: 3.14cm
+PASS Can set 'width' to a length: calc(0px + 0em)
+PASS Setting 'width' to a time: 0s throws TypeError
+PASS Setting 'width' to a time: -3.14ms throws TypeError
+PASS Setting 'width' to a time: 3.14s throws TypeError
+PASS Setting 'width' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'width' to an angle: 0deg throws TypeError
+PASS Setting 'width' to an angle: 3.14rad throws TypeError
+PASS Setting 'width' to an angle: -3.14deg throws TypeError
+PASS Setting 'width' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'width' to a flexible length: 0fr throws TypeError
+PASS Setting 'width' to a flexible length: 1fr throws TypeError
+PASS Setting 'width' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'width' to a number: 0 throws TypeError
+PASS Setting 'width' to a number: -3.14 throws TypeError
+PASS Setting 'width' to a number: 3.14 throws TypeError
+PASS Setting 'width' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'width' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'width' to a transform: perspective(10em) throws TypeError
+PASS Setting 'width' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+PASS Can set 'min-width' to CSS-wide keywords: initial
+PASS Can set 'min-width' to CSS-wide keywords: inherit
+PASS Can set 'min-width' to CSS-wide keywords: unset
+PASS Can set 'min-width' to CSS-wide keywords: revert
+PASS Can set 'min-width' to var() references:  var(--A)
+PASS Can set 'min-width' to a percent: 0%
+FAIL Can set 'min-width' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'min-width' to a percent: 3.14%
+PASS Can set 'min-width' to a percent: calc(0% + 0%)
+PASS Can set 'min-width' to a length: 0px
+PASS Can set 'min-width' to a length: -3.14em
+PASS Can set 'min-width' to a length: 3.14cm
+PASS Can set 'min-width' to a length: calc(0px + 0em)
+PASS Setting 'min-width' to a time: 0s throws TypeError
+PASS Setting 'min-width' to a time: -3.14ms throws TypeError
+PASS Setting 'min-width' to a time: 3.14s throws TypeError
+PASS Setting 'min-width' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'min-width' to an angle: 0deg throws TypeError
+PASS Setting 'min-width' to an angle: 3.14rad throws TypeError
+PASS Setting 'min-width' to an angle: -3.14deg throws TypeError
+PASS Setting 'min-width' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'min-width' to a flexible length: 0fr throws TypeError
+PASS Setting 'min-width' to a flexible length: 1fr throws TypeError
+PASS Setting 'min-width' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'min-width' to a number: 0 throws TypeError
+PASS Setting 'min-width' to a number: -3.14 throws TypeError
+PASS Setting 'min-width' to a number: 3.14 throws TypeError
+PASS Setting 'min-width' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'min-width' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'min-width' to a transform: perspective(10em) throws TypeError
+PASS Setting 'min-width' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+PASS Can set 'max-width' to CSS-wide keywords: initial
+PASS Can set 'max-width' to CSS-wide keywords: inherit
+PASS Can set 'max-width' to CSS-wide keywords: unset
+PASS Can set 'max-width' to CSS-wide keywords: revert
+PASS Can set 'max-width' to var() references:  var(--A)
+PASS Can set 'max-width' to the 'none' keyword: none
+PASS Can set 'max-width' to a percent: 0%
+FAIL Can set 'max-width' to a percent: -3.14% assert_approx_equals: expected 0 +/- 0.000001 but got -3.140000104904175
+PASS Can set 'max-width' to a percent: 3.14%
+PASS Can set 'max-width' to a percent: calc(0% + 0%)
+PASS Can set 'max-width' to a length: 0px
+PASS Can set 'max-width' to a length: -3.14em
+PASS Can set 'max-width' to a length: 3.14cm
+PASS Can set 'max-width' to a length: calc(0px + 0em)
+PASS Setting 'max-width' to a time: 0s throws TypeError
+PASS Setting 'max-width' to a time: -3.14ms throws TypeError
+PASS Setting 'max-width' to a time: 3.14s throws TypeError
+PASS Setting 'max-width' to a time: calc(0s + 0ms) throws TypeError
+PASS Setting 'max-width' to an angle: 0deg throws TypeError
+PASS Setting 'max-width' to an angle: 3.14rad throws TypeError
+PASS Setting 'max-width' to an angle: -3.14deg throws TypeError
+PASS Setting 'max-width' to an angle: calc(0rad + 0deg) throws TypeError
+PASS Setting 'max-width' to a flexible length: 0fr throws TypeError
+PASS Setting 'max-width' to a flexible length: 1fr throws TypeError
+PASS Setting 'max-width' to a flexible length: -3.14fr throws TypeError
+PASS Setting 'max-width' to a number: 0 throws TypeError
+PASS Setting 'max-width' to a number: -3.14 throws TypeError
+PASS Setting 'max-width' to a number: 3.14 throws TypeError
+PASS Setting 'max-width' to a number: calc(2 + 3) throws TypeError
+PASS Setting 'max-width' to a transform: translate(50%, 50%) throws TypeError
+PASS Setting 'max-width' to a transform: perspective(10em) throws TypeError
+PASS Setting 'max-width' to a transform: translate3d(0px, 1px, 2px) translate(0px, 1px) rotate3d(1, 2, 3, 45deg) rotate(45deg) scale3d(1, 2, 3) scale(1, 2) skew(1deg, 1deg) skewX(1deg) skewY(45deg) perspective(1px) matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) matrix(1, 2, 3, 4, 5, 6) throws TypeError
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html
index 29b3382..9f150437 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html
@@ -13,11 +13,21 @@
 <script>
 'use strict';
 
+function assert_is_equal_with_clamping_percentage(input, result) {
+  const percent = input.to('percent').value;
+
+  if (percent < 0)
+    assert_style_value_equals(result, new CSSUnitValue(0, 'percent'));
+  else
+    assert_style_value_equals(result, new CSSUnitValue(percent, 'percent'));
+}
+
 runPropertyTests('width', [
   { syntax: 'auto' },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
@@ -28,7 +38,8 @@
 runPropertyTests('min-width', [
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
@@ -40,7 +51,8 @@
   { syntax: 'none' },
   {
     syntax: '<percentage>',
-    specified: assert_is_equal_with_range_handling
+    specified: assert_is_equal_with_range_handling,
+    computed: assert_is_equal_with_clamping_percentage
   },
   {
     syntax: '<length>',
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html.ini b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html.ini
new file mode 100644
index 0000000..c6c0b0a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/the-stylepropertymap/properties/width.html.ini
@@ -0,0 +1,9 @@
+[width.html]
+  [Can set 'width' to a percent: -3.14%]
+    expected: FAIL
+
+  [Can set 'min-width' to a percent: -3.14%]
+    expected: FAIL
+
+  [Can set 'max-width' to a percent: -3.14%]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness-expected.txt
index b172560..8001b22 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 404 tests; 329 PASS, 75 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 406 tests; 329 PASS, 77 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface Window: original interface defined
@@ -132,6 +132,7 @@
 PASS VisualViewport interface: attribute scale
 PASS VisualViewport interface: attribute onresize
 PASS VisualViewport interface: attribute onscroll
+FAIL VisualViewport interface: attribute onscrollend assert_true: The prototype object must have a property "onscrollend" expected true got false
 PASS VisualViewport must be primary interface of self.visualViewport
 PASS Stringification of self.visualViewport
 PASS VisualViewport interface: self.visualViewport must inherit property "offsetLeft" with the proper type
@@ -143,6 +144,7 @@
 PASS VisualViewport interface: self.visualViewport must inherit property "scale" with the proper type
 PASS VisualViewport interface: self.visualViewport must inherit property "onresize" with the proper type
 PASS VisualViewport interface: self.visualViewport must inherit property "onscroll" with the proper type
+FAIL VisualViewport interface: self.visualViewport must inherit property "onscrollend" with the proper type assert_inherits: property "onscrollend" not found in prototype chain
 FAIL CSSPseudoElement interface: operation getBoxQuads(optional BoxQuadOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing
 FAIL CSSPseudoElement interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, optional ConvertCoordinateOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing
 FAIL CSSPseudoElement interface: operation convertRectFromNode(DOMRectReadOnly, GeometryNode, optional ConvertCoordinateOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness.html.ini b/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness.html.ini
index 8f5c276..6e32774 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/idlharness.html.ini
@@ -223,3 +223,9 @@
 
   [Text interface: calling convertPointFromNode(DOMPointInit, GeometryNode, optional ConvertCoordinateOptions) on document.createTextNode("x") with too few arguments must throw TypeError]
     expected: FAIL
+
+  [VisualViewport interface: attribute onscrollend]
+    expected: FAIL
+
+  [VisualViewport interface: self.visualViewport must inherit property "onscrollend" with the proper type]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-window.html.ini b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-window.html.ini
deleted file mode 100644
index dc6759f8..0000000
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-window.html.ini
+++ /dev/null
@@ -1,48 +0,0 @@
-[scroll-behavior-main-frame-window.html]
-  [Main frame with smooth scroll-behavior ; scrollBy() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollBy() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): FAIL
-
-  [Main frame with smooth scroll-behavior ; scroll() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollBy() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with auto scroll-behavior ; scroll() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with auto scroll-behavior ; scrollBy() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scroll() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with auto scroll-behavior ; scrollTo() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scroll() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/has-complexity.html.ini b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/has-complexity.html.ini
index abe15aea..c58a580b 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/has-complexity.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/has-complexity.html.ini
@@ -1,4 +1,4 @@
 [has-complexity.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [OK, TIMEOUT]
     TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/only-of-type.html b/third_party/blink/web_tests/external/wpt/css/selectors/only-of-type.html
new file mode 100644
index 0000000..28a0ae7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/only-of-type.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Selectors :only-of-type</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#the-only-of-type-pseudo">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!--
+  See also child-indexed-pseudo-class.html.
+-->
+<body>
+
+<div>
+  <div id="target1">Whitespace nodes should be ignored.</div>
+</div>
+
+<div>
+  <div id="target2">A comment node should be ignored.</div>
+  <!-- -->
+</div>
+
+<div>
+  <div id="target3">Non-whitespace text node should be ignored.</div>
+  .
+</div>
+
+<div>
+  <blockquote></blockquote>
+  <div id="target4" data-expected="false">There is another child element of a different type.</div>
+</div>
+
+<div>
+  <div id="target5"></div>
+</div>
+
+<script>
+for (let i = 1; i <= 4; ++i) {
+  let target = document.querySelector(`#target${i}`);
+  test(() => {
+    if (target.dataset.expected == 'true')
+      assert_false(target.matches(':only-of-type'));
+    else
+      assert_true(target.matches(':only-of-type'));
+  }, target.textContent);
+}
+
+test(() => {
+  const target = document.querySelector('#target5');
+  assert_true(target.matches(':only-of-type'));
+
+  const of_different_type =  target.parentNode.appendChild(document.createElement('span'));
+  assert_true(of_different_type.matches(':only-of-type'));
+  assert_true(target.matches(':only-of-type'));
+
+  const another_of_type = target.parentNode.appendChild(document.createElement('div'));
+  assert_false(target.matches(':only-of-type'));
+  assert_false(another_of_type.matches(':only-of-type'));
+
+  another_of_type.remove();
+  assert_true(target.matches(':only-of-type'));
+}, 'Dynamic addition and removal');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini b/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
deleted file mode 100644
index fdce5ad..0000000
--- a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[ElementInternals-target-element-is-held-strongly.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
-    if (flag_specific == "") and (os == "win"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/EventListener-incumbent-global-2.sub.html.ini b/third_party/blink/web_tests/external/wpt/dom/events/EventListener-incumbent-global-2.sub.html.ini
index f7633f97..fe841b99 100644
--- a/third_party/blink/web_tests/external/wpt/dom/events/EventListener-incumbent-global-2.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/dom/events/EventListener-incumbent-global-2.sub.html.ini
@@ -1,4 +1,5 @@
 [EventListener-incumbent-global-2.sub.html]
   expected:
-    if (flag_specific == "") and (product == "content_shell"): TIMEOUT
-    if flag_specific == "disable-layout-ng": [TIMEOUT, CRASH]
+    if (flag_specific == "") and (product == "chrome"): OK
+    if flag_specific == "disable-site-isolation-trials": OK
+    TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-deleteData.html.ini b/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-deleteData.html.ini
deleted file mode 100644
index 8a4d2fe..0000000
--- a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-deleteData.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[Range-mutations-deleteData.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini b/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
index cf2a6f46..8247fe6b 100644
--- a/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
+++ b/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
@@ -97,8 +97,6 @@
 
 
 [formatblock.html?1001-2000]
-  expected:
-    if os == "win": [OK, CRASH]
   [[["defaultparagraphseparator","p"\],["formatblock","<div>"\]\] "<del>[foobar\]</del>" queryCommandValue("formatblock") after]
     expected: FAIL
 
@@ -687,6 +685,8 @@
 
 
 [formatblock.html?3001-4000]
+  expected:
+    if os == "win": [OK, CRASH]
   [[["defaultparagraphseparator","div"\],["formatblock","<h5>"\]\] "<p>[foobar\]</p>" queryCommandValue("formatblock") after]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/removeformat.html.ini b/third_party/blink/web_tests/external/wpt/editing/run/removeformat.html.ini
index e938d3a..3515b06 100644
--- a/third_party/blink/web_tests/external/wpt/editing/run/removeformat.html.ini
+++ b/third_party/blink/web_tests/external/wpt/editing/run/removeformat.html.ini
@@ -1,4 +1,6 @@
 [removeformat.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [[["removeformat",""\]\] "foo[\]bar": execCommand("removeformat", false, "") return value]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
index 23803ef..f090197 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
+++ b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
@@ -1,6 +1,3 @@
 [image-src-change.html]
   expected:
-    if product == "chrome": [OK, TIMEOUT]
-  [Element Timing: changing src causes a new entry to be dispatched.]
-    expected:
-      if product == "chrome": [PASS, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/encoding-detection/uk-KOI8-U-late.tentative.html.ini b/third_party/blink/web_tests/external/wpt/encoding-detection/uk-KOI8-U-late.tentative.html.ini
index e4495a31..f5bc063 100644
--- a/third_party/blink/web_tests/external/wpt/encoding-detection/uk-KOI8-U-late.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding-detection/uk-KOI8-U-late.tentative.html.ini
@@ -1,3 +1,5 @@
 [uk-KOI8-U-late.tentative.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Check detection result]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/encoding-detection/vi-windows-1258-late.tentative.html.ini b/third_party/blink/web_tests/external/wpt/encoding-detection/vi-windows-1258-late.tentative.html.ini
index 78be944..317a3ccf 100644
--- a/third_party/blink/web_tests/external/wpt/encoding-detection/vi-windows-1258-late.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding-detection/vi-windows-1258-late.tentative.html.ini
@@ -1,4 +1,5 @@
 [vi-windows-1258-late.tentative.html]
-  expected: [OK, ERROR]
+  expected:
+    if product == "chrome": ERROR
   [Check detection result]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html.ini
deleted file mode 100644
index 6f52998..0000000
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html.ini
+++ /dev/null
@@ -1,17 +0,0 @@
-[iso2022jp-decode.html?1001-2000]
-
-[iso2022jp-decode.html?6001-7000]
-
-[iso2022jp-decode.html?4001-5000]
-
-[iso2022jp-decode.html?1-1000]
-  expected:
-    if os == "win": [OK, CRASH]
-
-[iso2022jp-decode.html?2001-3000]
-
-[iso2022jp-decode.html?7001-last]
-
-[iso2022jp-decode.html?5001-6000]
-
-[iso2022jp-decode.html?3001-4000]
diff --git a/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini b/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
index 450e960b..c967c0a2 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
@@ -124,3 +124,6 @@
 
   [x-iscii-or is not supported by the Encoding Standard]
     expected: [PASS, TIMEOUT]
+
+  [x-ia5-german is not supported by the Encoding Standard]
+    expected: [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt
index 4fe4540..6e6763dd 100644
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any-expected.txt
@@ -28,18 +28,9 @@
 PASS EventCounts interface: maplike<DOMString, unsigned long long>
 PASS EventCounts must be primary interface of performance.eventCounts
 PASS Stringification of performance.eventCounts
-FAIL InteractionCounts interface: existence and properties of interface object assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface object length assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface object name assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface: existence and properties of interface prototype object assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "InteractionCounts" expected property "InteractionCounts" missing
-FAIL InteractionCounts interface: maplike<DOMString, unsigned long long> Cannot read properties of undefined (reading 'prototype')
-FAIL InteractionCounts must be primary interface of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 PASS Performance interface: attribute eventCounts
-FAIL Performance interface: attribute interactionCounts assert_true: The prototype object must have a property "interactionCounts" expected true got false
+FAIL Performance interface: attribute interactionCount assert_true: The prototype object must have a property "interactionCount" expected true got false
 PASS Performance interface: performance must inherit property "eventCounts" with the proper type
-FAIL Performance interface: performance must inherit property "interactionCounts" with the proper type assert_inherits: property "interactionCounts" not found in prototype chain
+FAIL Performance interface: performance must inherit property "interactionCount" with the proper type assert_inherits: property "interactionCount" not found in prototype chain
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.js.ini b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.js.ini
index 59677c6..10efdbe 100644
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.js.ini
@@ -8,15 +8,6 @@
   [EventCounts interface: performance.eventCounts must not have property "undefined"]
     expected: FAIL
 
-  [InteractionCounts must be primary interface of performance.interactionCounts]
-    expected: FAIL
-
-  [Stringification of performance.interactionCounts]
-    expected: FAIL
-
-  [InteractionCounts interface: performance.interactionCounts must not have property "undefined"]
-    expected: FAIL
-
 
 [idlharness.any.worker.html]
   [EventCounts must be primary interface of performance.eventCounts]
@@ -28,48 +19,12 @@
   [EventCounts interface: performance.eventCounts must not have property "undefined"]
     expected: FAIL
 
-  [InteractionCounts must be primary interface of performance.interactionCounts]
-    expected: FAIL
-
-  [Stringification of performance.interactionCounts]
-    expected: FAIL
-
-  [InteractionCounts interface: performance.interactionCounts must not have property "undefined"]
-    expected: FAIL
-
 
 [idlharness.any.html]
-  [InteractionCounts interface: existence and properties of interface object]
+  [Performance interface: performance must inherit property "interactionCount" with the proper type]
     expected: FAIL
 
-  [InteractionCounts interface object length]
-    expected: FAIL
-
-  [InteractionCounts interface object name]
-    expected: FAIL
-
-  [InteractionCounts interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [InteractionCounts interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
-  [InteractionCounts interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [InteractionCounts interface: maplike<DOMString, unsigned long long>]
-    expected: FAIL
-
-  [InteractionCounts must be primary interface of performance.interactionCounts]
-    expected: FAIL
-
-  [Stringification of performance.interactionCounts]
-    expected: FAIL
-
-  [Performance interface: attribute interactionCounts]
-    expected: FAIL
-
-  [Performance interface: performance must inherit property "interactionCounts" with the proper type]
+  [Performance interface: attribute interactionCount]
     expected: FAIL
 
 
@@ -82,12 +37,3 @@
 
   [EventCounts interface: performance.eventCounts must not have property "undefined"]
     expected: FAIL
-
-  [InteractionCounts must be primary interface of performance.interactionCounts]
-    expected: FAIL
-
-  [Stringification of performance.interactionCounts]
-    expected: FAIL
-
-  [InteractionCounts interface: performance.interactionCounts must not have property "undefined"]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.serviceworker-expected.txt
index a4f87f4c..f0d0c35b 100644
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.serviceworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.serviceworker-expected.txt
@@ -12,13 +12,9 @@
 FAIL EventCounts must be primary interface of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL Stringification of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL EventCounts interface: performance.eventCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
-PASS InteractionCounts interface: existence and properties of interface object
-FAIL InteractionCounts must be primary interface of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL InteractionCounts interface: performance.interactionCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
 PASS Performance interface: member eventCounts
-PASS Performance interface: member interactionCounts
+PASS Performance interface: member interactionCount
 PASS Performance interface: performance must not have property "eventCounts"
-PASS Performance interface: performance must not have property "interactionCounts"
+PASS Performance interface: performance must not have property "interactionCount"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.sharedworker-expected.txt
index a4f87f4c..f0d0c35b 100644
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.sharedworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.sharedworker-expected.txt
@@ -12,13 +12,9 @@
 FAIL EventCounts must be primary interface of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL Stringification of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL EventCounts interface: performance.eventCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
-PASS InteractionCounts interface: existence and properties of interface object
-FAIL InteractionCounts must be primary interface of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL InteractionCounts interface: performance.interactionCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
 PASS Performance interface: member eventCounts
-PASS Performance interface: member interactionCounts
+PASS Performance interface: member interactionCount
 PASS Performance interface: performance must not have property "eventCounts"
-PASS Performance interface: performance must not have property "interactionCounts"
+PASS Performance interface: performance must not have property "interactionCount"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.worker-expected.txt
index a4f87f4c..f0d0c35b 100644
--- a/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/event-timing/idlharness.any.worker-expected.txt
@@ -12,13 +12,9 @@
 FAIL EventCounts must be primary interface of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL Stringification of performance.eventCounts assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL EventCounts interface: performance.eventCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
-PASS InteractionCounts interface: existence and properties of interface object
-FAIL InteractionCounts must be primary interface of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of performance.interactionCounts assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL InteractionCounts interface: performance.interactionCounts must not have property "undefined" Cannot use 'in' operator to search for 'undefined' in undefined
 PASS Performance interface: member eventCounts
-PASS Performance interface: member interactionCounts
+PASS Performance interface: member interactionCount
 PASS Performance interface: performance must not have property "eventCounts"
-PASS Performance interface: performance must not have property "interactionCounts"
+PASS Performance interface: performance must not have property "interactionCount"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
index 25463cf..319b1b75 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
@@ -1,6 +1,8 @@
 [cors-cookies.any.html]
+  [Include mode: remote cookies are not sent with local request]
+    expected:
+      if product == "chrome": [PASS, FAIL]
 
-[cors-cookies.any.worker.html]
   [Include mode: 1 cookie]
     expected:
       if product == "chrome": [PASS, FAIL]
@@ -9,6 +11,5 @@
     expected:
       if product == "chrome": [PASS, FAIL]
 
-  [Include mode: remote cookies are not sent with local request]
-    expected:
-      if product == "chrome": [PASS, FAIL]
+
+[cors-cookies.any.worker.html]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-frame.sub.html.ini
similarity index 64%
rename from third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini
rename to third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-frame.sub.html.ini
index 96b1dbd1f..fc10a518 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-frame.sub.html.ini
@@ -1,3 +1,3 @@
-[element-iframe.sub.html]
+[element-frame.sub.html]
   expected:
     if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.https.optional.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.https.optional.sub.html.ini
index 9874a8c..d25631d 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.https.optional.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.https.optional.sub.html.ini
@@ -1,3 +1,3 @@
 [element-meta-refresh.https.optional.sub.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.optional.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.optional.sub.html.ini
index a749978..b31f66ee 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.optional.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-meta-refresh.optional.sub.html.ini
@@ -1,3 +1,3 @@
 [element-meta-refresh.optional.sub.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini
new file mode 100644
index 0000000..b15ba753
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini
@@ -0,0 +1,3 @@
+[window-history.https.sub.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js.ini
index 550507e..40e6698b 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js.ini
@@ -1,6 +1,6 @@
 [assorted.window.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
index abc126ce..9132c01 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
@@ -1,4 +1,6 @@
 [iframe.tentative.https.window.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [private to local: success.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
index ff15806..1efc63a 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
@@ -1,15 +1,16 @@
 [service-worker-background-fetch.https.window.html]
   [local to local: success.]
     expected:
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [private to local: success.]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
 
   [private to private: success.]
     expected:
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [public to local: success.]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini
index 8ad3d983..eaa7acf65 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini
@@ -1,3 +1,3 @@
 [service-worker-fetch.https.window.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
index 4f0bb0c..cd78228 100644
--- a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
@@ -1,2 +1,4 @@
 [focus-already-focused-iframe-same-site.html]
-  expected: TIMEOUT
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [TIMEOUT, CRASH]
+    TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html.ini b/third_party/blink/web_tests/external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html.ini
index a4e9ffe..5019503 100644
--- a/third_party/blink/web_tests/external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html.ini
@@ -1,3 +1,5 @@
 [iframe-focus-with-different-site-intermediate-frame.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [Check result]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini
index 2d96c8ea..c3348a5c 100644
--- a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini
@@ -1,4 +1,4 @@
 [FileSystemFileHandle-create-sync-access-handle.https.tentative.window.html]
   [Attempt to create a sync access handle.]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window-expected.txt
index 2add0e7..8bf0422 100644
--- a/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window-expected.txt
@@ -10,7 +10,10 @@
 PASS GamepadHapticActuator interface: existence and properties of interface prototype object's "constructor" property
 PASS GamepadHapticActuator interface: existence and properties of interface prototype object's @@unscopables property
 PASS GamepadHapticActuator interface: attribute type
+FAIL GamepadHapticActuator interface: operation canPlayEffectType(GamepadHapticEffectType) assert_own_property: interface prototype object missing non-static operation expected property "canPlayEffectType" missing
+FAIL GamepadHapticActuator interface: operation playEffect(GamepadHapticEffectType, optional GamepadEffectParameters) assert_equals: property has wrong .length expected 1 but got 2
 FAIL GamepadHapticActuator interface: operation pulse(double, double) assert_own_property: interface prototype object missing non-static operation expected property "pulse" missing
+PASS GamepadHapticActuator interface: operation reset()
 FAIL GamepadPose interface: existence and properties of interface object assert_own_property: self does not have own property "GamepadPose" expected property "GamepadPose" missing
 FAIL GamepadPose interface object length assert_own_property: self does not have own property "GamepadPose" expected property "GamepadPose" missing
 FAIL GamepadPose interface object name assert_own_property: self does not have own property "GamepadPose" expected property "GamepadPose" missing
@@ -39,5 +42,6 @@
 FAIL Gamepad interface: attribute hapticActuators assert_true: The prototype object must have a property "hapticActuators" expected true got false
 FAIL Gamepad interface: attribute pose assert_true: The prototype object must have a property "pose" expected true got false
 FAIL Gamepad interface: attribute touchEvents assert_true: The prototype object must have a property "touchEvents" expected true got false
+PASS Gamepad interface: attribute vibrationActuator
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window.js.ini b/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window.js.ini
index 1d70350c..c9dd14c3 100644
--- a/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/gamepad/idlharness-extensions.https.window.js.ini
@@ -85,3 +85,9 @@
 
   [Gamepad interface: attribute touchEvents]
     expected: FAIL
+
+  [GamepadHapticActuator interface: operation canPlayEffectType(GamepadHapticEffectType)]
+    expected: FAIL
+
+  [GamepadHapticActuator interface: operation playEffect(GamepadHapticEffectType, optional GamepadEffectParameters)]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini b/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini
index ab66181..9ce3794 100644
--- a/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini
+++ b/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini
@@ -1,3 +1,3 @@
 [clamped-time-origin.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/anonymous-iframe-popup.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/anonymous-iframe-popup.tentative.https.window.js.ini
new file mode 100644
index 0000000..e222dfd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/anonymous-iframe-popup.tentative.https.window.js.ini
@@ -0,0 +1,3 @@
+[anonymous-iframe-popup.tentative.https.window.html]
+  expected:
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
index 21e5d4fae..9bd26c2 100644
--- a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
@@ -3,10 +3,8 @@
     if product == "chrome": [OK, ERROR]
 
 [embedding.tentative.https.window.html?13-last]
-  [Cross-Origin-Isolated parent embeds cross-origin COEP credentialless iframe]
-    expected:
-      if os == "win": [PASS, FAIL]
-
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [embedding.tentative.https.window.html?3-4]
   expected:
@@ -25,13 +23,15 @@
 [embedding.tentative.https.window.html?5-5]
 
 [embedding.tentative.https.window.html?1-1]
-
-[embedding.tentative.https.window.html?6-6]
-
-[embedding.tentative.https.window.html?7-7]
   expected:
     if product == "chrome": [OK, ERROR]
 
+[embedding.tentative.https.window.html?6-6]
+  expected:
+    if product == "chrome": ERROR
+
+[embedding.tentative.https.window.html?7-7]
+
 [embedding.tentative.https.window.html?10-10]
 
 [embedding.tentative.https.window.html?2-2]
@@ -39,13 +39,11 @@
 [embedding.tentative.https.window.html?12-12]
 
 [embedding.tentative.https.window.html?4-4]
-  expected:
-    if product == "chrome": [OK, ERROR]
 
 [embedding.tentative.https.window.html?8-8]
-  expected:
-    if product == "chrome": [ERROR, OK]
 
 [embedding.tentative.https.window.html?3-3]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [embedding.tentative.https.window.html?9-9]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html.ini
index 33ae6cd3..947eebb7 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html.ini
@@ -1,5 +1,6 @@
 [service-worker-controlled-after-restore.https.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [Pages should remain controlled after restored from BFCache]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if product == "chrome": PRECONDITION_FAILED
+      if (os == "linux") and (product == "chrome"): PRECONDITION_FAILED
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini
new file mode 100644
index 0000000..951dcfce2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini
@@ -0,0 +1,4 @@
+[before-load-hash.html]
+  [when changing hash, before load]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
index 71dab1d..2ff88db 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
@@ -1,6 +1,6 @@
 [same-document-traversal-cross-document-traversal.html]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
   [traversals in the same (back) direction: queued up]
     expected: [PASS, TIMEOUT]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate_url_rewriting.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate_url_rewriting.html.ini
index 0eb3574..d28878e3 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate_url_rewriting.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate_url_rewriting.html.ini
@@ -1,4 +1,6 @@
 [history_pushstate_url_rewriting.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [blob:(a blob URL for this origin) to blob:(a blob URL for this origin)?newsearch should not work]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
new file mode 100644
index 0000000..9f1fd20a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_2.html]
+  [Multiple history traversals, last would be aborted]
+    expected:
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 218b1cc..74dcce932 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -1,10 +1,9 @@
 [location-protocol-setter-non-broken.html]
   [Set HTTP URL frame location.protocol to data]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
-      FAIL
+    expected: FAIL
 
   [Set data URL frame location.protocol to data]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): PASS
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
+      if flag_specific == "disable-layout-ng": PASS
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
index 6502952..fa4bd46 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
@@ -1,7 +1,6 @@
 [cross-origin-objects.html]
   expected:
-    if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [OK, CRASH]
-    if (flag_specific == "") and (product == "chrome"): [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
   [Only certain properties are accessible cross-origin (cross-origin)]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
index 1524e6e2..9759a28 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
@@ -1,8 +1,11 @@
 [parent-yes-child-no-subdomain.sub.https.html]
   [setting document.domain must not give sync access]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
index 1fe7649..5f428d85c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
@@ -1,4 +1,5 @@
 [parent-yes-child-yes-port.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
index e3a89c0f..2b7fa4f 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
@@ -1,8 +1,10 @@
 [parent-yes-child-yes-same.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [child: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-subdomain.sub.https.html.ini
index 428253f..c5b33c3 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-subdomain.sub.https.html.ini
@@ -1,5 +1,4 @@
 [parent-yes-child-yes-subdomain.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
index e5fb8dea..ef214e6 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
@@ -1,17 +1,18 @@
 [parent-no-child1-yes-subdomain-child2-no-port.sub.https.html]
   [child1: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
 
   [Parent to child1: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child1 to child2: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child2 to child1: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
new file mode 100644
index 0000000..2a0462e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -0,0 +1,16 @@
+[parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html]
+  [Parent to child1: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [Parent to child2: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child1: originAgentCluster must equal true]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child2: originAgentCluster must equal true]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
index 1d37b55..58f748d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -1,23 +1,15 @@
 [parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html]
   [Parent to child1: setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [Parent to child2: setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [child2: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
-  [child1: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
index 5671887b..e5bf5d7d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
@@ -11,17 +11,14 @@
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
 
-  [parent: originAgentCluster must equal true]
+  [Parent to child2: setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [Parent to child1: setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
-  [Parent to child2: setting document.domain must not give sync access]
+  [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
index 55c95079..870d618 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -1,12 +1,15 @@
 [parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html]
   [Parent to child1: setting document.domain must not give sync access]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [Parent to child2: setting document.domain must not give sync access]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini
deleted file mode 100644
index 9bcd0656..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini
+++ /dev/null
@@ -1,24 +0,0 @@
-[parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html]
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [Parent to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [child1 to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [child2 to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [parent: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [child2: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
index ce25982..55806ef 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -6,3 +6,7 @@
   [parent: originAgentCluster must equal true]
     expected:
       if product == "chrome": FAIL
+
+  [child1: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
index d9ff6bd..106475c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
@@ -1,26 +1,20 @@
 [parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html]
   [Parent to child2: setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [child2 to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [child1 to child2: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child2 to child1: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
index 71b884a3..5bd8678 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -1,23 +1,13 @@
 [parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if os == "win": FAIL
 
   [child2: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
index 8651d29..3be8b66 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -1,8 +1,7 @@
 [parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
@@ -11,11 +10,3 @@
   [child2: originAgentCluster must equal true]
     expected:
       if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini
deleted file mode 100644
index 785b82bc..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini
+++ /dev/null
@@ -1,28 +0,0 @@
-[parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html]
-  [child1 to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [child2 to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [child1: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [child2: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [parent: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
index 55092ef7..e3b0508 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -1,9 +1,7 @@
 [parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
index d4bd404..acfa7b8 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
@@ -1,4 +1,11 @@
 [document-domain.sub.https.html]
   [Setting document.domain must not change same-originness]
     expected:
-      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [Having an origin-keyed subdomain child try to set document.domain must not change the document.domain value it sees]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/javascript-url-yes.https.html.ini
similarity index 69%
copy from third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
copy to third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/javascript-url-yes.https.html.ini
index c1f1d46..189de04 100644
--- a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/javascript-url-yes.https.html.ini
@@ -1,3 +1,3 @@
-[Range-mutations-dataChange.html]
+[javascript-url-yes.https.html]
   expected:
     if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-no.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-no.https.html.ini
index 27d7b90..e890d00d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-no.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-no.https.html.ini
@@ -1,5 +1,6 @@
 [sandboxed-same-origin-iframe-no.https.html]
   [originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
index 805a17e1..14cb1e6c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
@@ -1,5 +1,4 @@
 [sandboxed-same-origin-iframe-yes.https.html]
   [originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/going-back.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/going-back.sub.https.html.ini
index b8b3d6a..9f1f582 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/going-back.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/going-back.sub.https.html.ini
@@ -1,20 +1,16 @@
 [going-back.sub.https.html]
   [Before navigation: parent to child1: setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [After navigation: parent to child2: setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [After back: parent to child1: setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [After back: parent to child2: setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
index ec2a502..fbb118d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
@@ -1,12 +1,12 @@
 [parent-no-1-no-same-2-yes-port.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
 
   [before child: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
index 29d71606..d2d5d09 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
@@ -1,18 +1,15 @@
 [parent-no-1-no-same-2-yes-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [before child: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
index 076b56d..5ca14ad 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
@@ -1,30 +1,30 @@
 [parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html]
   [Before: parent to child: setting document.domain must give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if product == "chrome": PASS
       FAIL
 
   [After: parent to child: setting document.domain must give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if product == "chrome": PASS
       FAIL
 
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
+      if flag_specific == "disable-layout-ng": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [before child: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [after child: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
index 0f6e6c5..10a484b 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
@@ -7,20 +7,4 @@
 
   [before child: originAgentCluster must equal false]
     expected:
-      if os == "win": FAIL
-
-  [before parent: originAgentCluster must equal false]
-    expected:
-      if os == "win": FAIL
-
-  [after parent: originAgentCluster must equal false]
-    expected:
-      if os == "win": FAIL
-
-  [After: parent to child: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-
-  [after child: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
index 80582a0..29817d3c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
@@ -1,20 +1,6 @@
 [parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html]
   [After: parent to child: setting document.domain must give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": PASS
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
-
-  [before parent: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [after parent: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [before child: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
index 2d7a272..88927c4 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
@@ -1,22 +1,8 @@
 [parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): FAIL
-      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if os == "win": FAIL
-
-  [before child: originAgentCluster must equal true]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if os == "win": [PASS, FAIL]
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): FAIL
-      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if os == "win": FAIL
-
-  [after child: originAgentCluster must equal true]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
index 011d73af..8215e4c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
@@ -1,13 +1,11 @@
 [parent-yes-1-no-same-2-no-port.sub.https.html]
   [before parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [After: parent to child: setting document.domain must not give sync access]
     expected:
@@ -15,9 +13,4 @@
 
   [after parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
-  [after child: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
index b8ea2ca..1ef993a 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
@@ -1,18 +1,18 @@
 [parent-yes-1-no-same-2-no-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "win"): FAIL
+      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [after parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "win"): FAIL
+      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "win"): FAIL
+      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [After: parent to child: setting document.domain must not give sync access]
     expected:
@@ -20,4 +20,5 @@
 
   [after child: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini
new file mode 100644
index 0000000..c74f36eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini
@@ -0,0 +1,4 @@
+[opener-no-openee-yes-port.sub.https.html]
+  [opener: originAgentCluster must equal false]
+    expected:
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
new file mode 100644
index 0000000..58ef35f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
@@ -0,0 +1,10 @@
+[opener-no-openee-yes-same.sub.https.html]
+  [opener: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
+
+  [openee: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
index 1368d4e..efdfcc4 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
@@ -1,8 +1,10 @@
 [opener-no-openee-yes-subdomain.sub.https.html]
   [opener: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux"): PASS
+      [PASS, FAIL]
 
   [openee: originAgentCluster must equal true]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
index 9b1a10a..6cfbabf 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
@@ -2,11 +2,9 @@
   [setting document.domain must not give sync access]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
 
   [opener: originAgentCluster must equal true]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini
index 83fcc1f..061e3f1 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini
@@ -6,7 +6,3 @@
   [opener: originAgentCluster must equal true]
     expected:
       if product == "chrome": FAIL
-
-  [openee: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
index 9f1c64b9..e143134 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
@@ -1,4 +1,5 @@
 [opener-yes-openee-yes-port.sub.https.html]
   [opener: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
deleted file mode 100644
index 851a368..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[opener-yes-openee-yes-same.sub.https.html]
-  [opener: originAgentCluster must equal true]
-    expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): FAIL
-      if product == "chrome": FAIL
-
-  [openee: originAgentCluster must equal true]
-    expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): FAIL
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
index 3cc93c1..2947153 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
@@ -1,9 +1,9 @@
 [opener-yes-openee-yes-subdomain.sub.https.html]
   [openee: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
       if flag_specific == "disable-layout-ng": FAIL
 
   [opener: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
index 45bad454..b5682cab 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
@@ -10,3 +10,20 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
+
+  [Before: setting document.domain must not give sync access]
+    expected:
+      if product == "chrome": FAIL
+
+  [Parent to child3: setting document.domain must not give sync access]
+    expected:
+      if product == "chrome": FAIL
+
+  [Parent to child2: setting document.domain must not give sync access]
+    expected:
+      if product == "chrome": FAIL
+
+  [parent: originAgentCluster must equal true]
+    expected:
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
index 61766e6..29f86924 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
@@ -1,7 +1,4 @@
 [document_domain_access_details.sub.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [Access allowed if different-origin but both set document.domain to parent domain.]
     expected:
       if (flag_specific == "") and (product == "chrome"): PASS
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/noopener-noreferrer-sizing.window.js.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/noopener-noreferrer-sizing.window.js.ini
new file mode 100644
index 0000000..15e7fae
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/noopener-noreferrer-sizing.window.js.ini
@@ -0,0 +1,3 @@
+[noopener-noreferrer-sizing.window.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
new file mode 100644
index 0000000..e992545
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
@@ -0,0 +1,9 @@
+[open-features-is-popup-condition.html?single-1]
+  expected:
+    if product == "chrome": [OK, ERROR]
+
+[open-features-is-popup-condition.html?combination]
+
+[open-features-is-popup-condition.html?single-2]
+
+[open-features-is-popup-condition.html?position]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini
deleted file mode 100644
index 1e059b0..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[open-features-non-integer-width.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
index a5ba4c24d..dc5fb3e 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
@@ -1,50 +1,80 @@
 [open-features-tokenization-top-left.html]
-  expected:
-    if product == "chrome": ERROR
   [",,top= 152, left=152" should set top and left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   [" left = 141" should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["LEFT=141" should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["top=142" should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["top=152,,left=152," should set top and left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["left==141" should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["top=152,left=152" should set top and left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   [" top = 142" should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["\\ttop= 142" should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["top=152==left=152" should set top and left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   [",left=141,," should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["TOP=142" should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["left=141" should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["\nleft= 141" should set left position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   [",top=142,," should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
 
   ["top==142" should set top position of opened window]
-    expected: FAIL
+    expected:
+      if product == "chrome": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
index 2220bb32..19a9e9c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
@@ -1,6 +1,6 @@
 [window-open-noopener.html?indexed]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [window-open-noopener.html?_top]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
index ef909a9..d9e0e4f 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
@@ -1,3 +1,3 @@
 [window-open-windowfeatures-values.html]
   expected:
-    if product == "chrome": TIMEOUT
+    if product == "chrome": [ERROR, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-noopener.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-noopener.html.ini
new file mode 100644
index 0000000..08977dee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-noopener.html.ini
@@ -0,0 +1,3 @@
+[opener-noopener.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini
index af4d668..df656ac8 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini
@@ -1,6 +1,3 @@
 [opener-setter.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): [OK, TIMEOUT]
-  [Auxiliary browsing context created via `window.open` and setting `window.opener` to `test` should report `test`]
-    expected:
-      if product == "chrome": [PASS, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html.ini
new file mode 100644
index 0000000..83a3c62c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html.ini
@@ -0,0 +1,3 @@
+[choose-_parent-003.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
index 4900e47..321a431 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
@@ -1,4 +1,7 @@
 [canvas-display-p3-drawImage-ImageBitmap-video.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [Rec2020-3FF000000, Context srgb, ImageData srgb, cropSource=false]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
@@ -64,7 +67,3 @@
 
   [Rec2020-222000000, Context display-p3, ImageData display-p3, cropSource=true]
     expected: FAIL
-
-  [sRGB-BB0000, Context srgb, ImageData display-p3, cropSource=false]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
index a579b954..0a174c5 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
@@ -1,11 +1,17 @@
 [offscreencanvas.resize.html]
   [Verify that resizing an OffscreenCanvas with a webgl context propagates the new size to its placeholder canvas asynchronously.]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
 
   [Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas.]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [FAIL, PASS]
       if flag_specific == "disable-layout-ng": PASS
       FAIL
+
+  [Verify that resizing an OffscreenCanvas with a 2d context propagates the new size to its placeholder canvas asynchronously.]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini
index 2127d13..3b8a30b9 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini
@@ -1,3 +1,3 @@
 [fetch.https.window.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/image.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/image.https.window.js.ini
deleted file mode 100644
index a048ac8..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/image.https.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[image.https.window.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
index 6bc5f6d..d92ca6a 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
@@ -1,6 +1,4 @@
 [dedicated-worker.https.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": TIMEOUT
   [COEP: require-corp worker in COEP: none frame]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-subresource-corp.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-subresource-corp.https.html.ini
index 12f401ec..92de457 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-subresource-corp.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-subresource-corp.https.html.ini
@@ -13,4 +13,4 @@
 
   [[service worker\] blocked due to COEP]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-cross-origin.https.html.ini
deleted file mode 100644
index 02e5a98..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-cross-origin.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[coep-with-cross-origin.https.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-same-site.https.html.ini
deleted file mode 100644
index 06986c34..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-with-same-site.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[coep-with-same-site.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigate-same-origin-csp-sandbox.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigate-same-origin-csp-sandbox.html.ini
index 07fb88f9..a7102153 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigate-same-origin-csp-sandbox.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigate-same-origin-csp-sandbox.html.ini
@@ -1,3 +1,3 @@
 [coop-navigate-same-origin-csp-sandbox.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html.ini
similarity index 63%
copy from third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini
copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html.ini
index 96b1dbd1f..63b8eb62 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/element-iframe.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html.ini
@@ -1,3 +1,3 @@
-[element-iframe.sub.html]
+[coop-sandbox.https.html]
   expected:
     if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
index 0395d58..eb30ca9 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
@@ -1,9 +1,11 @@
 [header-parsing-failures.https.html?1-4]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [header-parsing-failures.https.html?12-last]
 
 [header-parsing-failures.https.html?9-12]
+  expected:
+    if product == "chrome": [ERROR, OK]
 
 [header-parsing-failures.https.html?5-8]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-non-ascii.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-non-ascii.https.html.ini
deleted file mode 100644
index 352e7aa..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-non-ascii.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[header-parsing-non-ascii.https.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini
deleted file mode 100644
index 0ff03121..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[header-parsing-repeated.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.ini
deleted file mode 100644
index eb3fd048..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.ini
deleted file mode 100644
index 4a8a69c6..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-same-site-with-same-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini
deleted file mode 100644
index 536e2c0..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-same-site-with-same-site.https.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
index c6cd6b7..79b69601 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
@@ -7,6 +7,8 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?9-last]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [iframe-popup-same-origin-to-same-origin.https.html?7-8]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
index 59c33be..8eec163 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
@@ -11,8 +11,6 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?9-last]
-  expected:
-    if product == "chrome": [ERROR, OK]
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?3-4]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
index 3e09c28..69d18ba4 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
@@ -4,7 +4,7 @@
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?9-last]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if product == "chrome": [OK, ERROR]
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?7-8]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
index a613d3ba..31b63d6fb 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
@@ -8,9 +8,11 @@
 
 [javascript-url.https.html?11-12]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [javascript-url.https.html?13-14]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [javascript-url.https.html?15-16]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html.ini
index d5c6b762..1aeca85 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html.ini
@@ -1,12 +1,8 @@
 [navigate-top-to-aboutblank.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
   [Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin), iframe origin: https://www1.web-platform.test:8444]
     expected: FAIL
 
   [Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), iframe origin: https://www1.web-platform.test:8444]
     expected: FAIL
-
-  [Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin), iframe origin: https://web-platform.test:8444]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html.ini
index 5f9ca4e..4cb8fb89 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html.ini
@@ -1,12 +1,10 @@
 [popup-redirect-cache.https.html?2-3]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [popup-redirect-cache.https.html?0-1]
 
 [popup-redirect-cache.https.html?6-7]
-  expected:
-    if product == "chrome": [OK, ERROR]
 
 [popup-redirect-cache.https.html?4-5]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
deleted file mode 100644
index 4cc8d43..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-redirect-same-origin-allow-popups.https.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini
index ddd028e..78395f06 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini
@@ -1,3 +1,3 @@
 [popup-same-origin-allow-popups-with-cross-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
new file mode 100644
index 0000000..ef3655a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-with-same-site.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini
index cc0aa62..0d2dc3b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini
@@ -1,3 +1,3 @@
 [popup-unspecified-with-same-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
index ef6ec98..78a07e61 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
@@ -1,4 +1,6 @@
 [access-from-coop-page-to-openee_coop-ro.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [access-from-coop-page-to-openee, same-origin]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html.ini
index 75251f82..3b5e3caa 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html.ini
@@ -1,3 +1,8 @@
 [access-from-coop-page-to-opener_coop-ro.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [access-from-coop-page-to-opener, same-origin + redirect]
+    expected:
+      if product == "chrome": FAIL
+
+  [access-from-coop-page-to-opener, same-origin]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
index dd923b49..ad1f304 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
@@ -1,3 +1,6 @@
 [access-from-coop-page-to-other_coop-ro.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-from-coop-page-to-other (COOP-RO)]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
index dd5c96b2..56b8e03 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
@@ -1,3 +1,6 @@
 [access-from-coop-page-to-other_coop-ro_cross-origin.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-from-coop-page-to-other (COOP-RO)]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
index bf827e7..45761bca 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
@@ -1,10 +1,3 @@
 [access-to-coop-page-from-openee_coop-ro.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [access-to-coop-page-from-openee, same-origin + redirect]
-    expected:
-      if product == "chrome": FAIL
-
-  [access-to-coop-page-from-openee, same-origin]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
index a07396ec2..c12963c3 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
@@ -1,6 +1,4 @@
 [access-to-coop-page-from-openee_coop-ro_cross-origin.https.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
   [access-to-coop-page-from-openee, cross-origin]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html.ini
index 152c3587..727d8200 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html.ini
@@ -1,4 +1,6 @@
 [property-blur.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [cross-origin > w => w.blur()]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
index ad0e9b0..3ee2c657 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
@@ -1,3 +1,10 @@
 [property-closed.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [same-origin > w => w.closed]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.closed]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
index 21215fd..f6d2d33 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
@@ -1,4 +1,6 @@
 [property-frames.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [cross-origin > w => w.frames]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini
deleted file mode 100644
index 4186abaa..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[property-indexed-getter.https.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
index 2f71178..7f801da 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
@@ -1,6 +1,6 @@
 [property-location-set.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
   [same-origin > w => w.location = "#"]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
index e053a92..76173f05 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
@@ -1,10 +1,3 @@
 [property-opener-get.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [cross-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini
deleted file mode 100644
index 5c096b16..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[property-opener-set.https.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
index 943353e..ab4e882 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
@@ -1,4 +1,6 @@
 [property-postmessage-1.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [same-origin > w => w.postMessage("", "")]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
index 586bba13..426cf30 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
@@ -1,3 +1,10 @@
 [property-postmessage-2.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [cross-origin > w => w.postMessage("")]
+    expected:
+      if product == "chrome": FAIL
+
+  [same-origin > w => w.postMessage("")]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
index 911a48f..189215bc 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
@@ -1,10 +1,3 @@
 [property-self.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [cross-origin > w => w.self]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.self]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
index f989a145..7bd46c4 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
@@ -1,6 +1,4 @@
 [property-top.https.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
   [same-origin > w => w.top]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
index 78ab09d..799db67 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
@@ -1,3 +1,10 @@
 [property-window.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [same-origin > w => w.window]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.window]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
index 46d3e245..3533c77b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
@@ -1,3 +1,8 @@
 [report-to-both_coop-ro.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [Access from opener]
+    expected:
+      if product == "chrome": FAIL
+
+  [Access from openee]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
index 8030187..6f1d038e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
@@ -1,4 +1,6 @@
 [reporting-redirect-with-same-origin-allow-popups.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Cross origin openee redirected to same-origin with same-origin-allow-popups]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
index 8030187..6f1d038e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
@@ -1,4 +1,6 @@
 [reporting-redirect-with-same-origin-allow-popups.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Cross origin openee redirected to same-origin with same-origin-allow-popups]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
index f030a18..d037734 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
@@ -1,3 +1,4 @@
 [resource-popup.https.html]
   expected:
-    if product == "chrome": ERROR
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
index e3a14ce..b62b4dc 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
@@ -3,6 +3,8 @@
     if product == "chrome": ERROR
 
 [iframe-popup-to-so.https.html?5-6]
+  expected:
+    if product == "chrome": ERROR
 
 [iframe-popup-to-so.https.html?3-4]
   expected:
@@ -14,4 +16,4 @@
 
 [iframe-popup-to-so.https.html?9-last]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
index 51dea989..f3681f2 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
@@ -10,7 +10,7 @@
 
 [iframe-popup.https.html?9-last]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
   [COOP: restrict-properties to popup COOP: restrict-properties via an iframe, with cross origin iframe, cross origin popup with window_open]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-un.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-un.https.html.ini
index 3825ee4b5..245d44f 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-un.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-un.https.html.ini
@@ -1,6 +1,4 @@
 [popup-un.https.html]
-  expected:
-    if product == "chrome": ERROR
   [SAME_ORIGIN popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-cross-origin.https.html.ini
index 4e17baa..fca3b7c 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-cross-origin.https.html.ini
@@ -1,6 +1,4 @@
 [popup-with-cross-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
   [Cross-origin popup with empty coop]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-site.https.html.ini
index 38b2f93..3a041615 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-site.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-site.https.html.ini
@@ -1,6 +1,4 @@
 [popup-with-same-site.https.html]
-  expected:
-    if product == "chrome": ERROR
   [Same-site popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
index fc63f6d..87ed375 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
@@ -1,15 +1,3 @@
 [document-cookie.html]
   [document.cookie 2]
     expected: FAIL
-
-  [document has no cookie]
-    expected:
-      if product == "chrome": [PASS, FAIL]
-
-  [document.cookie]
-    expected:
-      if product == "chrome": [PASS, FAIL]
-
-  [document.cookie 1]
-    expected:
-      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini
new file mode 100644
index 0000000..6e59c18
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini
@@ -0,0 +1,4 @@
+[remove-attr-script-keeps-blocking.tentative.html]
+  [Rendering is blocked before render-blocking resources are loaded]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini
new file mode 100644
index 0000000..e11044c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini
@@ -0,0 +1,4 @@
+[script-inserted-script.html]
+  [Rendering is blocked before render-blocking resources are loaded]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/interaction/focus/focus-management/focus-event-targets-simple.html.ini b/third_party/blink/web_tests/external/wpt/html/interaction/focus/focus-management/focus-event-targets-simple.html.ini
new file mode 100644
index 0000000..785071f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/interaction/focus/focus-management/focus-event-targets-simple.html.ini
@@ -0,0 +1,4 @@
+[focus-event-targets-simple.html]
+  [Focus events fire at correct targets in correct order in simple case]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html
index c5e34a2..e2b8846 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<meta name="timeout" content="long">
 <link rel=author href="mailto:jarhar@chromium.org">
 <link rel=help href="https://github.com/whatwg/html/issues/2368">
 <link rel=help href="https://github.com/whatwg/html/issues/5886">
@@ -9,37 +10,48 @@
 <script src="/resources/testdriver-actions.js"></script>
 
 <div id=targetparent>
-  <button id=target disabled>
+  <button disabled>
     hello world
-    <span style="border: 1px solid black" id=targetchild>child</span>
+    <span style="border: 1px solid black">child</span>
   </button>
+  <my-control disabled>
+    hello world
+    <span style="border: 1px solid black">child</span>
+  </my-control>
 </div>
 
 <script>
+customElements.define('my-control', class extends HTMLElement {
+  static get formAssociated() { return true; }
+});
+
 ['mousedown', 'mouseup', 'pointerdown', 'pointerup', 'click'].forEach(eventName => {
   [true, false].forEach(clickChildElement => {
-    promise_test(async () => {
-      let parentReceivedEvent = false;
-      targetparent.addEventListener(eventName, () => parentReceivedEvent = true);
+    for (const target of targetparent.children) {
+      promise_test(async () => {
+        let parentReceivedEvent = false;
+        targetparent.addEventListener(eventName, () => parentReceivedEvent = true);
 
-      let targetReceivedEvent = false;
-      target.addEventListener(eventName, () => targetReceivedEvent = true);
+        let targetReceivedEvent = false;
+        target.addEventListener(eventName, () => targetReceivedEvent = true);
 
-      let childReceivedEvent = false;
-      targetchild.addEventListener(eventName, () => childReceivedEvent = true);
+        let childReceivedEvent = false;
+        let targetchild = target.firstElementChild;
+        targetchild.addEventListener(eventName, () => childReceivedEvent = true);
 
-      await test_driver.click(clickChildElement ? targetchild : target);
+        await test_driver.click(clickChildElement ? targetchild : target);
 
-      const parentShouldReceiveEvents = eventName.startsWith('pointer');
-      assert_equals(parentReceivedEvent, parentShouldReceiveEvents,
-                    `parent element received ${eventName} events`);
+        const parentShouldReceiveEvents = eventName.startsWith('pointer');
+        assert_equals(parentReceivedEvent, parentShouldReceiveEvents,
+                      `parent element received ${eventName} events`);
 
-      const targetShouldReceiveEvents = eventName.startsWith('pointer');
-      assert_equals(targetReceivedEvent, targetShouldReceiveEvents,
-                    `target element received ${eventName} events`);
-      assert_equals(childReceivedEvent, clickChildElement,
-                    `child element received ${eventName} events`);
-    }, `Testing ${eventName} events when clicking ${clickChildElement ? 'child of ' : ''}disabled form controls.`);
+        const targetShouldReceiveEvents = eventName.startsWith('pointer');
+        assert_equals(targetReceivedEvent, targetShouldReceiveEvents,
+                      `target element received ${eventName} events`);
+        assert_equals(childReceivedEvent, clickChildElement,
+                      `child element received ${eventName} events`);
+      }, `Testing ${eventName} events when clicking ${clickChildElement ? 'child of ' : ''}disabled ${target.localName}.`);
+    }
   });
 });
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
index 0c00cc8d..9c8642d 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
@@ -47,9 +47,15 @@
   <input disabled type="time">
   <input disabled type="url">
   <input disabled type="week">
+  <my-control disabled>Text</my-control>
 </div>
 
 <script>
+  customElements.define('my-control', class extends HTMLElement {
+    static get formAssociated() { return true; }
+    get disabled() { return this.hasAttribute("disabled"); }
+  });
+
   /**
    * @param {Element} element
    */
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
index 832554d..a6241fe3 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
@@ -1,3 +1,6 @@
 [resource-selection-invoke-audio-constructor.html]
   [invoking resource selection with new Audio(src)]
-    expected: FAIL
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
index ffcd9afb..c9aa5a8 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
@@ -1,5 +1,5 @@
 [resource-selection-invoke-insert-source.html]
   [invoking resource selection by inserting <source>]
     expected:
-      if product == "chrome": PASS
+      if os == "win": PASS
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
index e889ab7..77d3898 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
@@ -1,3 +1,5 @@
 [resource-selection-invoke-pause-networkState.html]
   [NOT invoking resource selection with pause() when networkState is not NETWORK_EMPTY]
-    expected: FAIL
+    expected:
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
new file mode 100644
index 0000000..d46d8e2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
@@ -0,0 +1,4 @@
+[resource-selection-invoke-remove-src.html]
+  [NOT invoking media load or resource selection when removing the src attribute]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
index 7fe38a1..ff3d9aa 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
@@ -1,5 +1,3 @@
 [resource-selection-invoke-set-src-not-in-document.html]
   [invoking load by setting src on video not in a document]
-    expected:
-      if flag_specific == "disable-layout-ng": [FAIL, PASS]
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
new file mode 100644
index 0000000..e6b2b309
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
@@ -0,0 +1,4 @@
+[track-cue-rendering-after-controls-removed.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
index 7774528..7d22c448 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
@@ -1,4 +1,5 @@
 [sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
   expected:
-    if (os == "linux") and (product == "chrome"): ERROR
-    if os == "win": TIMEOUT
+    if (product == "content_shell") and (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
index ce6897a..4d916ea 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
@@ -1,4 +1,4 @@
 [sandbox-top-navigation-child.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
-    if product == "chrome": ERROR
+    if (flag_specific == "") and (product == "chrome"): ERROR
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
index 5a471c5d..8a0440c 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
@@ -1,5 +1,3 @@
 [sandbox-top-navigation-escalate-privileges.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
-    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): TIMEOUT
     if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
index f6d097fe..2a9af647 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
@@ -1,4 +1,5 @@
 [sandbox-top-navigation-grandchild.tentative.sub.window.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): ERROR
-    if flag_specific == "disable-site-isolation-trials": TIMEOUT
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [OK, TIMEOUT]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini
index 51b5b40..2e3fbd9 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini
@@ -1,5 +1,5 @@
 [image-loading-lazy-base-url-2.html]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if product == "chrome": ERROR
   [When a loading=lazy image is loaded, it loads relative to the document's base URL computed at parse-time.]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-data-url-to-https.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-data-url-to-https.html.ini
new file mode 100644
index 0000000..dc2ee4a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-data-url-to-https.html.ini
@@ -0,0 +1,3 @@
+[image-loading-lazy-data-url-to-https.html]
+  expected:
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini
deleted file mode 100644
index 6825203..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[avoid-reload-on-resize.html]
-  [Avoid srcset image reloads when viewport resizes]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini
new file mode 100644
index 0000000..1736b69
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini
@@ -0,0 +1,3 @@
+[text-plain.window.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
index c14d030..f668ba4 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
@@ -1,125 +1,5 @@
 [urlencoded2.window.html]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "chrome"): [OK, TIMEOUT]
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, TIMEOUT]
-  [application/x-www-form-urlencoded: \\r\\n in filename (normal form)]
-    expected: [PASS, NOTRUN]
-
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
   [application/x-www-form-urlencoded: \\r in filename (formdata event)]
     expected: [PASS, TIMEOUT]
-
-  [application/x-www-form-urlencoded: backslash in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: backslash in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: backslash in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: double quote in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: non-ASCII in name and value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: \\r\\n in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, TIMEOUT]
-
-  [application/x-www-form-urlencoded: double quote in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: double quote in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: non-ASCII in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: double quote in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: characters not in encoding in name and value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: character not in encoding in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: double quote in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: single quote in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: non-ASCII in name and value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: character not in encoding in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: non-ASCII in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: double quote in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: \\n\\r in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: backslash in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: backslash in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: backslash in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: \\n\\r in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [application/x-www-form-urlencoded: characters not in encoding in name and value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html.ini
index 12a80ad..eaf0969a 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html.ini
@@ -1,3 +1,3 @@
 [rel-button-target.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
index 2dbfcd2..5860c3a2 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
@@ -1,4 +1,5 @@
 [selectmenu-form-state-restore.tentative.html]
   expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): OK
     if flag_specific == "disable-site-isolation-trials": OK
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
index f5ddbc8b..51f8916 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
@@ -1,12 +1,7 @@
 [activation-behavior.window.html]
   [<area> that is not connected should not be followed]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-      FAIL
+    expected: FAIL
 
   [<a> that is not connected should be followed]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): FAIL
-      if product == "chrome": PASS
-      [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html
index e0effbd..569b633 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html
@@ -90,6 +90,22 @@
 }, "Popover focus navigation");
 </script>
 
+<button id=circular0 popovertoggletarget=popover4>Invoker</button>
+<div id=popover4 popover>
+  <button id=circular1 autofocus popoverhidetarget=popover4></button>
+  <button id=circular2 popovershowtarget=popover4></button>
+  <button id=circular3 popovertoggletarget=popover4></button>
+</div>
+<button id=circular4>after</button>
+<script>
+promise_test(async t => {
+  circular0.focus();
+  await sendEnter(); // Activate the invoker
+  await verifyFocusOrder([circular0, circular1, circular2, circular3, circular4]);
+  popover4.hidePopover();
+}, "Circular reference tab navigation");
+</script>
+
 <div id=deleted>
   <button popovershowtarget=deleted1>Show popover</button>
   <div popover id=deleted1>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html.ini
index 4da507b5..5edd596 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.tentative.html.ini
@@ -4,3 +4,6 @@
 
   [Popover focus returns when popover is hidden by invoker]
     expected: FAIL
+
+  [Circular reference tab navigation]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-light-dismiss.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-light-dismiss.tentative.html
index 83573c86..3c48bd92 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-light-dismiss.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-light-dismiss.tentative.html
@@ -392,8 +392,9 @@
     <div popover id=convoluted_p4><p>Popover 4</p></div>
   </div>
 </div>
-<div popover id=convoluted_p2>Popover 2
+<div popover id=convoluted_p2 anchor=convoluted_p2>Popover 2 (self-anchor-linked)
   <button popovertoggletarget=convoluted_p3>Open Popover 3</button>
+  <button popovershowtarget=convoluted_p2>Self-linked invoker</button>
 </div>
 <div popover id=convoluted_p3 anchor=convoluted_anchor>Popover 3
   <button popovertoggletarget=convoluted_p4>Open Popover 4</button>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html.ini
index 79cf2eb..78bcb8c 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html.ini
@@ -1,3 +1,3 @@
 [span-limits.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
index 80e633e..cac620a 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
@@ -1,5 +1,5 @@
 [negative-settimeout.any.worker.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [negative-settimeout.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
index 66e623f8..56976838 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
@@ -13,6 +13,3 @@
 [webtransport-h3.https.sub.any.sharedworker.html]
 
 [webtransport-h3.https.sub.any.html]
-  [WebTransport server should be running and should handle a bidirectional stream]
-    expected:
-      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/badging.idl b/third_party/blink/web_tests/external/wpt/interfaces/badging.idl
index 2857862..f34dfa7e0 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/badging.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/badging.idl
@@ -3,14 +3,12 @@
 // (https://github.com/w3c/webref)
 // Source: Badging API (https://w3c.github.io/badging/)
 
-// Methods only exposed on documents.
 [SecureContext]
 partial interface Navigator {
   Promise<undefined> setClientBadge(optional [EnforceRange] unsigned long long contents);
   Promise<undefined> clearClientBadge();
 };
 
-// Methods exposed on both documents and service workers.
 [SecureContext]
 interface mixin NavigatorBadge {
   Promise<undefined> setAppBadge(optional [EnforceRange] unsigned long long contents);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/compute-pressure.idl b/third_party/blink/web_tests/external/wpt/interfaces/compute-pressure.idl
index b435a2ac..2a11b84 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/compute-pressure.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/compute-pressure.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into webref
 // (https://github.com/w3c/webref)
-// Source: Compute Pressure Level 1 (https://wicg.github.io/compute-pressure/)
+// Source: Compute Pressure Level 1 (https://w3c.github.io/compute-pressure/)
 
 enum PressureState { "nominal", "fair", "serious", "critical" };
 
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/contact-api.idl b/third_party/blink/web_tests/external/wpt/interfaces/contact-api.idl
index d7f2ba5d..aece816 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/contact-api.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/contact-api.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into webref
 // (https://github.com/w3c/webref)
-// Source: Contact Picker API (https://w3c.github.io/contact-api/spec/)
+// Source: Contact Picker API (https://w3c.github.io/contact-picker/spec/)
 
 [Exposed=Window]
 partial interface Navigator {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/css-animations.idl b/third_party/blink/web_tests/external/wpt/interfaces/css-animations.idl
index eda1d0f..6620e015 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/css-animations.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/css-animations.idl
@@ -31,7 +31,9 @@
 interface CSSKeyframesRule : CSSRule {
            attribute CSSOMString name;
   readonly attribute CSSRuleList cssRules;
+  readonly attribute unsigned long length;
 
+  getter CSSKeyframeRule (unsigned long index);
   undefined        appendRule(CSSOMString rule);
   undefined        deleteRule(CSSOMString select);
   CSSKeyframeRule? findRule(CSSOMString select);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/css-view-transitions.idl b/third_party/blink/web_tests/external/wpt/interfaces/css-view-transitions.idl
index 26c2e30..c7ac9f3 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/css-view-transitions.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/css-view-transitions.idl
@@ -4,19 +4,15 @@
 // Source: CSS View Transitions Module Level 1 (https://drafts.csswg.org/css-view-transitions-1/)
 
 partial interface Document {
-    ViewTransition createTransition(ViewTransitionInit init);
-};
-
-dictionary ViewTransitionInit {
-    required UpdateDOMCallback updateDOM;
+  ViewTransition startViewTransition(optional UpdateDOMCallback? callback = null);
 };
 
 callback UpdateDOMCallback = Promise<any> ();
 
 [Exposed=Window]
 interface ViewTransition {
-    undefined skipTransition();
-    readonly attribute Promise<undefined> finished;
-    readonly attribute Promise<undefined> ready;
-    readonly attribute Promise<undefined> domUpdated;
+  undefined skipTransition();
+  readonly attribute Promise<undefined> finished;
+  readonly attribute Promise<undefined> ready;
+  readonly attribute Promise<undefined> domUpdated;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/cssom-view.idl b/third_party/blink/web_tests/external/wpt/interfaces/cssom-view.idl
index a61f17e..2046b38 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/cssom-view.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/cssom-view.idl
@@ -196,4 +196,5 @@
 
   attribute EventHandler onresize;
   attribute EventHandler onscroll;
+  attribute EventHandler onscrollend;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/event-timing.idl b/third_party/blink/web_tests/external/wpt/interfaces/event-timing.idl
index 2f8e031..741a05dc 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/event-timing.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/event-timing.idl
@@ -19,14 +19,9 @@
 };
 
 [Exposed=Window]
-interface InteractionCounts {
-    readonly maplike<DOMString, unsigned long long>;
-};
-
-[Exposed=Window]
 partial interface Performance {
     [SameObject] readonly attribute EventCounts eventCounts;
-    [SameObject] readonly attribute InteractionCounts interactionCounts;
+    readonly attribute unsigned long long interactionCount;
 };
 
 partial dictionary PerformanceObserverInit {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl b/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
index ba69c46..866d09d3 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
@@ -71,6 +71,7 @@
   boolean keepalive;
   AbortSignal? signal;
   RequestDuplex duplex;
+  RequestPriority priority;
   any window; // can only be set to null
 };
 
@@ -80,6 +81,7 @@
 enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
 enum RequestRedirect { "follow", "error", "manual" };
 enum RequestDuplex { "half" };
+enum RequestPriority { "high", "low", "auto" };
 
 [Exposed=(Window,Worker)]interface Response {
   constructor(optional BodyInit? body = null, optional ResponseInit init = {});
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/gamepad-extensions.idl b/third_party/blink/web_tests/external/wpt/interfaces/gamepad-extensions.idl
index 29ab815..ddfc0d9 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/gamepad-extensions.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/gamepad-extensions.idl
@@ -12,11 +12,33 @@
 [Exposed=Window]
 interface GamepadHapticActuator {
   readonly attribute GamepadHapticActuatorType type;
+  boolean canPlayEffectType(GamepadHapticEffectType type);
+  Promise<GamepadHapticsResult> playEffect(
+      GamepadHapticEffectType type,
+      optional GamepadEffectParameters params = {});
   Promise<boolean> pulse(double value, double duration);
+  Promise<GamepadHapticsResult> reset();
+};
+
+enum GamepadHapticsResult {
+  "complete",
+  "preempted"
 };
 
 enum GamepadHapticActuatorType {
-  "vibration"
+  "vibration",
+  "dual-rumble"
+};
+
+enum GamepadHapticEffectType {
+  "dual-rumble"
+};
+
+dictionary GamepadEffectParameters {
+    double duration = 0.0;
+    double startDelay = 0.0;
+    double strongMagnitude = 0.0;
+    double weakMagnitude = 0.0;
 };
 
 [Exposed=Window]
@@ -45,4 +67,5 @@
   readonly attribute FrozenArray<GamepadHapticActuator> hapticActuators;
   readonly attribute GamepadPose? pose;
   readonly attribute FrozenArray<GamepadTouch>? touchEvents;
+  [SameObject] readonly attribute GamepadHapticActuator vibrationActuator;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/html.idl b/third_party/blink/web_tests/external/wpt/interfaces/html.idl
index d053798..70eb5eff 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/html.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/html.idl
@@ -884,7 +884,7 @@
   [CEReactions] attribute DOMString formTarget;
   [CEReactions] attribute unsigned long height;
   attribute boolean indeterminate;
-  readonly attribute HTMLElement? list;
+  readonly attribute HTMLDataListElement? list;
   [CEReactions] attribute DOMString max;
   [CEReactions] attribute long maxLength;
   [CEReactions] attribute DOMString min;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/manifest-incubations.idl b/third_party/blink/web_tests/external/wpt/interfaces/manifest-incubations.idl
index 5342b61..bab3998 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/manifest-incubations.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/manifest-incubations.idl
@@ -22,18 +22,3 @@
   attribute EventHandler onappinstalled;
   attribute EventHandler onbeforeinstallprompt;
 };
-
-[Exposed=Window] interface LaunchParams {
-  readonly attribute DOMString? targetURL;
-  readonly attribute FrozenArray<FileSystemHandle> files;
-};
-
-callback LaunchConsumer = any (LaunchParams params);
-
-partial interface Window {
-  readonly attribute LaunchQueue launchQueue;
-};
-
-[Exposed=Window] interface LaunchQueue {
-  undefined setConsumer(LaunchConsumer consumer);
-};
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl b/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl
index d3a5a278..cdd8fafd 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into webref
 // (https://github.com/w3c/webref)
-// Source: Performance Timeline Level 2 (https://w3c.github.io/performance-timeline/)
+// Source: Performance Timeline (https://w3c.github.io/performance-timeline/)
 
 partial interface Performance {
   PerformanceEntryList getEntries ();
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/permissions.idl b/third_party/blink/web_tests/external/wpt/interfaces/permissions.idl
index 7013921..fbcb674e 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/permissions.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/permissions.idl
@@ -38,5 +38,4 @@
 dictionary PermissionSetParameters {
   required PermissionDescriptor descriptor;
   required PermissionState state;
-  boolean oneRealm = false;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/priority-hints.idl b/third_party/blink/web_tests/external/wpt/interfaces/priority-hints.idl
index 15c90bb..cbff6a5 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/priority-hints.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/priority-hints.idl
@@ -3,16 +3,6 @@
 // (https://github.com/w3c/webref)
 // Source: Priority Hints (https://wicg.github.io/priority-hints/)
 
-enum FetchPriority { "high", "low", "auto" };
-
-partial interface Request {
-  readonly attribute FetchPriority priority;
-};
-
-partial dictionary RequestInit {
-  FetchPriority priority;
-};
-
 partial interface HTMLImageElement {
     [CEReactions] attribute DOMString fetchPriority;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/resource-timing.idl b/third_party/blink/web_tests/external/wpt/interfaces/resource-timing.idl
index 65f0d4d..242df0bd 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/resource-timing.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/resource-timing.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into webref
 // (https://github.com/w3c/webref)
-// Source: Resource Timing Level 2 (https://w3c.github.io/resource-timing/)
+// Source: Resource Timing (https://w3c.github.io/resource-timing/)
 
 [Exposed=(Window,Worker)]
 interface PerformanceResourceTiming : PerformanceEntry {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/screen-capture.idl b/third_party/blink/web_tests/external/wpt/interfaces/screen-capture.idl
index 4c64a2f3..9abd4d2c 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/screen-capture.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/screen-capture.idl
@@ -63,6 +63,7 @@
   boolean logicalSurface;
   DOMString cursor;
   boolean restrictOwnAudio;
+  boolean suppressLocalAudioPlayback;
 };
 
 partial dictionary MediaTrackCapabilities {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/screen-orientation.idl b/third_party/blink/web_tests/external/wpt/interfaces/screen-orientation.idl
index 62bc86428..df8a1db 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/screen-orientation.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/screen-orientation.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into webref
 // (https://github.com/w3c/webref)
-// Source: The Screen Orientation API (https://w3c.github.io/screen-orientation/)
+// Source: Screen Orientation (https://w3c.github.io/screen-orientation/)
 
 partial interface Screen {
   [SameObject] readonly attribute ScreenOrientation orientation;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl b/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
index 1ba137c3..30ecbd8 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
@@ -36,7 +36,6 @@
 };
 
 [Exposed=Window]
-interface AnimationTimeline {
-  readonly attribute CSSNumberish? currentTime;
+partial interface AnimationTimeline {
   CSSNumericValue? getCurrentTime(optional CSSOMString rangeName);
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/secure-payment-confirmation.idl b/third_party/blink/web_tests/external/wpt/interfaces/secure-payment-confirmation.idl
index 6a68f059..6b6083b 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/secure-payment-confirmation.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/secure-payment-confirmation.idl
@@ -13,6 +13,7 @@
     USVString payeeOrigin;
     AuthenticationExtensionsClientInputs extensions;
     sequence<USVString> locale;
+    boolean showOptOut;
 };
 
 partial dictionary AuthenticationExtensionsClientInputs {
@@ -52,6 +53,7 @@
 
 enum TransactionAutomationMode {
   "none",
-  "autoaccept",
-  "autoreject"
+  "autoAccept",
+  "autoReject",
+  "autoOptOut"
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/selection-api.idl b/third_party/blink/web_tests/external/wpt/interfaces/selection-api.idl
index 6aaa1ae..c1eed2a9 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/selection-api.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/selection-api.idl
@@ -17,6 +17,7 @@
   undefined removeRange(Range range);
   undefined removeAllRanges();
   undefined empty();
+  StaticRange getComposedRange(ShadowRoot... shadowRoots);
   undefined collapse(Node? node, optional unsigned long offset = 0);
   undefined setPosition(Node? node, optional unsigned long offset = 0);
   undefined collapseToStart();
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl
index 6030dad..ed612302 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl
@@ -3,6 +3,11 @@
 // (https://github.com/w3c/webref)
 // Source: Web Animations (https://drafts.csswg.org/web-animations-1/)
 
+[Exposed=Window]
+interface AnimationTimeline {
+    readonly attribute double? currentTime;
+};
+
 dictionary DocumentTimelineOptions {
   DOMHighResTimeStamp originTime = 0;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-app-launch.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-app-launch.idl
new file mode 100644
index 0000000..c3b6e39
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-app-launch.idl
@@ -0,0 +1,19 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content was automatically extracted by Reffy into webref
+// (https://github.com/w3c/webref)
+// Source: Web App Launch Handler API (https://wicg.github.io/web-app-launch/)
+
+[Exposed=Window] interface LaunchParams {
+  readonly attribute DOMString? targetURL;
+  readonly attribute FrozenArray<FileSystemHandle> files;
+};
+
+callback LaunchConsumer = any (LaunchParams params);
+
+partial interface Window {
+  readonly attribute LaunchQueue launchQueue;
+};
+
+[Exposed=Window] interface LaunchQueue {
+  undefined setConsumer(LaunchConsumer consumer);
+};
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webaudio.idl b/third_party/blink/web_tests/external/wpt/interfaces/webaudio.idl
index 092ab52..1569de2 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webaudio.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webaudio.idl
@@ -4,9 +4,9 @@
 // Source: Web Audio API (https://webaudio.github.io/web-audio-api/)
 
 enum AudioContextState {
-  "suspended",
-  "running",
-  "closed"
+    "suspended",
+    "running",
+    "closed"
 };
 
 callback DecodeErrorCallback = undefined (DOMException error);
@@ -15,604 +15,604 @@
 
 [Exposed=Window]
 interface BaseAudioContext : EventTarget {
-  readonly attribute AudioDestinationNode destination;
-  readonly attribute float sampleRate;
-  readonly attribute double currentTime;
-  readonly attribute AudioListener listener;
-  readonly attribute AudioContextState state;
-  [SameObject, SecureContext]
-  readonly attribute AudioWorklet audioWorklet;
-  attribute EventHandler onstatechange;
+    readonly attribute AudioDestinationNode destination;
+    readonly attribute float sampleRate;
+    readonly attribute double currentTime;
+    readonly attribute AudioListener listener;
+    readonly attribute AudioContextState state;
+    [SameObject, SecureContext]
+    readonly attribute AudioWorklet audioWorklet;
+    attribute EventHandler onstatechange;
 
-  AnalyserNode createAnalyser ();
-  BiquadFilterNode createBiquadFilter ();
-  AudioBuffer createBuffer (unsigned long numberOfChannels,
-                            unsigned long length,
-                            float sampleRate);
-  AudioBufferSourceNode createBufferSource ();
-  ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
-  ChannelSplitterNode createChannelSplitter (
-    optional unsigned long numberOfOutputs = 6);
-  ConstantSourceNode createConstantSource ();
-  ConvolverNode createConvolver ();
-  DelayNode createDelay (optional double maxDelayTime = 1.0);
-  DynamicsCompressorNode createDynamicsCompressor ();
-  GainNode createGain ();
-  IIRFilterNode createIIRFilter (sequence<double> feedforward,
-                                 sequence<double> feedback);
-  OscillatorNode createOscillator ();
-  PannerNode createPanner ();
-  PeriodicWave createPeriodicWave (sequence<float> real,
-                                   sequence<float> imag,
-                                   optional PeriodicWaveConstraints constraints = {});
-  ScriptProcessorNode createScriptProcessor(
-    optional unsigned long bufferSize = 0,
-    optional unsigned long numberOfInputChannels = 2,
-    optional unsigned long numberOfOutputChannels = 2);
-  StereoPannerNode createStereoPanner ();
-  WaveShaperNode createWaveShaper ();
+    AnalyserNode createAnalyser ();
+    BiquadFilterNode createBiquadFilter ();
+    AudioBuffer createBuffer (unsigned long numberOfChannels,
+                              unsigned long length,
+                              float sampleRate);
+    AudioBufferSourceNode createBufferSource ();
+    ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
+    ChannelSplitterNode createChannelSplitter (
+        optional unsigned long numberOfOutputs = 6);
+    ConstantSourceNode createConstantSource ();
+    ConvolverNode createConvolver ();
+    DelayNode createDelay (optional double maxDelayTime = 1.0);
+    DynamicsCompressorNode createDynamicsCompressor ();
+    GainNode createGain ();
+    IIRFilterNode createIIRFilter (sequence<double> feedforward,
+                                   sequence<double> feedback);
+    OscillatorNode createOscillator ();
+    PannerNode createPanner ();
+    PeriodicWave createPeriodicWave (sequence<float> real,
+                                     sequence<float> imag,
+                                     optional PeriodicWaveConstraints constraints = {});
+    ScriptProcessorNode createScriptProcessor(
+        optional unsigned long bufferSize = 0,
+        optional unsigned long numberOfInputChannels = 2,
+        optional unsigned long numberOfOutputChannels = 2);
+    StereoPannerNode createStereoPanner ();
+    WaveShaperNode createWaveShaper ();
 
-  Promise<AudioBuffer> decodeAudioData (
-    ArrayBuffer audioData,
-    optional DecodeSuccessCallback? successCallback,
-    optional DecodeErrorCallback? errorCallback);
+    Promise<AudioBuffer> decodeAudioData (
+        ArrayBuffer audioData,
+        optional DecodeSuccessCallback? successCallback,
+        optional DecodeErrorCallback? errorCallback);
 };
 
 enum AudioContextLatencyCategory {
-    "balanced",
-    "interactive",
-    "playback"
+        "balanced",
+        "interactive",
+        "playback"
 };
 
 enum AudioSinkType {
-  "none"
+    "none"
 };
 
 [Exposed=Window]
 interface AudioContext : BaseAudioContext {
-  constructor (optional AudioContextOptions contextOptions = {});
-  readonly attribute double baseLatency;
-  readonly attribute double outputLatency;
-  [SecureContext] readonly attribute (DOMString or AudioSinkInfo) sinkId;
-  [SecureContext] readonly attribute AudioRenderCapacity renderCapacity;
-  attribute EventHandler onsinkchange;
-  AudioTimestamp getOutputTimestamp ();
-  Promise<undefined> resume ();
-  Promise<undefined> suspend ();
-  Promise<undefined> close ();
-  [SecureContext] Promise<undefined> setSinkId ((DOMString or AudioSinkOptions) sinkId);
-  MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement);
-  MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream);
-  MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (
-    MediaStreamTrack mediaStreamTrack);
-  MediaStreamAudioDestinationNode createMediaStreamDestination ();
+    constructor (optional AudioContextOptions contextOptions = {});
+    readonly attribute double baseLatency;
+    readonly attribute double outputLatency;
+    [SecureContext] readonly attribute (DOMString or AudioSinkInfo) sinkId;
+    [SecureContext] readonly attribute AudioRenderCapacity renderCapacity;
+    attribute EventHandler onsinkchange;
+    AudioTimestamp getOutputTimestamp ();
+    Promise<undefined> resume ();
+    Promise<undefined> suspend ();
+    Promise<undefined> close ();
+    [SecureContext] Promise<undefined> setSinkId ((DOMString or AudioSinkOptions) sinkId);
+    MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement);
+    MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream);
+    MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (
+        MediaStreamTrack mediaStreamTrack);
+    MediaStreamAudioDestinationNode createMediaStreamDestination ();
 };
 
 dictionary AudioContextOptions {
-  (AudioContextLatencyCategory or double) latencyHint = "interactive";
-  float sampleRate;
-  (DOMString or AudioSinkOptions) sinkId;
+    (AudioContextLatencyCategory or double) latencyHint = "interactive";
+    float sampleRate;
+    (DOMString or AudioSinkOptions) sinkId;
 };
 
 dictionary AudioSinkOptions {
-  required AudioSinkType type;
+    required AudioSinkType type;
 };
 
 [Exposed=Window]
 interface AudioSinkInfo {
-  readonly attribute AudioSinkType type;
+    readonly attribute AudioSinkType type;
 };
 
 dictionary AudioTimestamp {
-  double contextTime;
-  DOMHighResTimeStamp performanceTime;
+    double contextTime;
+    DOMHighResTimeStamp performanceTime;
 };
 
 [Exposed=Window]
 interface AudioRenderCapacity : EventTarget {
-  undefined start(optional AudioRenderCapacityOptions options = {});
-    undefined stop();
-    attribute EventHandler onupdate;
+    undefined start(optional AudioRenderCapacityOptions options = {});
+        undefined stop();
+        attribute EventHandler onupdate;
 };
 
 dictionary AudioRenderCapacityOptions {
-    double updateInterval = 1;
+        double updateInterval = 1;
 };
 
 [Exposed=Window]
 interface AudioRenderCapacityEvent : Event {
-  constructor (DOMString type, optional AudioRenderCapacityEventInit eventInitDict = {});
-    readonly attribute double timestamp;
-    readonly attribute double averageLoad;
-    readonly attribute double peakLoad;
-    readonly attribute double underrunRatio;
+    constructor (DOMString type, optional AudioRenderCapacityEventInit eventInitDict = {});
+        readonly attribute double timestamp;
+        readonly attribute double averageLoad;
+        readonly attribute double peakLoad;
+        readonly attribute double underrunRatio;
 };
 
 dictionary AudioRenderCapacityEventInit : EventInit {
-  double timestamp = 0;
-  double averageLoad = 0;
-  double peakLoad = 0;
-  double underrunRatio = 0;
+    double timestamp = 0;
+    double averageLoad = 0;
+    double peakLoad = 0;
+    double underrunRatio = 0;
 };
 
 [Exposed=Window]
 interface OfflineAudioContext : BaseAudioContext {
-  constructor(OfflineAudioContextOptions contextOptions);
-  constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate);
-  Promise<AudioBuffer> startRendering();
-  Promise<undefined> resume();
-  Promise<undefined> suspend(double suspendTime);
-  readonly attribute unsigned long length;
-  attribute EventHandler oncomplete;
+    constructor(OfflineAudioContextOptions contextOptions);
+    constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate);
+    Promise<AudioBuffer> startRendering();
+    Promise<undefined> resume();
+    Promise<undefined> suspend(double suspendTime);
+    readonly attribute unsigned long length;
+    attribute EventHandler oncomplete;
 };
 
 dictionary OfflineAudioContextOptions {
-  unsigned long numberOfChannels = 1;
-  required unsigned long length;
-  required float sampleRate;
+    unsigned long numberOfChannels = 1;
+    required unsigned long length;
+    required float sampleRate;
 };
 
 [Exposed=Window]
 interface OfflineAudioCompletionEvent : Event {
-  constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict);
-  readonly attribute AudioBuffer renderedBuffer;
+    constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict);
+    readonly attribute AudioBuffer renderedBuffer;
 };
 
 dictionary OfflineAudioCompletionEventInit : EventInit {
-  required AudioBuffer renderedBuffer;
+    required AudioBuffer renderedBuffer;
 };
 
 [Exposed=Window]
 interface AudioBuffer {
-  constructor (AudioBufferOptions options);
-  readonly attribute float sampleRate;
-  readonly attribute unsigned long length;
-  readonly attribute double duration;
-  readonly attribute unsigned long numberOfChannels;
-  Float32Array getChannelData (unsigned long channel);
-  undefined copyFromChannel (Float32Array destination,
+    constructor (AudioBufferOptions options);
+    readonly attribute float sampleRate;
+    readonly attribute unsigned long length;
+    readonly attribute double duration;
+    readonly attribute unsigned long numberOfChannels;
+    Float32Array getChannelData (unsigned long channel);
+    undefined copyFromChannel (Float32Array destination,
+                               unsigned long channelNumber,
+                               optional unsigned long bufferOffset = 0);
+    undefined copyToChannel (Float32Array source,
                              unsigned long channelNumber,
                              optional unsigned long bufferOffset = 0);
-  undefined copyToChannel (Float32Array source,
-                           unsigned long channelNumber,
-                           optional unsigned long bufferOffset = 0);
 };
 
 dictionary AudioBufferOptions {
-  unsigned long numberOfChannels = 1;
-  required unsigned long length;
-  required float sampleRate;
+    unsigned long numberOfChannels = 1;
+    required unsigned long length;
+    required float sampleRate;
 };
 
 [Exposed=Window]
 interface AudioNode : EventTarget {
-  AudioNode connect (AudioNode destinationNode,
-                     optional unsigned long output = 0,
-                     optional unsigned long input = 0);
-  undefined connect (AudioParam destinationParam, optional unsigned long output = 0);
-  undefined disconnect ();
-  undefined disconnect (unsigned long output);
-  undefined disconnect (AudioNode destinationNode);
-  undefined disconnect (AudioNode destinationNode, unsigned long output);
-  undefined disconnect (AudioNode destinationNode,
-                        unsigned long output,
-                        unsigned long input);
-  undefined disconnect (AudioParam destinationParam);
-  undefined disconnect (AudioParam destinationParam, unsigned long output);
-  readonly attribute BaseAudioContext context;
-  readonly attribute unsigned long numberOfInputs;
-  readonly attribute unsigned long numberOfOutputs;
-  attribute unsigned long channelCount;
-  attribute ChannelCountMode channelCountMode;
-  attribute ChannelInterpretation channelInterpretation;
+    AudioNode connect (AudioNode destinationNode,
+                       optional unsigned long output = 0,
+                       optional unsigned long input = 0);
+    undefined connect (AudioParam destinationParam, optional unsigned long output = 0);
+    undefined disconnect ();
+    undefined disconnect (unsigned long output);
+    undefined disconnect (AudioNode destinationNode);
+    undefined disconnect (AudioNode destinationNode, unsigned long output);
+    undefined disconnect (AudioNode destinationNode,
+                          unsigned long output,
+                          unsigned long input);
+    undefined disconnect (AudioParam destinationParam);
+    undefined disconnect (AudioParam destinationParam, unsigned long output);
+    readonly attribute BaseAudioContext context;
+    readonly attribute unsigned long numberOfInputs;
+    readonly attribute unsigned long numberOfOutputs;
+    attribute unsigned long channelCount;
+    attribute ChannelCountMode channelCountMode;
+    attribute ChannelInterpretation channelInterpretation;
 };
 
 enum ChannelCountMode {
-  "max",
-  "clamped-max",
-  "explicit"
+    "max",
+    "clamped-max",
+    "explicit"
 };
 
 enum ChannelInterpretation {
-  "speakers",
-  "discrete"
+    "speakers",
+    "discrete"
 };
 
 dictionary AudioNodeOptions {
-  unsigned long channelCount;
-  ChannelCountMode channelCountMode;
-  ChannelInterpretation channelInterpretation;
+    unsigned long channelCount;
+    ChannelCountMode channelCountMode;
+    ChannelInterpretation channelInterpretation;
 };
 
 enum AutomationRate {
-  "a-rate",
-  "k-rate"
+    "a-rate",
+    "k-rate"
 };
 
 [Exposed=Window]
 interface AudioParam {
-  attribute float value;
-  attribute AutomationRate automationRate;
-  readonly attribute float defaultValue;
-  readonly attribute float minValue;
-  readonly attribute float maxValue;
-  AudioParam setValueAtTime (float value, double startTime);
-  AudioParam linearRampToValueAtTime (float value, double endTime);
-  AudioParam exponentialRampToValueAtTime (float value, double endTime);
-  AudioParam setTargetAtTime (float target, double startTime, float timeConstant);
-  AudioParam setValueCurveAtTime (sequence<float> values,
-                                  double startTime,
-                                  double duration);
-  AudioParam cancelScheduledValues (double cancelTime);
-  AudioParam cancelAndHoldAtTime (double cancelTime);
+    attribute float value;
+    attribute AutomationRate automationRate;
+    readonly attribute float defaultValue;
+    readonly attribute float minValue;
+    readonly attribute float maxValue;
+    AudioParam setValueAtTime (float value, double startTime);
+    AudioParam linearRampToValueAtTime (float value, double endTime);
+    AudioParam exponentialRampToValueAtTime (float value, double endTime);
+    AudioParam setTargetAtTime (float target, double startTime, float timeConstant);
+    AudioParam setValueCurveAtTime (sequence<float> values,
+                                    double startTime,
+                                    double duration);
+    AudioParam cancelScheduledValues (double cancelTime);
+    AudioParam cancelAndHoldAtTime (double cancelTime);
 };
 
 [Exposed=Window]
 interface AudioScheduledSourceNode : AudioNode {
-  attribute EventHandler onended;
-  undefined start(optional double when = 0);
-  undefined stop(optional double when = 0);
+    attribute EventHandler onended;
+    undefined start(optional double when = 0);
+    undefined stop(optional double when = 0);
 };
 
 [Exposed=Window]
 interface AnalyserNode : AudioNode {
-  constructor (BaseAudioContext context, optional AnalyserOptions options = {});
-  undefined getFloatFrequencyData (Float32Array array);
-  undefined getByteFrequencyData (Uint8Array array);
-  undefined getFloatTimeDomainData (Float32Array array);
-  undefined getByteTimeDomainData (Uint8Array array);
-  attribute unsigned long fftSize;
-  readonly attribute unsigned long frequencyBinCount;
-  attribute double minDecibels;
-  attribute double maxDecibels;
-  attribute double smoothingTimeConstant;
+    constructor (BaseAudioContext context, optional AnalyserOptions options = {});
+    undefined getFloatFrequencyData (Float32Array array);
+    undefined getByteFrequencyData (Uint8Array array);
+    undefined getFloatTimeDomainData (Float32Array array);
+    undefined getByteTimeDomainData (Uint8Array array);
+    attribute unsigned long fftSize;
+    readonly attribute unsigned long frequencyBinCount;
+    attribute double minDecibels;
+    attribute double maxDecibels;
+    attribute double smoothingTimeConstant;
 };
 
 dictionary AnalyserOptions : AudioNodeOptions {
-  unsigned long fftSize = 2048;
-  double maxDecibels = -30;
-  double minDecibels = -100;
-  double smoothingTimeConstant = 0.8;
+    unsigned long fftSize = 2048;
+    double maxDecibels = -30;
+    double minDecibels = -100;
+    double smoothingTimeConstant = 0.8;
 };
 
 [Exposed=Window]
 interface AudioBufferSourceNode : AudioScheduledSourceNode {
-  constructor (BaseAudioContext context,
-               optional AudioBufferSourceOptions options = {});
-  attribute AudioBuffer? buffer;
-  readonly attribute AudioParam playbackRate;
-  readonly attribute AudioParam detune;
-  attribute boolean loop;
-  attribute double loopStart;
-  attribute double loopEnd;
-  undefined start (optional double when = 0,
-                   optional double offset,
-                   optional double duration);
+    constructor (BaseAudioContext context,
+                 optional AudioBufferSourceOptions options = {});
+    attribute AudioBuffer? buffer;
+    readonly attribute AudioParam playbackRate;
+    readonly attribute AudioParam detune;
+    attribute boolean loop;
+    attribute double loopStart;
+    attribute double loopEnd;
+    undefined start (optional double when = 0,
+                     optional double offset,
+                     optional double duration);
 };
 
 dictionary AudioBufferSourceOptions {
-  AudioBuffer? buffer;
-  float detune = 0;
-  boolean loop = false;
-  double loopEnd = 0;
-  double loopStart = 0;
-  float playbackRate = 1;
+    AudioBuffer? buffer;
+    float detune = 0;
+    boolean loop = false;
+    double loopEnd = 0;
+    double loopStart = 0;
+    float playbackRate = 1;
 };
 
 [Exposed=Window]
 interface AudioDestinationNode : AudioNode {
-  readonly attribute unsigned long maxChannelCount;
+    readonly attribute unsigned long maxChannelCount;
 };
 
 [Exposed=Window]
 interface AudioListener {
-  readonly attribute AudioParam positionX;
-  readonly attribute AudioParam positionY;
-  readonly attribute AudioParam positionZ;
-  readonly attribute AudioParam forwardX;
-  readonly attribute AudioParam forwardY;
-  readonly attribute AudioParam forwardZ;
-  readonly attribute AudioParam upX;
-  readonly attribute AudioParam upY;
-  readonly attribute AudioParam upZ;
-  undefined setPosition (float x, float y, float z);
-  undefined setOrientation (float x, float y, float z, float xUp, float yUp, float zUp);
+    readonly attribute AudioParam positionX;
+    readonly attribute AudioParam positionY;
+    readonly attribute AudioParam positionZ;
+    readonly attribute AudioParam forwardX;
+    readonly attribute AudioParam forwardY;
+    readonly attribute AudioParam forwardZ;
+    readonly attribute AudioParam upX;
+    readonly attribute AudioParam upY;
+    readonly attribute AudioParam upZ;
+    undefined setPosition (float x, float y, float z);
+    undefined setOrientation (float x, float y, float z, float xUp, float yUp, float zUp);
 };
 
 [Exposed=Window]
 interface AudioProcessingEvent : Event {
-  constructor (DOMString type, AudioProcessingEventInit eventInitDict);
-  readonly attribute double playbackTime;
-  readonly attribute AudioBuffer inputBuffer;
-  readonly attribute AudioBuffer outputBuffer;
+    constructor (DOMString type, AudioProcessingEventInit eventInitDict);
+    readonly attribute double playbackTime;
+    readonly attribute AudioBuffer inputBuffer;
+    readonly attribute AudioBuffer outputBuffer;
 };
 
 dictionary AudioProcessingEventInit : EventInit {
-  required double playbackTime;
-  required AudioBuffer inputBuffer;
-  required AudioBuffer outputBuffer;
+    required double playbackTime;
+    required AudioBuffer inputBuffer;
+    required AudioBuffer outputBuffer;
 };
 
 enum BiquadFilterType {
-  "lowpass",
-  "highpass",
-  "bandpass",
-  "lowshelf",
-  "highshelf",
-  "peaking",
-  "notch",
-  "allpass"
+    "lowpass",
+    "highpass",
+    "bandpass",
+    "lowshelf",
+    "highshelf",
+    "peaking",
+    "notch",
+    "allpass"
 };
 
 [Exposed=Window]
 interface BiquadFilterNode : AudioNode {
-  constructor (BaseAudioContext context, optional BiquadFilterOptions options = {});
-  attribute BiquadFilterType type;
-  readonly attribute AudioParam frequency;
-  readonly attribute AudioParam detune;
-  readonly attribute AudioParam Q;
-  readonly attribute AudioParam gain;
-  undefined getFrequencyResponse (Float32Array frequencyHz,
-                                  Float32Array magResponse,
-                                  Float32Array phaseResponse);
+    constructor (BaseAudioContext context, optional BiquadFilterOptions options = {});
+    attribute BiquadFilterType type;
+    readonly attribute AudioParam frequency;
+    readonly attribute AudioParam detune;
+    readonly attribute AudioParam Q;
+    readonly attribute AudioParam gain;
+    undefined getFrequencyResponse (Float32Array frequencyHz,
+                                    Float32Array magResponse,
+                                    Float32Array phaseResponse);
 };
 
 dictionary BiquadFilterOptions : AudioNodeOptions {
-  BiquadFilterType type = "lowpass";
-  float Q = 1;
-  float detune = 0;
-  float frequency = 350;
-  float gain = 0;
+    BiquadFilterType type = "lowpass";
+    float Q = 1;
+    float detune = 0;
+    float frequency = 350;
+    float gain = 0;
 };
 
 [Exposed=Window]
 interface ChannelMergerNode : AudioNode {
-  constructor (BaseAudioContext context, optional ChannelMergerOptions options = {});
+    constructor (BaseAudioContext context, optional ChannelMergerOptions options = {});
 };
 
 dictionary ChannelMergerOptions : AudioNodeOptions {
-  unsigned long numberOfInputs = 6;
+    unsigned long numberOfInputs = 6;
 };
 
 [Exposed=Window]
 interface ChannelSplitterNode : AudioNode {
-  constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {});
+    constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {});
 };
 
 dictionary ChannelSplitterOptions : AudioNodeOptions {
-  unsigned long numberOfOutputs = 6;
+    unsigned long numberOfOutputs = 6;
 };
 
 [Exposed=Window]
 interface ConstantSourceNode : AudioScheduledSourceNode {
-  constructor (BaseAudioContext context, optional ConstantSourceOptions options = {});
-  readonly attribute AudioParam offset;
+    constructor (BaseAudioContext context, optional ConstantSourceOptions options = {});
+    readonly attribute AudioParam offset;
 };
 
 dictionary ConstantSourceOptions {
-  float offset = 1;
+    float offset = 1;
 };
 
 [Exposed=Window]
 interface ConvolverNode : AudioNode {
-  constructor (BaseAudioContext context, optional ConvolverOptions options = {});
-  attribute AudioBuffer? buffer;
-  attribute boolean normalize;
+    constructor (BaseAudioContext context, optional ConvolverOptions options = {});
+    attribute AudioBuffer? buffer;
+    attribute boolean normalize;
 };
 
 dictionary ConvolverOptions : AudioNodeOptions {
-  AudioBuffer? buffer;
-  boolean disableNormalization = false;
+    AudioBuffer? buffer;
+    boolean disableNormalization = false;
 };
 
 [Exposed=Window]
 interface DelayNode : AudioNode {
-  constructor (BaseAudioContext context, optional DelayOptions options = {});
-  readonly attribute AudioParam delayTime;
+    constructor (BaseAudioContext context, optional DelayOptions options = {});
+    readonly attribute AudioParam delayTime;
 };
 
 dictionary DelayOptions : AudioNodeOptions {
-  double maxDelayTime = 1;
-  double delayTime = 0;
+    double maxDelayTime = 1;
+    double delayTime = 0;
 };
 
 [Exposed=Window]
 interface DynamicsCompressorNode : AudioNode {
-  constructor (BaseAudioContext context,
-               optional DynamicsCompressorOptions options = {});
-  readonly attribute AudioParam threshold;
-  readonly attribute AudioParam knee;
-  readonly attribute AudioParam ratio;
-  readonly attribute float reduction;
-  readonly attribute AudioParam attack;
-  readonly attribute AudioParam release;
+    constructor (BaseAudioContext context,
+                 optional DynamicsCompressorOptions options = {});
+    readonly attribute AudioParam threshold;
+    readonly attribute AudioParam knee;
+    readonly attribute AudioParam ratio;
+    readonly attribute float reduction;
+    readonly attribute AudioParam attack;
+    readonly attribute AudioParam release;
 };
 
 dictionary DynamicsCompressorOptions : AudioNodeOptions {
-  float attack = 0.003;
-  float knee = 30;
-  float ratio = 12;
-  float release = 0.25;
-  float threshold = -24;
+    float attack = 0.003;
+    float knee = 30;
+    float ratio = 12;
+    float release = 0.25;
+    float threshold = -24;
 };
 
 [Exposed=Window]
 interface GainNode : AudioNode {
-  constructor (BaseAudioContext context, optional GainOptions options = {});
-  readonly attribute AudioParam gain;
+    constructor (BaseAudioContext context, optional GainOptions options = {});
+    readonly attribute AudioParam gain;
 };
 
 dictionary GainOptions : AudioNodeOptions {
-  float gain = 1.0;
+    float gain = 1.0;
 };
 
 [Exposed=Window]
 interface IIRFilterNode : AudioNode {
-  constructor (BaseAudioContext context, IIRFilterOptions options);
-  undefined getFrequencyResponse (Float32Array frequencyHz,
-                                  Float32Array magResponse,
-                                  Float32Array phaseResponse);
+    constructor (BaseAudioContext context, IIRFilterOptions options);
+    undefined getFrequencyResponse (Float32Array frequencyHz,
+                                    Float32Array magResponse,
+                                    Float32Array phaseResponse);
 };
 
 dictionary IIRFilterOptions : AudioNodeOptions {
-  required sequence<double> feedforward;
-  required sequence<double> feedback;
+    required sequence<double> feedforward;
+    required sequence<double> feedback;
 };
 
 [Exposed=Window]
 interface MediaElementAudioSourceNode : AudioNode {
-  constructor (AudioContext context, MediaElementAudioSourceOptions options);
-  [SameObject] readonly attribute HTMLMediaElement mediaElement;
+    constructor (AudioContext context, MediaElementAudioSourceOptions options);
+    [SameObject] readonly attribute HTMLMediaElement mediaElement;
 };
 
 dictionary MediaElementAudioSourceOptions {
-  required HTMLMediaElement mediaElement;
+    required HTMLMediaElement mediaElement;
 };
 
 [Exposed=Window]
 interface MediaStreamAudioDestinationNode : AudioNode {
-  constructor (AudioContext context, optional AudioNodeOptions options = {});
-  readonly attribute MediaStream stream;
+    constructor (AudioContext context, optional AudioNodeOptions options = {});
+    readonly attribute MediaStream stream;
 };
 
 [Exposed=Window]
 interface MediaStreamAudioSourceNode : AudioNode {
-  constructor (AudioContext context, MediaStreamAudioSourceOptions options);
-  [SameObject] readonly attribute MediaStream mediaStream;
+    constructor (AudioContext context, MediaStreamAudioSourceOptions options);
+    [SameObject] readonly attribute MediaStream mediaStream;
 };
 
 dictionary MediaStreamAudioSourceOptions {
-  required MediaStream mediaStream;
+    required MediaStream mediaStream;
 };
 
 [Exposed=Window]
 interface MediaStreamTrackAudioSourceNode : AudioNode {
-  constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options);
+    constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options);
 };
 
 dictionary MediaStreamTrackAudioSourceOptions {
-  required MediaStreamTrack mediaStreamTrack;
+    required MediaStreamTrack mediaStreamTrack;
 };
 
 enum OscillatorType {
-  "sine",
-  "square",
-  "sawtooth",
-  "triangle",
-  "custom"
+    "sine",
+    "square",
+    "sawtooth",
+    "triangle",
+    "custom"
 };
 
 [Exposed=Window]
 interface OscillatorNode : AudioScheduledSourceNode {
-  constructor (BaseAudioContext context, optional OscillatorOptions options = {});
-  attribute OscillatorType type;
-  readonly attribute AudioParam frequency;
-  readonly attribute AudioParam detune;
-  undefined setPeriodicWave (PeriodicWave periodicWave);
+    constructor (BaseAudioContext context, optional OscillatorOptions options = {});
+    attribute OscillatorType type;
+    readonly attribute AudioParam frequency;
+    readonly attribute AudioParam detune;
+    undefined setPeriodicWave (PeriodicWave periodicWave);
 };
 
 dictionary OscillatorOptions : AudioNodeOptions {
-  OscillatorType type = "sine";
-  float frequency = 440;
-  float detune = 0;
-  PeriodicWave periodicWave;
+    OscillatorType type = "sine";
+    float frequency = 440;
+    float detune = 0;
+    PeriodicWave periodicWave;
 };
 
 enum PanningModelType {
-    "equalpower",
-    "HRTF"
+        "equalpower",
+        "HRTF"
 };
 
 enum DistanceModelType {
-  "linear",
-  "inverse",
-  "exponential"
+    "linear",
+    "inverse",
+    "exponential"
 };
 
 [Exposed=Window]
 interface PannerNode : AudioNode {
-  constructor (BaseAudioContext context, optional PannerOptions options = {});
-  attribute PanningModelType panningModel;
-  readonly attribute AudioParam positionX;
-  readonly attribute AudioParam positionY;
-  readonly attribute AudioParam positionZ;
-  readonly attribute AudioParam orientationX;
-  readonly attribute AudioParam orientationY;
-  readonly attribute AudioParam orientationZ;
-  attribute DistanceModelType distanceModel;
-  attribute double refDistance;
-  attribute double maxDistance;
-  attribute double rolloffFactor;
-  attribute double coneInnerAngle;
-  attribute double coneOuterAngle;
-  attribute double coneOuterGain;
-  undefined setPosition (float x, float y, float z);
-  undefined setOrientation (float x, float y, float z);
+    constructor (BaseAudioContext context, optional PannerOptions options = {});
+    attribute PanningModelType panningModel;
+    readonly attribute AudioParam positionX;
+    readonly attribute AudioParam positionY;
+    readonly attribute AudioParam positionZ;
+    readonly attribute AudioParam orientationX;
+    readonly attribute AudioParam orientationY;
+    readonly attribute AudioParam orientationZ;
+    attribute DistanceModelType distanceModel;
+    attribute double refDistance;
+    attribute double maxDistance;
+    attribute double rolloffFactor;
+    attribute double coneInnerAngle;
+    attribute double coneOuterAngle;
+    attribute double coneOuterGain;
+    undefined setPosition (float x, float y, float z);
+    undefined setOrientation (float x, float y, float z);
 };
 
 dictionary PannerOptions : AudioNodeOptions {
-  PanningModelType panningModel = "equalpower";
-  DistanceModelType distanceModel = "inverse";
-  float positionX = 0;
-  float positionY = 0;
-  float positionZ = 0;
-  float orientationX = 1;
-  float orientationY = 0;
-  float orientationZ = 0;
-  double refDistance = 1;
-  double maxDistance = 10000;
-  double rolloffFactor = 1;
-  double coneInnerAngle = 360;
-  double coneOuterAngle = 360;
-  double coneOuterGain = 0;
+    PanningModelType panningModel = "equalpower";
+    DistanceModelType distanceModel = "inverse";
+    float positionX = 0;
+    float positionY = 0;
+    float positionZ = 0;
+    float orientationX = 1;
+    float orientationY = 0;
+    float orientationZ = 0;
+    double refDistance = 1;
+    double maxDistance = 10000;
+    double rolloffFactor = 1;
+    double coneInnerAngle = 360;
+    double coneOuterAngle = 360;
+    double coneOuterGain = 0;
 };
 
 [Exposed=Window]
 interface PeriodicWave {
-  constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {});
+    constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {});
 };
 
 dictionary PeriodicWaveConstraints {
-  boolean disableNormalization = false;
+    boolean disableNormalization = false;
 };
 
 dictionary PeriodicWaveOptions : PeriodicWaveConstraints {
-  sequence<float> real;
-  sequence<float> imag;
+    sequence<float> real;
+    sequence<float> imag;
 };
 
 [Exposed=Window]
 interface ScriptProcessorNode : AudioNode {
-  attribute EventHandler onaudioprocess;
-  readonly attribute long bufferSize;
+    attribute EventHandler onaudioprocess;
+    readonly attribute long bufferSize;
 };
 
 [Exposed=Window]
 interface StereoPannerNode : AudioNode {
-  constructor (BaseAudioContext context, optional StereoPannerOptions options = {});
-  readonly attribute AudioParam pan;
+    constructor (BaseAudioContext context, optional StereoPannerOptions options = {});
+    readonly attribute AudioParam pan;
 };
 
 dictionary StereoPannerOptions : AudioNodeOptions {
-  float pan = 0;
+    float pan = 0;
 };
 
 enum OverSampleType {
-  "none",
-  "2x",
-  "4x"
+    "none",
+    "2x",
+    "4x"
 };
 
 [Exposed=Window]
 interface WaveShaperNode : AudioNode {
-  constructor (BaseAudioContext context, optional WaveShaperOptions options = {});
-  attribute Float32Array? curve;
-  attribute OverSampleType oversample;
+    constructor (BaseAudioContext context, optional WaveShaperOptions options = {});
+    attribute Float32Array? curve;
+    attribute OverSampleType oversample;
 };
 
 dictionary WaveShaperOptions : AudioNodeOptions {
-  sequence<float> curve;
-  OverSampleType oversample = "none";
+    sequence<float> curve;
+    OverSampleType oversample = "none";
 };
 
 [Exposed=Window, SecureContext]
@@ -624,40 +624,40 @@
 
 [Global=(Worklet, AudioWorklet), Exposed=AudioWorklet]
 interface AudioWorkletGlobalScope : WorkletGlobalScope {
-  undefined registerProcessor (DOMString name,
-                               AudioWorkletProcessorConstructor processorCtor);
-  readonly attribute unsigned long long currentFrame;
-  readonly attribute double currentTime;
-  readonly attribute float sampleRate;
-  readonly attribute MessagePort port;
+    undefined registerProcessor (DOMString name,
+                                               AudioWorkletProcessorConstructor processorCtor);
+    readonly attribute unsigned long long currentFrame;
+    readonly attribute double currentTime;
+    readonly attribute float sampleRate;
+    readonly attribute MessagePort port;
 };
 
 [Exposed=Window]
 interface AudioParamMap {
-  readonly maplike<DOMString, AudioParam>;
+    readonly maplike<DOMString, AudioParam>;
 };
 
 [Exposed=Window, SecureContext]
 interface AudioWorkletNode : AudioNode {
-  constructor (BaseAudioContext context, DOMString name,
+    constructor (BaseAudioContext context, DOMString name,
                optional AudioWorkletNodeOptions options = {});
-  readonly attribute AudioParamMap parameters;
-  readonly attribute MessagePort port;
-  attribute EventHandler onprocessorerror;
+    readonly attribute AudioParamMap parameters;
+    readonly attribute MessagePort port;
+    attribute EventHandler onprocessorerror;
 };
 
 dictionary AudioWorkletNodeOptions : AudioNodeOptions {
-  unsigned long numberOfInputs = 1;
-  unsigned long numberOfOutputs = 1;
-  sequence<unsigned long> outputChannelCount;
-  record<DOMString, double> parameterData;
-  object processorOptions;
+    unsigned long numberOfInputs = 1;
+    unsigned long numberOfOutputs = 1;
+    sequence<unsigned long> outputChannelCount;
+    record<DOMString, double> parameterData;
+    object processorOptions;
 };
 
 [Exposed=AudioWorklet]
 interface AudioWorkletProcessor {
-  constructor ();
-  readonly attribute MessagePort port;
+    constructor ();
+    readonly attribute MessagePort port;
 };
 
 callback AudioWorkletProcessCallback =
@@ -666,9 +666,9 @@
            object parameters);
 
 dictionary AudioParamDescriptor {
-  required DOMString name;
-  float defaultValue = 0;
-  float minValue = -3.4028235e38;
-  float maxValue = 3.4028235e38;
-  AutomationRate automationRate = "a-rate";
+    required DOMString name;
+    float defaultValue = 0;
+    float minValue = -3.4028235e38;
+    float maxValue = 3.4028235e38;
+    AutomationRate automationRate = "a-rate";
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webauthn.idl b/third_party/blink/web_tests/external/wpt/interfaces/webauthn.idl
index d35ebbf..ef27322 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webauthn.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webauthn.idl
@@ -20,7 +20,7 @@
     Base64URLString id;
     Base64URLString rawId;
     AuthenticatorAttestationResponseJSON response;
-    DOMString?  authenticatorAttachment;
+    DOMString? authenticatorAttachment;
     AuthenticationExtensionsClientOutputsJSON clientExtensionResults;
     DOMString type;
 };
@@ -35,7 +35,7 @@
     Base64URLString id;
     Base64URLString rawId;
     AuthenticatorAssertionResponseJSON response;
-    DOMString?  authenticatorAttachment;
+    DOMString? authenticatorAttachment;
     AuthenticationExtensionsClientOutputsJSON clientExtensionResults;
     DOMString type;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webgpu.idl b/third_party/blink/web_tests/external/wpt/interfaces/webgpu.idl
index f2e038c2..5b4fcc1 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webgpu.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webgpu.idl
@@ -815,6 +815,34 @@
     required GPUIndex32 shaderLocation;
 };
 
+dictionary GPUImageDataLayout {
+    GPUSize64 offset = 0;
+    GPUSize32 bytesPerRow;
+    GPUSize32 rowsPerImage;
+};
+
+dictionary GPUImageCopyBuffer : GPUImageDataLayout {
+    required GPUBuffer buffer;
+};
+
+dictionary GPUImageCopyTexture {
+    required GPUTexture texture;
+    GPUIntegerCoordinate mipLevel = 0;
+    GPUOrigin3D origin = {};
+    GPUTextureAspect aspect = "all";
+};
+
+dictionary GPUImageCopyTextureTagged : GPUImageCopyTexture {
+    PredefinedColorSpace colorSpace = "srgb";
+    boolean premultipliedAlpha = false;
+};
+
+dictionary GPUImageCopyExternalImage {
+    required (ImageBitmap or HTMLVideoElement or HTMLCanvasElement or OffscreenCanvas) source;
+    GPUOrigin2D origin = {};
+    boolean flipY = false;
+};
+
 [Exposed=(Window, DedicatedWorker), SecureContext]
 interface GPUCommandBuffer {
 };
@@ -876,34 +904,6 @@
 dictionary GPUCommandEncoderDescriptor : GPUObjectDescriptorBase {
 };
 
-dictionary GPUImageDataLayout {
-    GPUSize64 offset = 0;
-    GPUSize32 bytesPerRow;
-    GPUSize32 rowsPerImage;
-};
-
-dictionary GPUImageCopyBuffer : GPUImageDataLayout {
-    required GPUBuffer buffer;
-};
-
-dictionary GPUImageCopyTexture {
-    required GPUTexture texture;
-    GPUIntegerCoordinate mipLevel = 0;
-    GPUOrigin3D origin = {};
-    GPUTextureAspect aspect = "all";
-};
-
-dictionary GPUImageCopyTextureTagged : GPUImageCopyTexture {
-    PredefinedColorSpace colorSpace = "srgb";
-    boolean premultipliedAlpha = false;
-};
-
-dictionary GPUImageCopyExternalImage {
-    required (ImageBitmap or HTMLVideoElement or HTMLCanvasElement or OffscreenCanvas) source;
-    GPUOrigin2D origin = {};
-    boolean flipY = false;
-};
-
 interface mixin GPUBindingCommandsMixin {
     undefined setBindGroup(GPUIndex32 index, GPUBindGroup bindGroup,
         optional sequence<GPUBufferDynamicOffset> dynamicOffsets = []);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webnn.idl b/third_party/blink/web_tests/external/wpt/interfaces/webnn.idl
index 2f900b5..c8a09aed 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webnn.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webnn.idl
@@ -27,8 +27,13 @@
 
 [SecureContext, Exposed=(Window, DedicatedWorker)]
 interface ML {
-  MLContext createContext(optional MLContextOptions options = {});
-  MLContext createContext(GPUDevice gpuDevice);
+  Promise<MLContext> createContext(optional MLContextOptions options = {});
+  Promise<MLContext> createContext(GPUDevice gpuDevice);
+
+  [Exposed=(DedicatedWorker)]
+  MLContext createContextSync(optional MLContextOptions options = {});
+  [Exposed=(DedicatedWorker)]
+  MLContext createContextSync(GPUDevice gpuDevice);
 };
 
 typedef record<DOMString, ArrayBufferView> MLNamedArrayBufferViews;
@@ -38,12 +43,12 @@
 
 partial interface MLContext {
   [Exposed=(DedicatedWorker)]
-  undefined compute(
+  undefined computeSync(
       MLGraph graph, MLNamedArrayBufferViews inputs, MLNamedArrayBufferViews outputs);
 };
 
 partial interface MLContext {
-  Promise<undefined> computeAsync(
+  Promise<undefined> compute(
       MLGraph graph, MLNamedArrayBufferViews inputs, MLNamedArrayBufferViews outputs);
 };
 
@@ -103,12 +108,12 @@
   // Create a single-value operand from the specified number of the specified type.
   MLOperand constant(double value, optional MLOperandType type = "float32");
 
+  // Compile the graph up to the specified output operands asynchronously.
+  Promise<MLGraph> build(MLNamedOperands outputs);
+
   // Compile the graph up to the specified output operands synchronously.
   [Exposed=(DedicatedWorker)]
-  MLGraph build(MLNamedOperands outputs);
-
-  // Compile the graph up to the specified output operands asynchronously.
-  Promise<MLGraph> buildAsync(MLNamedOperands outputs);
+  MLGraph buildSync(MLNamedOperands outputs);
 };
 
 dictionary MLBatchNormalizationOptions {
@@ -152,11 +157,11 @@
 };
 
 dictionary MLConv2dOptions {
-  sequence<long> padding;
-  sequence<long> strides;
-  sequence<long> dilations;
+  sequence<unsigned long> padding;
+  sequence<unsigned long> strides;
+  sequence<unsigned long> dilations;
   MLAutoPad autoPad = "explicit";
-  long groups = 1;
+  unsigned long groups = 1;
   MLInputOperandLayout inputLayout = "nchw";
   MLConv2dFilterOperandLayout filterLayout = "oihw";
   MLOperand bias;
@@ -174,13 +179,13 @@
 };
 
 dictionary MLConvTranspose2dOptions {
-  sequence<long> padding;
-  sequence<long> strides;
-  sequence<long> dilations;
-  sequence<long> outputPadding;
-  sequence<long> outputSizes;
+  sequence<unsigned long> padding;
+  sequence<unsigned long> strides;
+  sequence<unsigned long> dilations;
+  sequence<unsigned long> outputPadding;
+  sequence<unsigned long> outputSizes;
   MLAutoPad autoPad = "explicit";
-  long groups = 1;
+  unsigned long groups = 1;
   MLInputOperandLayout inputLayout = "nchw";
   MLConvTranspose2dFilterOperandLayout filterLayout = "iohw";
   MLOperand bias;
@@ -259,7 +264,6 @@
 
 partial interface MLGraphBuilder {
   sequence<MLOperand> gru(MLOperand input, MLOperand weight, MLOperand recurrentWeight,
-
                         long steps, long hiddenSize, optional MLGruOptions options = {});
 };
 
@@ -273,7 +277,6 @@
 
 partial interface MLGraphBuilder {
   MLOperand gruCell(MLOperand input, MLOperand weight, MLOperand recurrentWeight,
-
                   MLOperand hiddenState, long hiddenSize, optional MLGruCellOptions options = {});
 };
 
@@ -301,7 +304,6 @@
 
 partial interface MLGraphBuilder {
   MLOperand instanceNormalization(MLOperand input,
-
                                 optional MLInstanceNormalizationOptions options = {});
 };
 
@@ -350,14 +352,14 @@
 };
 
 dictionary MLPool2dOptions {
-  sequence<long> windowDimensions;
-  sequence<long> padding;
-  sequence<long> strides;
-  sequence<long> dilations;
+  sequence<unsigned long> windowDimensions;
+  sequence<unsigned long> padding;
+  sequence<unsigned long> strides;
+  sequence<unsigned long> dilations;
   MLAutoPad autoPad = "explicit";
   MLInputOperandLayout layout = "nchw";
   MLRoundingType roundingType = "floor";
-  sequence<long> outputSizes;
+  sequence<unsigned long> outputSizes;
 };
 
 partial interface MLGraphBuilder {
@@ -397,7 +399,7 @@
 dictionary MLResample2dOptions {
   MLInterpolationMode mode = "nearest-neighbor";
   sequence<float> scales;
-  sequence<long> sizes;
+  sequence<unsigned long> sizes;
   sequence<long> axes;
 };
 
@@ -406,7 +408,7 @@
 };
 
 partial interface MLGraphBuilder {
-  MLOperand reshape(MLOperand input, sequence<long> newShape);
+  MLOperand reshape(MLOperand input, sequence<unsigned long?> newShape);
 };
 
 partial interface MLGraphBuilder {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-encoded-transform.idl b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-encoded-transform.idl
index f1747f51..13f3999 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-encoded-transform.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-encoded-transform.idl
@@ -64,15 +64,15 @@
 };
 
 dictionary RTCEncodedVideoFrameMetadata {
-    long long frameId;
-    sequence<long long> dependencies;
+    unsigned long long frameId;
+    sequence<unsigned long long> dependencies;
     unsigned short width;
     unsigned short height;
-    long spatialIndex;
-    long temporalIndex;
+    unsigned long spatialIndex;
+    unsigned long temporalIndex;
     unsigned long synchronizationSource;
     octet payloadType;
-    sequence<unsigned long> contributingSources;
+  sequence<unsigned long> contributingSources;
 };
 
 // New interfaces to define encoded video and audio frames. Will eventually
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl
index 237c7e47..397d783 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl
@@ -51,6 +51,7 @@
  DOMString            remoteId;
  unsigned long        framesDecoded;
  unsigned long        keyFramesDecoded;
+ unsigned long        framesRendered;
  unsigned long        framesDropped;
  unsigned long        frameWidth;
  unsigned long        frameHeight;
@@ -137,6 +138,7 @@
              DOMString            encoderImplementation;
              boolean              powerEfficientEncoder;
              boolean              active;
+             DOMString            scalabilityMode;
 };
 
 enum RTCQualityLimitationReason {
@@ -180,11 +182,11 @@
 };
 
 dictionary RTCAudioPlayoutStats : RTCStats {
-             double        synthesizedSamplesDuration;
-             unsigned long synthesizedSamplesEvents;
-             double        totalSamplesDuration;
-             double        totalPlayoutDelay;
-             double        totalSamplesCount;
+             double             synthesizedSamplesDuration;
+             unsigned long      synthesizedSamplesEvents;
+             double             totalSamplesDuration;
+             double             totalPlayoutDelay;
+             unsigned long long totalSamplesCount;
 };
 
 dictionary RTCPeerConnectionStats : RTCStats {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webtransport.idl b/third_party/blink/web_tests/external/wpt/interfaces/webtransport.idl
index 1aa5a51..ba70580 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webtransport.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webtransport.idl
@@ -28,11 +28,13 @@
 
   readonly attribute WebTransportDatagramDuplexStream datagrams;
 
-  Promise<WebTransportBidirectionalStream> createBidirectionalStream();
+  Promise<WebTransportBidirectionalStream> createBidirectionalStream(
+      optional WebTransportSendStreamOptions options = {});
   /* a ReadableStream of WebTransportBidirectionalStream objects */
   readonly attribute ReadableStream incomingBidirectionalStreams;
 
-  Promise<WebTransportSendStream> createUnidirectionalStream();
+  Promise<WebTransportSendStream> createUnidirectionalStream(
+      optional WebTransportSendStreamOptions options = {});
   /* a ReadableStream of WebTransportReceiveStream objects */
   readonly attribute ReadableStream incomingUnidirectionalStreams;
 };
@@ -63,7 +65,11 @@
 
 dictionary WebTransportCloseInfo {
   unsigned long closeCode = 0;
-  DOMString reason = "";
+  USVString reason = "";
+};
+
+dictionary WebTransportSendStreamOptions {
+  long long? sendOrder = null;
 };
 
 dictionary WebTransportStats {
@@ -88,7 +94,7 @@
   unsigned long long lostOutgoing;
 };
 
-[Exposed=(Window,Worker), SecureContext]
+[Exposed=(Window,Worker), SecureContext, Transferable]
 interface WebTransportSendStream : WritableStream {
   Promise<WebTransportSendStreamStats> getStats();
 };
@@ -100,7 +106,7 @@
   unsigned long long bytesAcknowledged;
 };
 
-[Exposed=(Window,Worker), SecureContext]
+[Exposed=(Window,Worker), SecureContext, Transferable]
 interface WebTransportReceiveStream : ReadableStream {
   Promise<WebTransportReceiveStreamStats> getStats();
 };
diff --git a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
index 547df29..07d81d6 100644
--- a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
@@ -1,15 +1,5 @@
 [cross-origin-iframe.sub.html]
   [topDocument.scrollingElement.scrollTop = 200]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
       if (os == "linux") and (flag_specific == "") and (product == "chrome"): FAIL
       if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): FAIL
-
-  [iframeDocument.scrollingElement.scrollTop = 250]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-
-  [topDocument.scrollingElement.scrollTop = 100]
-    expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): FAIL
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html.ini
deleted file mode 100644
index 1cd483b..0000000
--- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[observe-cross-origin-tao-animated-image.tentative.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html.ini
similarity index 70%
rename from third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
rename to third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html.ini
index c1f1d46..c890a02a 100644
--- a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html.ini
@@ -1,3 +1,3 @@
-[Range-mutations-dataChange.html]
+[cross-origin-image.sub.html]
   expected:
     if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
index 7d56e93..db9b723 100644
--- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
@@ -1,5 +1,5 @@
 [first-paint-equals-lcp-text.html]
   [FCP and LCP are the same when there is a single text element in the page.]
     expected:
-      if product == "chrome": PASS
+      if product == "chrome": [FAIL, PASS]
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/lifecycle/freeze.html.ini b/third_party/blink/web_tests/external/wpt/lifecycle/freeze.html.ini
index 38d7ada..a184acb 100644
--- a/third_party/blink/web_tests/external/wpt/lifecycle/freeze.html.ini
+++ b/third_party/blink/web_tests/external/wpt/lifecycle/freeze.html.ini
@@ -2,4 +2,4 @@
   [Test freeze callback.]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
index d55450e..08b5950 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
@@ -1,4 +1,2 @@
 [csp-early-hints-absent-final-absent.h2.window.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
index 989e58b..c53530f1 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
@@ -1,4 +1,4 @@
 [csp-early-hints-allowed-final-absent.h2.window.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [OK, ERROR]
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-disallowed-final-disallowed.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-disallowed-final-disallowed.h2.window.js.ini
index 3e11622..2aa08d2c 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-disallowed-final-disallowed.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-disallowed-final-disallowed.h2.window.js.ini
@@ -1,4 +1,4 @@
 [csp-early-hints-disallowed-final-disallowed.h2.window.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [OK, ERROR]
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-as.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-as.h2.window.js.ini
index 6ac50adc..ed8057a6 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-as.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-as.h2.window.js.ini
@@ -1,4 +1,2 @@
 [preload-without-as.h2.window.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-cross-origin.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-cross-origin.h2.window.js.ini
index 44a1ffc..6210ef7 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-cross-origin.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-cross-origin.h2.window.js.ini
@@ -1,4 +1,4 @@
 [redirect-cross-origin.h2.window.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": OK
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
index 66bceec..33dd97a 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
@@ -1,4 +1,4 @@
 [redirect-same-origin-between-early-hints.h2.window.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [OK, ERROR]
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini b/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
index 9aec8da..1281282 100644
--- a/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
+++ b/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
@@ -2,4 +2,3 @@
   [Performance longtask entries from cross-origin iframe are observable in its sibling.]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html.ini b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html.ini
index 72e2809..f779190 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html.ini
@@ -1,4 +1,6 @@
 [ignored-properties-001.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
   [maction layout is not affected by width: 100px !important; height: 200px !important;]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
index 395d921f..cf16bf5 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
@@ -4,5 +4,4 @@
 
   [Media tracks must be removed when the SourceBuffer is removed from the MediaSource]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
index e23991a4..cbf0c1c 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
@@ -3,3 +3,10 @@
     if (flag_specific == "") and (os == "linux") and (product == "chrome"): OK
     if (flag_specific == "") and (os == "win"): OK
     ERROR
+  [Test setting same duration multiple times does not fire duplicate durationchange]
+    expected:
+      if flag_specific == "disable-layout-ng": FAIL
+
+  [Test seek starts on duration truncation below currentTime]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
new file mode 100644
index 0000000..9ae2538
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
@@ -0,0 +1,3 @@
+[navigate-initial-about-blank.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
index 81269fb..61cb165 100644
--- a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
+++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
@@ -1,4 +1,4 @@
 [after-transition-intercept-handler-modifies.html]
   [scroll: state should be saved before intercept handlers run]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini b/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
index d0a1c61..d7b47d0 100644
--- a/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
@@ -1,4 +1,4 @@
 [test-performance-attributes.sub.html]
   [Check that performance.timing has reasonable values for secureConnectionStart and other attributes]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
index 0afa3eb6..f2617066 100644
--- a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
@@ -3,8 +3,8 @@
     if product == "chrome": ERROR
   [A discarded document does not send an already sent beacon.]
     expected:
-      if os == "win": FAIL
+      if (flag_specific == "") and (os == "linux"): [PASS, FAIL]
 
   [A discarded document sends all its beacons of which backgroundTimeouts are\n    not default.]
     expected:
-      if (os == "linux") and (flag_specific == ""): [FAIL, PASS]
+      if (flag_specific == "") and (os == "linux"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
index af1aaca9..0316ca75 100644
--- a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
@@ -1,5 +1,6 @@
 [performance-navigation-timing-same-origin-bfcache.tentative.window.html]
   [RemoteContextHelper navigation using BFCache]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini
new file mode 100644
index 0000000..6360a03d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini
@@ -0,0 +1,3 @@
+[unload-allowed-by-default.tentative.window.html]
+  expected:
+    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/reporting/reporting-isolated-across-navigations.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/reporting/reporting-isolated-across-navigations.https.sub.html.ini
index ff4e0da..a20d664 100644
--- a/third_party/blink/web_tests/external/wpt/reporting/reporting-isolated-across-navigations.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/reporting/reporting-isolated-across-navigations.https.sub.html.ini
@@ -1,5 +1,4 @@
 [reporting-isolated-across-navigations.https.sub.html]
   [Reports should be sent to the correct endpoints]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): FAIL
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-exception.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-exception.html.ini
new file mode 100644
index 0000000..a3b7256
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-exception.html.ini
@@ -0,0 +1,3 @@
+[callback-exception.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini
index f827d62..f581f89 100644
--- a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini
@@ -1,3 +1,3 @@
 [deadline-max-rAF-dynamic.html]
   expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
new file mode 100644
index 0000000..ff1add8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
@@ -0,0 +1,3 @@
+[deadline-max-rAF.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
index affb928e4..d64197bd 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
@@ -22,12 +22,14 @@
 
   [content-type 9 : text/html;charset=gbk,text/plain,text/html]
     expected:
-      if os == "win": PASS
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
+      if (flag_specific == "") and (os == "win"): PASS
       FAIL
 
   [content-type 10 : text/plain,*/*]
     expected:
-      if os == "win": PASS
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
+      if (flag_specific == "") and (os == "win"): PASS
       FAIL
 
   [content-type 11 : text/html,*/*]
@@ -42,8 +44,7 @@
 
   [content-type 14 : text/html,*/*;charset=gbk]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
-      if (flag_specific == "") and (os == "win"): PASS
+      if os == "win": PASS
       FAIL
 
   [content-type 15 : text/html;x=",text/plain]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/nested-context-navigations-iframe.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/nested-context-navigations-iframe.html.ini
index 58d4c10..1c863b1 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/nested-context-navigations-iframe.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/nested-context-navigations-iframe.html.ini
@@ -1,4 +1,4 @@
 [nested-context-navigations-iframe.html]
-  [Test that crossorigin iframe navigations are not observable by the parent, even after history navigations by the parent]
+  [Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
index ff8840b..95e0598c 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
@@ -1,5 +1,5 @@
 [no-entries-for-cross-origin-css-fetched-memory-cache.sub.html]
   [Make sure that resources fetched by cross origin CSS are not in the timeline.]
     expected:
-      if flag_specific == "disable-layout-ng": PASS
-      FAIL
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
index 5496d8a0..46b003a 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
@@ -78,7 +78,8 @@
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 85]
-    expected: [PASS, NOTRUN]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
 
   [This test validates the response status of resources. 197]
     expected: [PASS, NOTRUN]
@@ -281,9 +282,6 @@
   [This test validates the response status of resources. 129]
     expected: [PASS, NOTRUN]
 
-  [This test validates the response status of resources. 246]
-    expected: [NOTRUN, PASS]
-
   [This test validates the response status of resources. 231]
     expected: [PASS, NOTRUN]
 
@@ -305,9 +303,6 @@
   [This test validates the response status of resources. 90]
     expected: [PASS, NOTRUN]
 
-  [This test validates the response status of resources. 244]
-    expected: [PASS, NOTRUN]
-
   [This test validates the response status of resources. 162]
     expected: [PASS, NOTRUN]
 
@@ -557,14 +552,26 @@
   [This test validates the response status of resources. 191]
     expected: [PASS, NOTRUN]
 
-  [This test validates the response status of resources. 277]
+  [This test validates the response status of resources. 273]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
+  [This test validates the response status of resources. 292]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
+  [This test validates the response status of resources. 84]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
+  [This test validates the response status of resources. 279]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
+  [This test validates the response status of resources. 272]
     expected:
       if product == "chrome": [PASS, FAIL]
 
   [This test validates the response status of resources. 278]
     expected:
-      if (flag_specific == "") and (product == "chrome"): [FAIL, PASS]
-
-  [This test validates the response status of resources. 274]
-    expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/resources/idlharness.js b/third_party/blink/web_tests/external/wpt/resources/idlharness.js
index bda4a31..46aa11e 100644
--- a/third_party/blink/web_tests/external/wpt/resources/idlharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/idlharness.js
@@ -2668,6 +2668,7 @@
 
 IdlInterface.prototype.test_members = function()
 {
+    var unexposed_members = new Set();
     for (var i = 0; i < this.members.length; i++)
     {
         var member = this.members[i];
@@ -2676,15 +2677,18 @@
         }
 
         if (!exposed_in(exposure_set(member, this.exposureSet))) {
-            subsetTestByKey(this.name, test, function() {
-                // It's not exposed, so we shouldn't find it anywhere.
-                assert_false(member.name in this.get_interface_object(),
-                             "The interface object must not have a property " +
-                             format_value(member.name));
-                assert_false(member.name in this.get_interface_object().prototype,
-                             "The prototype object must not have a property " +
-                             format_value(member.name));
-            }.bind(this), this.name + " interface: member " + member.name);
+            if (!unexposed_members.has(member.name)) {
+                unexposed_members.add(member.name);
+                subsetTestByKey(this.name, test, function() {
+                    // It's not exposed, so we shouldn't find it anywhere.
+                    assert_false(member.name in this.get_interface_object(),
+                                "The interface object must not have a property " +
+                                format_value(member.name));
+                    assert_false(member.name in this.get_interface_object().prototype,
+                                "The prototype object must not have a property " +
+                                format_value(member.name));
+                }.bind(this), this.name + " interface: member " + member.name);
+            }
             continue;
         }
 
@@ -2855,17 +2859,23 @@
         return;
     }
 
+    var unexposed_properties = new Set();
     for (var i = 0; i < this.members.length; i++)
     {
         var member = this.members[i];
         if (member.untested) {
             continue;
         }
-        if (!exposed_in(exposure_set(member, this.exposureSet))) {
-            subsetTestByKey(this.name, test, function() {
-                assert_equals(exception, null, "Unexpected exception when evaluating object");
-                assert_false(member.name in obj);
-            }.bind(this), this.name + " interface: " + desc + ' must not have property "' + member.name + '"');
+        if (!exposed_in(exposure_set(member, this.exposureSet)))
+        {
+            if (!unexposed_properties.has(member.name))
+            {
+                unexposed_properties.add(member.name);
+                subsetTestByKey(this.name, test, function() {
+                    assert_equals(exception, null, "Unexpected exception when evaluating object");
+                    assert_false(member.name in obj);
+                }.bind(this), this.name + " interface: " + desc + ' must not have property "' + member.name + '"');
+            }
             continue;
         }
         if (member.type == "attribute" && member.isUnforgeable)
diff --git a/third_party/blink/web_tests/external/wpt/selection/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/selection/idlharness.window-expected.txt
new file mode 100644
index 0000000..aab2a3e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/selection/idlharness.window-expected.txt
@@ -0,0 +1,112 @@
+This is a testharness.js-based test.
+Found 108 tests; 105 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS idl_test setup
+PASS idl_test validation
+PASS Partial interface Document: original interface defined
+PASS Partial interface Document: member names are unique
+PASS Partial interface Window: original interface defined
+PASS Partial interface Window: member names are unique
+PASS Partial interface mixin GlobalEventHandlers: original interface mixin defined
+PASS Partial interface mixin GlobalEventHandlers: member names are unique
+PASS Partial interface Document[2]: member names are unique
+PASS Partial interface Document[3]: member names are unique
+PASS Partial interface Window[2]: member names are unique
+PASS Document includes GlobalEventHandlers: member names are unique
+PASS HTMLElement includes GlobalEventHandlers: member names are unique
+PASS HTMLElement includes ElementContentEditable: member names are unique
+PASS HTMLElement includes HTMLOrSVGElement: member names are unique
+PASS Window includes GlobalEventHandlers: member names are unique
+PASS Window includes WindowEventHandlers: member names are unique
+PASS Window includes WindowOrWorkerGlobalScope: member names are unique
+PASS Window includes AnimationFrameProvider: member names are unique
+PASS Window includes WindowSessionStorage: member names are unique
+PASS Window includes WindowLocalStorage: member names are unique
+PASS Document includes NonElementParentNode: member names are unique
+PASS Document includes ParentNode: member names are unique
+PASS Element includes ParentNode: member names are unique
+PASS Element includes NonDocumentTypeChildNode: member names are unique
+PASS Element includes ChildNode: member names are unique
+PASS Element includes Slottable: member names are unique
+PASS Document includes XPathEvaluatorBase: member names are unique
+PASS Selection interface: existence and properties of interface object
+PASS Selection interface object length
+PASS Selection interface object name
+PASS Selection interface: existence and properties of interface prototype object
+PASS Selection interface: existence and properties of interface prototype object's "constructor" property
+PASS Selection interface: existence and properties of interface prototype object's @@unscopables property
+PASS Selection interface: attribute anchorNode
+PASS Selection interface: attribute anchorOffset
+PASS Selection interface: attribute focusNode
+PASS Selection interface: attribute focusOffset
+PASS Selection interface: attribute isCollapsed
+PASS Selection interface: attribute rangeCount
+PASS Selection interface: attribute type
+PASS Selection interface: operation getRangeAt(unsigned long)
+PASS Selection interface: operation addRange(Range)
+PASS Selection interface: operation removeRange(Range)
+PASS Selection interface: operation removeAllRanges()
+PASS Selection interface: operation empty()
+FAIL Selection interface: operation getComposedRange(ShadowRoot...) assert_own_property: interface prototype object missing non-static operation expected property "getComposedRange" missing
+PASS Selection interface: operation collapse(Node?, optional unsigned long)
+PASS Selection interface: operation setPosition(Node?, optional unsigned long)
+PASS Selection interface: operation collapseToStart()
+PASS Selection interface: operation collapseToEnd()
+PASS Selection interface: operation extend(Node, optional unsigned long)
+PASS Selection interface: operation setBaseAndExtent(Node, unsigned long, Node, unsigned long)
+PASS Selection interface: operation selectAllChildren(Node)
+PASS Selection interface: operation modify(optional DOMString, optional DOMString, optional DOMString)
+PASS Selection interface: operation deleteFromDocument()
+PASS Selection interface: operation containsNode(Node, optional boolean)
+PASS Selection interface: stringifier
+PASS Selection must be primary interface of getSelection()
+PASS Stringification of getSelection()
+PASS Selection interface: getSelection() must inherit property "anchorNode" with the proper type
+PASS Selection interface: getSelection() must inherit property "anchorOffset" with the proper type
+PASS Selection interface: getSelection() must inherit property "focusNode" with the proper type
+PASS Selection interface: getSelection() must inherit property "focusOffset" with the proper type
+PASS Selection interface: getSelection() must inherit property "isCollapsed" with the proper type
+PASS Selection interface: getSelection() must inherit property "rangeCount" with the proper type
+PASS Selection interface: getSelection() must inherit property "type" with the proper type
+PASS Selection interface: getSelection() must inherit property "getRangeAt(unsigned long)" with the proper type
+PASS Selection interface: calling getRangeAt(unsigned long) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "addRange(Range)" with the proper type
+PASS Selection interface: calling addRange(Range) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "removeRange(Range)" with the proper type
+PASS Selection interface: calling removeRange(Range) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "removeAllRanges()" with the proper type
+PASS Selection interface: getSelection() must inherit property "empty()" with the proper type
+FAIL Selection interface: getSelection() must inherit property "getComposedRange(ShadowRoot...)" with the proper type assert_inherits: property "getComposedRange" not found in prototype chain
+FAIL Selection interface: calling getComposedRange(ShadowRoot...) on getSelection() with too few arguments must throw TypeError assert_inherits: property "getComposedRange" not found in prototype chain
+PASS Selection interface: getSelection() must inherit property "collapse(Node?, optional unsigned long)" with the proper type
+PASS Selection interface: calling collapse(Node?, optional unsigned long) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "setPosition(Node?, optional unsigned long)" with the proper type
+PASS Selection interface: calling setPosition(Node?, optional unsigned long) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "collapseToStart()" with the proper type
+PASS Selection interface: getSelection() must inherit property "collapseToEnd()" with the proper type
+PASS Selection interface: getSelection() must inherit property "extend(Node, optional unsigned long)" with the proper type
+PASS Selection interface: calling extend(Node, optional unsigned long) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "setBaseAndExtent(Node, unsigned long, Node, unsigned long)" with the proper type
+PASS Selection interface: calling setBaseAndExtent(Node, unsigned long, Node, unsigned long) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "selectAllChildren(Node)" with the proper type
+PASS Selection interface: calling selectAllChildren(Node) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "modify(optional DOMString, optional DOMString, optional DOMString)" with the proper type
+PASS Selection interface: calling modify(optional DOMString, optional DOMString, optional DOMString) on getSelection() with too few arguments must throw TypeError
+PASS Selection interface: getSelection() must inherit property "deleteFromDocument()" with the proper type
+PASS Selection interface: getSelection() must inherit property "containsNode(Node, optional boolean)" with the proper type
+PASS Selection interface: calling containsNode(Node, optional boolean) on getSelection() with too few arguments must throw TypeError
+PASS HTMLElement interface: attribute onselectstart
+PASS HTMLElement interface: attribute onselectionchange
+PASS Window interface: operation getSelection()
+PASS Window interface: attribute onselectstart
+PASS Window interface: attribute onselectionchange
+PASS Window interface: window must inherit property "getSelection()" with the proper type
+PASS Window interface: window must inherit property "onselectstart" with the proper type
+PASS Window interface: window must inherit property "onselectionchange" with the proper type
+PASS Document interface: operation getSelection()
+PASS Document interface: attribute onselectstart
+PASS Document interface: attribute onselectionchange
+PASS Document interface: document must inherit property "getSelection()" with the proper type
+PASS Document interface: document must inherit property "onselectstart" with the proper type
+PASS Document interface: document must inherit property "onselectionchange" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/selection/idlharness.window.js.ini b/third_party/blink/web_tests/external/wpt/selection/idlharness.window.js.ini
new file mode 100644
index 0000000..61d4af1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/selection/idlharness.window.js.ini
@@ -0,0 +1,9 @@
+[idlharness.window.html]
+  [Selection interface: operation getComposedRange(ShadowRoot...)]
+    expected: FAIL
+
+  [Selection interface: getSelection() must inherit property "getComposedRange(ShadowRoot...)" with the proper type]
+    expected: FAIL
+
+  [Selection interface: calling getComposedRange(ShadowRoot...) on getSelection() with too few arguments must throw TypeError]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
index 6af02218..b2db2c56 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
@@ -2,15 +2,15 @@
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
+  [Cache.addAll should succeed when entries differ by vary header]
+    expected:
+      if product == "chrome": FAIL
+
 
 [cache-add.https.any.sharedworker.html]
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
-  [Cache.addAll should succeed when entries differ by vary header]
-    expected:
-      if product == "chrome": [PASS, FAIL]
-
 
 [cache-add.https.any.serviceworker.html]
   [Cache.addAll called with the same Request object specified twice]
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
index c59a16f..44673f0a 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
@@ -1,6 +1,4 @@
 [about-blank-replacement.https.html]
-  expected:
-    if product == "chrome": ERROR
   [Initial about:blank is controlled, exposed to clients.matchAll(), and matches final Client.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini
index 3c0cf64..19fc7b48 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini
@@ -1,4 +1,8 @@
 [client-navigate.https.html]
   [Frame location should not be accessible after cross-origin navigation]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+
+  [Frame location should not be accessible after redirect]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
index 5f5d44e..4507f10 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
@@ -1,8 +1,4 @@
 [unregister-immediately-during-extendable-events.https.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": OK
-    TIMEOUT
+  expected: TIMEOUT
   [Clear-Site-Data must fail pending subresource fetch events.]
-    expected:
-      if product == "chrome": TIMEOUT
-      FAIL
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/navigation-timing-sizes.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/navigation-timing-sizes.https.html.ini
index 53d3be2..ece08a3a 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/navigation-timing-sizes.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/navigation-timing-sizes.https.html.ini
@@ -1,4 +1,6 @@
 [navigation-timing-sizes.https.html?prefetch=true]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [PerformanceNavigationTiming.transferSize/encodedBodySize/decodedBodySize test, same origin prefetch.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/about-blank-iframes.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/about-blank-iframes.html.ini
index 555cff45..aa7329b 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/about-blank-iframes.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/about-blank-iframes.html.ini
@@ -5,8 +5,8 @@
   disabled:
     if flag_specific == "force-renderer-accessibility": was skipped in 'FlagExpectations/force-renderer-accessibility'
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
+    if product == "chrome": TIMEOUT
   [about:blank iframes]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if product == "chrome": TIMEOUT
+      if (os == "linux") and (product == "chrome"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cookies.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cookies.https.html.ini
index e492233c..5a0542c 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cookies.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cookies.https.html.ini
@@ -1,6 +1,5 @@
 [cookies.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [prerendering page should be able to access cookies]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cross-origin-iframe.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cross-origin-iframe.html.ini
index 47d7e2c..1cda8fa 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cross-origin-iframe.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/cross-origin-iframe.html.ini
@@ -1,7 +1,7 @@
 [cross-origin-iframe.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [cross-origin iframes should not load until activation]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
index 23f1c74..148ccc34 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
@@ -1,4 +1,4 @@
 [csp-script-src-self.html]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, ERROR]
-    if os == "win": ERROR
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): ERROR
+    if flag_specific == "disable-site-isolation-trials": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
index 6b9bf4fd..639ddc1 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
@@ -1,6 +1,7 @@
 [iframe-added-post-activation.html]
   expected:
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [iframe added after activation has false document.prerendering]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-from-rules.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-from-rules.html.ini
index c96a9be..d0cdf48 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-from-rules.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-from-rules.html.ini
@@ -1,6 +1,4 @@
 [referrer-policy-from-rules.html?2-last]
-  expected:
-    if product == "chrome": [OK, ERROR]
 
 [referrer-policy-from-rules.html?1-1]
   expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
index dc41559..4b1e4a64 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
@@ -1,13 +1,15 @@
-[response-code-non-successful.html?code=204]
-
-[response-code-non-successful.html?code=402]
-
 [response-code-non-successful.html?code=500]
-
-[response-code-non-successful.html?code=404]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+
+[response-code-non-successful.html?code=205]
 
 [response-code-non-successful.html?code=503]
 
-[response-code-non-successful.html?code=205]
+[response-code-non-successful.html?code=402]
+
+[response-code-non-successful.html?code=404]
+
+[response-code-non-successful.html?code=204]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
index a98d0a40..4a3d841 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
@@ -5,10 +5,14 @@
 
 
 [response-code-successful.html?code=200]
-  expected:
-    if product == "chrome": ERROR
+  [Responses with code 200 should be activated]
+    expected:
+      if product == "chrome": FAIL
+
 
 [response-code-successful.html?code=201]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [Responses with code 201 should be activated]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
index ebc3e37..8dacf33 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-bluetooth.tentative.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [the access to the Bluetooth API should be deferred until the\n   prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-dedicated-worker.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-dedicated-worker.https.html.ini
index 4aeadc5..9362fa3 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-dedicated-worker.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-dedicated-worker.https.html.ini
@@ -1,7 +1,6 @@
 [restriction-dedicated-worker.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [The access to the Dedicated Worker API should be deferred until the\n    prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-idle-detection.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-idle-detection.https.html.ini
index 407d3c4..f9c08def 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-idle-detection.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-idle-detection.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-idle-detection.https.html]
   expected:
-    if (flag_specific == "") and (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if (flag_specific == "") and (product == "chrome"): TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [prerendering pages should not be able to invoke the Idle Detection API]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-message-boxes.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-message-boxes.html.ini
index a190613..aeb2a55 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-message-boxes.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-message-boxes.html.ini
@@ -1,7 +1,6 @@
 [restriction-message-boxes.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [alert() does not display the modal and returns immediately]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-prompt-by-before-unload.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-prompt-by-before-unload.html.ini
index 465f205d3..9071c15b 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-prompt-by-before-unload.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-prompt-by-before-unload.html.ini
@@ -3,7 +3,6 @@
   disabled:
     if flag_specific == "force-renderer-accessibility": was skipped in 'FlagExpectations/force-renderer-accessibility'
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [Prerendering cannot invoke the prompt by the beforeunload event.]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html.ini
index d5fb1f0..eae5030b 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-screen-capture.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [The access to the Screen Capture API should be deferred until the\n    prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-speech-synthesis.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-speech-synthesis.html.ini
index c8b329d..6984300 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-speech-synthesis.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-speech-synthesis.html.ini
@@ -1,7 +1,7 @@
 [restriction-speech-synthesis.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
+    if product == "chrome": TIMEOUT
   [speechSynthesis.speak(utterance) should be deferred until the prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-hid.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-hid.https.html.ini
index 4491024..671c261 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-hid.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-hid.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-web-hid.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [the access to the Web HID API should be deferred until the prerendered\n    page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-locks.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-locks.https.html.ini
index eb9f2ef..d55497ae 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-locks.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-locks.https.html.ini
@@ -1,6 +1,5 @@
 [restriction-web-locks.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [navigator.locks.request should be deferred until the prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
index 9e705b8..6a5f19de 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-web-share.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [prerendering pages should not be able to invoke the Web Share API]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
index ff00e5563..84a416f 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
@@ -1,7 +1,7 @@
 [session-history-subframe-navigation.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [Subframe navigation in prerender replaces the session entry]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-reload.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-reload.https.html.ini
index c8f6acf6..833b7bd0 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-reload.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-reload.https.html.ini
@@ -1,5 +1,6 @@
 [session-history-subframe-reload.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [Subframe reload works in prerendered page]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/web-database.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/web-database.https.html.ini
index 178759e..2d394993 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/web-database.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/web-database.https.html.ini
@@ -8,7 +8,6 @@
 
 [web-database.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [prerendering page should be able to access Web Database]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers.html.ini
index bea4222..a986d42 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers.html.ini
@@ -1,6 +1,7 @@
 [workers.html]
   expected:
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [Dedicated workers should be loaded in suspended state until activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speech-api/SpeechSynthesisUtterance-basics.https.html.ini b/third_party/blink/web_tests/external/wpt/speech-api/SpeechSynthesisUtterance-basics.https.html.ini
deleted file mode 100644
index aee42a9..0000000
--- a/third_party/blink/web_tests/external/wpt/speech-api/SpeechSynthesisUtterance-basics.https.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[SpeechSynthesisUtterance-basics.https.html]
-  [new SpeechSynthesisUtterance() default volume]
-    expected: FAIL
-
-  [new SpeechSynthesisUtterance() default rate]
-    expected: FAIL
-
-  [new SpeechSynthesisUtterance() default pitch]
-    expected: FAIL
-
-  [new SpeechSynthesisUtterance("hello") text and defaults]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini
new file mode 100644
index 0000000..286fa1f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini
@@ -0,0 +1,3 @@
+[partitioned-estimate-usage-details-caches.tentative.https.sub.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
index 0e56240..bdea44be 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
@@ -963,8 +963,8 @@
 
 [a-element-xhtml.xhtml?include=file]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
     if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -2065,14 +2065,13 @@
 
 [a-element-xhtml.xhtml?include=mailto]
   expected:
-    if os == "win": TIMEOUT
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
 
 
 [a-element-xhtml.xhtml?include=javascript]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
-    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
index 42b42a2f..09107dee 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
@@ -1072,9 +1072,6 @@
 
 
 [a-element.html?include=file]
-  expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -1323,7 +1320,7 @@
 
 [a-element.html?include=mailto]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
     if flag_specific == "highdpi": [OK, CRASH]
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
@@ -2180,5 +2177,7 @@
 
 
 [a-element.html?include=javascript]
+  expected:
+    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/failure.html.ini b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
index 97ce987..764b2f9 100644
--- a/third_party/blink/web_tests/external/wpt/url/failure.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
@@ -1,7 +1,6 @@
 [failure.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): TIMEOUT
-    if flag_specific == "disable-layout-ng": CRASH
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Location's href: file://example:1/ should throw]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
new file mode 100644
index 0000000..36d5702
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
@@ -0,0 +1,3 @@
+[percent-encoding.window.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini b/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
index f1a9b16..bfb782f 100644
--- a/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
@@ -1,6 +1,6 @@
 [toascii.window.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
   [xn--a (using URL)]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
index 71ef2b0..6dad5c9 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
@@ -586,7 +586,7 @@
 
 [url-setters-a-area.window.html?include=file]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
   [<a>: Setting <file://localhost/>.protocol = 'http' Can’t switch from file URL with no host]
     expected: FAIL
 
@@ -1163,6 +1163,9 @@
 
 
 [url-setters-a-area.window.html?include=javascript]
+  expected:
+    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [<a>: Setting <javascript://x/>.username = 'wario']
     expected: FAIL
 
@@ -1183,9 +1186,6 @@
 
 
 [url-setters-a-area.window.html?include=mailto]
-  expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
-    if os == "win": TIMEOUT
   [<a>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters-stripping.any.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters-stripping.any.js.ini
index ad2f860..68d160c 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters-stripping.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters-stripping.any.js.ini
@@ -317,7 +317,7 @@
 
 [url-setters-stripping.any.worker.html]
   expected:
-    if os == "win": [OK, TIMEOUT]
+    if os == "win": TIMEOUT
   [Setting pathname with leading U+0000 (https:)]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
index 2cdb957..51787b7 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
@@ -845,8 +845,6 @@
 
 
 [url-setters.any.worker.html?exclude=(file|javascript|mailto)]
-  expected:
-    if os == "win": [OK, TIMEOUT]
   [URL: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged.]
     expected:
       if os == "win": FAIL
@@ -1185,6 +1183,8 @@
 
 
 [url-setters.any.worker.html?include=javascript]
+  expected:
+    if os == "win": [OK, TIMEOUT]
   [URL: Setting <javascript://x/>.username = 'wario']
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-delete.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-delete.any.js.ini
index e35316b..8c158fa3 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-delete.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-delete.any.js.ini
@@ -1,6 +1,6 @@
 [urlsearchparams-delete.any.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
   [Changing the query of a URL with an opaque path can impact the path]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
index 9c74fd4f..3c8d8fe 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
@@ -1,5 +1,5 @@
 [urlsearchparams-get.any.worker.html]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
+    if flag_specific == "disable-layout-ng": CRASH
 
 [urlsearchparams-get.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
index 6439b79..e3259c3 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
@@ -1,5 +1,5 @@
 [urlsearchparams-stringifier.any.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [urlsearchparams-stringifier.any.worker.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/user-timing/case-sensitivity.any.js.ini b/third_party/blink/web_tests/external/wpt/user-timing/case-sensitivity.any.js.ini
index 81bad87..133dfaa 100644
--- a/third_party/blink/web_tests/external/wpt/user-timing/case-sensitivity.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/user-timing/case-sensitivity.any.js.ini
@@ -1,5 +1,5 @@
 [case-sensitivity.any.html]
-
-[case-sensitivity.any.worker.html]
   expected:
     if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
+
+[case-sensitivity.any.worker.html]
diff --git a/third_party/blink/web_tests/external/wpt/wasm/jsapi/constructor/compile.any.js.ini b/third_party/blink/web_tests/external/wpt/wasm/jsapi/constructor/compile.any.js.ini
index 04173d1f..541072a 100644
--- a/third_party/blink/web_tests/external/wpt/wasm/jsapi/constructor/compile.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/wasm/jsapi/constructor/compile.any.js.ini
@@ -1,5 +1,5 @@
 [compile.any.html]
-  expected:
-    if os == "win": [OK, TIMEOUT]
 
 [compile.any.worker.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/idlharness.window-expected.txt
index 80e721f..c38dda96 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/idlharness.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-animations/idlharness.window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 204 tests; 155 PASS, 49 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 212 tests; 163 PASS, 49 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface Document: original interface defined
@@ -40,6 +40,15 @@
 PASS Element includes Slottable: member names are unique
 PASS Document includes XPathEvaluatorBase: member names are unique
 PASS Document includes GlobalEventHandlers: member names are unique
+PASS AnimationTimeline interface: existence and properties of interface object
+PASS AnimationTimeline interface object length
+PASS AnimationTimeline interface object name
+PASS AnimationTimeline interface: existence and properties of interface prototype object
+PASS AnimationTimeline interface: existence and properties of interface prototype object's "constructor" property
+PASS AnimationTimeline interface: existence and properties of interface prototype object's @@unscopables property
+PASS AnimationTimeline interface: attribute currentTime
+PASS AnimationTimeline interface: attribute duration
+FAIL AnimationTimeline interface: operation play(optional AnimationEffect?) assert_own_property: interface prototype object missing non-static operation expected property "play" missing
 PASS DocumentTimeline interface: existence and properties of interface object
 PASS DocumentTimeline interface object length
 PASS DocumentTimeline interface object name
@@ -48,6 +57,7 @@
 PASS DocumentTimeline interface: existence and properties of interface prototype object's @@unscopables property
 PASS DocumentTimeline must be primary interface of document.timeline
 PASS Stringification of document.timeline
+PASS AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type
 PASS AnimationTimeline interface: document.timeline must inherit property "duration" with the proper type
 FAIL AnimationTimeline interface: document.timeline must inherit property "play(optional AnimationEffect?)" with the proper type assert_inherits: property "play" not found in prototype chain
 FAIL AnimationTimeline interface: calling play(optional AnimationEffect?) on document.timeline with too few arguments must throw TypeError assert_inherits: property "play" not found in prototype chain
@@ -202,7 +212,5 @@
 PASS ShadowRoot interface: shadowRoot must inherit property "getAnimations()" with the proper type
 PASS Element interface: operation animate(object?, optional (unrestricted double or KeyframeAnimationOptions))
 PASS Element interface: operation getAnimations(optional GetAnimationsOptions)
-PASS AnimationTimeline interface: attribute duration
-FAIL AnimationTimeline interface: operation play(optional AnimationEffect?) assert_own_property: interface prototype object missing non-static operation expected property "play" missing
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
index 1311a6a6..b8cc7340 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
@@ -1,5 +1,5 @@
 [finished.html]
   [Test finished promise changes for animation duration changes]
     expected:
-      if (flag_specific == "") and (product == "chrome"): [FAIL, PASS]
-      if flag_specific == "disable-layout-ng": FAIL
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
index fda793b..f045b6a 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
@@ -1,6 +1,6 @@
 [sibling-iframe-timeline.html]
   [animation tied to another frame's timeline runs properly]
     expected:
-      if (flag_specific == "") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [FAIL, PASS]
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/resource-timing-attributes-consistent.https.tentative.sub.html.ini b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/resource-timing-attributes-consistent.https.tentative.sub.html.ini
index a0a908d6..46f53479 100644
--- a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/resource-timing-attributes-consistent.https.tentative.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/resource-timing-attributes-consistent.https.tentative.sub.html.ini
@@ -1,4 +1,4 @@
 [resource-timing-attributes-consistent.https.tentative.sub.html]
   [Timestamp attributes filled in resource timing entries should be consistent.]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
index 9c8170d6..750959d 100644
--- a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
@@ -1,8 +1,8 @@
 [reuse-web-bundle-resource.https.tentative.html]
-  [A webbundle should be fetched again when new script element is appended.]
+  [replaceWith() should reuse webbundle resources.]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
 
-  ['remove(), then append()' should reuse webbundle resources]
+  [append() should reuse webbundle resoruces even if the old script was moved to another document.]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html.ini
index d8bf264..169cb70 100644
--- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html.ini
@@ -1,3 +1,3 @@
 [sharedworker-multiple.tentative.https.html]
   expected:
-    if os == "win": [OK, TIMEOUT]
+    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
index 9673c06..46c0f33 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
@@ -1,4 +1,4 @@
 [test-analyser-output.html]
   [AnalyserNode output]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
new file mode 100644
index 0000000..97f1aa6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
@@ -0,0 +1,9 @@
+[audioworkletnode-output-channel-count.https.html]
+  [X The expected output channel count is not equal to 17. Got 1.]
+    expected: FAIL
+
+  [< [Dynamically change the channel count to if unspecified.\] 1 out of 1 assertions were failed.]
+    expected: FAIL
+
+  [# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini
deleted file mode 100644
index 9c0d59a..0000000
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[convolver-response-4-chan.html]
-  expected:
-    if flag_specific == "disable-layout-ng": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
index 93fe647..a30e93b 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
@@ -1,4 +1,4 @@
 [mediaElementAudioSourceToScriptProcessorTest.html]
   [All data processed correctly]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [FAIL, PASS]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini
deleted file mode 100644
index af268033c..0000000
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[no-cors.https.html]
-  expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini
new file mode 100644
index 0000000..2362edf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini
@@ -0,0 +1,3 @@
+[cross-partition.https.tentative.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/origin.window.js.ini b/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/origin.window.js.ini
new file mode 100644
index 0000000..df1f5ad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/origin.window.js.ini
@@ -0,0 +1,3 @@
+[origin.window.html]
+  expected:
+    if flag_specific == "disable-layout-ng": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/message-channels/worker-post-after-close.any.js.ini b/third_party/blink/web_tests/external/wpt/webmessaging/message-channels/worker-post-after-close.any.js.ini
index be207b65..38e85428 100644
--- a/third_party/blink/web_tests/external/wpt/webmessaging/message-channels/worker-post-after-close.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webmessaging/message-channels/worker-post-after-close.any.js.ini
@@ -1,5 +1,5 @@
 [worker-post-after-close.any.html]
-  expected:
-    if os == "win": [OK, TIMEOUT]
 
 [worker-post-after-close.any.worker.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html.ini
index b7ed4395..6742e102 100644
--- a/third_party/blink/web_tests/external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html.ini
@@ -1,7 +1,6 @@
 [broadcastchannel-incumbent.sub.html]
-  expected:
-    if os == "win": TIMEOUT
   [The incumbent page being cross-origin must not prevent the BroadcastChannel message from being seen]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any-expected.txt
index ab8aed9..858b47cb4 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any-expected.txt
@@ -1,6 +1,6 @@
 This is a testharness.js-based test.
-Found 389 tests; 166 PASS, 223 FAIL, 0 TIMEOUT, 0 NOTRUN.
-FAIL idl_test setup assert_unreached: navigator.ml.createContext returned a Promise Reached unreachable code
+Found 391 tests; 228 PASS, 163 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL idl_test setup promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
 PASS idl_test validation
 PASS Partial interface MLContext: original interface defined
 PASS Partial interface MLContext: member names are unique
@@ -106,53 +106,51 @@
 PASS ML interface: existence and properties of interface prototype object
 PASS ML interface: existence and properties of interface prototype object's "constructor" property
 PASS ML interface: existence and properties of interface prototype object's @@unscopables property
-FAIL ML interface: operation createContext(optional MLContextOptions) assert_throws_js: calling operation with this = null didn't throw TypeError function "function() {
-            fn.apply(obj, args);
-        }" did not throw
-FAIL ML interface: operation createContext(GPUDevice) assert_throws_js: calling operation with this = null didn't throw TypeError function "function() {
-            fn.apply(obj, args);
-        }" did not throw
+PASS ML interface: operation createContext(optional MLContextOptions)
+PASS ML interface: operation createContext(GPUDevice)
+PASS ML interface: member createContextSync
 PASS ML must be primary interface of navigator.ml
 PASS Stringification of navigator.ml
 PASS ML interface: navigator.ml must inherit property "createContext(optional MLContextOptions)" with the proper type
 PASS ML interface: calling createContext(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError
 PASS ML interface: navigator.ml must inherit property "createContext(GPUDevice)" with the proper type
 PASS ML interface: calling createContext(GPUDevice) on navigator.ml with too few arguments must throw TypeError
+PASS ML interface: navigator.ml must not have property "createContextSync"
 PASS MLContext interface: existence and properties of interface object
 PASS MLContext interface object length
 PASS MLContext interface object name
 PASS MLContext interface: existence and properties of interface prototype object
 PASS MLContext interface: existence and properties of interface prototype object's "constructor" property
 PASS MLContext interface: existence and properties of interface prototype object's @@unscopables property
-PASS MLContext interface: member compute
-FAIL MLContext interface: operation computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) assert_own_property: interface prototype object missing non-static operation expected property "computeAsync" missing
+PASS MLContext interface: member computeSync
+FAIL MLContext interface: operation compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) assert_own_property: interface prototype object missing non-static operation expected property "compute" missing
 FAIL MLContext interface: operation createCommandEncoder() assert_own_property: interface prototype object missing non-static operation expected property "createCommandEncoder" missing
-FAIL MLContext must be primary interface of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL Stringification of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: context must not have property "compute" assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: context must inherit property "computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: calling computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: context must inherit property "createCommandEncoder()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
+PASS MLContext must be primary interface of context
+PASS Stringification of context
+PASS MLContext interface: context must not have property "computeSync"
+FAIL MLContext interface: context must inherit property "compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type assert_inherits: property "compute" not found in prototype chain
+FAIL MLContext interface: calling compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError assert_inherits: property "compute" not found in prototype chain
+FAIL MLContext interface: context must inherit property "createCommandEncoder()" with the proper type assert_inherits: property "createCommandEncoder" not found in prototype chain
 PASS MLOperand interface: existence and properties of interface object
 PASS MLOperand interface object length
 PASS MLOperand interface object name
 PASS MLOperand interface: existence and properties of interface prototype object
 PASS MLOperand interface: existence and properties of interface prototype object's "constructor" property
 PASS MLOperand interface: existence and properties of interface prototype object's @@unscopables property
-FAIL MLOperand must be primary interface of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL Stringification of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL MLOperand must be primary interface of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL Stringification of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL MLOperand must be primary interface of output assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: output is not defined"
-FAIL Stringification of output assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: output is not defined"
+PASS MLOperand must be primary interface of input
+PASS Stringification of input
+PASS MLOperand must be primary interface of filter
+PASS Stringification of filter
+PASS MLOperand must be primary interface of output
+PASS Stringification of output
 PASS MLOperator interface: existence and properties of interface object
 PASS MLOperator interface object length
 PASS MLOperator interface object name
 PASS MLOperator interface: existence and properties of interface prototype object
 PASS MLOperator interface: existence and properties of interface prototype object's "constructor" property
 PASS MLOperator interface: existence and properties of interface prototype object's @@unscopables property
-FAIL MLOperator must be primary interface of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
-FAIL Stringification of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
+PASS MLOperator must be primary interface of relu
+PASS Stringification of relu
 PASS MLGraphBuilder interface: existence and properties of interface object
 PASS MLGraphBuilder interface object length
 PASS MLGraphBuilder interface object name
@@ -162,8 +160,8 @@
 PASS MLGraphBuilder interface: operation input(DOMString, MLOperandDescriptor)
 FAIL MLGraphBuilder interface: operation constant(MLOperandDescriptor, MLBufferView) assert_equals: property has wrong .length expected 1 but got 2
 FAIL MLGraphBuilder interface: operation constant(double, optional MLOperandType) assert_equals: property has wrong .length expected 1 but got 2
-PASS MLGraphBuilder interface: member build
-PASS MLGraphBuilder interface: operation buildAsync(MLNamedOperands)
+FAIL MLGraphBuilder interface: operation build(MLNamedOperands) assert_own_property: interface prototype object missing non-static operation expected property "build" missing
+PASS MLGraphBuilder interface: member buildSync
 FAIL MLGraphBuilder interface: operation batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) assert_own_property: interface prototype object missing non-static operation expected property "batchNormalization" missing
 PASS MLGraphBuilder interface: operation clamp(MLOperand, optional MLClampOptions)
 PASS MLGraphBuilder interface: operation clamp(optional MLClampOptions)
@@ -218,7 +216,7 @@
 PASS MLGraphBuilder interface: operation relu(MLOperand)
 PASS MLGraphBuilder interface: operation relu()
 PASS MLGraphBuilder interface: operation resample2d(MLOperand, optional MLResample2dOptions)
-PASS MLGraphBuilder interface: operation reshape(MLOperand, sequence<long>)
+PASS MLGraphBuilder interface: operation reshape(MLOperand, sequence<unsigned long?>)
 PASS MLGraphBuilder interface: operation sigmoid(MLOperand)
 PASS MLGraphBuilder interface: operation sigmoid()
 FAIL MLGraphBuilder interface: operation slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) assert_own_property: interface prototype object missing non-static operation expected property "slice" missing
@@ -232,148 +230,148 @@
 FAIL MLGraphBuilder interface: operation tanh(MLOperand) assert_own_property: interface prototype object missing non-static operation expected property "tanh" missing
 FAIL MLGraphBuilder interface: operation tanh() assert_own_property: interface prototype object missing non-static operation expected property "tanh" missing
 FAIL MLGraphBuilder interface: operation transpose(MLOperand, optional MLTransposeOptions) assert_own_property: interface prototype object missing non-static operation expected property "transpose" missing
-FAIL MLGraphBuilder must be primary interface of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL Stringification of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "input(DOMString, MLOperandDescriptor)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling input(DOMString, MLOperandDescriptor) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(MLOperandDescriptor, MLBufferView)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(MLOperandDescriptor, MLBufferView) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(double, optional MLOperandType)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must not have property "build" assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "buildAsync(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling buildAsync(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(MLOperand, optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "concat(sequence<MLOperand>, long)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling concat(sequence<MLOperand>, long) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "conv2d(MLOperand, MLOperand, optional MLConv2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling conv2d(MLOperand, MLOperand, optional MLConv2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "add(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling add(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sub(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sub(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "mul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling mul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "div(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling div(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "max(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling max(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "min(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling min(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pow(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pow(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "abs(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling abs(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "ceil(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling ceil(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "cos(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling cos(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "exp(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling exp(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "floor(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling floor(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "log(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling log(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "neg(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling neg(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sin(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sin(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tan(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tan(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(MLOperand, optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(MLOperand, optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gemm(MLOperand, MLOperand, optional MLGemmOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gemm(MLOperand, MLOperand, optional MLGemmOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(MLOperand, optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(MLOperand, optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSwish(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(MLOperand, optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(MLOperand, optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "matmul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling matmul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(MLOperand, optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(MLOperand, optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pad(MLOperand, MLOperand, optional MLPadOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pad(MLOperand, MLOperand, optional MLPadOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "averagePool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling averagePool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "l2Pool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling l2Pool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "maxPool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling maxPool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL1(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL1(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL2(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL2(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSumExp(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSumExp(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMax(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMax(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMean(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMean(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMin(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMin(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceProduct(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceProduct(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSumSquare(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSumSquare(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling relu(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softmax(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softmax(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(MLOperand, optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(MLOperand, optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softsign(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "squeeze(MLOperand, optional MLSqueezeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling squeeze(MLOperand, optional MLSqueezeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tanh(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "transpose(MLOperand, optional MLTransposeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling transpose(MLOperand, optional MLTransposeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
+PASS MLGraphBuilder must be primary interface of builder
+PASS Stringification of builder
+PASS MLGraphBuilder interface: builder must inherit property "input(DOMString, MLOperandDescriptor)" with the proper type
+PASS MLGraphBuilder interface: calling input(DOMString, MLOperandDescriptor) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "constant(MLOperandDescriptor, MLBufferView)" with the proper type
+PASS MLGraphBuilder interface: calling constant(MLOperandDescriptor, MLBufferView) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "constant(double, optional MLOperandType)" with the proper type
+PASS MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "build(MLNamedOperands)" with the proper type assert_inherits: property "build" not found in prototype chain
+FAIL MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError assert_inherits: property "build" not found in prototype chain
+PASS MLGraphBuilder interface: builder must not have property "buildSync"
+FAIL MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type assert_inherits: property "batchNormalization" not found in prototype chain
+FAIL MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError assert_inherits: property "batchNormalization" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type
+PASS MLGraphBuilder interface: calling clamp(MLOperand, optional MLClampOptions) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "clamp(optional MLClampOptions)" with the proper type
+PASS MLGraphBuilder interface: calling clamp(optional MLClampOptions) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "concat(sequence<MLOperand>, long)" with the proper type assert_inherits: property "concat" not found in prototype chain
+FAIL MLGraphBuilder interface: calling concat(sequence<MLOperand>, long) on builder with too few arguments must throw TypeError assert_inherits: property "concat" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "conv2d(MLOperand, MLOperand, optional MLConv2dOptions)" with the proper type
+PASS MLGraphBuilder interface: calling conv2d(MLOperand, MLOperand, optional MLConv2dOptions) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions)" with the proper type assert_inherits: property "convTranspose2d" not found in prototype chain
+FAIL MLGraphBuilder interface: calling convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) on builder with too few arguments must throw TypeError assert_inherits: property "convTranspose2d" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "add(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling add(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "sub(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling sub(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "mul(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling mul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "div(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling div(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "max(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling max(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "min(MLOperand, MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling min(MLOperand, MLOperand) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "pow(MLOperand, MLOperand)" with the proper type assert_inherits: property "pow" not found in prototype chain
+FAIL MLGraphBuilder interface: calling pow(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "pow" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "abs(MLOperand)" with the proper type assert_inherits: property "abs" not found in prototype chain
+FAIL MLGraphBuilder interface: calling abs(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "abs" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "ceil(MLOperand)" with the proper type assert_inherits: property "ceil" not found in prototype chain
+FAIL MLGraphBuilder interface: calling ceil(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "ceil" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "cos(MLOperand)" with the proper type assert_inherits: property "cos" not found in prototype chain
+FAIL MLGraphBuilder interface: calling cos(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "cos" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "exp(MLOperand)" with the proper type assert_inherits: property "exp" not found in prototype chain
+FAIL MLGraphBuilder interface: calling exp(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "exp" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "floor(MLOperand)" with the proper type assert_inherits: property "floor" not found in prototype chain
+FAIL MLGraphBuilder interface: calling floor(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "floor" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "log(MLOperand)" with the proper type assert_inherits: property "log" not found in prototype chain
+FAIL MLGraphBuilder interface: calling log(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "log" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "neg(MLOperand)" with the proper type assert_inherits: property "neg" not found in prototype chain
+FAIL MLGraphBuilder interface: calling neg(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "neg" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "sin(MLOperand)" with the proper type assert_inherits: property "sin" not found in prototype chain
+FAIL MLGraphBuilder interface: calling sin(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "sin" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "tan(MLOperand)" with the proper type assert_inherits: property "tan" not found in prototype chain
+FAIL MLGraphBuilder interface: calling tan(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "tan" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "elu(MLOperand, optional MLEluOptions)" with the proper type assert_inherits: property "elu" not found in prototype chain
+FAIL MLGraphBuilder interface: calling elu(MLOperand, optional MLEluOptions) on builder with too few arguments must throw TypeError assert_inherits: property "elu" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "elu(optional MLEluOptions)" with the proper type assert_inherits: property "elu" not found in prototype chain
+FAIL MLGraphBuilder interface: calling elu(optional MLEluOptions) on builder with too few arguments must throw TypeError assert_inherits: property "elu" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "gemm(MLOperand, MLOperand, optional MLGemmOptions)" with the proper type
+PASS MLGraphBuilder interface: calling gemm(MLOperand, MLOperand, optional MLGemmOptions) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions)" with the proper type assert_inherits: property "gru" not found in prototype chain
+FAIL MLGraphBuilder interface: calling gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) on builder with too few arguments must throw TypeError assert_inherits: property "gru" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions)" with the proper type assert_inherits: property "gruCell" not found in prototype chain
+FAIL MLGraphBuilder interface: calling gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) on builder with too few arguments must throw TypeError assert_inherits: property "gruCell" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(MLOperand, optional MLHardSigmoidOptions)" with the proper type assert_inherits: property "hardSigmoid" not found in prototype chain
+FAIL MLGraphBuilder interface: calling hardSigmoid(MLOperand, optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_inherits: property "hardSigmoid" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(optional MLHardSigmoidOptions)" with the proper type assert_inherits: property "hardSigmoid" not found in prototype chain
+FAIL MLGraphBuilder interface: calling hardSigmoid(optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_inherits: property "hardSigmoid" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "hardSwish(MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling hardSwish(MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "hardSwish()" with the proper type
+FAIL MLGraphBuilder interface: builder must inherit property "instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions)" with the proper type assert_inherits: property "instanceNormalization" not found in prototype chain
+FAIL MLGraphBuilder interface: calling instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) on builder with too few arguments must throw TypeError assert_inherits: property "instanceNormalization" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(MLOperand, optional MLLeakyReluOptions)" with the proper type assert_inherits: property "leakyRelu" not found in prototype chain
+FAIL MLGraphBuilder interface: calling leakyRelu(MLOperand, optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_inherits: property "leakyRelu" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(optional MLLeakyReluOptions)" with the proper type assert_inherits: property "leakyRelu" not found in prototype chain
+FAIL MLGraphBuilder interface: calling leakyRelu(optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_inherits: property "leakyRelu" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "matmul(MLOperand, MLOperand)" with the proper type assert_inherits: property "matmul" not found in prototype chain
+FAIL MLGraphBuilder interface: calling matmul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "matmul" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "linear(MLOperand, optional MLLinearOptions)" with the proper type assert_inherits: property "linear" not found in prototype chain
+FAIL MLGraphBuilder interface: calling linear(MLOperand, optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_inherits: property "linear" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "linear(optional MLLinearOptions)" with the proper type assert_inherits: property "linear" not found in prototype chain
+FAIL MLGraphBuilder interface: calling linear(optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_inherits: property "linear" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "pad(MLOperand, MLOperand, optional MLPadOptions)" with the proper type assert_inherits: property "pad" not found in prototype chain
+FAIL MLGraphBuilder interface: calling pad(MLOperand, MLOperand, optional MLPadOptions) on builder with too few arguments must throw TypeError assert_inherits: property "pad" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "averagePool2d(MLOperand, optional MLPool2dOptions)" with the proper type
+PASS MLGraphBuilder interface: calling averagePool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "l2Pool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_inherits: property "l2Pool2d" not found in prototype chain
+FAIL MLGraphBuilder interface: calling l2Pool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_inherits: property "l2Pool2d" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "maxPool2d(MLOperand, optional MLPool2dOptions)" with the proper type
+PASS MLGraphBuilder interface: calling maxPool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "reduceL1(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceL1" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceL1(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceL1" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceL2(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceL2" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceL2(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceL2" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSum(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceLogSum" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceLogSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceLogSum" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSumExp(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceLogSumExp" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceLogSumExp(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceLogSumExp" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceMax(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceMax" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceMax(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceMax" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceMean(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceMean" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceMean(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceMean" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceMin(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceMin" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceMin(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceMin" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceProduct(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceProduct" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceProduct(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceProduct" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceSum(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceSum" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceSum" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "reduceSumSquare(MLOperand, optional MLReduceOptions)" with the proper type assert_inherits: property "reduceSumSquare" not found in prototype chain
+FAIL MLGraphBuilder interface: calling reduceSumSquare(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "reduceSumSquare" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "relu(MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling relu(MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "relu()" with the proper type
+PASS MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type
+PASS MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<unsigned long?>)" with the proper type
+PASS MLGraphBuilder interface: calling reshape(MLOperand, sequence<unsigned long?>) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError
+PASS MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type
+FAIL MLGraphBuilder interface: builder must inherit property "slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions)" with the proper type assert_inherits: property "slice" not found in prototype chain
+FAIL MLGraphBuilder interface: calling slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) on builder with too few arguments must throw TypeError assert_inherits: property "slice" not found in prototype chain
+PASS MLGraphBuilder interface: builder must inherit property "softmax(MLOperand)" with the proper type
+PASS MLGraphBuilder interface: calling softmax(MLOperand) on builder with too few arguments must throw TypeError
+FAIL MLGraphBuilder interface: builder must inherit property "softplus(MLOperand, optional MLSoftplusOptions)" with the proper type assert_inherits: property "softplus" not found in prototype chain
+FAIL MLGraphBuilder interface: calling softplus(MLOperand, optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_inherits: property "softplus" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "softplus(optional MLSoftplusOptions)" with the proper type assert_inherits: property "softplus" not found in prototype chain
+FAIL MLGraphBuilder interface: calling softplus(optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_inherits: property "softplus" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "softsign(MLOperand)" with the proper type assert_inherits: property "softsign" not found in prototype chain
+FAIL MLGraphBuilder interface: calling softsign(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "softsign" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "softsign()" with the proper type assert_inherits: property "softsign" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions)" with the proper type assert_inherits: property "split" not found in prototype chain
+FAIL MLGraphBuilder interface: calling split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) on builder with too few arguments must throw TypeError assert_inherits: property "split" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "squeeze(MLOperand, optional MLSqueezeOptions)" with the proper type assert_inherits: property "squeeze" not found in prototype chain
+FAIL MLGraphBuilder interface: calling squeeze(MLOperand, optional MLSqueezeOptions) on builder with too few arguments must throw TypeError assert_inherits: property "squeeze" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "tanh(MLOperand)" with the proper type assert_inherits: property "tanh" not found in prototype chain
+FAIL MLGraphBuilder interface: calling tanh(MLOperand) on builder with too few arguments must throw TypeError assert_inherits: property "tanh" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "tanh()" with the proper type assert_inherits: property "tanh" not found in prototype chain
+FAIL MLGraphBuilder interface: builder must inherit property "transpose(MLOperand, optional MLTransposeOptions)" with the proper type assert_inherits: property "transpose" not found in prototype chain
+FAIL MLGraphBuilder interface: calling transpose(MLOperand, optional MLTransposeOptions) on builder with too few arguments must throw TypeError assert_inherits: property "transpose" not found in prototype chain
 PASS MLGraph interface: existence and properties of interface object
 PASS MLGraph interface object length
 PASS MLGraph interface object name
diff --git a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js
index 5f53831..6122134 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js
@@ -35,25 +35,22 @@
       }
 
       for (const deviceType of DeviceTypeArray) {
-        const context = navigator.ml.createContext({deviceType});
-        // Per spec navigator.ml.createContext should return a MLContext, but
-        // in Chromium it returns a Promise<MLContext>. Fail the setup if this
-        // happens, since the tests wouldn't make sense.
-        if (context instanceof Promise) {
-          context.catch(() => {});
-          assert_unreached('navigator.ml.createContext returned a Promise');
+        if (isSync) {
+          self.context = navigator.ml.createContextSync({deviceType});
+        } else {
+          self.context = await navigator.ml.createContext({deviceType});
         }
-        self.context = context;
-        self.builder = new MLGraphBuilder(context);
+
+        self.builder = new MLGraphBuilder(self.context);
         self.input = builder.input('input', {type: 'float32', dimensions: [1, 1, 5, 5]});
         self.filter = builder.constant({type: 'float32', dimensions: [1, 1, 3, 3]}, new Float32Array(9).fill(1));
         self.relu = builder.relu();
         self.output = builder.conv2d(input, filter, {activation: relu, inputLayout: "nchw"});
 
         if (isSync) {
-          self.graph = builder.build({output});
+          self.graph = builder.buildSync({output});
         } else {
-          self.graph = await builder.buildAsync({output});
+          self.graph = await builder.build({output});
         }
       }
     }
diff --git a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
index 38d8bc33..4c1b1e4 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
@@ -1,6 +1,4 @@
 [idlharness.https.any.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
   [idl_test setup]
     expected: FAIL
 
@@ -10,60 +8,12 @@
   [Stringification of navigator]
     expected: FAIL
 
-  [ML interface: operation createContext(optional MLContextOptions)]
-    expected: FAIL
-
-  [ML interface: operation createContext(GPUDevice)]
-    expected: FAIL
-
-  [MLContext interface: operation computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)]
-    expected: FAIL
-
   [MLContext interface: operation createCommandEncoder()]
     expected: FAIL
 
-  [MLContext must be primary interface of context]
-    expected: FAIL
-
-  [Stringification of context]
-    expected: FAIL
-
-  [MLContext interface: context must not have property "compute"]
-    expected: FAIL
-
-  [MLContext interface: context must inherit property "computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type]
-    expected: FAIL
-
-  [MLContext interface: calling computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLContext interface: context must inherit property "createCommandEncoder()" with the proper type]
     expected: FAIL
 
-  [MLOperand must be primary interface of input]
-    expected: FAIL
-
-  [Stringification of input]
-    expected: FAIL
-
-  [MLOperand must be primary interface of filter]
-    expected: FAIL
-
-  [Stringification of filter]
-    expected: FAIL
-
-  [MLOperand must be primary interface of output]
-    expected: FAIL
-
-  [Stringification of output]
-    expected: FAIL
-
-  [MLOperator must be primary interface of relu]
-    expected: FAIL
-
-  [Stringification of relu]
-    expected: FAIL
-
   [MLGraphBuilder interface: operation constant(MLOperandDescriptor, MLBufferView)]
     expected: FAIL
 
@@ -211,111 +161,24 @@
   [MLGraphBuilder interface: operation transpose(MLOperand, optional MLTransposeOptions)]
     expected: FAIL
 
-  [MLGraphBuilder must be primary interface of builder]
-    expected: FAIL
-
-  [Stringification of builder]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "input(DOMString, MLOperandDescriptor)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling input(DOMString, MLOperandDescriptor) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "constant(MLOperandDescriptor, MLBufferView)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling constant(MLOperandDescriptor, MLBufferView) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "constant(double, optional MLOperandType)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must not have property "build"]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "buildAsync(MLNamedOperands)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling buildAsync(MLNamedOperands) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type]
     expected: FAIL
 
   [MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling clamp(MLOperand, optional MLClampOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "clamp(optional MLClampOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling clamp(optional MLClampOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "concat(sequence<MLOperand>, long)" with the proper type]
     expected: FAIL
 
   [MLGraphBuilder interface: calling concat(sequence<MLOperand>, long) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "conv2d(MLOperand, MLOperand, optional MLConv2dOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling conv2d(MLOperand, MLOperand, optional MLConv2dOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions)" with the proper type]
     expected: FAIL
 
   [MLGraphBuilder interface: calling convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "add(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling add(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "sub(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling sub(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "mul(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling mul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "div(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling div(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "max(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling max(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "min(MLOperand, MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling min(MLOperand, MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "pow(MLOperand, MLOperand)" with the proper type]
     expected: FAIL
 
@@ -388,12 +251,6 @@
   [MLGraphBuilder interface: calling elu(optional MLEluOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "gemm(MLOperand, MLOperand, optional MLGemmOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling gemm(MLOperand, MLOperand, optional MLGemmOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions)" with the proper type]
     expected: FAIL
 
@@ -418,15 +275,6 @@
   [MLGraphBuilder interface: calling hardSigmoid(optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "hardSwish(MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling hardSwish(MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "hardSwish()" with the proper type]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions)" with the proper type]
     expected: FAIL
 
@@ -469,24 +317,12 @@
   [MLGraphBuilder interface: calling pad(MLOperand, MLOperand, optional MLPadOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "averagePool2d(MLOperand, optional MLPool2dOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling averagePool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "l2Pool2d(MLOperand, optional MLPool2dOptions)" with the proper type]
     expected: FAIL
 
   [MLGraphBuilder interface: calling l2Pool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "maxPool2d(MLOperand, optional MLPool2dOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling maxPool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "reduceL1(MLOperand, optional MLReduceOptions)" with the proper type]
     expected: FAIL
 
@@ -547,48 +383,12 @@
   [MLGraphBuilder interface: calling reduceSumSquare(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "relu(MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling relu(MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "relu()" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions)" with the proper type]
     expected: FAIL
 
   [MLGraphBuilder interface: calling slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "softmax(MLOperand)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling softmax(MLOperand) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "softplus(MLOperand, optional MLSoftplusOptions)" with the proper type]
     expected: FAIL
 
@@ -670,6 +470,24 @@
   [MLCommandEncoder interface: operation finish(optional GPUCommandBufferDescriptor)]
     expected: FAIL
 
+  [MLContext interface: calling compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLContext interface: context must inherit property "compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type]
+    expected: FAIL
+
+  [MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLGraphBuilder interface: operation build(MLNamedOperands)]
+    expected: FAIL
+
+  [MLContext interface: operation compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)]
+    expected: FAIL
+
+  [MLGraphBuilder interface: builder must inherit property "build(MLNamedOperands)" with the proper type]
+    expected: FAIL
+
 
 [idlharness.https.any.worker.html]
   [idl_test setup]
@@ -744,9 +562,6 @@
   [MLContext interface: operation compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)]
     expected: FAIL
 
-  [MLContext interface: operation computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)]
-    expected: FAIL
-
   [MLContext interface: operation createCommandEncoder()]
     expected: FAIL
 
@@ -762,12 +577,6 @@
   [MLContext interface: calling compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLContext interface: context must inherit property "computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type]
-    expected: FAIL
-
-  [MLContext interface: calling computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLContext interface: context must inherit property "createCommandEncoder()" with the proper type]
     expected: FAIL
 
@@ -861,9 +670,6 @@
   [MLGraphBuilder interface: operation build(MLNamedOperands)]
     expected: FAIL
 
-  [MLGraphBuilder interface: operation buildAsync(MLNamedOperands)]
-    expected: FAIL
-
   [MLGraphBuilder interface: operation batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)]
     expected: FAIL
 
@@ -1026,9 +832,6 @@
   [MLGraphBuilder interface: operation resample2d(MLOperand, optional MLResample2dOptions)]
     expected: FAIL
 
-  [MLGraphBuilder interface: operation reshape(MLOperand, sequence<long>)]
-    expected: FAIL
-
   [MLGraphBuilder interface: operation sigmoid(MLOperand)]
     expected: FAIL
 
@@ -1098,12 +901,6 @@
   [MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "buildAsync(MLNamedOperands)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling buildAsync(MLNamedOperands) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type]
     expected: FAIL
 
@@ -1422,12 +1219,6 @@
   [MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError]
     expected: FAIL
 
-  [MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type]
-    expected: FAIL
-
-  [MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError]
-    expected: FAIL
-
   [MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type]
     expected: FAIL
 
@@ -1553,3 +1344,48 @@
 
   [WorkerNavigator interface: navigator must inherit property "ml" with the proper type]
     expected: FAIL
+
+  [ML interface: operation createContextSync(GPUDevice)]
+    expected: FAIL
+
+  [ML interface: operation createContextSync(optional MLContextOptions)]
+    expected: FAIL
+
+  [MLGraphBuilder interface: operation reshape(MLOperand, sequence<unsigned long?>)]
+    expected: FAIL
+
+  [MLContext interface: calling computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLGraphBuilder interface: calling buildSync(MLNamedOperands) on builder with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLGraphBuilder interface: operation buildSync(MLNamedOperands)]
+    expected: FAIL
+
+  [ML interface: calling createContextSync(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<unsigned long?>)" with the proper type]
+    expected: FAIL
+
+  [MLGraphBuilder interface: calling reshape(MLOperand, sequence<unsigned long?>) on builder with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [MLContext interface: context must inherit property "computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type]
+    expected: FAIL
+
+  [MLGraphBuilder interface: builder must inherit property "buildSync(MLNamedOperands)" with the proper type]
+    expected: FAIL
+
+  [ML interface: navigator.ml must inherit property "createContextSync(GPUDevice)" with the proper type]
+    expected: FAIL
+
+  [ML interface: navigator.ml must inherit property "createContextSync(optional MLContextOptions)" with the proper type]
+    expected: FAIL
+
+  [MLContext interface: operation computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)]
+    expected: FAIL
+
+  [ML interface: calling createContextSync(GPUDevice) on navigator.ml with too few arguments must throw TypeError]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.worker-expected.txt
index 21d0d61..a4befa25 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.worker-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 391 tests; 97 PASS, 294 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 397 tests; 97 PASS, 300 FAIL, 0 TIMEOUT, 0 NOTRUN.
 FAIL idl_test setup promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'createContext')"
 PASS idl_test validation
 PASS Partial interface MLContext: original interface defined
@@ -108,27 +108,33 @@
 FAIL ML interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "ML" expected property "ML" missing
 FAIL ML interface: operation createContext(optional MLContextOptions) assert_own_property: self does not have own property "ML" expected property "ML" missing
 FAIL ML interface: operation createContext(GPUDevice) assert_own_property: self does not have own property "ML" expected property "ML" missing
+FAIL ML interface: operation createContextSync(optional MLContextOptions) assert_own_property: self does not have own property "ML" expected property "ML" missing
+FAIL ML interface: operation createContextSync(GPUDevice) assert_own_property: self does not have own property "ML" expected property "ML" missing
 FAIL ML must be primary interface of navigator.ml assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL Stringification of navigator.ml assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL ML interface: navigator.ml must inherit property "createContext(optional MLContextOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL ML interface: calling createContext(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL ML interface: navigator.ml must inherit property "createContext(GPUDevice)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL ML interface: calling createContext(GPUDevice) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL ML interface: navigator.ml must inherit property "createContextSync(optional MLContextOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL ML interface: calling createContextSync(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL ML interface: navigator.ml must inherit property "createContextSync(GPUDevice)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL ML interface: calling createContextSync(GPUDevice) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
 FAIL MLContext interface: existence and properties of interface object assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface object length assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface object name assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
+FAIL MLContext interface: operation computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface: operation compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface: operation computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext interface: operation createCommandEncoder() assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
 FAIL MLContext must be primary interface of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
 FAIL Stringification of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
+FAIL MLContext interface: context must inherit property "computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
+FAIL MLContext interface: calling computeSync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
 FAIL MLContext interface: context must inherit property "compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
 FAIL MLContext interface: calling compute(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: context must inherit property "computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLContext interface: calling computeAsync(MLGraph, MLNamedArrayBufferViews, MLNamedArrayBufferViews) on context with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
 FAIL MLContext interface: context must inherit property "createCommandEncoder()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
 FAIL MLOperand interface: existence and properties of interface object assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
 FAIL MLOperand interface object length assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
@@ -160,7 +166,7 @@
 FAIL MLGraphBuilder interface: operation constant(MLOperandDescriptor, MLBufferView) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation constant(double, optional MLOperandType) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation build(MLNamedOperands) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation buildAsync(MLNamedOperands) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
+FAIL MLGraphBuilder interface: operation buildSync(MLNamedOperands) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation clamp(MLOperand, optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation clamp(optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
@@ -215,7 +221,7 @@
 FAIL MLGraphBuilder interface: operation relu(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation relu() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation resample2d(MLOperand, optional MLResample2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reshape(MLOperand, sequence<long>) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
+FAIL MLGraphBuilder interface: operation reshape(MLOperand, sequence<unsigned long?>) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation sigmoid(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation sigmoid() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
 FAIL MLGraphBuilder interface: operation slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
@@ -239,8 +245,8 @@
 FAIL MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "build(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "buildAsync(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling buildAsync(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
+FAIL MLGraphBuilder interface: builder must inherit property "buildSync(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
+FAIL MLGraphBuilder interface: calling buildSync(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
@@ -347,8 +353,8 @@
 FAIL MLGraphBuilder interface: builder must inherit property "relu()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
+FAIL MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<unsigned long?>)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
+FAIL MLGraphBuilder interface: calling reshape(MLOperand, sequence<unsigned long?>) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
 FAIL MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https-expected.txt
index f169960..fe1bbcf 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 246 tests; 230 PASS, 16 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 248 tests; 231 PASS, 17 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS getStats succeeds
 PASS Validating stats
 PASS codec's payloadType
@@ -17,6 +17,7 @@
 PASS inbound-rtp's remoteId
 PASS inbound-rtp's framesDecoded
 PASS inbound-rtp's keyFramesDecoded
+FAIL inbound-rtp's framesRendered assert_true: Is framesRendered present expected true got false
 PASS inbound-rtp's framesDropped
 PASS inbound-rtp's frameWidth
 PASS inbound-rtp's frameHeight
@@ -96,6 +97,7 @@
 PASS outbound-rtp's encoderImplementation
 PASS outbound-rtp's powerEfficientEncoder
 PASS outbound-rtp's active
+PASS outbound-rtp's scalabilityMode
 PASS outbound-rtp's packetsSent
 PASS outbound-rtp's bytesSent
 PASS outbound-rtp's ssrc
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https.html.ini b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https.html.ini
index 1b34d11..a68414e9 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats.https.html.ini
@@ -56,10 +56,6 @@
   [media-playout's id]
     expected: FAIL
 
-  [transport's remoteCertificateId]
-    expected:
-      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
-
   [candidate-pair's availableIncomingBitrate]
     expected: PRECONDITION_FAILED
 
@@ -92,3 +88,6 @@
 
   [certificate's issuerCertificateId]
     expected: PRECONDITION_FAILED
+
+  [inbound-rtp's framesRendered]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html.ini b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html.ini
index ba907ae9..14dff26 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html.ini
@@ -1,6 +1,6 @@
 [RTCPeerConnection-onicecandidateerror.https.html]
   expected:
-    if product == "chrome": [OK, TIMEOUT]
+    if product == "chrome": TIMEOUT
   [Surfacing onicecandidateerror]
     expected:
-      if product == "chrome": [PASS, TIMEOUT]
+      if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini b/third_party/blink/web_tests/external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini
new file mode 100644
index 0000000..fa43da55
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini
@@ -0,0 +1,5 @@
+[bufferedAmount-defineProperty-setter.html?wss]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
+
+[bufferedAmount-defineProperty-setter.html]
diff --git a/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/close.any.js.ini b/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/close.any.js.ini
index 381caf01..2dc8a82 100644
--- a/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/close.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/close.any.js.ini
@@ -3,8 +3,35 @@
 [close.any.sharedworker.html?wss]
 
 [close.any.worker.html?wpt_flags=h2]
+  expected:
+    if product == "chrome": [OK, TIMEOUT]
   [canceling the readable should result in a clean close]
-    expected: [PASS, TIMEOUT]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
+
+  [canceling the readable with a code and reason should use them]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with a reason but no code should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with a code should send that code]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with an invalid code should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with a DOMException should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with an invalid reason should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
 
 [close.any.serviceworker.html?wss]
@@ -13,7 +40,15 @@
 
 [close.any.html?wpt_flags=h2]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if product == "chrome": [OK, TIMEOUT]
+  [canceling the readable with a DOMException should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with an invalid reason should be ignored]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
+
 
 [close.any.sharedworker.html?wpt_flags=h2]
   [canceling the readable with a code should send that code]
@@ -39,3 +74,24 @@
 
 
 [close.any.serviceworker.html?wpt_flags=h2]
+  expected:
+    if product == "chrome": [OK, TIMEOUT]
+  [canceling the readable with a code and reason should use them]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
+
+  [canceling the readable with a reason but no code should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with an invalid code should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with a DOMException should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [canceling the readable with an invalid reason should be ignored]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini b/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini
deleted file mode 100644
index 6a131e9..0000000
--- a/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[audio_has_no_subtitles.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
index 1ce4928..00c1d56 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
@@ -1,11 +1,7 @@
 [events_referenceSpace_reset_inline.https.html]
-  expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    TIMEOUT
+  expected: TIMEOUT
   [XRSession resetpose from a device properly fires off the right events for non-immersive sessions - webgl]
-    expected:
-      if os == "linux": FAIL
+    expected: FAIL
 
   [XRSession resetpose from a device properly fires off the right events for non-immersive sessions - webgl2]
-    expected:
-      if os == "linux": TIMEOUT
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webxr_feature_policy.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/webxr_feature_policy.https.html.ini
index aca8d11e..3d63abd4 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/webxr_feature_policy.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/webxr_feature_policy.https.html.ini
@@ -1,4 +1,6 @@
 [webxr_feature_policy.https.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Validate isSessionSupported behavior without xr-spatial-tracking policy]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
index 13ee403..fa08ed77 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
@@ -2,3 +2,7 @@
   [XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl]
     expected:
       if product == "chrome": FAIL
+
+  [XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl2]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
index 819352f..81dc968 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
@@ -43,8 +43,12 @@
 
   [Immersive session supports local-floor space when required - webgl2]
     expected:
-      if product == "chrome": [PASS, TIMEOUT]
+      if product == "chrome": [PASS, NOTRUN]
 
   [Non-immersive session rejects bounded-floor space even when requested - webgl]
     expected:
       if product == "chrome": [PASS, NOTRUN]
+
+  [Immersive session supports local-floor space when required - webgl]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/workers/data-url-shared.html.ini b/third_party/blink/web_tests/external/wpt/workers/data-url-shared.html.ini
deleted file mode 100644
index 298751c..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/data-url-shared.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[data-url-shared.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/workers/dedicated-worker-in-data-url-context.window.js.ini b/third_party/blink/web_tests/external/wpt/workers/dedicated-worker-in-data-url-context.window.js.ini
index 8e3ebef..491bbc07 100644
--- a/third_party/blink/web_tests/external/wpt/workers/dedicated-worker-in-data-url-context.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/dedicated-worker-in-data-url-context.window.js.ini
@@ -1,4 +1,6 @@
 [dedicated-worker-in-data-url-context.window.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
   [Create a dedicated worker in a data url frame]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/close/setInterval.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/close/setInterval.html.ini
index 61d568f..8cb5e5e 100644
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/close/setInterval.html.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/close/setInterval.html.ini
@@ -1,3 +1,3 @@
 [setInterval.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect.html.ini
deleted file mode 100644
index 3a0f10f..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[redirect.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/003.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/003.html.ini
new file mode 100644
index 0000000..df562551
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/003.html.ini
@@ -0,0 +1,3 @@
+[003.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.js.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.js.ini
deleted file mode 100644
index fb1eade..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.js.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[report-error-cross-origin.sub.any.sharedworker.html]
-
-[report-error-cross-origin.sub.any.worker.html]
-  expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/workers/semantics/xhr/003.html.ini b/third_party/blink/web_tests/external/wpt/workers/semantics/xhr/003.html.ini
new file mode 100644
index 0000000..df562551
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/semantics/xhr/003.html.ini
@@ -0,0 +1,3 @@
+[003.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini b/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
index 5f4813ff..e0d2ea3d 100644
--- a/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
@@ -1,6 +1,4 @@
 [shared-worker-in-data-url-context.window.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
   [Create a shared worker in a data url frame]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini b/third_party/blink/web_tests/external/wpt/x-frame-options/get-decode-split.html.ini
similarity index 65%
rename from third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini
rename to third_party/blink/web_tests/external/wpt/x-frame-options/get-decode-split.html.ini
index a724a8c..5afb0df 100644
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini
+++ b/third_party/blink/web_tests/external/wpt/x-frame-options/get-decode-split.html.ini
@@ -1,3 +1,3 @@
-[003.html]
+[get-decode-split.html]
   expected:
     if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/xhr/send-timeout-events.htm.ini b/third_party/blink/web_tests/external/wpt/xhr/send-timeout-events.htm.ini
index 3811a2d..7f24ac7 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/send-timeout-events.htm.ini
+++ b/third_party/blink/web_tests/external/wpt/xhr/send-timeout-events.htm.ini
@@ -1,4 +1,4 @@
 [send-timeout-events.htm]
   [XMLHttpRequest: The send() method: timeout is not 0 ]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/images/resources/avif/gray1024x704.avif b/third_party/blink/web_tests/images/resources/avif/gray1024x704.avif
new file mode 100644
index 0000000..f90c1ad
--- /dev/null
+++ b/third_party/blink/web_tests/images/resources/avif/gray1024x704.avif
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any-expected.txt
deleted file mode 100644
index 3a69eb7a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any-expected.txt
+++ /dev/null
@@ -1,371 +0,0 @@
-This is a testharness.js-based test.
-Found 361 tests; 105 PASS, 256 FAIL, 0 TIMEOUT, 0 NOTRUN.
-FAIL idl_test setup promise_test: Unhandled rejection with value: object "ReferenceError: MLGraphBuilder is not defined"
-PASS idl_test validation
-PASS Partial interface MLGraphBuilder: original interface defined
-PASS Partial interface MLGraphBuilder: member names are unique
-PASS Partial interface MLGraphBuilder[2]: original interface defined
-PASS Partial interface MLGraphBuilder[2]: member names are unique
-PASS Partial interface MLGraphBuilder[3]: original interface defined
-PASS Partial interface MLGraphBuilder[3]: member names are unique
-PASS Partial interface MLGraphBuilder[4]: original interface defined
-PASS Partial interface MLGraphBuilder[4]: member names are unique
-PASS Partial interface MLGraphBuilder[5]: original interface defined
-PASS Partial interface MLGraphBuilder[5]: member names are unique
-PASS Partial interface MLGraphBuilder[6]: original interface defined
-PASS Partial interface MLGraphBuilder[6]: member names are unique
-PASS Partial interface MLGraphBuilder[7]: original interface defined
-PASS Partial interface MLGraphBuilder[7]: member names are unique
-PASS Partial interface MLGraphBuilder[8]: original interface defined
-PASS Partial interface MLGraphBuilder[8]: member names are unique
-PASS Partial interface MLGraphBuilder[9]: original interface defined
-PASS Partial interface MLGraphBuilder[9]: member names are unique
-PASS Partial interface MLGraphBuilder[10]: original interface defined
-PASS Partial interface MLGraphBuilder[10]: member names are unique
-PASS Partial interface MLGraphBuilder[11]: original interface defined
-PASS Partial interface MLGraphBuilder[11]: member names are unique
-PASS Partial interface MLGraphBuilder[12]: original interface defined
-PASS Partial interface MLGraphBuilder[12]: member names are unique
-PASS Partial interface MLGraphBuilder[13]: original interface defined
-PASS Partial interface MLGraphBuilder[13]: member names are unique
-PASS Partial interface MLGraphBuilder[14]: original interface defined
-PASS Partial interface MLGraphBuilder[14]: member names are unique
-PASS Partial interface MLGraphBuilder[15]: original interface defined
-PASS Partial interface MLGraphBuilder[15]: member names are unique
-PASS Partial interface MLGraphBuilder[16]: original interface defined
-PASS Partial interface MLGraphBuilder[16]: member names are unique
-PASS Partial interface MLGraphBuilder[17]: original interface defined
-PASS Partial interface MLGraphBuilder[17]: member names are unique
-PASS Partial interface MLGraphBuilder[18]: original interface defined
-PASS Partial interface MLGraphBuilder[18]: member names are unique
-PASS Partial interface MLGraphBuilder[19]: original interface defined
-PASS Partial interface MLGraphBuilder[19]: member names are unique
-PASS Partial interface MLGraphBuilder[20]: original interface defined
-PASS Partial interface MLGraphBuilder[20]: member names are unique
-PASS Partial interface MLGraphBuilder[21]: original interface defined
-PASS Partial interface MLGraphBuilder[21]: member names are unique
-PASS Partial interface MLGraphBuilder[22]: original interface defined
-PASS Partial interface MLGraphBuilder[22]: member names are unique
-PASS Partial interface MLGraphBuilder[23]: original interface defined
-PASS Partial interface MLGraphBuilder[23]: member names are unique
-PASS Partial interface MLGraphBuilder[24]: original interface defined
-PASS Partial interface MLGraphBuilder[24]: member names are unique
-PASS Partial interface MLGraphBuilder[25]: original interface defined
-PASS Partial interface MLGraphBuilder[25]: member names are unique
-PASS Partial interface MLGraphBuilder[26]: original interface defined
-PASS Partial interface MLGraphBuilder[26]: member names are unique
-PASS Partial interface MLGraphBuilder[27]: original interface defined
-PASS Partial interface MLGraphBuilder[27]: member names are unique
-PASS Partial interface MLGraphBuilder[28]: original interface defined
-PASS Partial interface MLGraphBuilder[28]: member names are unique
-PASS Partial interface MLGraphBuilder[29]: original interface defined
-PASS Partial interface MLGraphBuilder[29]: member names are unique
-PASS Partial interface MLGraphBuilder[30]: original interface defined
-PASS Partial interface MLGraphBuilder[30]: member names are unique
-PASS Partial interface MLGraphBuilder[31]: original interface defined
-PASS Partial interface MLGraphBuilder[31]: member names are unique
-PASS Partial interface MLGraphBuilder[32]: original interface defined
-PASS Partial interface MLGraphBuilder[32]: member names are unique
-PASS Partial interface mixin NavigatorID: member names are unique
-PASS Navigator includes NavigatorML: member names are unique
-PASS WorkerNavigator includes NavigatorML: member names are unique
-PASS Navigator includes NavigatorID: member names are unique
-PASS Navigator includes NavigatorLanguage: member names are unique
-PASS Navigator includes NavigatorOnLine: member names are unique
-PASS Navigator includes NavigatorContentUtils: member names are unique
-PASS Navigator includes NavigatorCookies: member names are unique
-PASS Navigator includes NavigatorPlugins: member names are unique
-PASS Navigator includes NavigatorConcurrentHardware: member names are unique
-PASS WorkerNavigator includes NavigatorID: member names are unique
-PASS WorkerNavigator includes NavigatorLanguage: member names are unique
-PASS WorkerNavigator includes NavigatorOnLine: member names are unique
-PASS WorkerNavigator includes NavigatorConcurrentHardware: member names are unique
-PASS Navigator includes NavigatorGPU: member names are unique
-PASS WorkerNavigator includes NavigatorGPU: member names are unique
-PASS GPUTexture includes GPUObjectBase: member names are unique
-FAIL NavigatorML must be primary interface of navigator assert_own_property: self does not have own property "NavigatorML" expected property "NavigatorML" missing
-FAIL Stringification of navigator assert_class_string: class string of navigator expected "[object NavigatorML]" but got "[object Navigator]"
-PASS NavigatorML interface: navigator must inherit property "ml" with the proper type
-PASS ML interface: existence and properties of interface object
-PASS ML interface object length
-PASS ML interface object name
-PASS ML interface: existence and properties of interface prototype object
-PASS ML interface: existence and properties of interface prototype object's "constructor" property
-PASS ML interface: existence and properties of interface prototype object's @@unscopables property
-FAIL ML interface: operation createContext(optional MLContextOptions) assert_throws_js: calling operation with this = null didn't throw TypeError function "function() {
-            fn.apply(obj, args);
-        }" did not throw
-FAIL ML interface: operation createContext(WebGLRenderingContext) assert_throws_js: calling operation with this = null didn't throw TypeError function "function() {
-            fn.apply(obj, args);
-        }" did not throw
-FAIL ML interface: operation createContext(GPUDevice) assert_throws_js: calling operation with this = null didn't throw TypeError function "function() {
-            fn.apply(obj, args);
-        }" did not throw
-PASS ML must be primary interface of navigator.ml
-PASS Stringification of navigator.ml
-PASS ML interface: navigator.ml must inherit property "createContext(optional MLContextOptions)" with the proper type
-PASS ML interface: calling createContext(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError
-PASS ML interface: navigator.ml must inherit property "createContext(WebGLRenderingContext)" with the proper type
-PASS ML interface: calling createContext(WebGLRenderingContext) on navigator.ml with too few arguments must throw TypeError
-PASS ML interface: navigator.ml must inherit property "createContext(GPUDevice)" with the proper type
-PASS ML interface: calling createContext(GPUDevice) on navigator.ml with too few arguments must throw TypeError
-PASS MLContext interface: existence and properties of interface object
-PASS MLContext interface object length
-PASS MLContext interface object name
-PASS MLContext interface: existence and properties of interface prototype object
-PASS MLContext interface: existence and properties of interface prototype object's "constructor" property
-PASS MLContext interface: existence and properties of interface prototype object's @@unscopables property
-FAIL MLContext must be primary interface of context assert_equals: context's prototype is not MLContext.prototype expected object "[object MLContext]" but got object "[object Promise]"
-FAIL Stringification of context assert_class_string: class string of context expected "[object MLContext]" but got "[object Promise]"
-FAIL MLOperand interface: existence and properties of interface object assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface object length assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface object name assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand must be primary interface of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL Stringification of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL MLOperand must be primary interface of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL Stringification of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL MLOperator interface: existence and properties of interface object assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface object length assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface object name assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator must be primary interface of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
-FAIL Stringification of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
-FAIL MLGraphBuilder interface: existence and properties of interface object assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface object length assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface object name assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation input(DOMString, MLOperandDescriptor) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation constant(MLOperandDescriptor, MLBufferView) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation constant(double, optional MLOperandType) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation build(MLNamedOperands) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation clamp(MLOperand, optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation clamp(optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation concat(sequence<MLOperand>, long) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation conv2d(MLOperand, MLOperand, optional MLConv2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation add(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sub(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation mul(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation div(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation max(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation min(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation pow(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation abs(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation ceil(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation cos(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation exp(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation floor(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation log(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation neg(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sin(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tan(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation elu(MLOperand, optional MLEluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation elu(optional MLEluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gemm(MLOperand, MLOperand, optional MLGemmOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSigmoid(MLOperand, optional MLHardSigmoidOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSigmoid(optional MLHardSigmoidOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSwish(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSwish() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation leakyRelu(MLOperand, optional MLLeakyReluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation leakyRelu(optional MLLeakyReluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation matmul(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation linear(MLOperand, optional MLLinearOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation linear(optional MLLinearOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation pad(MLOperand, MLOperand, optional MLPadOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation averagePool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation l2Pool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation maxPool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceL1(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceL2(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceLogSum(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceLogSumExp(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMax(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMean(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMin(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceProduct(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceSum(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceSumSquare(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation relu(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation relu() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation resample2d(MLOperand, optional MLResample2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reshape(MLOperand, sequence<long>) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sigmoid(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sigmoid() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softmax(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softplus(MLOperand, optional MLSoftplusOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softplus(optional MLSoftplusOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softsign(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softsign() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation squeeze(MLOperand, optional MLSqueezeOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tanh(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tanh() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation transpose(MLOperand, optional MLTransposeOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder must be primary interface of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL Stringification of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "input(DOMString, MLOperandDescriptor)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling input(DOMString, MLOperandDescriptor) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(MLOperandDescriptor, MLBufferView)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(MLOperandDescriptor, MLBufferView) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(double, optional MLOperandType)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "build(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(MLOperand, optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "concat(sequence<MLOperand>, long)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling concat(sequence<MLOperand>, long) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "conv2d(MLOperand, MLOperand, optional MLConv2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling conv2d(MLOperand, MLOperand, optional MLConv2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "add(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling add(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sub(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sub(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "mul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling mul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "div(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling div(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "max(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling max(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "min(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling min(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pow(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pow(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "abs(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling abs(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "ceil(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling ceil(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "cos(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling cos(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "exp(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling exp(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "floor(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling floor(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "log(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling log(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "neg(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling neg(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sin(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sin(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tan(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tan(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(MLOperand, optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(MLOperand, optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gemm(MLOperand, MLOperand, optional MLGemmOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gemm(MLOperand, MLOperand, optional MLGemmOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(MLOperand, optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(MLOperand, optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSwish(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(MLOperand, optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(MLOperand, optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "matmul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling matmul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(MLOperand, optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(MLOperand, optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pad(MLOperand, MLOperand, optional MLPadOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pad(MLOperand, MLOperand, optional MLPadOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "averagePool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling averagePool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "l2Pool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling l2Pool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "maxPool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling maxPool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL1(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL1(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL2(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL2(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSumExp(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSumExp(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMax(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMax(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMean(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMean(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMin(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMin(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceProduct(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceProduct(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSumSquare(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSumSquare(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling relu(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softmax(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softmax(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(MLOperand, optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(MLOperand, optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softsign(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "squeeze(MLOperand, optional MLSqueezeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling squeeze(MLOperand, optional MLSqueezeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tanh(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "transpose(MLOperand, optional MLTransposeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling transpose(MLOperand, optional MLTransposeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraph interface: existence and properties of interface object assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface object length assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface object name assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: operation compute(MLNamedInputs, MLNamedOutputs) assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph must be primary interface of graph assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL Stringification of graph assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL MLGraph interface: graph must inherit property "compute(MLNamedInputs, MLNamedOutputs)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL MLGraph interface: calling compute(MLNamedInputs, MLNamedOutputs) on graph with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-PASS Navigator interface: attribute ml
-PASS Navigator interface: navigator must inherit property "ml" with the proper type
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any.worker-expected.txt
deleted file mode 100644
index 46d99e7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/external/wpt/webnn/idlharness.https.any.worker-expected.txt
+++ /dev/null
@@ -1,365 +0,0 @@
-This is a testharness.js-based test.
-Found 361 tests; 83 PASS, 278 FAIL, 0 TIMEOUT, 0 NOTRUN.
-FAIL idl_test setup promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'createContext')"
-PASS idl_test validation
-PASS Partial interface MLGraphBuilder: original interface defined
-PASS Partial interface MLGraphBuilder: member names are unique
-PASS Partial interface MLGraphBuilder[2]: original interface defined
-PASS Partial interface MLGraphBuilder[2]: member names are unique
-PASS Partial interface MLGraphBuilder[3]: original interface defined
-PASS Partial interface MLGraphBuilder[3]: member names are unique
-PASS Partial interface MLGraphBuilder[4]: original interface defined
-PASS Partial interface MLGraphBuilder[4]: member names are unique
-PASS Partial interface MLGraphBuilder[5]: original interface defined
-PASS Partial interface MLGraphBuilder[5]: member names are unique
-PASS Partial interface MLGraphBuilder[6]: original interface defined
-PASS Partial interface MLGraphBuilder[6]: member names are unique
-PASS Partial interface MLGraphBuilder[7]: original interface defined
-PASS Partial interface MLGraphBuilder[7]: member names are unique
-PASS Partial interface MLGraphBuilder[8]: original interface defined
-PASS Partial interface MLGraphBuilder[8]: member names are unique
-PASS Partial interface MLGraphBuilder[9]: original interface defined
-PASS Partial interface MLGraphBuilder[9]: member names are unique
-PASS Partial interface MLGraphBuilder[10]: original interface defined
-PASS Partial interface MLGraphBuilder[10]: member names are unique
-PASS Partial interface MLGraphBuilder[11]: original interface defined
-PASS Partial interface MLGraphBuilder[11]: member names are unique
-PASS Partial interface MLGraphBuilder[12]: original interface defined
-PASS Partial interface MLGraphBuilder[12]: member names are unique
-PASS Partial interface MLGraphBuilder[13]: original interface defined
-PASS Partial interface MLGraphBuilder[13]: member names are unique
-PASS Partial interface MLGraphBuilder[14]: original interface defined
-PASS Partial interface MLGraphBuilder[14]: member names are unique
-PASS Partial interface MLGraphBuilder[15]: original interface defined
-PASS Partial interface MLGraphBuilder[15]: member names are unique
-PASS Partial interface MLGraphBuilder[16]: original interface defined
-PASS Partial interface MLGraphBuilder[16]: member names are unique
-PASS Partial interface MLGraphBuilder[17]: original interface defined
-PASS Partial interface MLGraphBuilder[17]: member names are unique
-PASS Partial interface MLGraphBuilder[18]: original interface defined
-PASS Partial interface MLGraphBuilder[18]: member names are unique
-PASS Partial interface MLGraphBuilder[19]: original interface defined
-PASS Partial interface MLGraphBuilder[19]: member names are unique
-PASS Partial interface MLGraphBuilder[20]: original interface defined
-PASS Partial interface MLGraphBuilder[20]: member names are unique
-PASS Partial interface MLGraphBuilder[21]: original interface defined
-PASS Partial interface MLGraphBuilder[21]: member names are unique
-PASS Partial interface MLGraphBuilder[22]: original interface defined
-PASS Partial interface MLGraphBuilder[22]: member names are unique
-PASS Partial interface MLGraphBuilder[23]: original interface defined
-PASS Partial interface MLGraphBuilder[23]: member names are unique
-PASS Partial interface MLGraphBuilder[24]: original interface defined
-PASS Partial interface MLGraphBuilder[24]: member names are unique
-PASS Partial interface MLGraphBuilder[25]: original interface defined
-PASS Partial interface MLGraphBuilder[25]: member names are unique
-PASS Partial interface MLGraphBuilder[26]: original interface defined
-PASS Partial interface MLGraphBuilder[26]: member names are unique
-PASS Partial interface MLGraphBuilder[27]: original interface defined
-PASS Partial interface MLGraphBuilder[27]: member names are unique
-PASS Partial interface MLGraphBuilder[28]: original interface defined
-PASS Partial interface MLGraphBuilder[28]: member names are unique
-PASS Partial interface MLGraphBuilder[29]: original interface defined
-PASS Partial interface MLGraphBuilder[29]: member names are unique
-PASS Partial interface MLGraphBuilder[30]: original interface defined
-PASS Partial interface MLGraphBuilder[30]: member names are unique
-PASS Partial interface MLGraphBuilder[31]: original interface defined
-PASS Partial interface MLGraphBuilder[31]: member names are unique
-PASS Partial interface MLGraphBuilder[32]: original interface defined
-PASS Partial interface MLGraphBuilder[32]: member names are unique
-PASS Partial interface mixin NavigatorID: member names are unique
-PASS Navigator includes NavigatorML: member names are unique
-PASS WorkerNavigator includes NavigatorML: member names are unique
-PASS Navigator includes NavigatorID: member names are unique
-PASS Navigator includes NavigatorLanguage: member names are unique
-PASS Navigator includes NavigatorOnLine: member names are unique
-PASS Navigator includes NavigatorContentUtils: member names are unique
-PASS Navigator includes NavigatorCookies: member names are unique
-PASS Navigator includes NavigatorPlugins: member names are unique
-PASS Navigator includes NavigatorConcurrentHardware: member names are unique
-PASS WorkerNavigator includes NavigatorID: member names are unique
-PASS WorkerNavigator includes NavigatorLanguage: member names are unique
-PASS WorkerNavigator includes NavigatorOnLine: member names are unique
-PASS WorkerNavigator includes NavigatorConcurrentHardware: member names are unique
-PASS Navigator includes NavigatorGPU: member names are unique
-PASS WorkerNavigator includes NavigatorGPU: member names are unique
-PASS GPUTexture includes GPUObjectBase: member names are unique
-FAIL NavigatorML must be primary interface of navigator assert_own_property: self does not have own property "NavigatorML" expected property "NavigatorML" missing
-FAIL Stringification of navigator assert_class_string: class string of navigator expected "[object NavigatorML]" but got "[object WorkerNavigator]"
-PASS NavigatorML interface: navigator must not have property "ml"
-FAIL ML interface: existence and properties of interface object assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface object length assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface object name assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: existence and properties of interface prototype object assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: operation createContext(optional MLContextOptions) assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: operation createContext(WebGLRenderingContext) assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML interface: operation createContext(GPUDevice) assert_own_property: self does not have own property "ML" expected property "ML" missing
-FAIL ML must be primary interface of navigator.ml assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of navigator.ml assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: navigator.ml must inherit property "createContext(optional MLContextOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: calling createContext(optional MLContextOptions) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: navigator.ml must inherit property "createContext(WebGLRenderingContext)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: calling createContext(WebGLRenderingContext) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: navigator.ml must inherit property "createContext(GPUDevice)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL ML interface: calling createContext(GPUDevice) on navigator.ml with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL MLContext interface: existence and properties of interface object assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface object length assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface object name assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLContext" expected property "MLContext" missing
-FAIL MLContext must be primary interface of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL Stringification of context assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: context is not defined"
-FAIL MLOperand interface: existence and properties of interface object assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface object length assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface object name assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLOperand" expected property "MLOperand" missing
-FAIL MLOperand must be primary interface of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL Stringification of input assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: input is not defined"
-FAIL MLOperand must be primary interface of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL Stringification of filter assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: filter is not defined"
-FAIL MLOperator interface: existence and properties of interface object assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface object length assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface object name assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLOperator" expected property "MLOperator" missing
-FAIL MLOperator must be primary interface of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
-FAIL Stringification of relu assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: relu is not defined"
-FAIL MLGraphBuilder interface: existence and properties of interface object assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface object length assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface object name assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation input(DOMString, MLOperandDescriptor) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation constant(MLOperandDescriptor, MLBufferView) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation constant(double, optional MLOperandType) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation build(MLNamedOperands) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation clamp(MLOperand, optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation clamp(optional MLClampOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation concat(sequence<MLOperand>, long) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation conv2d(MLOperand, MLOperand, optional MLConv2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation add(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sub(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation mul(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation div(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation max(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation min(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation pow(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation abs(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation ceil(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation cos(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation exp(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation floor(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation log(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation neg(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sin(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tan(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation elu(MLOperand, optional MLEluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation elu(optional MLEluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gemm(MLOperand, MLOperand, optional MLGemmOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSigmoid(MLOperand, optional MLHardSigmoidOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSigmoid(optional MLHardSigmoidOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSwish(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation hardSwish() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation leakyRelu(MLOperand, optional MLLeakyReluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation leakyRelu(optional MLLeakyReluOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation matmul(MLOperand, MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation linear(MLOperand, optional MLLinearOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation linear(optional MLLinearOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation pad(MLOperand, MLOperand, optional MLPadOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation averagePool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation l2Pool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation maxPool2d(MLOperand, optional MLPool2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceL1(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceL2(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceLogSum(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceLogSumExp(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMax(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMean(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceMin(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceProduct(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceSum(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reduceSumSquare(MLOperand, optional MLReduceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation relu(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation relu() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation resample2d(MLOperand, optional MLResample2dOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation reshape(MLOperand, sequence<long>) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sigmoid(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation sigmoid() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softmax(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softplus(MLOperand, optional MLSoftplusOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softplus(optional MLSoftplusOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softsign(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation softsign() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation squeeze(MLOperand, optional MLSqueezeOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tanh(MLOperand) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation tanh() assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder interface: operation transpose(MLOperand, optional MLTransposeOptions) assert_own_property: self does not have own property "MLGraphBuilder" expected property "MLGraphBuilder" missing
-FAIL MLGraphBuilder must be primary interface of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL Stringification of builder assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "input(DOMString, MLOperandDescriptor)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling input(DOMString, MLOperandDescriptor) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(MLOperandDescriptor, MLBufferView)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(MLOperandDescriptor, MLBufferView) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "constant(double, optional MLOperandType)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling constant(double, optional MLOperandType) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "build(MLNamedOperands)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling build(MLNamedOperands) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling batchNormalization(MLOperand, MLOperand, MLOperand, optional MLBatchNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(MLOperand, optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(MLOperand, optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "clamp(optional MLClampOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling clamp(optional MLClampOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "concat(sequence<MLOperand>, long)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling concat(sequence<MLOperand>, long) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "conv2d(MLOperand, MLOperand, optional MLConv2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling conv2d(MLOperand, MLOperand, optional MLConv2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling convTranspose2d(MLOperand, MLOperand, optional MLConvTranspose2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "add(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling add(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sub(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sub(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "mul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling mul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "div(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling div(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "max(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling max(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "min(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling min(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pow(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pow(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "abs(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling abs(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "ceil(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling ceil(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "cos(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling cos(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "exp(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling exp(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "floor(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling floor(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "log(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling log(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "neg(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling neg(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sin(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sin(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tan(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tan(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(MLOperand, optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(MLOperand, optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "elu(optional MLEluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling elu(optional MLEluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gemm(MLOperand, MLOperand, optional MLGemmOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gemm(MLOperand, MLOperand, optional MLGemmOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gru(MLOperand, MLOperand, MLOperand, long, long, optional MLGruOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling gruCell(MLOperand, MLOperand, MLOperand, MLOperand, long, optional MLGruCellOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(MLOperand, optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(MLOperand, optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSigmoid(optional MLHardSigmoidOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSigmoid(optional MLHardSigmoidOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling hardSwish(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "hardSwish()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling instanceNormalization(MLOperand, optional MLInstanceNormalizationOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(MLOperand, optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(MLOperand, optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "leakyRelu(optional MLLeakyReluOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling leakyRelu(optional MLLeakyReluOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "matmul(MLOperand, MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling matmul(MLOperand, MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(MLOperand, optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(MLOperand, optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "linear(optional MLLinearOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling linear(optional MLLinearOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "pad(MLOperand, MLOperand, optional MLPadOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling pad(MLOperand, MLOperand, optional MLPadOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "averagePool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling averagePool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "l2Pool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling l2Pool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "maxPool2d(MLOperand, optional MLPool2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling maxPool2d(MLOperand, optional MLPool2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL1(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL1(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceL2(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceL2(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceLogSumExp(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceLogSumExp(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMax(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMax(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMean(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMean(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceMin(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceMin(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceProduct(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceProduct(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSum(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSum(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reduceSumSquare(MLOperand, optional MLReduceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reduceSumSquare(MLOperand, optional MLReduceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling relu(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "relu()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "resample2d(MLOperand, optional MLResample2dOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling resample2d(MLOperand, optional MLResample2dOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "reshape(MLOperand, sequence<long>)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling reshape(MLOperand, sequence<long>) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling sigmoid(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "sigmoid()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling slice(MLOperand, sequence<long>, sequence<long>, optional MLSliceOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softmax(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softmax(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(MLOperand, optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(MLOperand, optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softplus(optional MLSoftplusOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softplus(optional MLSoftplusOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling softsign(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "softsign()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling split(MLOperand, (unsigned long or sequence<unsigned long>), optional MLSplitOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "squeeze(MLOperand, optional MLSqueezeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling squeeze(MLOperand, optional MLSqueezeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh(MLOperand)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling tanh(MLOperand) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "tanh()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: builder must inherit property "transpose(MLOperand, optional MLTransposeOptions)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraphBuilder interface: calling transpose(MLOperand, optional MLTransposeOptions) on builder with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: builder is not defined"
-FAIL MLGraph interface: existence and properties of interface object assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface object length assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface object name assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph interface: operation compute(MLNamedInputs, MLNamedOutputs) assert_own_property: self does not have own property "MLGraph" expected property "MLGraph" missing
-FAIL MLGraph must be primary interface of graph assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL Stringification of graph assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL MLGraph interface: graph must inherit property "compute(MLNamedInputs, MLNamedOutputs)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL MLGraph interface: calling compute(MLNamedInputs, MLNamedOutputs) on graph with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: graph is not defined"
-FAIL WorkerNavigator interface: attribute ml assert_true: The prototype object must have a property "ml" expected true got false
-FAIL WorkerNavigator interface: navigator must inherit property "ml" with the proper type assert_inherits: property "ml" not found in prototype chain
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
new file mode 100644
index 0000000..e085798
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Test that getContext with un-supported string throws a TypeError.
+FAIL Test that getContext with supported string returns correct results assert_true: expected true got false
+FAIL Test that getContext twice with different context type returns null the second time assert_equals: expected null but got object "[object OffscreenCanvasRenderingContext2D]"
+PASS Test that 2dcontext.canvas should return the original OffscreenCanvas
+FAIL Test that webglcontext.canvas should return the original OffscreenCanvas Cannot read properties of null (reading 'canvas')
+PASS Test that OffscreenCanvasRenderingContext2D with alpha disabled makes the OffscreenCanvas opaque
+PASS Test that OffscreenCanvasRenderingContext2D with alpha enabled preserves the alpha
+PASS Test that 'alpha' context creation attribute is true by default
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt
new file mode 100644
index 0000000..e085798
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Test that getContext with un-supported string throws a TypeError.
+FAIL Test that getContext with supported string returns correct results assert_true: expected true got false
+FAIL Test that getContext twice with different context type returns null the second time assert_equals: expected null but got object "[object OffscreenCanvasRenderingContext2D]"
+PASS Test that 2dcontext.canvas should return the original OffscreenCanvas
+FAIL Test that webglcontext.canvas should return the original OffscreenCanvas Cannot read properties of null (reading 'canvas')
+PASS Test that OffscreenCanvasRenderingContext2D with alpha disabled makes the OffscreenCanvas opaque
+PASS Test that OffscreenCanvasRenderingContext2D with alpha enabled preserves the alpha
+PASS Test that 'alpha' context creation attribute is true by default
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt
new file mode 100644
index 0000000..8681bd95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Test that transferToImageBitmap returns an ImageBitmap with correct width and height Failed to execute 'transferToImageBitmap' on 'OffscreenCanvas': Cannot transfer an ImageBitmap from an OffscreenCanvas with no context
+PASS Test that transferToImageBitmap returns an ImageBitmap with correct color
+PASS Test that transferToImageBitmap won't change context's property
+PASS Test that transferToImageBitmap preserves transform
+PASS Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception
+PASS Test that transferToImageBitmap without a context throws an exception
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt
new file mode 100644
index 0000000..0062a95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Test that transferToImageBitmap returns an ImageBitmap with correct width and height in a worker assert_unreached: error Reached unreachable code
+PASS Test that transferToImageBitmap returns an ImageBitmap with correct color in a worker
+PASS Test that call transferToImageBitmap twice returns an ImageBitmap with correct color in a worker
+PASS Test that call transferToImageBitmap twice on a alpha-disabled context returns an ImageBitmap with correct color in a worker
+PASS Test that transferToImageBitmap won't change context's property in a worker
+PASS Test that call transferToImageBitmap preserves transform in a worker
+PASS Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception in a worker
+PASS Test that call transferToImageBitmap without a context throws an exception in a worker
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt
new file mode 100644
index 0000000..9ada9e2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+PASS Test that OffscreenCanvas's size is correct after being transferred from a worker.
+FAIL Test that transfer an OffscreenCanvas that has a 2d context throws exception in a worker. assert_true: expected true got false
+FAIL Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker. assert_true: expected true got object "[object OffscreenCanvas]"
+PASS Test that transfer an OffscreenCanvas twice throws exception in a worker.
+PASS Test that calling getContext('2d') on a detached OffscreenCanvas throws exception in a worker.
+PASS Test that calling getContext('webgl') on a detached OffscreenCanvas throws exception in a worker.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt
new file mode 100644
index 0000000..50d8f8f7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+NOTRUN First contentful paint fires due to webgl2 canvas render. WebGL 2 Canvas isn't supported.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/resource-timing/response-status-code-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/resource-timing/response-status-code-expected.txt
new file mode 100644
index 0000000..2cbaf46
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/resource-timing/response-status-code-expected.txt
@@ -0,0 +1,304 @@
+This is a testharness.js-based test.
+Found 300 tests; 299 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS This test validates the response status of resources.
+PASS This test validates the response status of resources. 1
+PASS This test validates the response status of resources. 2
+PASS This test validates the response status of resources. 3
+PASS This test validates the response status of resources. 4
+PASS This test validates the response status of resources. 5
+PASS This test validates the response status of resources. 6
+PASS This test validates the response status of resources. 7
+PASS This test validates the response status of resources. 8
+PASS This test validates the response status of resources. 9
+PASS This test validates the response status of resources. 10
+PASS This test validates the response status of resources. 11
+PASS This test validates the response status of resources. 12
+PASS This test validates the response status of resources. 13
+PASS This test validates the response status of resources. 14
+PASS This test validates the response status of resources. 15
+PASS This test validates the response status of resources. 16
+PASS This test validates the response status of resources. 17
+PASS This test validates the response status of resources. 18
+PASS This test validates the response status of resources. 19
+PASS This test validates the response status of resources. 20
+PASS This test validates the response status of resources. 21
+PASS This test validates the response status of resources. 22
+PASS This test validates the response status of resources. 23
+PASS This test validates the response status of resources. 24
+PASS This test validates the response status of resources. 25
+PASS This test validates the response status of resources. 26
+PASS This test validates the response status of resources. 27
+PASS This test validates the response status of resources. 28
+PASS This test validates the response status of resources. 29
+PASS This test validates the response status of resources. 30
+PASS This test validates the response status of resources. 31
+PASS This test validates the response status of resources. 32
+PASS This test validates the response status of resources. 33
+PASS This test validates the response status of resources. 34
+PASS This test validates the response status of resources. 35
+PASS This test validates the response status of resources. 36
+PASS This test validates the response status of resources. 37
+PASS This test validates the response status of resources. 38
+PASS This test validates the response status of resources. 39
+PASS This test validates the response status of resources. 40
+PASS This test validates the response status of resources. 41
+PASS This test validates the response status of resources. 42
+PASS This test validates the response status of resources. 43
+PASS This test validates the response status of resources. 44
+PASS This test validates the response status of resources. 45
+PASS This test validates the response status of resources. 46
+PASS This test validates the response status of resources. 47
+PASS This test validates the response status of resources. 48
+PASS This test validates the response status of resources. 49
+PASS This test validates the response status of resources. 50
+PASS This test validates the response status of resources. 51
+PASS This test validates the response status of resources. 52
+PASS This test validates the response status of resources. 53
+PASS This test validates the response status of resources. 54
+PASS This test validates the response status of resources. 55
+PASS This test validates the response status of resources. 56
+PASS This test validates the response status of resources. 57
+PASS This test validates the response status of resources. 58
+PASS This test validates the response status of resources. 59
+PASS This test validates the response status of resources. 60
+PASS This test validates the response status of resources. 61
+PASS This test validates the response status of resources. 62
+PASS This test validates the response status of resources. 63
+PASS This test validates the response status of resources. 64
+PASS This test validates the response status of resources. 65
+PASS This test validates the response status of resources. 66
+PASS This test validates the response status of resources. 67
+PASS This test validates the response status of resources. 68
+PASS This test validates the response status of resources. 69
+PASS This test validates the response status of resources. 70
+PASS This test validates the response status of resources. 71
+PASS This test validates the response status of resources. 72
+PASS This test validates the response status of resources. 73
+PASS This test validates the response status of resources. 74
+PASS This test validates the response status of resources. 75
+PASS This test validates the response status of resources. 76
+PASS This test validates the response status of resources. 77
+PASS This test validates the response status of resources. 78
+PASS This test validates the response status of resources. 79
+PASS This test validates the response status of resources. 80
+PASS This test validates the response status of resources. 81
+PASS This test validates the response status of resources. 82
+PASS This test validates the response status of resources. 83
+PASS This test validates the response status of resources. 84
+PASS This test validates the response status of resources. 85
+FAIL This test validates the response status of resources. 86 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'responseStatus')"
+PASS This test validates the response status of resources. 87
+PASS This test validates the response status of resources. 88
+PASS This test validates the response status of resources. 89
+PASS This test validates the response status of resources. 90
+PASS This test validates the response status of resources. 91
+PASS This test validates the response status of resources. 92
+PASS This test validates the response status of resources. 93
+PASS This test validates the response status of resources. 94
+PASS This test validates the response status of resources. 95
+PASS This test validates the response status of resources. 96
+PASS This test validates the response status of resources. 97
+PASS This test validates the response status of resources. 98
+PASS This test validates the response status of resources. 99
+PASS This test validates the response status of resources. 100
+PASS This test validates the response status of resources. 101
+PASS This test validates the response status of resources. 102
+PASS This test validates the response status of resources. 103
+PASS This test validates the response status of resources. 104
+PASS This test validates the response status of resources. 105
+PASS This test validates the response status of resources. 106
+PASS This test validates the response status of resources. 107
+PASS This test validates the response status of resources. 108
+PASS This test validates the response status of resources. 109
+PASS This test validates the response status of resources. 110
+PASS This test validates the response status of resources. 111
+PASS This test validates the response status of resources. 112
+PASS This test validates the response status of resources. 113
+PASS This test validates the response status of resources. 114
+PASS This test validates the response status of resources. 115
+PASS This test validates the response status of resources. 116
+PASS This test validates the response status of resources. 117
+PASS This test validates the response status of resources. 118
+PASS This test validates the response status of resources. 119
+PASS This test validates the response status of resources. 120
+PASS This test validates the response status of resources. 121
+PASS This test validates the response status of resources. 122
+PASS This test validates the response status of resources. 123
+PASS This test validates the response status of resources. 124
+PASS This test validates the response status of resources. 125
+PASS This test validates the response status of resources. 126
+PASS This test validates the response status of resources. 127
+PASS This test validates the response status of resources. 128
+PASS This test validates the response status of resources. 129
+PASS This test validates the response status of resources. 130
+PASS This test validates the response status of resources. 131
+PASS This test validates the response status of resources. 132
+PASS This test validates the response status of resources. 133
+PASS This test validates the response status of resources. 134
+PASS This test validates the response status of resources. 135
+PASS This test validates the response status of resources. 136
+PASS This test validates the response status of resources. 137
+PASS This test validates the response status of resources. 138
+PASS This test validates the response status of resources. 139
+PASS This test validates the response status of resources. 140
+PASS This test validates the response status of resources. 141
+PASS This test validates the response status of resources. 142
+PASS This test validates the response status of resources. 143
+PASS This test validates the response status of resources. 144
+PASS This test validates the response status of resources. 145
+PASS This test validates the response status of resources. 146
+PASS This test validates the response status of resources. 147
+PASS This test validates the response status of resources. 148
+PASS This test validates the response status of resources. 149
+PASS This test validates the response status of resources. 150
+PASS This test validates the response status of resources. 151
+PASS This test validates the response status of resources. 152
+PASS This test validates the response status of resources. 153
+PASS This test validates the response status of resources. 154
+PASS This test validates the response status of resources. 155
+PASS This test validates the response status of resources. 156
+PASS This test validates the response status of resources. 157
+PASS This test validates the response status of resources. 158
+PASS This test validates the response status of resources. 159
+PASS This test validates the response status of resources. 160
+PASS This test validates the response status of resources. 161
+PASS This test validates the response status of resources. 162
+PASS This test validates the response status of resources. 163
+PASS This test validates the response status of resources. 164
+PASS This test validates the response status of resources. 165
+PASS This test validates the response status of resources. 166
+PASS This test validates the response status of resources. 167
+PASS This test validates the response status of resources. 168
+PASS This test validates the response status of resources. 169
+PASS This test validates the response status of resources. 170
+PASS This test validates the response status of resources. 171
+PASS This test validates the response status of resources. 172
+PASS This test validates the response status of resources. 173
+PASS This test validates the response status of resources. 174
+PASS This test validates the response status of resources. 175
+PASS This test validates the response status of resources. 176
+PASS This test validates the response status of resources. 177
+PASS This test validates the response status of resources. 178
+PASS This test validates the response status of resources. 179
+PASS This test validates the response status of resources. 180
+PASS This test validates the response status of resources. 181
+PASS This test validates the response status of resources. 182
+PASS This test validates the response status of resources. 183
+PASS This test validates the response status of resources. 184
+PASS This test validates the response status of resources. 185
+PASS This test validates the response status of resources. 186
+PASS This test validates the response status of resources. 187
+PASS This test validates the response status of resources. 188
+PASS This test validates the response status of resources. 189
+PASS This test validates the response status of resources. 190
+PASS This test validates the response status of resources. 191
+PASS This test validates the response status of resources. 192
+PASS This test validates the response status of resources. 193
+PASS This test validates the response status of resources. 194
+PASS This test validates the response status of resources. 195
+PASS This test validates the response status of resources. 196
+PASS This test validates the response status of resources. 197
+PASS This test validates the response status of resources. 198
+PASS This test validates the response status of resources. 199
+PASS This test validates the response status of resources. 200
+PASS This test validates the response status of resources. 201
+PASS This test validates the response status of resources. 202
+PASS This test validates the response status of resources. 203
+PASS This test validates the response status of resources. 204
+PASS This test validates the response status of resources. 205
+PASS This test validates the response status of resources. 206
+PASS This test validates the response status of resources. 207
+PASS This test validates the response status of resources. 208
+PASS This test validates the response status of resources. 209
+PASS This test validates the response status of resources. 210
+PASS This test validates the response status of resources. 211
+PASS This test validates the response status of resources. 212
+PASS This test validates the response status of resources. 213
+PASS This test validates the response status of resources. 214
+PASS This test validates the response status of resources. 215
+PASS This test validates the response status of resources. 216
+PASS This test validates the response status of resources. 217
+PASS This test validates the response status of resources. 218
+PASS This test validates the response status of resources. 219
+PASS This test validates the response status of resources. 220
+PASS This test validates the response status of resources. 221
+PASS This test validates the response status of resources. 222
+PASS This test validates the response status of resources. 223
+PASS This test validates the response status of resources. 224
+PASS This test validates the response status of resources. 225
+PASS This test validates the response status of resources. 226
+PASS This test validates the response status of resources. 227
+PASS This test validates the response status of resources. 228
+PASS This test validates the response status of resources. 229
+PASS This test validates the response status of resources. 230
+PASS This test validates the response status of resources. 231
+PASS This test validates the response status of resources. 232
+PASS This test validates the response status of resources. 233
+PASS This test validates the response status of resources. 234
+PASS This test validates the response status of resources. 235
+PASS This test validates the response status of resources. 236
+PASS This test validates the response status of resources. 237
+PASS This test validates the response status of resources. 238
+PASS This test validates the response status of resources. 239
+PASS This test validates the response status of resources. 240
+PASS This test validates the response status of resources. 241
+PASS This test validates the response status of resources. 242
+PASS This test validates the response status of resources. 243
+PASS This test validates the response status of resources. 244
+PASS This test validates the response status of resources. 245
+PASS This test validates the response status of resources. 246
+PASS This test validates the response status of resources. 247
+PASS This test validates the response status of resources. 248
+PASS This test validates the response status of resources. 249
+PASS This test validates the response status of resources. 250
+PASS This test validates the response status of resources. 251
+PASS This test validates the response status of resources. 252
+PASS This test validates the response status of resources. 253
+PASS This test validates the response status of resources. 254
+PASS This test validates the response status of resources. 255
+PASS This test validates the response status of resources. 256
+PASS This test validates the response status of resources. 257
+PASS This test validates the response status of resources. 258
+PASS This test validates the response status of resources. 259
+PASS This test validates the response status of resources. 260
+PASS This test validates the response status of resources. 261
+PASS This test validates the response status of resources. 262
+PASS This test validates the response status of resources. 263
+PASS This test validates the response status of resources. 264
+PASS This test validates the response status of resources. 265
+PASS This test validates the response status of resources. 266
+PASS This test validates the response status of resources. 267
+PASS This test validates the response status of resources. 268
+PASS This test validates the response status of resources. 269
+PASS This test validates the response status of resources. 270
+PASS This test validates the response status of resources. 271
+PASS This test validates the response status of resources. 272
+PASS This test validates the response status of resources. 273
+PASS This test validates the response status of resources. 274
+PASS This test validates the response status of resources. 275
+PASS This test validates the response status of resources. 276
+PASS This test validates the response status of resources. 277
+PASS This test validates the response status of resources. 278
+PASS This test validates the response status of resources. 279
+PASS This test validates the response status of resources. 280
+PASS This test validates the response status of resources. 281
+PASS This test validates the response status of resources. 282
+PASS This test validates the response status of resources. 283
+PASS This test validates the response status of resources. 284
+PASS This test validates the response status of resources. 285
+PASS This test validates the response status of resources. 286
+PASS This test validates the response status of resources. 287
+PASS This test validates the response status of resources. 288
+PASS This test validates the response status of resources. 289
+PASS This test validates the response status of resources. 290
+PASS This test validates the response status of resources. 291
+PASS This test validates the response status of resources. 292
+PASS This test validates the response status of resources. 293
+PASS This test validates the response status of resources. 294
+PASS This test validates the response status of resources. 295
+PASS This test validates the response status of resources. 296
+PASS This test validates the response status of resources. 297
+PASS This test validates the response status of resources. 298
+PASS This test validates the response status of resources. 299
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt
new file mode 100644
index 0000000..15d046c3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Make sure video.rVFC works during a non-immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during a non-immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during an immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during an immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt
new file mode 100644
index 0000000..fc6ad49
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Make sure video.rVFC callbacks started during an immersive session continue after it ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC callbacks started during an immersive session continue after it ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt
new file mode 100644
index 0000000..e809318
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL texImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texImage2D')
+FAIL texSubImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texSubImage2D')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt
new file mode 100644
index 0000000..e809318
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL texImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texImage2D')
+FAIL texSubImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texSubImage2D')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt
new file mode 100644
index 0000000..8a4b74d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor move gets propagated to anchor poses - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor move gets propagated to anchor poses - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt
new file mode 100644
index 0000000..3f29f35
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor creation with delayed success is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed success is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed failure is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed failure is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt
new file mode 100644
index 0000000..8256af3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor creation failure is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation failure is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt
new file mode 100644
index 0000000..9a688c2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor state changes get propagated - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor state changes get propagated - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt
new file mode 100644
index 0000000..4d04e9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame's trackedAnchors is empty when the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt
new file mode 100644
index 0000000..cad2ec62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Anchor creation succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt
new file mode 100644
index 0000000..b689d65f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession accepts immersive-ar mode - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts immersive-ar mode - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+PASS Tests requestSession rejects immersive-ar mode when unsupported
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt
new file mode 100644
index 0000000..7cf63b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Tests environmentBlendMode for an AR device - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for an AR device - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for a VR device - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for a VR device - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt
new file mode 100644
index 0000000..2d1305a3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+FAIL Tests interactionMode for an VR_HMD_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_HMD_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_HMD_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_HMD_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for a INLINE_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for a INLINE_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt
new file mode 100644
index 0000000..108a308
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRCamera object is present and carries expected dimensions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRCamera object is present and carries expected dimensions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt
new file mode 100644
index 0000000..20eba12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures depth data is not available when cleared in the controller, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures depth data is not available when cleared in the controller, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt
new file mode 100644
index 0000000..728da41
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures getDepthInformation() throws when not run in an active frame, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures getDepthInformation() throws when not run in an active frame, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt
new file mode 100644
index 0000000..a19f085
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures XRWebGLDepthInformation is not obtainable in `cpu-optimized` usage mode - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures XRWebGLDepthInformation is not obtainable in `cpu-optimized` usage mode - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt
new file mode 100644
index 0000000..12ccf7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures depth data is returned and values match expectation, cpu-optimized, luminance-alpha. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures depth data is returned and values match expectation, cpu-optimized, luminance-alpha. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt
new file mode 100644
index 0000000..61a5fff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures getDepthInformation() throws when run with stale XRView, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures getDepthInformation() throws when run with stale XRView, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt
new file mode 100644
index 0000000..de953cb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLBinding.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLBinding.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt
new file mode 100644
index 0000000..53fe1720
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt
@@ -0,0 +1,14 @@
+This is a testharness.js-based test.
+PASS Ensures DOM Overlay rejected without root element
+FAIL Ensures DOM Overlay feature works for immersive-ar, body element - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, body element - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, div element - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, div element - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay input deduplication works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay input deduplication works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay Fullscreen API doesn't change DOM overlay - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay Fullscreen API doesn't change DOM overlay - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe are ignored - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe are ignored - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt
new file mode 100644
index 0000000..b904e6d7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures DOM Overlay interactions on cross origin iframe do not cause hit test results to come up - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe do not cause hit test results to come up - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt
new file mode 100644
index 0000000..17c5fc0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS fullscreen setup
+FAIL Check XR session from fullscreen - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Check XR session from fullscreen - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt
new file mode 100644
index 0000000..0b76a453
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Input sources are re-created when handedness or target ray mode changes - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Input sources are re-created when handedness or target ray mode changes - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt
new file mode 100644
index 0000000..412e308
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Transient input sources fire events in the right order - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient input sources fire events in the right order - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt
new file mode 100644
index 0000000..f84c1f1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRSession resetpose from a device properly fires off the right events for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession resetpose from a device properly fires off the right events for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select.https-expected.txt
new file mode 100644
index 0000000..0c27143e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources primary input presses properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources primary input presses properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt
new file mode 100644
index 0000000..1e621b7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures that an XRInputSources primary input being pressed and released in the space of a single frame properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures that an XRInputSources primary input being pressed and released in the space of a single frame properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt
new file mode 100644
index 0000000..0c27143e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources primary input presses properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources primary input presses properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt
new file mode 100644
index 0000000..228c15f2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for non immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for non immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt
new file mode 100644
index 0000000..e210316
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's gamepad gets disconnected when the input source is removed - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's gamepad gets disconnected when the input source is removed - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt
new file mode 100644
index 0000000..1ba2ad4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's gamepad properly registers input - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's gamepad properly registers input - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt
new file mode 100644
index 0000000..19f280ac7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources properly communicate their handedness - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources properly communicate their handedness - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt
new file mode 100644
index 0000000..5f492b1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources with a target ray mode of 'tracked-pointer' properly communicate their poses - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources with a target ray mode of 'tracked-pointer' properly communicate their poses - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt
new file mode 100644
index 0000000..42437dad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose has emulatedPosition set properly. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose has emulatedPosition set properly. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt
new file mode 100644
index 0000000..16e1776
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test source cancellation works when the session has not ended. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has not ended. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has not ended. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has not ended. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt
new file mode 100644
index 0000000..bf8d56ee
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to hit test works with an XRSpace from input source - no move - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - no move - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - 1 result - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - 1 result - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt
new file mode 100644
index 0000000..e41a8b0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to hit test works with viewer space - straight ahead - plane - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight ahead - plane - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight up - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight up - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local-floor space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local-floor space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt
new file mode 100644
index 0000000..23a01cef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Hit test subscription succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt
new file mode 100644
index 0000000..93b3efc8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Transient hit test subscription succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient test subscription fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient test subscription fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt
new file mode 100644
index 0000000..e8c17df
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - no move - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - no move - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - 1 result - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - 1 result - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt
new file mode 100644
index 0000000..9600a0f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test result returns null pose w/unlocalizable space - viewer space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test result returns null pose w/unlocalizable space - viewer space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/idlharness.https.window-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/idlharness.https.window-expected.txt
new file mode 100644
index 0000000..bfdde4a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/idlharness.https.window-expected.txt
@@ -0,0 +1,301 @@
+This is a testharness.js-based test.
+Found 297 tests; 262 PASS, 35 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL idl_test setup promise_test: Unhandled rejection with value: object "TypeError: Failed to construct 'XRWebGLLayer': The provided value is not of type '(WebGL2RenderingContext or WebGLRenderingContext)'."
+PASS idl_test validation
+PASS Partial interface Navigator: original interface defined
+PASS Partial interface Navigator: member names are unique
+PASS Partial dictionary WebGLContextAttributes: original dictionary defined
+PASS Partial dictionary WebGLContextAttributes: member names are unique
+PASS Partial interface mixin WebGLRenderingContextBase: original interface mixin defined
+PASS Partial interface mixin WebGLRenderingContextBase: member names are unique
+PASS Partial interface Navigator[2]: member names are unique
+PASS Partial interface Navigator[3]: member names are unique
+PASS Partial interface mixin NavigatorID: member names are unique
+PASS WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique
+FAIL WebGLRenderingContext includes WebGLRenderingContextOverloads: member names are unique assert_true: member bufferData is unique expected true got false
+PASS Navigator includes NavigatorID: member names are unique
+PASS Navigator includes NavigatorLanguage: member names are unique
+PASS Navigator includes NavigatorOnLine: member names are unique
+PASS Navigator includes NavigatorContentUtils: member names are unique
+PASS Navigator includes NavigatorCookies: member names are unique
+PASS Navigator includes NavigatorPlugins: member names are unique
+PASS Navigator includes NavigatorConcurrentHardware: member names are unique
+PASS XRSystem interface: existence and properties of interface object
+PASS XRSystem interface object length
+PASS XRSystem interface object name
+PASS XRSystem interface: existence and properties of interface prototype object
+PASS XRSystem interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSystem interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSystem interface: operation isSessionSupported(XRSessionMode)
+PASS XRSystem interface: operation requestSession(XRSessionMode, optional XRSessionInit)
+PASS XRSystem interface: attribute ondevicechange
+PASS XRSession interface: existence and properties of interface object
+PASS XRSession interface object length
+PASS XRSession interface object name
+PASS XRSession interface: existence and properties of interface prototype object
+PASS XRSession interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSession interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSession interface: attribute visibilityState
+FAIL XRSession interface: attribute frameRate assert_true: The prototype object must have a property "frameRate" expected true got false
+FAIL XRSession interface: attribute supportedFrameRates assert_true: The prototype object must have a property "supportedFrameRates" expected true got false
+PASS XRSession interface: attribute renderState
+PASS XRSession interface: attribute inputSources
+PASS XRSession interface: attribute enabledFeatures
+PASS XRSession interface: operation updateRenderState(optional XRRenderStateInit)
+FAIL XRSession interface: operation updateTargetFrameRate(float) assert_own_property: interface prototype object missing non-static operation expected property "updateTargetFrameRate" missing
+PASS XRSession interface: operation requestReferenceSpace(XRReferenceSpaceType)
+PASS XRSession interface: operation requestAnimationFrame(XRFrameRequestCallback)
+PASS XRSession interface: operation cancelAnimationFrame(unsigned long)
+PASS XRSession interface: operation end()
+PASS XRSession interface: attribute onend
+PASS XRSession interface: attribute oninputsourceschange
+PASS XRSession interface: attribute onselect
+PASS XRSession interface: attribute onselectstart
+PASS XRSession interface: attribute onselectend
+PASS XRSession interface: attribute onsqueeze
+PASS XRSession interface: attribute onsqueezestart
+PASS XRSession interface: attribute onsqueezeend
+PASS XRSession interface: attribute onvisibilitychange
+FAIL XRSession interface: attribute onframeratechange assert_true: The prototype object must have a property "onframeratechange" expected true got false
+PASS XRSession must be primary interface of xrSession
+PASS Stringification of xrSession
+PASS XRSession interface: xrSession must inherit property "visibilityState" with the proper type
+FAIL XRSession interface: xrSession must inherit property "frameRate" with the proper type assert_inherits: property "frameRate" not found in prototype chain
+FAIL XRSession interface: xrSession must inherit property "supportedFrameRates" with the proper type assert_inherits: property "supportedFrameRates" not found in prototype chain
+PASS XRSession interface: xrSession must inherit property "renderState" with the proper type
+PASS XRSession interface: xrSession must inherit property "inputSources" with the proper type
+PASS XRSession interface: xrSession must inherit property "enabledFeatures" with the proper type
+PASS XRSession interface: xrSession must inherit property "updateRenderState(optional XRRenderStateInit)" with the proper type
+PASS XRSession interface: calling updateRenderState(optional XRRenderStateInit) on xrSession with too few arguments must throw TypeError
+FAIL XRSession interface: xrSession must inherit property "updateTargetFrameRate(float)" with the proper type assert_inherits: property "updateTargetFrameRate" not found in prototype chain
+FAIL XRSession interface: calling updateTargetFrameRate(float) on xrSession with too few arguments must throw TypeError assert_inherits: property "updateTargetFrameRate" not found in prototype chain
+PASS XRSession interface: xrSession must inherit property "requestReferenceSpace(XRReferenceSpaceType)" with the proper type
+PASS XRSession interface: calling requestReferenceSpace(XRReferenceSpaceType) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "requestAnimationFrame(XRFrameRequestCallback)" with the proper type
+PASS XRSession interface: calling requestAnimationFrame(XRFrameRequestCallback) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "cancelAnimationFrame(unsigned long)" with the proper type
+PASS XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "end()" with the proper type
+PASS XRSession interface: xrSession must inherit property "onend" with the proper type
+PASS XRSession interface: xrSession must inherit property "oninputsourceschange" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselect" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselectstart" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselectend" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueeze" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueezestart" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueezeend" with the proper type
+PASS XRSession interface: xrSession must inherit property "onvisibilitychange" with the proper type
+FAIL XRSession interface: xrSession must inherit property "onframeratechange" with the proper type assert_inherits: property "onframeratechange" not found in prototype chain
+PASS XRRenderState interface: existence and properties of interface object
+PASS XRRenderState interface object length
+PASS XRRenderState interface object name
+PASS XRRenderState interface: existence and properties of interface prototype object
+PASS XRRenderState interface: existence and properties of interface prototype object's "constructor" property
+PASS XRRenderState interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRRenderState interface: attribute depthNear
+PASS XRRenderState interface: attribute depthFar
+PASS XRRenderState interface: attribute inlineVerticalFieldOfView
+PASS XRRenderState interface: attribute baseLayer
+PASS XRRenderState must be primary interface of xrRenderState
+PASS Stringification of xrRenderState
+PASS XRRenderState interface: xrRenderState must inherit property "depthNear" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "depthFar" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "inlineVerticalFieldOfView" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "baseLayer" with the proper type
+PASS XRFrame interface: existence and properties of interface object
+PASS XRFrame interface object length
+PASS XRFrame interface object name
+PASS XRFrame interface: existence and properties of interface prototype object
+PASS XRFrame interface: existence and properties of interface prototype object's "constructor" property
+PASS XRFrame interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRFrame interface: attribute session
+FAIL XRFrame interface: attribute predictedDisplayTime assert_true: The prototype object must have a property "predictedDisplayTime" expected true got false
+PASS XRFrame interface: operation getViewerPose(XRReferenceSpace)
+PASS XRFrame interface: operation getPose(XRSpace, XRSpace)
+PASS XRSpace interface: existence and properties of interface object
+PASS XRSpace interface object length
+PASS XRSpace interface object name
+PASS XRSpace interface: existence and properties of interface prototype object
+PASS XRSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpace interface: existence and properties of interface object
+PASS XRReferenceSpace interface object length
+PASS XRReferenceSpace interface object name
+PASS XRReferenceSpace interface: existence and properties of interface prototype object
+PASS XRReferenceSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRReferenceSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpace interface: operation getOffsetReferenceSpace(XRRigidTransform)
+PASS XRReferenceSpace interface: attribute onreset
+PASS XRReferenceSpace must be primary interface of xrReferenceSpace
+PASS Stringification of xrReferenceSpace
+PASS XRReferenceSpace interface: xrReferenceSpace must inherit property "getOffsetReferenceSpace(XRRigidTransform)" with the proper type
+PASS XRReferenceSpace interface: calling getOffsetReferenceSpace(XRRigidTransform) on xrReferenceSpace with too few arguments must throw TypeError
+PASS XRReferenceSpace interface: xrReferenceSpace must inherit property "onreset" with the proper type
+PASS XRBoundedReferenceSpace interface: existence and properties of interface object
+PASS XRBoundedReferenceSpace interface object length
+PASS XRBoundedReferenceSpace interface object name
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRBoundedReferenceSpace interface: attribute boundsGeometry
+PASS XRView interface: existence and properties of interface object
+PASS XRView interface object length
+PASS XRView interface object name
+PASS XRView interface: existence and properties of interface prototype object
+PASS XRView interface: existence and properties of interface prototype object's "constructor" property
+PASS XRView interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRView interface: attribute eye
+PASS XRView interface: attribute projectionMatrix
+PASS XRView interface: attribute transform
+PASS XRView interface: attribute recommendedViewportScale
+PASS XRView interface: operation requestViewportScale(double?)
+PASS XRViewport interface: existence and properties of interface object
+PASS XRViewport interface object length
+PASS XRViewport interface object name
+PASS XRViewport interface: existence and properties of interface prototype object
+PASS XRViewport interface: existence and properties of interface prototype object's "constructor" property
+PASS XRViewport interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRViewport interface: attribute x
+PASS XRViewport interface: attribute y
+PASS XRViewport interface: attribute width
+PASS XRViewport interface: attribute height
+PASS XRRigidTransform interface: existence and properties of interface object
+PASS XRRigidTransform interface object length
+PASS XRRigidTransform interface object name
+PASS XRRigidTransform interface: existence and properties of interface prototype object
+PASS XRRigidTransform interface: existence and properties of interface prototype object's "constructor" property
+PASS XRRigidTransform interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRRigidTransform interface: attribute position
+PASS XRRigidTransform interface: attribute orientation
+PASS XRRigidTransform interface: attribute matrix
+PASS XRRigidTransform interface: attribute inverse
+PASS XRRigidTransform must be primary interface of new XRRigidTransform()
+PASS Stringification of new XRRigidTransform()
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "position" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "orientation" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "matrix" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "inverse" with the proper type
+PASS XRPose interface: existence and properties of interface object
+PASS XRPose interface object length
+PASS XRPose interface object name
+PASS XRPose interface: existence and properties of interface prototype object
+PASS XRPose interface: existence and properties of interface prototype object's "constructor" property
+PASS XRPose interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRPose interface: attribute transform
+FAIL XRPose interface: attribute linearVelocity assert_true: The prototype object must have a property "linearVelocity" expected true got false
+FAIL XRPose interface: attribute angularVelocity assert_true: The prototype object must have a property "angularVelocity" expected true got false
+PASS XRPose interface: attribute emulatedPosition
+PASS XRViewerPose interface: existence and properties of interface object
+PASS XRViewerPose interface object length
+PASS XRViewerPose interface object name
+PASS XRViewerPose interface: existence and properties of interface prototype object
+PASS XRViewerPose interface: existence and properties of interface prototype object's "constructor" property
+PASS XRViewerPose interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRViewerPose interface: attribute views
+PASS XRInputSource interface: existence and properties of interface object
+PASS XRInputSource interface object length
+PASS XRInputSource interface object name
+PASS XRInputSource interface: existence and properties of interface prototype object
+PASS XRInputSource interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSource interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSource interface: attribute handedness
+PASS XRInputSource interface: attribute targetRayMode
+PASS XRInputSource interface: attribute targetRaySpace
+PASS XRInputSource interface: attribute gripSpace
+PASS XRInputSource interface: attribute profiles
+PASS XRInputSourceArray interface: existence and properties of interface object
+PASS XRInputSourceArray interface object length
+PASS XRInputSourceArray interface object name
+PASS XRInputSourceArray interface: existence and properties of interface prototype object
+PASS XRInputSourceArray interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourceArray interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourceArray interface: iterable<XRInputSource>
+PASS XRInputSourceArray interface: attribute length
+PASS XRInputSourceArray must be primary interface of xrInputSourceArray
+PASS Stringification of xrInputSourceArray
+PASS XRInputSourceArray interface: xrInputSourceArray must inherit property "length" with the proper type
+PASS XRLayer interface: existence and properties of interface object
+PASS XRLayer interface object length
+PASS XRLayer interface object name
+PASS XRLayer interface: existence and properties of interface prototype object
+PASS XRLayer interface: existence and properties of interface prototype object's "constructor" property
+PASS XRLayer interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRWebGLLayer interface: existence and properties of interface object
+PASS XRWebGLLayer interface object length
+PASS XRWebGLLayer interface object name
+PASS XRWebGLLayer interface: existence and properties of interface prototype object
+PASS XRWebGLLayer interface: existence and properties of interface prototype object's "constructor" property
+PASS XRWebGLLayer interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRWebGLLayer interface: attribute antialias
+PASS XRWebGLLayer interface: attribute ignoreDepthValues
+FAIL XRWebGLLayer interface: attribute fixedFoveation assert_true: The prototype object must have a property "fixedFoveation" expected true got false
+PASS XRWebGLLayer interface: attribute framebuffer
+PASS XRWebGLLayer interface: attribute framebufferWidth
+PASS XRWebGLLayer interface: attribute framebufferHeight
+PASS XRWebGLLayer interface: operation getViewport(XRView)
+PASS XRWebGLLayer interface: operation getNativeFramebufferScaleFactor(XRSession)
+FAIL XRWebGLLayer must be primary interface of xrWebGLLayer assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL Stringification of xrWebGLLayer assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "antialias" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "ignoreDepthValues" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "fixedFoveation" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebuffer" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebufferWidth" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebufferHeight" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "getViewport(XRView)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: calling getViewport(XRView) on xrWebGLLayer with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "getNativeFramebufferScaleFactor(XRSession)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: calling getNativeFramebufferScaleFactor(XRSession) on xrWebGLLayer with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+PASS XRSessionEvent interface: existence and properties of interface object
+PASS XRSessionEvent interface object length
+PASS XRSessionEvent interface object name
+PASS XRSessionEvent interface: existence and properties of interface prototype object
+PASS XRSessionEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSessionEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSessionEvent interface: attribute session
+PASS XRSessionEvent must be primary interface of xrSessionEvent
+PASS Stringification of xrSessionEvent
+PASS XRSessionEvent interface: xrSessionEvent must inherit property "session" with the proper type
+PASS XRInputSourceEvent interface: existence and properties of interface object
+PASS XRInputSourceEvent interface object length
+PASS XRInputSourceEvent interface object name
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourceEvent interface: attribute frame
+PASS XRInputSourceEvent interface: attribute inputSource
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface object
+PASS XRInputSourcesChangeEvent interface object length
+PASS XRInputSourcesChangeEvent interface object name
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourcesChangeEvent interface: attribute session
+PASS XRInputSourcesChangeEvent interface: attribute added
+PASS XRInputSourcesChangeEvent interface: attribute removed
+PASS XRInputSourcesChangeEvent must be primary interface of xrInputSourcesChangeEvent
+PASS Stringification of xrInputSourcesChangeEvent
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "session" with the proper type
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "added" with the proper type
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "removed" with the proper type
+PASS XRReferenceSpaceEvent interface: existence and properties of interface object
+PASS XRReferenceSpaceEvent interface object length
+PASS XRReferenceSpaceEvent interface object name
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpaceEvent interface: attribute referenceSpace
+PASS XRReferenceSpaceEvent interface: attribute transform
+FAIL XRPermissionStatus interface: existence and properties of interface object assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface object length assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface object name assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: attribute granted assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL WebGLRenderingContextBase interface: webGLRenderingContextBase must inherit property "makeXRCompatible()" with the proper type assert_inherits: provided value is not an object
+PASS WebGLRenderingContext interface: operation makeXRCompatible()
+PASS Navigator interface: attribute xr
+PASS Navigator interface: navigator must inherit property "xr" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt
new file mode 100644
index 0000000..081389a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl assert_equals: Should get InvalidStateError for creating with inline session. expected "InvalidStateError" but got "TypeError"
+FAIL Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl2 assert_equals: Should get InvalidStateError for creating with inline session. expected "InvalidStateError" but got "TypeError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt
new file mode 100644
index 0000000..f023e3c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightEstimate rejects if probe is from wrong session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightEstimate rejects if probe is from wrong session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt
new file mode 100644
index 0000000..ee4a6b7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Cannot get XrLightEstimate from stale frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Cannot get XrLightEstimate from stale frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt
new file mode 100644
index 0000000..88f2ad1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Can get XRLightEstimates during frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Can get XRLightEstimates during frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt
new file mode 100644
index 0000000..295c4b9e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightProbe rejects on an ended session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightProbe rejects on an ended session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt
new file mode 100644
index 0000000..ab2eeb4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightProbe rejects if not enabled on session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightProbe rejects if not enabled on session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt
new file mode 100644
index 0000000..7d24f89
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Can create valid XRLightProbe objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Can create valid XRLightProbe objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt
new file mode 100644
index 0000000..c0d0002e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Test that getReflectionCubeMap returns or throws appropriately without a reflection map. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Test that getReflectionCubeMap returns or throws appropriately without a reflection map. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt
new file mode 100644
index 0000000..38a9cb1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Navigator.xr meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Navigator.xr meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_update.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_update.https-expected.txt
new file mode 100644
index 0000000..2b80ba12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_update.https-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+FAIL updateRenderState handles appropriately ended sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately ended sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately baseLayers created with different sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately baseLayers created with different sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit with no params - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit with no params - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit params - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit params - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt
new file mode 100644
index 0000000..b0bbf762
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on immersively sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on immersively sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt
new file mode 100644
index 0000000..cf7afdd0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt
new file mode 100644
index 0000000..380004c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Creating a webgl context with no device promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Creating a webgl2 context with no device promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL An XR-compatible webgl context can be created promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL An XR-compatible webgl2 context can be created promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt
new file mode 100644
index 0000000..b4743d2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL A lost webgl context should not be able to set xr compatibility promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL A lost webgl2 context should not be able to set xr compatibility promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt
new file mode 100644
index 0000000..308bd1b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Verify promise from a non-reentrant call to makeXRCompatible() is resolved for webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promise from a non-reentrant call to makeXRCompatible() is resolved for webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promises from reentrant calls to makeXRCompatible() are resolved for webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promises from reentrant calls to makeXRCompatible() are resolved for webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt
new file mode 100644
index 0000000..7e1eb6f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+PASS Validate isSessionSupported behavior without xr-spatial-tracking policy
+PASS Validate requestSession behavior without xr-spatial-tracking policy
+PASS Validate devicechange event behavior without xr-spatial-tracking policy
+FAIL Validate xr compatibility requests without xr-spatial-tracking policy Cannot read properties of null (reading 'getContextAttributes')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt
new file mode 100644
index 0000000..6134e72
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL 'XRBoundedReferenceSpace updates properly when the changes are applied - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'XRBoundedReferenceSpace updates properly when the changes are applied - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt
new file mode 100644
index 0000000..808e206
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Immersive session ends when device is disconnected - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session ends when device is disconnected - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt
new file mode 100644
index 0000000..59835358
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession resolves when supported - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession resolves when supported - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt
new file mode 100644
index 0000000..ab975b7f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary with empty feature lists - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary with empty feature lists - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown strings in optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown strings in optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown objects in optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown objects in optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt
new file mode 100644
index 0000000..6effd0e4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getPose works for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt
new file mode 100644
index 0000000..7fc1bf3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose(refSpace) matches getPose(viewer, refSpace). - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose(refSpace) matches getPose(viewer, refSpace). - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt
new file mode 100644
index 0000000..68c0dd5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose(viewerSpace) & getPose(space, space) return identity even during tracking loss - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose(viewerSpace) & getPose(space, space) return identity even during tracking loss - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt
new file mode 100644
index 0000000..5dc75bf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt
new file mode 100644
index 0000000..a0f5632
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame.session meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.session meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt
new file mode 100644
index 0000000..28d8094
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources can be properly added and removed from the session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources can be properly added and removed from the session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt
new file mode 100644
index 0000000..bffc0df6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Poses from XRInputSource.gripSpace have emulatedPosition set properly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Poses from XRInputSource.gripSpace have emulatedPosition set properly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt
new file mode 100644
index 0000000..4c284b64
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Poses between targetRaySpace and gripSpace can be obtained and behave correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Poses between targetRaySpace and gripSpace can be obtained and behave correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt
new file mode 100644
index 0000000..c255249
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's profiles list can be set - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's profiles list can be set - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt
new file mode 100644
index 0000000..f186f5a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSource attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSource attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt
new file mode 100644
index 0000000..763191c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRPose.transform meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRPose.transform meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt
new file mode 100644
index 0000000..4d990b9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Updating XRReferenceSpace origin offset updates view and input matrices. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Updating XRReferenceSpace origin offset updates view and input matrices. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt
new file mode 100644
index 0000000..b171f324
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt
new file mode 100644
index 0000000..c342fdcdf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Creating XRReferenceSpace origin offset off of `viewer` space works. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Creating XRReferenceSpace origin offset off of `viewer` space works. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt
new file mode 100644
index 0000000..13a5ab0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt
new file mode 100644
index 0000000..9e387bcd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform constructor works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform constructor works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt
new file mode 100644
index 0000000..a3d1611
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform inverse works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform inverse works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt
new file mode 100644
index 0000000..fc78a2d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform position and orientation meet [SameObject] requirements - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform position and orientation meet [SameObject] requirements - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt
new file mode 100644
index 0000000..3113a90d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt
new file mode 100644
index 0000000..bcf3d43
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on immersive testSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on immersive testSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on non-immersive testSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on non-immersive testSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt
new file mode 100644
index 0000000..e9c2b095
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Validate enabledFeatures on XRSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Validate enabledFeatures on XRSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_end.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_end.https-expected.txt
new file mode 100644
index 0000000..e0159de
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_end.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL end event fires when immersive session ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when immersive session ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when non-immersive session ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when non-immersive session ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt
new file mode 100644
index 0000000..b04825b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Calling end during an input callback stops processing at the right time - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Calling end during an input callback stops processing at the right time - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt
new file mode 100644
index 0000000..70f1143b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame calls the provided callback for an immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback for an immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback a non-immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback a non-immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt
new file mode 100644
index 0000000..ee3f0af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL RequestAnimationFrame resolves with good data - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL RequestAnimationFrame resolves with good data - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt
new file mode 100644
index 0000000..659cc9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt
new file mode 100644
index 0000000..69123e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose updates on the next frame for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt
new file mode 100644
index 0000000..4577bfad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Immersive XRSession requestReferenceSpace returns expected objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive XRSession requestReferenceSpace returns expected objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive XRSession requestReferenceSpace returns expected objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive XRSession requestReferenceSpace returns expected objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt
new file mode 100644
index 0000000..0cc1fed
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt
@@ -0,0 +1,27 @@
+This is a testharness.js-based test.
+FAIL Non-immersive session supports viewer space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports viewer space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports viewer space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports viewer space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when optional - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when optional - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local-floor space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local-floor space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when optional - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when optional - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects bounded-floor space even when requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects bounded-floor space even when requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects unbounded space even when requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects unbounded space even when requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects local space if not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects local space if not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session rejects local-floor space if not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session rejects local-floor space if not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt
new file mode 100644
index 0000000..37665786
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Create new session in OnSessionEnded event - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create new session in OnSessionEnded event - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create mew session in end promise - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create mew session in end promise - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt
new file mode 100644
index 0000000..7b12b840
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRSession attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt
new file mode 100644
index 0000000..ffbd4057
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Identity reference space provides correct poses for inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt
new file mode 100644
index 0000000..9172bc83
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures that the XRSession's visibilityState is correctly reported and that the associated visibilitychange event fires. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures that the XRSession's visibilityState is correctly reported and that the associated visibilitychange event fires. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt
new file mode 100644
index 0000000..9a4ca29
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt
new file mode 100644
index 0000000..168fa8c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRView.eye is correct for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_match.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_match.https-expected.txt
new file mode 100644
index 0000000..b8b109b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_match.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame contains the expected views - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame contains the expected views - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt
new file mode 100644
index 0000000..30c220c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRView projection matrices update near and far depths on the next frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView projection matrices update near and far depths on the next frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt
new file mode 100644
index 0000000..b77a377
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRView attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt
new file mode 100644
index 0000000..527f0b6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Only primary views are returned if secondary views are not requested for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views only returns primary views for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views only returns primary views for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views returns both primary and secondary views for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views returns both primary and secondary views for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt
new file mode 100644
index 0000000..b6127ca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRViewerPose.views meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewerPose.views meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt
new file mode 100644
index 0000000..46c3616
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRViewport attributes are valid - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt
new file mode 100644
index 0000000..5504e8b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl assert_unreached: Inline XRWebGLLayers should not fail when created with a context that is not XRCompatible Reached unreachable code
+FAIL Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl2 assert_unreached: Inline XRWebGLLayers should not fail when created with a context that is not XRCompatible Reached unreachable code
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt
new file mode 100644
index 0000000..771907e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt
new file mode 100644
index 0000000..d07d76d9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRWebGLLayer.framebuffer meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer.framebuffer meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt
new file mode 100644
index 0000000..2a51fe6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure framebuffer scaling works as expected. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure framebuffer scaling works as expected. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt
new file mode 100644
index 0000000..3f6935b28
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt
new file mode 100644
index 0000000..02f34b5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that the framebuffer given by the WebGL layer works with stencil for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer works with stencil for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt
new file mode 100644
index 0000000..7067999
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt
new file mode 100644
index 0000000..e6ee8bb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt
@@ -0,0 +1,31 @@
+This is a testharness.js-based test.
+FAIL requestViewportScale valid viewport for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt
new file mode 100644
index 0000000..59e1191
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame's trackedAnchors is empty when the feature was requested & device returned null anchorsData - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested & device returned null anchorsData - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt
new file mode 100644
index 0000000..bfabc2e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test source cancellation propagates to the device when manually cancelled. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when manually cancelled. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when manually cancelled. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when manually cancelled. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when relying on GC - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when relying on GC - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when relying on GC - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when relying on GC - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt
new file mode 100644
index 0000000..88095a7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensures lighting estimation feature works when enabled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures lighting estimation feature works when enabled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure lighting estimation feature does not work when not explicitly enabled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure lighting estimation feature does not work when not explicitly enabled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt
new file mode 100644
index 0000000..cf7afdd0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt
new file mode 100644
index 0000000..3437a67
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getPose works between eye-level and floor-level spaces - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works between eye-level and floor-level spaces - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt
new file mode 100644
index 0000000..3c88adb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Immersive session ends if data provider disconnects. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session ends if data provider disconnects. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt
new file mode 100644
index 0000000..6611cd3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Inline session ends if magic window data provider disconnects. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Inline session ends if magic window data provider disconnects. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt
new file mode 100644
index 0000000..1a790c0d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL environmentBlendMode is correct for a VR device in immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt
new file mode 100644
index 0000000..889c3da
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Outstanding promises get rejected if environmentProvider disconnects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Outstanding promises get rejected if environmentProvider disconnects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt
new file mode 100644
index 0000000..493b0ca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Blink appropriately reports when frames are throttled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Blink appropriately reports when frames are throttled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt
new file mode 100644
index 0000000..27d49e0c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL A frame should be submitted if the base layer was written to during requestAnimationFrame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL A frame should be submitted if the base layer was written to during requestAnimationFrame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt
new file mode 100644
index 0000000..812af3a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Test that xrview.projection being detached doesn't cause a crash. promise_test: Unhandled rejection with value: object "TypeError: Failed to construct 'XRWebGLLayer': The provided value is not of type '(WebGL2RenderingContext or WebGLRenderingContext)'."
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
new file mode 100644
index 0000000..e085798
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Test that getContext with un-supported string throws a TypeError.
+FAIL Test that getContext with supported string returns correct results assert_true: expected true got false
+FAIL Test that getContext twice with different context type returns null the second time assert_equals: expected null but got object "[object OffscreenCanvasRenderingContext2D]"
+PASS Test that 2dcontext.canvas should return the original OffscreenCanvas
+FAIL Test that webglcontext.canvas should return the original OffscreenCanvas Cannot read properties of null (reading 'canvas')
+PASS Test that OffscreenCanvasRenderingContext2D with alpha disabled makes the OffscreenCanvas opaque
+PASS Test that OffscreenCanvasRenderingContext2D with alpha enabled preserves the alpha
+PASS Test that 'alpha' context creation attribute is true by default
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt
new file mode 100644
index 0000000..e085798
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Test that getContext with un-supported string throws a TypeError.
+FAIL Test that getContext with supported string returns correct results assert_true: expected true got false
+FAIL Test that getContext twice with different context type returns null the second time assert_equals: expected null but got object "[object OffscreenCanvasRenderingContext2D]"
+PASS Test that 2dcontext.canvas should return the original OffscreenCanvas
+FAIL Test that webglcontext.canvas should return the original OffscreenCanvas Cannot read properties of null (reading 'canvas')
+PASS Test that OffscreenCanvasRenderingContext2D with alpha disabled makes the OffscreenCanvas opaque
+PASS Test that OffscreenCanvasRenderingContext2D with alpha enabled preserves the alpha
+PASS Test that 'alpha' context creation attribute is true by default
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt
new file mode 100644
index 0000000..8681bd95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Test that transferToImageBitmap returns an ImageBitmap with correct width and height Failed to execute 'transferToImageBitmap' on 'OffscreenCanvas': Cannot transfer an ImageBitmap from an OffscreenCanvas with no context
+PASS Test that transferToImageBitmap returns an ImageBitmap with correct color
+PASS Test that transferToImageBitmap won't change context's property
+PASS Test that transferToImageBitmap preserves transform
+PASS Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception
+PASS Test that transferToImageBitmap without a context throws an exception
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt
new file mode 100644
index 0000000..0062a95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Test that transferToImageBitmap returns an ImageBitmap with correct width and height in a worker assert_unreached: error Reached unreachable code
+PASS Test that transferToImageBitmap returns an ImageBitmap with correct color in a worker
+PASS Test that call transferToImageBitmap twice returns an ImageBitmap with correct color in a worker
+PASS Test that call transferToImageBitmap twice on a alpha-disabled context returns an ImageBitmap with correct color in a worker
+PASS Test that transferToImageBitmap won't change context's property in a worker
+PASS Test that call transferToImageBitmap preserves transform in a worker
+PASS Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception in a worker
+PASS Test that call transferToImageBitmap without a context throws an exception in a worker
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt
new file mode 100644
index 0000000..9ada9e2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+PASS Test that OffscreenCanvas's size is correct after being transferred from a worker.
+FAIL Test that transfer an OffscreenCanvas that has a 2d context throws exception in a worker. assert_true: expected true got false
+FAIL Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker. assert_true: expected true got object "[object OffscreenCanvas]"
+PASS Test that transfer an OffscreenCanvas twice throws exception in a worker.
+PASS Test that calling getContext('2d') on a detached OffscreenCanvas throws exception in a worker.
+PASS Test that calling getContext('webgl') on a detached OffscreenCanvas throws exception in a worker.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt
new file mode 100644
index 0000000..50d8f8f7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+NOTRUN First contentful paint fires due to webgl2 canvas render. WebGL 2 Canvas isn't supported.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt
new file mode 100644
index 0000000..15d046c3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Make sure video.rVFC works during a non-immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during a non-immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during an immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC works during an immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt
new file mode 100644
index 0000000..fc6ad49
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Make sure video.rVFC callbacks started during an immersive session continue after it ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Make sure video.rVFC callbacks started during an immersive session continue after it ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt
new file mode 100644
index 0000000..e809318
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL texImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texImage2D')
+FAIL texSubImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texSubImage2D')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt
new file mode 100644
index 0000000..e809318
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webcodecs/videoFrame-texImage.any.worker-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL texImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 48x36 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texSubImage2D with 480x360 srgb VideoFrame. Cannot read properties of null (reading 'VERTEX_SHADER')
+FAIL texImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texImage2D')
+FAIL texSubImage2D with a closed VideoFrame. Cannot read properties of null (reading 'texSubImage2D')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt
new file mode 100644
index 0000000..8a4b74d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor move gets propagated to anchor poses - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor move gets propagated to anchor poses - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt
new file mode 100644
index 0000000..3f29f35
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor creation with delayed success is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed success is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed failure is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation with delayed failure is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt
new file mode 100644
index 0000000..8256af3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor creation failure is handled correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor creation failure is handled correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt
new file mode 100644
index 0000000..9a688c2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures free-floating anchor state changes get propagated - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures free-floating anchor state changes get propagated - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt
new file mode 100644
index 0000000..4d04e9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_getAnchors.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame's trackedAnchors is empty when the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt
new file mode 100644
index 0000000..cad2ec62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/anchors/ar_anchor_states.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Anchor creation succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Anchor creation fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt
new file mode 100644
index 0000000..b689d65f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession accepts immersive-ar mode - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts immersive-ar mode - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+PASS Tests requestSession rejects immersive-ar mode when unsupported
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt
new file mode 100644
index 0000000..7cf63b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Tests environmentBlendMode for an AR device - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for an AR device - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for a VR device - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests environmentBlendMode for a VR device - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt
new file mode 100644
index 0000000..2d1305a3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/ar-module/xrSession_interactionMode.https-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+FAIL Tests interactionMode for an VR_HMD_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_HMD_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an VR_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_HMD_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_HMD_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for an AR_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for a INLINE_SCREEN_DEVICE - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests interactionMode for a INLINE_SCREEN_DEVICE - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt
new file mode 100644
index 0000000..108a308
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/camera-access/xrCamera_resolution.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRCamera object is present and carries expected dimensions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRCamera object is present and carries expected dimensions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt
new file mode 100644
index 0000000..20eba12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures depth data is not available when cleared in the controller, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures depth data is not available when cleared in the controller, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt
new file mode 100644
index 0000000..728da41
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures getDepthInformation() throws when not run in an active frame, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures getDepthInformation() throws when not run in an active frame, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt
new file mode 100644
index 0000000..a19f085
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures XRWebGLDepthInformation is not obtainable in `cpu-optimized` usage mode - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures XRWebGLDepthInformation is not obtainable in `cpu-optimized` usage mode - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt
new file mode 100644
index 0000000..12ccf7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures depth data is returned and values match expectation, cpu-optimized, luminance-alpha. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures depth data is returned and values match expectation, cpu-optimized, luminance-alpha. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt
new file mode 100644
index 0000000..61a5fff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures getDepthInformation() throws when run with stale XRView, `cpu-optimized` - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures getDepthInformation() throws when run with stale XRView, `cpu-optimized` - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt
new file mode 100644
index 0000000..de953cb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLBinding.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLBinding.getDepthInformation() rejects if depth sensing is not enabled on a session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt
new file mode 100644
index 0000000..53fe1720
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay.https-expected.txt
@@ -0,0 +1,14 @@
+This is a testharness.js-based test.
+PASS Ensures DOM Overlay rejected without root element
+FAIL Ensures DOM Overlay feature works for immersive-ar, body element - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, body element - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, div element - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay feature works for immersive-ar, div element - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay input deduplication works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay input deduplication works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay Fullscreen API doesn't change DOM overlay - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay Fullscreen API doesn't change DOM overlay - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe are ignored - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe are ignored - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt
new file mode 100644
index 0000000..b904e6d7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures DOM Overlay interactions on cross origin iframe do not cause hit test results to come up - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures DOM Overlay interactions on cross origin iframe do not cause hit test results to come up - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt
new file mode 100644
index 0000000..17c5fc0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/dom-overlay/nested_fullscreen.https-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS fullscreen setup
+FAIL Check XR session from fullscreen - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Check XR session from fullscreen - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt
new file mode 100644
index 0000000..0b76a453
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_source_recreation.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Input sources are re-created when handedness or target ray mode changes - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Input sources are re-created when handedness or target ray mode changes - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt
new file mode 100644
index 0000000..412e308
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_input_sources_change.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Transient input sources fire events in the right order - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient input sources fire events in the right order - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt
new file mode 100644
index 0000000..f84c1f1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_referenceSpace_reset_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRSession resetpose from a device properly fires off the right events for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession resetpose from a device properly fires off the right events for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select.https-expected.txt
new file mode 100644
index 0000000..0c27143e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources primary input presses properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources primary input presses properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt
new file mode 100644
index 0000000..1e621b7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_select_subframe.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures that an XRInputSources primary input being pressed and released in the space of a single frame properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures that an XRInputSources primary input being pressed and released in the space of a single frame properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt
new file mode 100644
index 0000000..0c27143e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/events_session_squeeze.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources primary input presses properly fires off the right events - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources primary input presses properly fires off the right events - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt
new file mode 100644
index 0000000..228c15f2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/exclusive_requestFrame_nolayer.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for non immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame must fail if the session has no baseLayer for non immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt
new file mode 100644
index 0000000..e210316
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's gamepad gets disconnected when the input source is removed - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's gamepad gets disconnected when the input source is removed - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt
new file mode 100644
index 0000000..1ba2ad4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's gamepad properly registers input - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's gamepad properly registers input - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt
new file mode 100644
index 0000000..19f280ac7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_handedness.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources properly communicate their handedness - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources properly communicate their handedness - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt
new file mode 100644
index 0000000..5f492b1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getInputPose_pointer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources with a target ray mode of 'tracked-pointer' properly communicate their poses - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources with a target ray mode of 'tracked-pointer' properly communicate their poses - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt
new file mode 100644
index 0000000..42437dad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/getViewerPose_emulatedPosition.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose has emulatedPosition set properly. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose has emulatedPosition set properly. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt
new file mode 100644
index 0000000..16e1776
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_source_cancel.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test source cancellation works when the session has not ended. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has not ended. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has not ended. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has not ended. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation works when the session has ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation works when the session has ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt
new file mode 100644
index 0000000..bf8d56ee
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to hit test works with an XRSpace from input source - no move - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - no move - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - 1 result - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with an XRSpace from input source - after move - 1 result - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt
new file mode 100644
index 0000000..e41a8b0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to hit test works with viewer space - straight ahead - plane - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight ahead - plane - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight up - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with viewer space - straight up - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local-floor space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to hit test works with local-floor space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt
new file mode 100644
index 0000000..23a01cef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Hit test subscription succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Hit test subscription fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt
new file mode 100644
index 0000000..93b3efc8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Transient hit test subscription succeeds if the feature was requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription succeeds if the feature was requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription fails if the feature was not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient hit test subscription fails if the feature was not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient test subscription fails if the feature was requested but the session already ended - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Transient test subscription fails if the feature was requested but the session already ended - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt
new file mode 100644
index 0000000..e8c17df
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - no move - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - no move - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - no results - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - no results - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - 1 result - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures subscription to transient hit test works with an XRSpace from input source - after move - 1 result - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt
new file mode 100644
index 0000000..9600a0f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/hit-test/ar_hittest_subscription_unlocalizable.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test result returns null pose w/unlocalizable space - viewer space - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test result returns null pose w/unlocalizable space - viewer space - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/idlharness.https.window-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/idlharness.https.window-expected.txt
new file mode 100644
index 0000000..bfdde4a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/idlharness.https.window-expected.txt
@@ -0,0 +1,301 @@
+This is a testharness.js-based test.
+Found 297 tests; 262 PASS, 35 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL idl_test setup promise_test: Unhandled rejection with value: object "TypeError: Failed to construct 'XRWebGLLayer': The provided value is not of type '(WebGL2RenderingContext or WebGLRenderingContext)'."
+PASS idl_test validation
+PASS Partial interface Navigator: original interface defined
+PASS Partial interface Navigator: member names are unique
+PASS Partial dictionary WebGLContextAttributes: original dictionary defined
+PASS Partial dictionary WebGLContextAttributes: member names are unique
+PASS Partial interface mixin WebGLRenderingContextBase: original interface mixin defined
+PASS Partial interface mixin WebGLRenderingContextBase: member names are unique
+PASS Partial interface Navigator[2]: member names are unique
+PASS Partial interface Navigator[3]: member names are unique
+PASS Partial interface mixin NavigatorID: member names are unique
+PASS WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique
+FAIL WebGLRenderingContext includes WebGLRenderingContextOverloads: member names are unique assert_true: member bufferData is unique expected true got false
+PASS Navigator includes NavigatorID: member names are unique
+PASS Navigator includes NavigatorLanguage: member names are unique
+PASS Navigator includes NavigatorOnLine: member names are unique
+PASS Navigator includes NavigatorContentUtils: member names are unique
+PASS Navigator includes NavigatorCookies: member names are unique
+PASS Navigator includes NavigatorPlugins: member names are unique
+PASS Navigator includes NavigatorConcurrentHardware: member names are unique
+PASS XRSystem interface: existence and properties of interface object
+PASS XRSystem interface object length
+PASS XRSystem interface object name
+PASS XRSystem interface: existence and properties of interface prototype object
+PASS XRSystem interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSystem interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSystem interface: operation isSessionSupported(XRSessionMode)
+PASS XRSystem interface: operation requestSession(XRSessionMode, optional XRSessionInit)
+PASS XRSystem interface: attribute ondevicechange
+PASS XRSession interface: existence and properties of interface object
+PASS XRSession interface object length
+PASS XRSession interface object name
+PASS XRSession interface: existence and properties of interface prototype object
+PASS XRSession interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSession interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSession interface: attribute visibilityState
+FAIL XRSession interface: attribute frameRate assert_true: The prototype object must have a property "frameRate" expected true got false
+FAIL XRSession interface: attribute supportedFrameRates assert_true: The prototype object must have a property "supportedFrameRates" expected true got false
+PASS XRSession interface: attribute renderState
+PASS XRSession interface: attribute inputSources
+PASS XRSession interface: attribute enabledFeatures
+PASS XRSession interface: operation updateRenderState(optional XRRenderStateInit)
+FAIL XRSession interface: operation updateTargetFrameRate(float) assert_own_property: interface prototype object missing non-static operation expected property "updateTargetFrameRate" missing
+PASS XRSession interface: operation requestReferenceSpace(XRReferenceSpaceType)
+PASS XRSession interface: operation requestAnimationFrame(XRFrameRequestCallback)
+PASS XRSession interface: operation cancelAnimationFrame(unsigned long)
+PASS XRSession interface: operation end()
+PASS XRSession interface: attribute onend
+PASS XRSession interface: attribute oninputsourceschange
+PASS XRSession interface: attribute onselect
+PASS XRSession interface: attribute onselectstart
+PASS XRSession interface: attribute onselectend
+PASS XRSession interface: attribute onsqueeze
+PASS XRSession interface: attribute onsqueezestart
+PASS XRSession interface: attribute onsqueezeend
+PASS XRSession interface: attribute onvisibilitychange
+FAIL XRSession interface: attribute onframeratechange assert_true: The prototype object must have a property "onframeratechange" expected true got false
+PASS XRSession must be primary interface of xrSession
+PASS Stringification of xrSession
+PASS XRSession interface: xrSession must inherit property "visibilityState" with the proper type
+FAIL XRSession interface: xrSession must inherit property "frameRate" with the proper type assert_inherits: property "frameRate" not found in prototype chain
+FAIL XRSession interface: xrSession must inherit property "supportedFrameRates" with the proper type assert_inherits: property "supportedFrameRates" not found in prototype chain
+PASS XRSession interface: xrSession must inherit property "renderState" with the proper type
+PASS XRSession interface: xrSession must inherit property "inputSources" with the proper type
+PASS XRSession interface: xrSession must inherit property "enabledFeatures" with the proper type
+PASS XRSession interface: xrSession must inherit property "updateRenderState(optional XRRenderStateInit)" with the proper type
+PASS XRSession interface: calling updateRenderState(optional XRRenderStateInit) on xrSession with too few arguments must throw TypeError
+FAIL XRSession interface: xrSession must inherit property "updateTargetFrameRate(float)" with the proper type assert_inherits: property "updateTargetFrameRate" not found in prototype chain
+FAIL XRSession interface: calling updateTargetFrameRate(float) on xrSession with too few arguments must throw TypeError assert_inherits: property "updateTargetFrameRate" not found in prototype chain
+PASS XRSession interface: xrSession must inherit property "requestReferenceSpace(XRReferenceSpaceType)" with the proper type
+PASS XRSession interface: calling requestReferenceSpace(XRReferenceSpaceType) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "requestAnimationFrame(XRFrameRequestCallback)" with the proper type
+PASS XRSession interface: calling requestAnimationFrame(XRFrameRequestCallback) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "cancelAnimationFrame(unsigned long)" with the proper type
+PASS XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError
+PASS XRSession interface: xrSession must inherit property "end()" with the proper type
+PASS XRSession interface: xrSession must inherit property "onend" with the proper type
+PASS XRSession interface: xrSession must inherit property "oninputsourceschange" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselect" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselectstart" with the proper type
+PASS XRSession interface: xrSession must inherit property "onselectend" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueeze" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueezestart" with the proper type
+PASS XRSession interface: xrSession must inherit property "onsqueezeend" with the proper type
+PASS XRSession interface: xrSession must inherit property "onvisibilitychange" with the proper type
+FAIL XRSession interface: xrSession must inherit property "onframeratechange" with the proper type assert_inherits: property "onframeratechange" not found in prototype chain
+PASS XRRenderState interface: existence and properties of interface object
+PASS XRRenderState interface object length
+PASS XRRenderState interface object name
+PASS XRRenderState interface: existence and properties of interface prototype object
+PASS XRRenderState interface: existence and properties of interface prototype object's "constructor" property
+PASS XRRenderState interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRRenderState interface: attribute depthNear
+PASS XRRenderState interface: attribute depthFar
+PASS XRRenderState interface: attribute inlineVerticalFieldOfView
+PASS XRRenderState interface: attribute baseLayer
+PASS XRRenderState must be primary interface of xrRenderState
+PASS Stringification of xrRenderState
+PASS XRRenderState interface: xrRenderState must inherit property "depthNear" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "depthFar" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "inlineVerticalFieldOfView" with the proper type
+PASS XRRenderState interface: xrRenderState must inherit property "baseLayer" with the proper type
+PASS XRFrame interface: existence and properties of interface object
+PASS XRFrame interface object length
+PASS XRFrame interface object name
+PASS XRFrame interface: existence and properties of interface prototype object
+PASS XRFrame interface: existence and properties of interface prototype object's "constructor" property
+PASS XRFrame interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRFrame interface: attribute session
+FAIL XRFrame interface: attribute predictedDisplayTime assert_true: The prototype object must have a property "predictedDisplayTime" expected true got false
+PASS XRFrame interface: operation getViewerPose(XRReferenceSpace)
+PASS XRFrame interface: operation getPose(XRSpace, XRSpace)
+PASS XRSpace interface: existence and properties of interface object
+PASS XRSpace interface object length
+PASS XRSpace interface object name
+PASS XRSpace interface: existence and properties of interface prototype object
+PASS XRSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpace interface: existence and properties of interface object
+PASS XRReferenceSpace interface object length
+PASS XRReferenceSpace interface object name
+PASS XRReferenceSpace interface: existence and properties of interface prototype object
+PASS XRReferenceSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRReferenceSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpace interface: operation getOffsetReferenceSpace(XRRigidTransform)
+PASS XRReferenceSpace interface: attribute onreset
+PASS XRReferenceSpace must be primary interface of xrReferenceSpace
+PASS Stringification of xrReferenceSpace
+PASS XRReferenceSpace interface: xrReferenceSpace must inherit property "getOffsetReferenceSpace(XRRigidTransform)" with the proper type
+PASS XRReferenceSpace interface: calling getOffsetReferenceSpace(XRRigidTransform) on xrReferenceSpace with too few arguments must throw TypeError
+PASS XRReferenceSpace interface: xrReferenceSpace must inherit property "onreset" with the proper type
+PASS XRBoundedReferenceSpace interface: existence and properties of interface object
+PASS XRBoundedReferenceSpace interface object length
+PASS XRBoundedReferenceSpace interface object name
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object's "constructor" property
+PASS XRBoundedReferenceSpace interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRBoundedReferenceSpace interface: attribute boundsGeometry
+PASS XRView interface: existence and properties of interface object
+PASS XRView interface object length
+PASS XRView interface object name
+PASS XRView interface: existence and properties of interface prototype object
+PASS XRView interface: existence and properties of interface prototype object's "constructor" property
+PASS XRView interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRView interface: attribute eye
+PASS XRView interface: attribute projectionMatrix
+PASS XRView interface: attribute transform
+PASS XRView interface: attribute recommendedViewportScale
+PASS XRView interface: operation requestViewportScale(double?)
+PASS XRViewport interface: existence and properties of interface object
+PASS XRViewport interface object length
+PASS XRViewport interface object name
+PASS XRViewport interface: existence and properties of interface prototype object
+PASS XRViewport interface: existence and properties of interface prototype object's "constructor" property
+PASS XRViewport interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRViewport interface: attribute x
+PASS XRViewport interface: attribute y
+PASS XRViewport interface: attribute width
+PASS XRViewport interface: attribute height
+PASS XRRigidTransform interface: existence and properties of interface object
+PASS XRRigidTransform interface object length
+PASS XRRigidTransform interface object name
+PASS XRRigidTransform interface: existence and properties of interface prototype object
+PASS XRRigidTransform interface: existence and properties of interface prototype object's "constructor" property
+PASS XRRigidTransform interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRRigidTransform interface: attribute position
+PASS XRRigidTransform interface: attribute orientation
+PASS XRRigidTransform interface: attribute matrix
+PASS XRRigidTransform interface: attribute inverse
+PASS XRRigidTransform must be primary interface of new XRRigidTransform()
+PASS Stringification of new XRRigidTransform()
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "position" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "orientation" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "matrix" with the proper type
+PASS XRRigidTransform interface: new XRRigidTransform() must inherit property "inverse" with the proper type
+PASS XRPose interface: existence and properties of interface object
+PASS XRPose interface object length
+PASS XRPose interface object name
+PASS XRPose interface: existence and properties of interface prototype object
+PASS XRPose interface: existence and properties of interface prototype object's "constructor" property
+PASS XRPose interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRPose interface: attribute transform
+FAIL XRPose interface: attribute linearVelocity assert_true: The prototype object must have a property "linearVelocity" expected true got false
+FAIL XRPose interface: attribute angularVelocity assert_true: The prototype object must have a property "angularVelocity" expected true got false
+PASS XRPose interface: attribute emulatedPosition
+PASS XRViewerPose interface: existence and properties of interface object
+PASS XRViewerPose interface object length
+PASS XRViewerPose interface object name
+PASS XRViewerPose interface: existence and properties of interface prototype object
+PASS XRViewerPose interface: existence and properties of interface prototype object's "constructor" property
+PASS XRViewerPose interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRViewerPose interface: attribute views
+PASS XRInputSource interface: existence and properties of interface object
+PASS XRInputSource interface object length
+PASS XRInputSource interface object name
+PASS XRInputSource interface: existence and properties of interface prototype object
+PASS XRInputSource interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSource interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSource interface: attribute handedness
+PASS XRInputSource interface: attribute targetRayMode
+PASS XRInputSource interface: attribute targetRaySpace
+PASS XRInputSource interface: attribute gripSpace
+PASS XRInputSource interface: attribute profiles
+PASS XRInputSourceArray interface: existence and properties of interface object
+PASS XRInputSourceArray interface object length
+PASS XRInputSourceArray interface object name
+PASS XRInputSourceArray interface: existence and properties of interface prototype object
+PASS XRInputSourceArray interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourceArray interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourceArray interface: iterable<XRInputSource>
+PASS XRInputSourceArray interface: attribute length
+PASS XRInputSourceArray must be primary interface of xrInputSourceArray
+PASS Stringification of xrInputSourceArray
+PASS XRInputSourceArray interface: xrInputSourceArray must inherit property "length" with the proper type
+PASS XRLayer interface: existence and properties of interface object
+PASS XRLayer interface object length
+PASS XRLayer interface object name
+PASS XRLayer interface: existence and properties of interface prototype object
+PASS XRLayer interface: existence and properties of interface prototype object's "constructor" property
+PASS XRLayer interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRWebGLLayer interface: existence and properties of interface object
+PASS XRWebGLLayer interface object length
+PASS XRWebGLLayer interface object name
+PASS XRWebGLLayer interface: existence and properties of interface prototype object
+PASS XRWebGLLayer interface: existence and properties of interface prototype object's "constructor" property
+PASS XRWebGLLayer interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRWebGLLayer interface: attribute antialias
+PASS XRWebGLLayer interface: attribute ignoreDepthValues
+FAIL XRWebGLLayer interface: attribute fixedFoveation assert_true: The prototype object must have a property "fixedFoveation" expected true got false
+PASS XRWebGLLayer interface: attribute framebuffer
+PASS XRWebGLLayer interface: attribute framebufferWidth
+PASS XRWebGLLayer interface: attribute framebufferHeight
+PASS XRWebGLLayer interface: operation getViewport(XRView)
+PASS XRWebGLLayer interface: operation getNativeFramebufferScaleFactor(XRSession)
+FAIL XRWebGLLayer must be primary interface of xrWebGLLayer assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL Stringification of xrWebGLLayer assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "antialias" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "ignoreDepthValues" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "fixedFoveation" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebuffer" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebufferWidth" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "framebufferHeight" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "getViewport(XRView)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: calling getViewport(XRView) on xrWebGLLayer with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: xrWebGLLayer must inherit property "getNativeFramebufferScaleFactor(XRSession)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+FAIL XRWebGLLayer interface: calling getNativeFramebufferScaleFactor(XRSession) on xrWebGLLayer with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: xrWebGLLayer is not defined"
+PASS XRSessionEvent interface: existence and properties of interface object
+PASS XRSessionEvent interface object length
+PASS XRSessionEvent interface object name
+PASS XRSessionEvent interface: existence and properties of interface prototype object
+PASS XRSessionEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRSessionEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRSessionEvent interface: attribute session
+PASS XRSessionEvent must be primary interface of xrSessionEvent
+PASS Stringification of xrSessionEvent
+PASS XRSessionEvent interface: xrSessionEvent must inherit property "session" with the proper type
+PASS XRInputSourceEvent interface: existence and properties of interface object
+PASS XRInputSourceEvent interface object length
+PASS XRInputSourceEvent interface object name
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourceEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourceEvent interface: attribute frame
+PASS XRInputSourceEvent interface: attribute inputSource
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface object
+PASS XRInputSourcesChangeEvent interface object length
+PASS XRInputSourcesChangeEvent interface object name
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRInputSourcesChangeEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRInputSourcesChangeEvent interface: attribute session
+PASS XRInputSourcesChangeEvent interface: attribute added
+PASS XRInputSourcesChangeEvent interface: attribute removed
+PASS XRInputSourcesChangeEvent must be primary interface of xrInputSourcesChangeEvent
+PASS Stringification of xrInputSourcesChangeEvent
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "session" with the proper type
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "added" with the proper type
+PASS XRInputSourcesChangeEvent interface: xrInputSourcesChangeEvent must inherit property "removed" with the proper type
+PASS XRReferenceSpaceEvent interface: existence and properties of interface object
+PASS XRReferenceSpaceEvent interface object length
+PASS XRReferenceSpaceEvent interface object name
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS XRReferenceSpaceEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS XRReferenceSpaceEvent interface: attribute referenceSpace
+PASS XRReferenceSpaceEvent interface: attribute transform
+FAIL XRPermissionStatus interface: existence and properties of interface object assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface object length assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface object name assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL XRPermissionStatus interface: attribute granted assert_own_property: self does not have own property "XRPermissionStatus" expected property "XRPermissionStatus" missing
+FAIL WebGLRenderingContextBase interface: webGLRenderingContextBase must inherit property "makeXRCompatible()" with the proper type assert_inherits: provided value is not an object
+PASS WebGLRenderingContext interface: operation makeXRCompatible()
+PASS Navigator interface: attribute xr
+PASS Navigator interface: navigator must inherit property "xr" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt
new file mode 100644
index 0000000..081389a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/layers/xrWebGLBinding_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl assert_equals: Should get InvalidStateError for creating with inline session. expected "InvalidStateError" but got "TypeError"
+FAIL Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl2 assert_equals: Should get InvalidStateError for creating with inline session. expected "InvalidStateError" but got "TypeError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt
new file mode 100644
index 0000000..f023e3c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightEstimate rejects if probe is from wrong session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightEstimate rejects if probe is from wrong session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt
new file mode 100644
index 0000000..ee4a6b7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Cannot get XrLightEstimate from stale frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Cannot get XrLightEstimate from stale frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt
new file mode 100644
index 0000000..88f2ad1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Can get XRLightEstimates during frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Can get XRLightEstimates during frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt
new file mode 100644
index 0000000..295c4b9e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightProbe rejects on an ended session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightProbe rejects on an ended session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt
new file mode 100644
index 0000000..ab2eeb4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL getLightProbe rejects if not enabled on session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL getLightProbe rejects if not enabled on session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt
new file mode 100644
index 0000000..7d24f89
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Can create valid XRLightProbe objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Can create valid XRLightProbe objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt
new file mode 100644
index 0000000..c0d0002e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Test that getReflectionCubeMap returns or throws appropriately without a reflection map. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Test that getReflectionCubeMap returns or throws appropriately without a reflection map. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt
new file mode 100644
index 0000000..38a9cb1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/navigator_xr_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Navigator.xr meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Navigator.xr meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_update.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_update.https-expected.txt
new file mode 100644
index 0000000..2b80ba12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_update.https-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+FAIL updateRenderState handles appropriately ended sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately ended sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately baseLayers created with different sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately baseLayers created with different sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit with no params - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit with no params - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit params - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL updateRenderState handles appropriately XRRenderStateInit params - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt
new file mode 100644
index 0000000..b0bbf762
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on immersively sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on immersively sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt
new file mode 100644
index 0000000..cf7afdd0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/render_state_vertical_fov_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt
new file mode 100644
index 0000000..380004c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Creating a webgl context with no device promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Creating a webgl2 context with no device promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL An XR-compatible webgl context can be created promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL An XR-compatible webgl2 context can be created promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt
new file mode 100644
index 0000000..b4743d2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL A lost webgl context should not be able to set xr compatibility promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL A lost webgl2 context should not be able to set xr compatibility promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt
new file mode 100644
index 0000000..308bd1b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Verify promise from a non-reentrant call to makeXRCompatible() is resolved for webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promise from a non-reentrant call to makeXRCompatible() is resolved for webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promises from reentrant calls to makeXRCompatible() are resolved for webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+FAIL Verify promises from reentrant calls to makeXRCompatible() are resolved for webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'getContextAttributes')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt
new file mode 100644
index 0000000..7e1eb6f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/webxr_feature_policy.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+PASS Validate isSessionSupported behavior without xr-spatial-tracking policy
+PASS Validate requestSession behavior without xr-spatial-tracking policy
+PASS Validate devicechange event behavior without xr-spatial-tracking policy
+FAIL Validate xr compatibility requests without xr-spatial-tracking policy Cannot read properties of null (reading 'getContextAttributes')
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt
new file mode 100644
index 0000000..6134e72
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrBoundedReferenceSpace_updates.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL 'XRBoundedReferenceSpace updates properly when the changes are applied - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'XRBoundedReferenceSpace updates properly when the changes are applied - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt
new file mode 100644
index 0000000..808e206
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_disconnect_ends.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Immersive session ends when device is disconnected - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session ends when device is disconnected - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt
new file mode 100644
index 0000000..59835358
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_immersive.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession resolves when supported - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession resolves when supported - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt
new file mode 100644
index 0000000..ab975b7f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary with empty feature lists - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession accepts XRSessionInit dictionary with empty feature lists - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown strings in optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown strings in optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown objects in optionalFeatures - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Tests requestSession ignores unknown objects in optionalFeatures - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt
new file mode 100644
index 0000000..6effd0e4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getPose.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getPose works for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt
new file mode 100644
index 0000000..7fc1bf3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose(refSpace) matches getPose(viewer, refSpace). - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose(refSpace) matches getPose(viewer, refSpace). - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt
new file mode 100644
index 0000000..68c0dd5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose(viewerSpace) & getPose(space, space) return identity even during tracking loss - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose(viewerSpace) & getPose(space, space) return identity even during tracking loss - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt
new file mode 100644
index 0000000..5dc75bf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_lifetime.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame methods throw exceptions outside of the requestAnimationFrame callback for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt
new file mode 100644
index 0000000..a0f5632
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrFrame_session_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame.session meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.session meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt
new file mode 100644
index 0000000..28d8094
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_add_remove.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSources can be properly added and removed from the session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSources can be properly added and removed from the session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt
new file mode 100644
index 0000000..bffc0df6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_emulatedPosition.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Poses from XRInputSource.gripSpace have emulatedPosition set properly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Poses from XRInputSource.gripSpace have emulatedPosition set properly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt
new file mode 100644
index 0000000..4c284b64
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_getPose_targetRay_grip.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Poses between targetRaySpace and gripSpace can be obtained and behave correctly - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Poses between targetRaySpace and gripSpace can be obtained and behave correctly - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt
new file mode 100644
index 0000000..c255249
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_profiles.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL WebXR InputSource's profiles list can be set - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL WebXR InputSource's profiles list can be set - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt
new file mode 100644
index 0000000..f186f5a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrInputSource_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRInputSource attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRInputSource attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt
new file mode 100644
index 0000000..763191c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrPose_transform_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRPose.transform meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRPose.transform meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt
new file mode 100644
index 0000000..4d990b9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Updating XRReferenceSpace origin offset updates view and input matrices. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Updating XRReferenceSpace origin offset updates view and input matrices. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt
new file mode 100644
index 0000000..b171f324
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt
new file mode 100644
index 0000000..c342fdcdf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Creating XRReferenceSpace origin offset off of `viewer` space works. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Creating XRReferenceSpace origin offset off of `viewer` space works. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt
new file mode 100644
index 0000000..13a5ab0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrReferenceSpace_relationships.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt
new file mode 100644
index 0000000..9e387bcd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform constructor works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform constructor works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt
new file mode 100644
index 0000000..a3d1611
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_inverse.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform inverse works - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform inverse works - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt
new file mode 100644
index 0000000..fc78a2d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrRigidTransform_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRRigidTransform position and orientation meet [SameObject] requirements - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRRigidTransform position and orientation meet [SameObject] requirements - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt
new file mode 100644
index 0000000..3113a90d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt
new file mode 100644
index 0000000..bcf3d43
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on immersive testSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on immersive testSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on non-immersive testSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession cancelAnimationFrame does not have unexpected behavior when given invalid handles on non-immersive testSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt
new file mode 100644
index 0000000..e9c2b095
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_enabledFeatures.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Validate enabledFeatures on XRSession - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Validate enabledFeatures on XRSession - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_end.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_end.https-expected.txt
new file mode 100644
index 0000000..e0159de
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_end.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL end event fires when immersive session ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when immersive session ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when non-immersive session ends - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL end event fires when non-immersive session ends - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt
new file mode 100644
index 0000000..b04825b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_input_events_end.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Calling end during an input callback stops processing at the right time - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Calling end during an input callback stops processing at the right time - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt
new file mode 100644
index 0000000..70f1143b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRSession requestAnimationFrame calls the provided callback for an immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback for an immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback a non-immersive session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession requestAnimationFrame calls the provided callback a non-immersive session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt
new file mode 100644
index 0000000..ee3f0af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL RequestAnimationFrame resolves with good data - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL RequestAnimationFrame resolves with good data - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt
new file mode 100644
index 0000000..659cc9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt
new file mode 100644
index 0000000..69123e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRFrame getViewerPose updates on the next frame for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame getViewerPose updates on the next frame for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt
new file mode 100644
index 0000000..4577bfad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Immersive XRSession requestReferenceSpace returns expected objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive XRSession requestReferenceSpace returns expected objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive XRSession requestReferenceSpace returns expected objects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive XRSession requestReferenceSpace returns expected objects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt
new file mode 100644
index 0000000..0cc1fed
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestReferenceSpace_features.https-expected.txt
@@ -0,0 +1,27 @@
+This is a testharness.js-based test.
+FAIL Non-immersive session supports viewer space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports viewer space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports viewer space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports viewer space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local space by default - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local space by default - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when optional - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local space when optional - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local-floor space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session supports local-floor space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when required - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when required - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when optional - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session supports local-floor space when optional - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects bounded-floor space even when requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects bounded-floor space even when requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects unbounded space even when requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects unbounded space even when requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects local space if not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Non-immersive session rejects local space if not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session rejects local-floor space if not requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session rejects local-floor space if not requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt
new file mode 100644
index 0000000..37665786
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_requestSessionDuringEnd.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Create new session in OnSessionEnded event - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create new session in OnSessionEnded event - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create mew session in end promise - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Create mew session in end promise - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt
new file mode 100644
index 0000000..7b12b840
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRSession attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRSession attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt
new file mode 100644
index 0000000..ffbd4057
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_viewer_referenceSpace.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Identity reference space provides correct poses for inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Identity reference space provides correct poses for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt
new file mode 100644
index 0000000..9172bc83
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrSession_visibilityState.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensures that the XRSession's visibilityState is correctly reported and that the associated visibilitychange event fires. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures that the XRSession's visibilityState is correctly reported and that the associated visibilitychange event fires. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt
new file mode 100644
index 0000000..9a4ca29
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL 'floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt
new file mode 100644
index 0000000..168fa8c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_eyes.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRView.eye is correct for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for non-immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView.eye is correct for non-immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_match.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_match.https-expected.txt
new file mode 100644
index 0000000..b8b109b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_match.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame contains the expected views - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame contains the expected views - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt
new file mode 100644
index 0000000..30c220c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_oneframeupdate.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRView projection matrices update near and far depths on the next frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView projection matrices update near and far depths on the next frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt
new file mode 100644
index 0000000..b77a377
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrView_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRView attributes meet [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRView attributes meet [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt
new file mode 100644
index 0000000..527f0b6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_secondaryViews.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Only primary views are returned if secondary views are not requested for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Only primary views are returned if secondary views are not requested for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views only returns primary views for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views only returns primary views for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views returns both primary and secondary views for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Requesting secondary views returns both primary and secondary views for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt
new file mode 100644
index 0000000..b6127ca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewerPose_views_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRViewerPose.views meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewerPose.views meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt
new file mode 100644
index 0000000..46c3616
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrViewport_valid.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL XRViewport attributes are valid - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRViewport attributes are valid with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt
new file mode 100644
index 0000000..5504e8b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_constructor.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl assert_unreached: Inline XRWebGLLayers should not fail when created with a context that is not XRCompatible Reached unreachable code
+FAIL Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl2 assert_unreached: Inline XRWebGLLayers should not fail when created with a context that is not XRCompatible Reached unreachable code
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt
new file mode 100644
index 0000000..771907e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt
new file mode 100644
index 0000000..d07d76d9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRWebGLLayer.framebuffer meets [SameObject] requirement - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer.framebuffer meets [SameObject] requirement - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt
new file mode 100644
index 0000000..2a51fe6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure framebuffer scaling works as expected. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure framebuffer scaling works as expected. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt
new file mode 100644
index 0000000..3f6935b28
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer is opaque for non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt
new file mode 100644
index 0000000..02f34b5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Ensure that the framebuffer given by the WebGL layer works with stencil for immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure that the framebuffer given by the WebGL layer works with stencil for immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt
new file mode 100644
index 0000000..7067999
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xrWebGLLayer_viewports.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for immersive sessions with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions with secondary views requested - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRWebGLLayer reports a valid viewports for inline sessions with secondary views requested - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt
new file mode 100644
index 0000000..e6ee8bb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/webxr/xr_viewport_scale.https-expected.txt
@@ -0,0 +1,31 @@
+This is a testharness.js-based test.
+FAIL requestViewportScale valid viewport for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for inline session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for inline session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ null scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ undefined scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale valid viewport w/ very small scale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale applied next frame for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL requestViewportScale same frame for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for immersive-vr session - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL recommendedViewportScale for immersive-vr session - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/compute-pressure/external/wpt/compute-pressure/idlharness.https.window-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/compute-pressure/external/wpt/compute-pressure/idlharness.https.window-expected.txt
new file mode 100644
index 0000000..4a45559
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/compute-pressure/external/wpt/compute-pressure/idlharness.https.window-expected.txt
@@ -0,0 +1,37 @@
+This is a testharness.js-based test.
+PASS idl_test setup
+PASS idl_test validation
+PASS PressureObserver interface: existence and properties of interface object
+PASS PressureObserver interface object length
+PASS PressureObserver interface object name
+PASS PressureObserver interface: existence and properties of interface prototype object
+PASS PressureObserver interface: existence and properties of interface prototype object's "constructor" property
+PASS PressureObserver interface: existence and properties of interface prototype object's @@unscopables property
+PASS PressureObserver interface: operation observe(PressureSource)
+PASS PressureObserver interface: operation unobserve(PressureSource)
+PASS PressureObserver interface: operation disconnect()
+PASS PressureObserver interface: operation takeRecords()
+PASS PressureObserver interface: attribute supportedSources
+FAIL PressureObserver interface: operation requestPermission() assert_own_property: interface object missing static operation expected property "requestPermission" missing
+PASS PressureObserver must be primary interface of observer
+PASS Stringification of observer
+PASS PressureObserver interface: observer must inherit property "observe(PressureSource)" with the proper type
+PASS PressureObserver interface: calling observe(PressureSource) on observer with too few arguments must throw TypeError
+PASS PressureObserver interface: observer must inherit property "unobserve(PressureSource)" with the proper type
+PASS PressureObserver interface: calling unobserve(PressureSource) on observer with too few arguments must throw TypeError
+PASS PressureObserver interface: observer must inherit property "disconnect()" with the proper type
+PASS PressureObserver interface: observer must inherit property "takeRecords()" with the proper type
+PASS PressureObserver interface: observer must inherit property "supportedSources" with the proper type
+PASS PressureObserver interface: observer must inherit property "requestPermission()" with the proper type
+PASS PressureRecord interface: existence and properties of interface object
+PASS PressureRecord interface object length
+PASS PressureRecord interface object name
+PASS PressureRecord interface: existence and properties of interface prototype object
+PASS PressureRecord interface: existence and properties of interface prototype object's "constructor" property
+PASS PressureRecord interface: existence and properties of interface prototype object's @@unscopables property
+PASS PressureRecord interface: attribute source
+PASS PressureRecord interface: attribute state
+PASS PressureRecord interface: attribute factors
+PASS PressureRecord interface: attribute time
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt
new file mode 100644
index 0000000..59e1191
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame's trackedAnchors is empty when the feature was requested & device returned null anchorsData - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame's trackedAnchors is empty when the feature was requested & device returned null anchorsData - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt
new file mode 100644
index 0000000..bfabc2e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_hittestsource_lifetimes.https-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+FAIL Ensures hit test source cancellation propagates to the device when manually cancelled. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when manually cancelled. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when manually cancelled. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when manually cancelled. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when relying on GC - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures hit test source cancellation propagates to the device when relying on GC - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when relying on GC - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures transient input hit test source cancellation propagates to the device when relying on GC - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt
new file mode 100644
index 0000000..88095a7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/ar/ar_light_estimation.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Ensures lighting estimation feature works when enabled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensures lighting estimation feature works when enabled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure lighting estimation feature does not work when not explicitly enabled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Ensure lighting estimation feature does not work when not explicitly enabled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt
new file mode 100644
index 0000000..cf7afdd0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/render_state_vertical_fov_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL inlineVerticalFieldOfView is set appropriately on inline sessions - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt
new file mode 100644
index 0000000..3437a67
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrFrame_getPose.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL XRFrame.getPose works between eye-level and floor-level spaces - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL XRFrame.getPose works between eye-level and floor-level spaces - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt
new file mode 100644
index 0000000..3c88adb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_immersive.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Immersive session ends if data provider disconnects. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Immersive session ends if data provider disconnects. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt
new file mode 100644
index 0000000..6611cd3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Inline session ends if magic window data provider disconnects. - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Inline session ends if magic window data provider disconnects. - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt
new file mode 100644
index 0000000..1a790c0d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentBlendMode.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL environmentBlendMode is correct for a VR device in immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in non-immersive - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL environmentBlendMode is correct for a VR device in non-immersive - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt
new file mode 100644
index 0000000..889c3da
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_environmentProviderDisconnect.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Outstanding promises get rejected if environmentProvider disconnects - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Outstanding promises get rejected if environmentProvider disconnects - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt
new file mode 100644
index 0000000..493b0ca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrSession_framesThrottled.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Blink appropriately reports when frames are throttled - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL Blink appropriately reports when frames are throttled - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt
new file mode 100644
index 0000000..27d49e0c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xrWebGLLayer_dirty_framebuffer.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL A frame should be submitted if the base layer was written to during requestAnimationFrame - webgl promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+FAIL A frame should be submitted if the base layer was written to during requestAnimationFrame - webgl2 promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of null (reading 'makeXRCompatible')"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt
new file mode 100644
index 0000000..812af3a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webxr/xr_view_projection_detached.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Test that xrview.projection being detached doesn't cause a crash. promise_test: Unhandled rejection with value: object "TypeError: Failed to construct 'XRWebGLLayer': The provided value is not of type '(WebGL2RenderingContext or WebGLRenderingContext)'."
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/web-animations/idlharness.window-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/web-animations/idlharness.window-expected.txt
new file mode 100644
index 0000000..80e721f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/web-animations/idlharness.window-expected.txt
@@ -0,0 +1,208 @@
+This is a testharness.js-based test.
+Found 204 tests; 155 PASS, 49 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS idl_test setup
+PASS idl_test validation
+PASS Partial interface Document: original interface defined
+PASS Partial interface Document: member names are unique
+PASS Partial interface mixin DocumentOrShadowRoot: original interface mixin defined
+PASS Partial interface mixin DocumentOrShadowRoot: member names are unique
+PASS Partial interface AnimationTimeline: original interface defined
+PASS Partial interface AnimationTimeline: valid exposure set
+PASS Partial interface AnimationTimeline: member names are unique
+PASS Partial interface Animation: original interface defined
+PASS Partial interface Animation: valid exposure set
+PASS Partial interface Animation: member names are unique
+PASS Partial interface AnimationEffect: original interface defined
+PASS Partial interface AnimationEffect: valid exposure set
+PASS Partial interface AnimationEffect: member names are unique
+PASS Partial dictionary EffectTiming: original dictionary defined
+PASS Partial dictionary EffectTiming: member names are unique
+PASS Partial dictionary OptionalEffectTiming: original dictionary defined
+PASS Partial dictionary OptionalEffectTiming: member names are unique
+PASS Partial dictionary ComputedEffectTiming: original dictionary defined
+PASS Partial dictionary ComputedEffectTiming: member names are unique
+PASS Partial interface KeyframeEffect: original interface defined
+PASS Partial interface KeyframeEffect: member names are unique
+PASS Partial dictionary KeyframeEffectOptions: original dictionary defined
+PASS Partial dictionary KeyframeEffectOptions: member names are unique
+PASS Partial interface Document[2]: member names are unique
+PASS Partial interface Document[3]: member names are unique
+PASS Element includes Animatable: member names are unique
+PASS Document includes NonElementParentNode: member names are unique
+PASS DocumentFragment includes NonElementParentNode: member names are unique
+PASS Document includes DocumentOrShadowRoot: member names are unique
+PASS ShadowRoot includes DocumentOrShadowRoot: member names are unique
+PASS Document includes ParentNode: member names are unique
+PASS DocumentFragment includes ParentNode: member names are unique
+PASS Element includes ParentNode: member names are unique
+PASS Element includes NonDocumentTypeChildNode: member names are unique
+PASS Element includes ChildNode: member names are unique
+PASS Element includes Slottable: member names are unique
+PASS Document includes XPathEvaluatorBase: member names are unique
+PASS Document includes GlobalEventHandlers: member names are unique
+PASS DocumentTimeline interface: existence and properties of interface object
+PASS DocumentTimeline interface object length
+PASS DocumentTimeline interface object name
+PASS DocumentTimeline interface: existence and properties of interface prototype object
+PASS DocumentTimeline interface: existence and properties of interface prototype object's "constructor" property
+PASS DocumentTimeline interface: existence and properties of interface prototype object's @@unscopables property
+PASS DocumentTimeline must be primary interface of document.timeline
+PASS Stringification of document.timeline
+PASS AnimationTimeline interface: document.timeline must inherit property "duration" with the proper type
+FAIL AnimationTimeline interface: document.timeline must inherit property "play(optional AnimationEffect?)" with the proper type assert_inherits: property "play" not found in prototype chain
+FAIL AnimationTimeline interface: calling play(optional AnimationEffect?) on document.timeline with too few arguments must throw TypeError assert_inherits: property "play" not found in prototype chain
+PASS Animation interface: existence and properties of interface object
+PASS Animation interface object length
+PASS Animation interface object name
+PASS Animation interface: existence and properties of interface prototype object
+PASS Animation interface: existence and properties of interface prototype object's "constructor" property
+PASS Animation interface: existence and properties of interface prototype object's @@unscopables property
+PASS Animation interface: attribute id
+PASS Animation interface: attribute effect
+PASS Animation interface: attribute timeline
+PASS Animation interface: attribute playbackRate
+PASS Animation interface: attribute playState
+PASS Animation interface: attribute replaceState
+PASS Animation interface: attribute pending
+PASS Animation interface: attribute ready
+PASS Animation interface: attribute finished
+PASS Animation interface: attribute onfinish
+PASS Animation interface: attribute oncancel
+PASS Animation interface: attribute onremove
+PASS Animation interface: operation cancel()
+PASS Animation interface: operation finish()
+PASS Animation interface: operation play()
+PASS Animation interface: operation pause()
+PASS Animation interface: operation updatePlaybackRate(double)
+PASS Animation interface: operation reverse()
+PASS Animation interface: operation persist()
+PASS Animation interface: operation commitStyles()
+PASS Animation interface: attribute startTime
+PASS Animation interface: attribute currentTime
+PASS Animation must be primary interface of new Animation()
+PASS Stringification of new Animation()
+PASS Animation interface: new Animation() must inherit property "id" with the proper type
+PASS Animation interface: new Animation() must inherit property "effect" with the proper type
+PASS Animation interface: new Animation() must inherit property "timeline" with the proper type
+PASS Animation interface: new Animation() must inherit property "playbackRate" with the proper type
+PASS Animation interface: new Animation() must inherit property "playState" with the proper type
+PASS Animation interface: new Animation() must inherit property "replaceState" with the proper type
+PASS Animation interface: new Animation() must inherit property "pending" with the proper type
+PASS Animation interface: new Animation() must inherit property "ready" with the proper type
+PASS Animation interface: new Animation() must inherit property "finished" with the proper type
+PASS Animation interface: new Animation() must inherit property "onfinish" with the proper type
+PASS Animation interface: new Animation() must inherit property "oncancel" with the proper type
+PASS Animation interface: new Animation() must inherit property "onremove" with the proper type
+PASS Animation interface: new Animation() must inherit property "cancel()" with the proper type
+PASS Animation interface: new Animation() must inherit property "finish()" with the proper type
+PASS Animation interface: new Animation() must inherit property "play()" with the proper type
+PASS Animation interface: new Animation() must inherit property "pause()" with the proper type
+PASS Animation interface: new Animation() must inherit property "updatePlaybackRate(double)" with the proper type
+PASS Animation interface: calling updatePlaybackRate(double) on new Animation() with too few arguments must throw TypeError
+PASS Animation interface: new Animation() must inherit property "reverse()" with the proper type
+PASS Animation interface: new Animation() must inherit property "persist()" with the proper type
+PASS Animation interface: new Animation() must inherit property "commitStyles()" with the proper type
+PASS Animation interface: new Animation() must inherit property "startTime" with the proper type
+PASS Animation interface: new Animation() must inherit property "currentTime" with the proper type
+PASS AnimationEffect interface: existence and properties of interface object
+PASS AnimationEffect interface object length
+PASS AnimationEffect interface object name
+PASS AnimationEffect interface: existence and properties of interface prototype object
+PASS AnimationEffect interface: existence and properties of interface prototype object's "constructor" property
+PASS AnimationEffect interface: existence and properties of interface prototype object's @@unscopables property
+PASS AnimationEffect interface: operation getTiming()
+PASS AnimationEffect interface: operation getComputedTiming()
+PASS AnimationEffect interface: operation updateTiming(optional OptionalEffectTiming)
+FAIL AnimationEffect interface: attribute parent assert_true: The prototype object must have a property "parent" expected true got false
+FAIL AnimationEffect interface: attribute previousSibling assert_true: The prototype object must have a property "previousSibling" expected true got false
+FAIL AnimationEffect interface: attribute nextSibling assert_true: The prototype object must have a property "nextSibling" expected true got false
+FAIL AnimationEffect interface: operation before(AnimationEffect...) assert_own_property: interface prototype object missing non-static operation expected property "before" missing
+FAIL AnimationEffect interface: operation after(AnimationEffect...) assert_own_property: interface prototype object missing non-static operation expected property "after" missing
+FAIL AnimationEffect interface: operation replace(AnimationEffect...) assert_own_property: interface prototype object missing non-static operation expected property "replace" missing
+FAIL AnimationEffect interface: operation remove() assert_own_property: interface prototype object missing non-static operation expected property "remove" missing
+PASS KeyframeEffect interface: existence and properties of interface object
+PASS KeyframeEffect interface object length
+PASS KeyframeEffect interface object name
+PASS KeyframeEffect interface: existence and properties of interface prototype object
+PASS KeyframeEffect interface: existence and properties of interface prototype object's "constructor" property
+PASS KeyframeEffect interface: existence and properties of interface prototype object's @@unscopables property
+PASS KeyframeEffect interface: attribute target
+PASS KeyframeEffect interface: attribute pseudoElement
+PASS KeyframeEffect interface: attribute composite
+PASS KeyframeEffect interface: operation getKeyframes()
+PASS KeyframeEffect interface: operation setKeyframes(object?)
+FAIL KeyframeEffect interface: attribute iterationComposite assert_true: The prototype object must have a property "iterationComposite" expected true got false
+PASS KeyframeEffect must be primary interface of new KeyframeEffect(null, null)
+PASS Stringification of new KeyframeEffect(null, null)
+PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "target" with the proper type
+PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "pseudoElement" with the proper type
+PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "composite" with the proper type
+PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "getKeyframes()" with the proper type
+PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "setKeyframes(object?)" with the proper type
+PASS KeyframeEffect interface: calling setKeyframes(object?) on new KeyframeEffect(null, null) with too few arguments must throw TypeError
+FAIL KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "iterationComposite" with the proper type assert_inherits: property "iterationComposite" not found in prototype chain
+PASS AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "getTiming()" with the proper type
+PASS AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "getComputedTiming()" with the proper type
+PASS AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "updateTiming(optional OptionalEffectTiming)" with the proper type
+PASS AnimationEffect interface: calling updateTiming(optional OptionalEffectTiming) on new KeyframeEffect(null, null) with too few arguments must throw TypeError
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "parent" with the proper type assert_inherits: property "parent" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "previousSibling" with the proper type assert_inherits: property "previousSibling" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "nextSibling" with the proper type assert_inherits: property "nextSibling" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "before(AnimationEffect...)" with the proper type assert_inherits: property "before" not found in prototype chain
+FAIL AnimationEffect interface: calling before(AnimationEffect...) on new KeyframeEffect(null, null) with too few arguments must throw TypeError assert_inherits: property "before" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "after(AnimationEffect...)" with the proper type assert_inherits: property "after" not found in prototype chain
+FAIL AnimationEffect interface: calling after(AnimationEffect...) on new KeyframeEffect(null, null) with too few arguments must throw TypeError assert_inherits: property "after" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "replace(AnimationEffect...)" with the proper type assert_inherits: property "replace" not found in prototype chain
+FAIL AnimationEffect interface: calling replace(AnimationEffect...) on new KeyframeEffect(null, null) with too few arguments must throw TypeError assert_inherits: property "replace" not found in prototype chain
+FAIL AnimationEffect interface: new KeyframeEffect(null, null) must inherit property "remove()" with the proper type assert_inherits: property "remove" not found in prototype chain
+FAIL GroupEffect interface: existence and properties of interface object assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface object length assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface object name assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: existence and properties of interface prototype object assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: attribute children assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: attribute firstChild assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: attribute lastChild assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: operation clone() assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: operation prepend(AnimationEffect...) assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL GroupEffect interface: operation append(AnimationEffect...) assert_own_property: self does not have own property "GroupEffect" expected property "GroupEffect" missing
+FAIL AnimationNodeList interface: existence and properties of interface object assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface object length assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface object name assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface: attribute length assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL AnimationNodeList interface: operation item(unsigned long) assert_own_property: self does not have own property "AnimationNodeList" expected property "AnimationNodeList" missing
+FAIL SequenceEffect interface: existence and properties of interface object assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface object length assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface object name assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+FAIL SequenceEffect interface: operation clone() assert_own_property: self does not have own property "SequenceEffect" expected property "SequenceEffect" missing
+PASS AnimationPlaybackEvent interface: existence and properties of interface object
+PASS AnimationPlaybackEvent interface object length
+PASS AnimationPlaybackEvent interface object name
+PASS AnimationPlaybackEvent interface: existence and properties of interface prototype object
+PASS AnimationPlaybackEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS AnimationPlaybackEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS AnimationPlaybackEvent interface: attribute currentTime
+PASS AnimationPlaybackEvent interface: attribute timelineTime
+PASS AnimationPlaybackEvent must be primary interface of new AnimationPlaybackEvent("cancel")
+PASS Stringification of new AnimationPlaybackEvent("cancel")
+PASS AnimationPlaybackEvent interface: new AnimationPlaybackEvent("cancel") must inherit property "currentTime" with the proper type
+PASS AnimationPlaybackEvent interface: new AnimationPlaybackEvent("cancel") must inherit property "timelineTime" with the proper type
+PASS Document interface: attribute timeline
+PASS Document interface: operation getAnimations()
+PASS Document interface: document must inherit property "timeline" with the proper type
+PASS Document interface: document must inherit property "getAnimations()" with the proper type
+PASS ShadowRoot interface: operation getAnimations()
+PASS ShadowRoot interface: shadowRoot must inherit property "getAnimations()" with the proper type
+PASS Element interface: operation animate(object?, optional (unrestricted double or KeyframeAnimationOptions))
+PASS Element interface: operation getAnimations(optional GetAnimationsOptions)
+PASS AnimationTimeline interface: attribute duration
+FAIL AnimationTimeline interface: operation play(optional AnimationEffect?) assert_own_property: interface prototype object missing non-static operation expected property "play" missing
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini b/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini
index a067ca4..eeba882 100644
--- a/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini
@@ -1,4 +1,4 @@
 [padding.https.html]
   [Code cache padding should be stable.]
     expected:
-      if product == "chrome": [FAIL, PASS]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/visual-viewport.https.html.ini b/third_party/blink/web_tests/wpt_internal/fenced_frame/visual-viewport.https.html.ini
index bf52466..abd881b 100644
--- a/third_party/blink/web_tests/wpt_internal/fenced_frame/visual-viewport.https.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/visual-viewport.https.html.ini
@@ -1,2 +1,4 @@
 [visual-viewport.https.html]
-  expected: [ERROR, CRASH]
+  expected: TIMEOUT
+  [visualViewport values inside fenced frame]
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/wpt_internal/fragment-directive/create-selector-directive.html.ini b/third_party/blink/web_tests/wpt_internal/fragment-directive/create-selector-directive.html.ini
index 64c5e0b65..4567d00 100644
--- a/third_party/blink/web_tests/wpt_internal/fragment-directive/create-selector-directive.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/fragment-directive/create-selector-directive.html.ini
@@ -1,12 +1,8 @@
 [create-selector-directive.html]
-  [window.getSelection()]
-    expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-
   [Collapsed range.]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
 
   [Generate selector within iframe]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/wpt_internal/html/interaction/focus/the-autofocus-attribute/object-fallback.html.ini b/third_party/blink/web_tests/wpt_internal/html/interaction/focus/the-autofocus-attribute/object-fallback.html.ini
index 816edad..c9cf564 100644
--- a/third_party/blink/web_tests/wpt_internal/html/interaction/focus/the-autofocus-attribute/object-fallback.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/html/interaction/focus/the-autofocus-attribute/object-fallback.html.ini
@@ -1,6 +1,4 @@
 [object-fallback.html]
-  expected:
-    if os == "win": TIMEOUT
   [An autofocus element in an OBJECT with a loaded frame should not be processed]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini b/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini
new file mode 100644
index 0000000..2f03553
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini
@@ -0,0 +1,5 @@
+[async-script.html?reload]
+  expected:
+    if product == "chrome": [OK, ERROR]
+
+[async-script.html]
diff --git a/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/selective-in-order/async-script.sub.html.ini b/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/selective-in-order/async-script.sub.html.ini
index dd9e83ee..c439e28b 100644
--- a/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/selective-in-order/async-script.sub.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/selective-in-order/async-script.sub.html.ini
@@ -2,4 +2,4 @@
 
 [async-script.sub.html?reload]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-speech-recognition.html.ini b/third_party/blink/web_tests/wpt_internal/prerender/restriction-speech-recognition.html.ini
index c781b97..ab9149b 100644
--- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-speech-recognition.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-speech-recognition.html.ini
@@ -3,6 +3,7 @@
   disabled:
     if flag_specific == "force-renderer-accessibility": @False
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [SpeechRecognition.start should be deferred until the prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/wpt_internal/storage/buckets/bucket_names.tentative.https.any.js.ini b/third_party/blink/web_tests/wpt_internal/storage/buckets/bucket_names.tentative.https.any.js.ini
index 7ea8128..89b62595 100644
--- a/third_party/blink/web_tests/wpt_internal/storage/buckets/bucket_names.tentative.https.any.js.ini
+++ b/third_party/blink/web_tests/wpt_internal/storage/buckets/bucket_names.tentative.https.any.js.ini
@@ -1,22 +1,4 @@
 [bucket_names.tentative.https.any.serviceworker.html]
-
-[bucket_names.tentative.https.any.sharedworker.html]
-
-[bucket_names.tentative.https.any.worker.html]
-
-[bucket_names.tentative.https.any.html]
-  [open() allows bucket names with allowed characters]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
-  [open() allows bucket names with `-` in the middle]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
-  [open() allows bucket names with `_` in the middle]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
   [open() allows bucket names ending with `_`]
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
@@ -25,7 +7,23 @@
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
-  [delete() allows bucket names with allowed characters]
+  [delete() allows bucket names ending with `_`]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [open() allows bucket names with `-` in the middle]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [delete() allows bucket names ending with `-`]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [open() does not store duplicate bucket names]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [open() allows bucket names with `_` in the middle]
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
@@ -37,14 +35,17 @@
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
-  [delete() allows bucket names ending with `_`]
+  [delete() allows bucket names with allowed characters]
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
-  [delete() allows bucket names ending with `-`]
+  [open() allows bucket names with allowed characters]
     expected:
       if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
-  [open() does not store duplicate bucket names]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+[bucket_names.tentative.https.any.sharedworker.html]
+
+[bucket_names.tentative.https.any.worker.html]
+
+[bucket_names.tentative.https.any.html]
diff --git a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini
deleted file mode 100644
index 19cf3a6..0000000
--- a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[reload-crash.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
index e1161b9b..eab0b68 100644
--- a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
@@ -1,4 +1,4 @@
 [root-and-nested-element-transition.html]
   expected:
-    if product == "chrome": [FAIL, ERROR]
+    if product == "chrome": ERROR
     FAIL
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 89dddd9..95a2422 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -416,10 +416,10 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.ExactTaskCreated"
-    enum="BackgroundTaskId" expires_after="2022-05-01">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that an exact task has been created. Recorded when the task is
     scheduled.
@@ -428,16 +428,16 @@
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCanceled"
     enum="BackgroundTaskId" expires_after="2023-06-04">
-  <owner>fgorski@chromium.org</owner>
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>Records that a specific background task has been canceled.</summary>
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithExpiration"
-    enum="BackgroundTaskId" expires_after="2022-05-01">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific task has been created with an expiration deadline.
     Recorded when the task is scheduled.
@@ -445,10 +445,10 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithoutExpiration"
-    enum="BackgroundTaskId" expires_after="2022-05-01">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific task has been created without the expiration feature
     activated. Recorded when the task is scheduled.
@@ -457,9 +457,9 @@
 
 <histogram name="Android.BackgroundTaskScheduler.TaskExpired"
     enum="BackgroundTaskId" expires_after="2023-06-04">
-  <owner>fgorski@chromium.org</owner>
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific background task has expired. Recorded before the
     task is to be started.
@@ -467,9 +467,9 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskFinished.{TaskType}"
-    units="ms" expires_after="2022-11-01">
-  <owner>shaktisahu@chromium.org</owner>
+    units="ms" expires_after="2023-06-04">
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records the time (uptimeMillis) taken by a background task of type
     {TaskType}. Recorded when the task finished callback is invoked.
@@ -479,8 +479,8 @@
 
 <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative"
     enum="BackgroundTaskId" expires_after="2023-06-04">
-  <owner>fgorski@chromium.org</owner>
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a task extending a NativeBackgroundTask started loading the
     native portion of Chrome (either in Reduced Mode or Full Browser Mode).
@@ -488,7 +488,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.FullBrowser"
-    enum="BackgroundTaskId" expires_after="2023-02-12">
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>mheikal@chromium.org</owner>
   <owner>hanxi@chromium.org</owner>
   <owner>hnakashima@chromium.org</owner>
@@ -499,7 +499,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.ReducedMode"
-    enum="BackgroundTaskId" expires_after="2023-02-12">
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>mheikal@chromium.org</owner>
   <owner>hanxi@chromium.org</owner>
   <owner>hnakashima@chromium.org</owner>
@@ -509,18 +509,18 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Failure"
-    enum="BackgroundTaskId" expires_after="2023-03-19">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific background task has failed to be scheduled.
   </summary>
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Success"
-    enum="BackgroundTaskId" expires_after="2023-05-07">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific background task has been successfully scheduled.
   </summary>
@@ -528,15 +528,15 @@
 
 <histogram name="Android.BackgroundTaskScheduler.TaskStarted"
     enum="BackgroundTaskId" expires_after="2023-06-04">
-  <owner>fgorski@chromium.org</owner>
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>Records that a specific background task has been started.</summary>
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskStopped"
-    enum="BackgroundTaskId" expires_after="2023-03-19">
-  <owner>fgorski@chromium.org</owner>
+    enum="BackgroundTaskId" expires_after="2023-06-04">
   <owner>nyquist@chromium.org</owner>
+  <owner>shaktisahu@chromium.org</owner>
   <summary>
     Records that a specific background task has been stopped by Background Task
     Scheduler before it was able to complete itself.
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml
index a54ac0d..8d8dbd5 100644
--- a/tools/metrics/histograms/metadata/network/histograms.xml
+++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -1545,7 +1545,7 @@
 </histogram>
 
 <histogram name="Network.Radio.PossibleWakeupTrigger.ResolveHostPurpose2"
-    enum="ResolveHostPurpose" expires_after="2023-02-14">
+    enum="ResolveHostPurpose" expires_after="2023-04-05">
   <owner>bashi@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -1556,7 +1556,7 @@
 </histogram>
 
 <histogram name="Network.Radio.PossibleWakeupTrigger.URLLoaderAnnotationId2"
-    enum="TrafficAnnotationUniqueIdHash" expires_after="2023-02-12">
+    enum="TrafficAnnotationUniqueIdHash" expires_after="2023-04-05">
   <owner>bashi@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -1567,7 +1567,7 @@
 
 <histogram
     name="Network.Radio.PossibleWakeupTrigger.URLLoaderRequestDestination"
-    enum="RequestDestination" expires_after="2023-02-14">
+    enum="RequestDestination" expires_after="2023-04-05">
   <owner>bashi@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -1578,7 +1578,7 @@
 
 <histogram
     name="Network.Radio.PossibleWakeupTrigger.URLLoaderRequestIsPrefetch"
-    enum="Boolean" expires_after="2023-02-14">
+    enum="Boolean" expires_after="2023-04-05">
   <owner>bashi@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -1588,7 +1588,7 @@
 </histogram>
 
 <histogram name="Network.Radio.PossibleWakeupTrigger.URLLoaderRequestPriority"
-    enum="NetRequestPriority" expires_after="2023-02-14">
+    enum="NetRequestPriority" expires_after="2023-04-05">
   <owner>bashi@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
index b0e3a1a3..403ecf3 100644
--- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
+++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -482,18 +482,6 @@
   </token>
 </histogram>
 
-<histogram name="SafeBrowsing.DeepScan.Download.BypassedByUser.Duration"
-    units="ms" expires_after="2023-02-01">
-  <owner>domfc@chromium.org</owner>
-  <owner>webprotect-team@google.com</owner>
-  <summary>
-    This records the duration from the time the binary is uploaded for deep
-    scanning of a download request until the time the user decides to bypass the
-    verdict. It is logged once for each binary upload when the user bypasses the
-    verdict.
-  </summary>
-</histogram>
-
 <histogram name="SafeBrowsing.DelayedWarnings.Event"
     enum="SafeBrowsingDelayedWarningEvent" expires_after="2021-08-22">
   <obsolete>
@@ -2302,6 +2290,7 @@
   <token key="Connector" variants="EnterpriseConnector"/>
   <token key="Result">
     <variant name="" summary="any"/>
+    <variant name=".BypassedByUser" summary="a BypassedByUser"/>
     <variant name=".CancelledByUser" summary="a CancelledByUser"/>
     <variant name=".FailedToGetToken" summary="a FailedToGetToken"/>
     <variant name=".FailedToGetVerdict" summary="a FailedToGetVerdict"/>
@@ -2386,18 +2375,6 @@
   </summary>
 </histogram>
 
-<histogram name="SafeBrowsingBinaryUploadService.ActiveRequestsAtShutdown"
-    units="requests" expires_after="2023-02-01">
-  <owner>domfc@chromium.org</owner>
-  <owner>jgingras@chromium.org</owner>
-  <owner>webprotect-eng@google.com</owner>
-  <summary>
-    This records the number of active requests when a BinaryUploadService
-    instance is shutdown. This metric is only logged if the number of active
-    requests is not 0.
-  </summary>
-</histogram>
-
 </histograms>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/update_engine/histograms.xml b/tools/metrics/histograms/metadata/update_engine/histograms.xml
index 75d20c9..9898e77 100644
--- a/tools/metrics/histograms/metadata/update_engine/histograms.xml
+++ b/tools/metrics/histograms/metadata/update_engine/histograms.xml
@@ -23,7 +23,7 @@
 <histograms>
 
 <histogram name="UpdateEngine.Attempt.ConnectionType"
-    enum="UpdateEngineConnectionType" expires_after="2023-01-01">
+    enum="UpdateEngineConnectionType" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -39,7 +39,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.DownloadErrorCode"
-    enum="UpdateEngineDownloadErrorCode" expires_after="2023-05-07">
+    enum="UpdateEngineDownloadErrorCode" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -54,7 +54,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.DownloadSource"
-    enum="UpdateEngineDownloadSource" expires_after="2023-05-07">
+    enum="UpdateEngineDownloadSource" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -68,7 +68,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.DurationMinutes" units="minutes"
-    expires_after="2023-05-07">
+    expires_after="2023-06-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -82,7 +82,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.DurationUptimeMinutes" units="minutes"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -96,7 +96,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.InternalErrorCode"
-    enum="UpdateEngineErrorCode" expires_after="2023-05-07">
+    enum="UpdateEngineErrorCode" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -110,7 +110,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.Number" units="count"
-    expires_after="2023-05-14">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -124,7 +124,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.PayloadBytesDownloadedMiB" units="MiB"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -137,7 +137,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.PayloadDownloadSpeedKBps" units="KBps"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -152,7 +152,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.PayloadSizeMiB" units="MiB"
-    expires_after="2023-05-07">
+    expires_after="2023-06-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -165,7 +165,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.PayloadType"
-    enum="UpdateEnginePayloadFormat" expires_after="2023-05-07">
+    enum="UpdateEnginePayloadFormat" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -181,7 +181,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.Result" enum="UpdateEngineAttemptResult"
-    expires_after="2023-05-07">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -194,7 +194,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptMinutes"
-    units="minutes" expires_after="2023-06-04">
+    units="minutes" expires_after="2023-06-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -209,7 +209,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptUptimeMinutes"
-    units="minutes" expires_after="2023-05-07">
+    units="minutes" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -224,7 +224,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.CertificateCheck.Download"
-    enum="UpdateEngineCertificateCheckStatus" expires_after="2023-01-01">
+    enum="UpdateEngineCertificateCheckStatus" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -239,7 +239,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.CertificateCheck.UpdateCheck"
-    enum="UpdateEngineCertificateCheckStatus" expires_after="2023-01-01">
+    enum="UpdateEngineCertificateCheckStatus" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -253,7 +253,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.DownloadErrorCode"
-    enum="UpdateEngineDownloadErrorCode" expires_after="2023-01-01">
+    enum="UpdateEngineDownloadErrorCode" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -268,7 +268,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.Reaction" enum="UpdateEngineCheckReaction"
-    expires_after="2023-05-14">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -284,7 +284,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.Result" enum="UpdateEngineCheckResult"
-    expires_after="2023-05-07">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -337,7 +337,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.TimeSinceLastCheckMinutes" units="minutes"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -351,7 +351,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.TimeSinceLastCheckUptimeMinutes"
-    units="minutes" expires_after="2023-01-01">
+    units="minutes" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -365,7 +365,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.ConsecutiveUpdate.Count" units="updates"
-    expires_after="2023-06-11">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -378,7 +378,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.ConsecutiveUpdate.Failed" enum="BooleanHit"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -391,7 +391,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.ConsumerAutoUpdate" enum="BooleanOptedOut"
-    expires_after="2023-06-01">
+    expires_after="2024-01-01">
   <owner>yuanpengni@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -403,7 +403,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Daily.OSAgeDays" units="days"
-    expires_after="2023-06-04">
+    expires_after="2023-06-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -454,7 +454,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.FailedUpdateCount" units="count"
-    expires_after="2023-05-14">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -469,7 +469,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.InstallDateProvisioningSource"
-    enum="UpdateEngineInstallDateProvisioningSource" expires_after="2023-05-07">
+    enum="UpdateEngineInstallDateProvisioningSource" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -534,7 +534,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess"
-    expires_after="2023-05-14">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -547,7 +547,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.AttemptCount" units="count"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -560,7 +560,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiB" units="MiB"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -574,7 +574,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpPeer"
-    units="MiB" expires_after="2023-01-01">
+    units="MiB" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -588,7 +588,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpServer"
-    units="MiB" expires_after="2023-01-01">
+    units="MiB" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -602,7 +602,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpsServer"
-    units="MiB" expires_after="2023-01-01">
+    units="MiB" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -616,7 +616,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.DownloadOverheadPercentage"
-    units="%" expires_after="2023-01-01">
+    units="%" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -629,7 +629,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.DownloadSourcesUsed"
-    enum="UpdateEngineDownloadSources" expires_after="2023-06-04">
+    enum="UpdateEngineDownloadSources" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -672,7 +672,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.PayloadSizeMiB" units="MiB"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -685,7 +685,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.PayloadType"
-    enum="UpdateEnginePayloadFormat" expires_after="2023-06-04">
+    enum="UpdateEnginePayloadFormat" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -699,7 +699,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.RebootCount" units="count"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -712,7 +712,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationMinutes"
-    units="minutes" expires_after="2023-05-07">
+    units="minutes" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -727,7 +727,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationUptimeMinutes"
-    units="minutes" expires_after="2023-05-07">
+    units="minutes" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -742,7 +742,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.UpdatesAbandonedCount"
-    units="count" expires_after="2023-01-01">
+    units="count" expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -756,7 +756,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.SuccessfulUpdate.UrlSwitchCount" units="count"
-    expires_after="2023-06-11">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -770,7 +770,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.TimeToRebootMinutes" units="minutes"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
@@ -786,7 +786,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.UpdateInvalidated" enum="BooleanSuccess"
-    expires_after="2023-01-01">
+    expires_after="2024-01-01">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index b275854..52b5284 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -17998,6 +17998,18 @@
       metric, we measure the latency of user interactions by
       Responsiveness.UserInteraction.MaxEventDuration.
     </summary>
+    <aggregation>
+      <history>
+        <index fields="profile.country"/>
+        <index fields="profile.country,profile.system_ram"/>
+        <index fields="profile.is_dominant_version"/>
+        <index fields="profile.is_latest_version"/>
+        <index fields="profile.system_ram"/>
+        <statistics>
+          <quantiles type="std-percentiles"/>
+        </statistics>
+      </history>
+    </aggregation>
   </metric>
   <metric name="InteractiveTiming.WorstUserInteractionLatency.MaxEventDuration">
     <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 6223e69..fd6afedc 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "d7d54c61af21c66d6ac53c1055b957e89d7a8ebb",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/367c798358282cf6fbc9fc47a71a10b26cb6040f/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/1f3b5b40211b34322fe31a43556c8e4a028d0275/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 06f8847..c669fc6 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -30,7 +30,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
-#include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -694,21 +693,6 @@
   return true;
 }
 
-void StoreGpuExtraInfoIntoListValue(x11::VisualId system_visual,
-                                    x11::VisualId rgba_visual,
-                                    base::Value& list_value) {
-  list_value.Append(display::BuildGpuInfoEntry("Window manager",
-                                               ui::GuessWindowManagerName()));
-  list_value.Append(display::BuildGpuInfoEntry(
-      "Compositing manager", ui::IsCompositingManagerPresent() ? "Yes" : "No"));
-  list_value.Append(display::BuildGpuInfoEntry(
-      "System visual ID",
-      base::NumberToString(static_cast<uint32_t>(system_visual))));
-  list_value.Append(display::BuildGpuInfoEntry(
-      "RGBA visual ID",
-      base::NumberToString(static_cast<uint32_t>(rgba_visual))));
-}
-
 bool WmSupportsHint(x11::Atom atom) {
   if (!SupportsEWMH())
     return false;
diff --git a/ui/file_manager/file_manager/background/js/file_manager_base.js b/ui/file_manager/file_manager/background/js/file_manager_base.js
index 3ec9f42..6f12584 100644
--- a/ui/file_manager/file_manager/background/js/file_manager_base.js
+++ b/ui/file_manager/file_manager/background/js/file_manager_base.js
@@ -1,6 +1,8 @@
 // Copyright 2012 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
+import './metrics_start.js';
+
 import {assert} from 'chrome://resources/ash/common/assert.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 
diff --git a/ui/file_manager/file_manager/background/js/test_util.js b/ui/file_manager/file_manager/background/js/test_util.js
index c51572f..be142ad 100644
--- a/ui/file_manager/file_manager/background/js/test_util.js
+++ b/ui/file_manager/file_manager/background/js/test_util.js
@@ -6,8 +6,6 @@
 import {ProgressCenterItem} from '../../common/js/progress_center_common.js';
 import {util} from '../../common/js/util.js';
 
-import {background} from './file_manager_base.js';
-import {launcher} from './launcher.js';
 import {test} from './test_util_base.js';
 
 export {test};
@@ -28,7 +26,7 @@
  *     App ID.
  */
 test.util.async.openMainWindow = (appState, callback) => {
-  launcher.launchFileManager(appState).then(callback);
+  window.background.launchFileManager(appState).then(callback);
 };
 
 /**
@@ -948,6 +946,6 @@
       item.progressValue = progressValue;
       item.itemCount = count;
 
-      background.progressCenter.updateItem(item);
+      window.background.progressCenter.updateItem(item);
       return true;
     };
diff --git a/ui/file_manager/file_manager/background/js/test_util_base.js b/ui/file_manager/file_manager/background/js/test_util_base.js
index 222389e..aaa3bafbb 100644
--- a/ui/file_manager/file_manager/background/js/test_util_base.js
+++ b/ui/file_manager/file_manager/background/js/test_util_base.js
@@ -4,10 +4,6 @@
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
 
-import {metrics} from '../../common/js/metrics.js';
-import {util} from '../../common/js/util.js';
-import {VolumeManagerCommon} from '../../common/js/volume_manager_types.js';
-
 /**
  * Namespace for test related things.
  */
diff --git a/ui/file_manager/file_manager/foreground/js/main.js b/ui/file_manager/file_manager/foreground/js/main.js
index 990c82f2..d9afee6 100644
--- a/ui/file_manager/file_manager/foreground/js/main.js
+++ b/ui/file_manager/file_manager/foreground/js/main.js
@@ -7,7 +7,10 @@
  */
 
 import '../../common/js/error_counter.js';
+import '../../background/js/metrics_start.js';
 import './metrics_start.js';
+import '../../background/js/file_manager_base.js';
+import '../../background/js/volume_manager_impl.js';
 
 import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js';
 
diff --git a/ui/file_manager/integration_tests/file_manager/quick_view.js b/ui/file_manager/integration_tests/file_manager/quick_view.js
index c3a15b1..5f2faf78 100644
--- a/ui/file_manager/integration_tests/file_manager/quick_view.js
+++ b/ui/file_manager/integration_tests/file_manager/quick_view.js
@@ -1557,8 +1557,13 @@
   const backgroundColor = await remoteCall.executeJsInPreviewTag(
       appId, preview, getBackgroundStyle);
 
-  // Check: the preview body backgroundColor should be transparent black.
-  chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  if (await isDarkModeEnabled()) {
+    // Check: the preview body backgroundColor should be black.
+    chrome.test.assertEq('rgb(0, 0, 0)', backgroundColor[0]);
+  } else {
+    // Check: the preview body backgroundColor should be transparent black.
+    chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  }
 
   // Check: the correct mimeType should be displayed.
   const mimeType = await getQuickViewMetadataBoxField(appId, 'Type');
@@ -1606,8 +1611,13 @@
   const backgroundColor = await remoteCall.executeJsInPreviewTag(
       appId, preview, getBackgroundStyle);
 
-  // Check: the preview body backgroundColor should be transparent black.
-  chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  if (await isDarkModeEnabled()) {
+    // Check: the preview body backgroundColor should be black.
+    chrome.test.assertEq('rgb(0, 0, 0)', backgroundColor[0]);
+  } else {
+    // Check: the preview body backgroundColor should be transparent black.
+    chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  }
 
   // Check: the correct mimeType should be displayed.
   const mimeType = await getQuickViewMetadataBoxField(appId, 'Type');
@@ -1972,8 +1982,13 @@
   const backgroundColor = await remoteCall.executeJsInPreviewTag(
       appId, preview, getBackgroundStyle);
 
-  // Check: the preview body backgroundColor should be transparent black.
-  chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  if (await isDarkModeEnabled()) {
+    // Check: the preview body backgroundColor should be black.
+    chrome.test.assertEq('rgb(0, 0, 0)', backgroundColor[0]);
+  } else {
+    // Check: the preview body backgroundColor should be transparent black.
+    chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  }
 
   // Check: the correct mimeType should be displayed.
   const mimeType = await getQuickViewMetadataBoxField(appId, 'Type');
@@ -2028,8 +2043,13 @@
   const backgroundColor = await remoteCall.executeJsInPreviewTag(
       appId, preview, getBackgroundStyle);
 
-  // Check: the preview body backgroundColor should be transparent black.
-  chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  if (await isDarkModeEnabled()) {
+    // Check: the preview body backgroundColor should be black.
+    chrome.test.assertEq('rgb(0, 0, 0)', backgroundColor[0]);
+  } else {
+    // Check: the preview body backgroundColor should be transparent black.
+    chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+  }
 
   // Check: the correct mimeType should be displayed.
   const mimeType = await getQuickViewMetadataBoxField(appId, 'Type');
diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc
index fb04309..203151b6 100644
--- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc
+++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc
@@ -111,10 +111,9 @@
   DCHECK(!origin_window_);
   DCHECK(!icon_surface_);
 
-  WaylandWindow* origin_window =
-      source == DragEventSource::kTouch
-          ? window_manager_->GetCurrentTouchFocusedWindow()
-          : window_manager_->GetCurrentPointerFocusedWindow();
+  auto* origin_window = source == DragEventSource::kTouch
+                            ? window_manager_->GetCurrentTouchFocusedWindow()
+                            : window_manager_->GetCurrentPointerFocusedWindow();
   if (!origin_window) {
     LOG(ERROR) << "Failed to get focused window. source=" << source;
     return false;
@@ -163,9 +162,7 @@
 
   // Starts the wayland drag session setting |this| object as delegate.
   state_ = State::kStarted;
-  drag_source_ = serial->type == wl::SerialType::kTouchPress
-                     ? DragSource::kTouch
-                     : DragSource::kMouse;
+  drag_source_ = source;
   data_device_->StartDrag(*data_source_, *origin_window, serial->value,
                           icon_surface_ ? icon_surface_->surface() : nullptr,
                           this);
@@ -309,7 +306,7 @@
   // drag motion events.
   if (pointer_grabber_for_window_drag_) {
     DCHECK(drag_source_.has_value());
-    if (*drag_source_ == DragSource::kMouse) {
+    if (*drag_source_ == DragEventSource::kMouse) {
       pointer_delegate_->OnPointerFocusChanged(
           window, location, wl::EventDispatchPolicy::kImmediate);
     } else {
diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.h b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.h
index 6cfbd54..69802b84 100644
--- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.h
+++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.h
@@ -80,10 +80,6 @@
     kStarted,       // The outgoing drag is in progress.
     kTransferring,  // The incoming data is transferred from the source.
   };
-  enum class DragSource {
-    kMouse,
-    kTouch,
-  };
 
   WaylandDataDragController(WaylandConnection* connection,
                             WaylandDataDeviceManager* data_device_manager,
@@ -196,7 +192,7 @@
   const raw_ptr<WaylandTouch::Delegate> touch_delegate_;
 
   State state_ = State::kIdle;
-  absl::optional<DragSource> drag_source_;
+  absl::optional<mojom::DragEventSource> drag_source_;
 
   // Data offered by us to the other side.
   std::unique_ptr<WaylandDataSource> data_source_;
diff --git a/ui/ozone/platform/wayland/host/wayland_event_source.cc b/ui/ozone/platform/wayland/host/wayland_event_source.cc
index 9d016bc8..d802e7f 100644
--- a/ui/ozone/platform/wayland/host/wayland_event_source.cc
+++ b/ui/ozone/platform/wayland/host/wayland_event_source.cc
@@ -15,6 +15,7 @@
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/keycodes/dom/dom_code.h"
@@ -756,8 +757,7 @@
   // is a valid target window to transfer the touch points to.
   if (auto* target_window = window_manager_->GetCurrentTouchFocusedWindow()) {
     auto drag_source = connection_->window_drag_controller()->drag_source();
-    if (drag_source &&
-        *drag_source == WaylandWindowDragController::DragSource::kTouch) {
+    if (drag_source && *drag_source == mojom::DragEventSource::kTouch) {
       for (auto& touch_point : touch_points_)
         touch_point.second->window = target_window;
       return;
diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
index 8df5737..7bdb187 100644
--- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
@@ -760,10 +760,7 @@
       allow_system_drag) {
     return;
   }
-  connection()->window_drag_controller()->StartDragSession(
-      this, event_source == ui::mojom::DragEventSource::kTouch
-                ? WaylandWindowDragController::DragSource::kTouch
-                : WaylandWindowDragController::DragSource::kMouse);
+  connection()->window_drag_controller()->StartDragSession(this, event_source);
 }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
index b1b2b2c0..4a620f30 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
@@ -21,7 +21,7 @@
 #include "base/notreached.h"
 #include "base/run_loop.h"
 #include "base/task/current_thread.h"
-#include "ui/base/dragdrop/drag_drop_types.h"
+#include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
 #include "ui/events/event.h"
@@ -54,6 +54,8 @@
 
 namespace {
 
+using mojom::DragEventSource;
+
 // Custom mime type used for window dragging DND sessions.
 constexpr char kMimeTypeChromiumWindow[] = "chromium/x-window";
 
@@ -113,14 +115,14 @@
 
 bool WaylandWindowDragController::StartDragSession(
     WaylandToplevelWindow* origin,
-    DragSource drag_source) {
+    DragEventSource drag_source) {
   if (state_ != State::kIdle)
     return true;
 
   auto serial = GetSerial(drag_source, origin);
   if (!serial) {
     LOG(ERROR) << "Failed to retrieve dnd serial. origin=" << origin
-               << " drag_source=" << static_cast<int>(drag_source);
+               << " drag_source=" << drag_source;
     return false;
   }
 
@@ -226,7 +228,7 @@
 
   DCHECK(drag_source_.has_value());
   // Check if this is necessary.
-  if (*drag_source_ == DragSource::kMouse) {
+  if (*drag_source_ == DragEventSource::kMouse) {
     pointer_delegate_->OnPointerFocusChanged(
         window, location, wl::EventDispatchPolicy::kImmediate);
   } else {
@@ -263,7 +265,7 @@
   should_process_drag_event_ = true;
   pointer_location_ = location;
 
-  if (*drag_source_ == DragSource::kMouse) {
+  if (*drag_source_ == DragEventSource::kMouse) {
     pointer_delegate_->OnPointerMotionEvent(
         location, wl::EventDispatchPolicy::kImmediate);
   } else {
@@ -318,7 +320,7 @@
   if (state_ != State::kAttached)
     return;
 
-  if (*drag_source_ == DragSource::kMouse) {
+  if (*drag_source_ == DragEventSource::kMouse) {
     pointer_delegate_->OnPointerMotionEvent(
         {pointer_location_.x(), -1}, wl::EventDispatchPolicy::kImmediate);
   } else {
@@ -376,7 +378,7 @@
   // (see OnDragEnter function).
   // In case of touch, though, we simply reset the focus altogether.
   if (IsExtendedDragAvailableInternal() && dragged_window_) {
-    if (*drag_source_ == DragSource::kMouse) {
+    if (*drag_source_ == DragEventSource::kMouse) {
       // TODO: check if this usage is correct.
 
       pointer_delegate_->OnPointerFocusChanged(
@@ -492,7 +494,7 @@
   if (!drag_source_.has_value())
     return;
 
-  if (*drag_source_ == DragSource::kMouse) {
+  if (*drag_source_ == DragEventSource::kMouse) {
     if (pointer_grab_owner_) {
       pointer_delegate_->OnPointerButtonEvent(
           ET_MOUSE_RELEASED, EF_LEFT_MOUSE_BUTTON, pointer_grab_owner_,
@@ -573,17 +575,17 @@
 }
 
 absl::optional<wl::Serial> WaylandWindowDragController::GetSerial(
-    DragSource drag_source,
+    DragEventSource drag_source,
     WaylandToplevelWindow* origin) {
-  auto* focused = drag_source == DragSource::kMouse
+  auto* focused = drag_source == DragEventSource::kMouse
                       ? window_manager_->GetCurrentPointerFocusedWindow()
                       : window_manager_->GetCurrentTouchFocusedWindow();
   if (!origin || focused != origin) {
     return absl::nullopt;
   }
   return connection_->serial_tracker().GetSerial(
-      drag_source == DragSource::kMouse ? wl::SerialType::kMousePress
-                                        : wl::SerialType::kTouchPress);
+      drag_source == DragEventSource::kMouse ? wl::SerialType::kMousePress
+                                             : wl::SerialType::kTouchPress);
 }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.h b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.h
index 0f86cfb..17ecd72 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.h
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.h
@@ -13,6 +13,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "ui/base/dragdrop/mojom/drag_drop_types.mojom-forward.h"
 #include "ui/events/event.h"
 #include "ui/events/platform/platform_event_dispatcher.h"
 #include "ui/events/platform/scoped_event_dispatcher.h"
@@ -56,10 +57,6 @@
     kCancelled,  // Drag cancel event was just received.
     kAttaching,  // About to transition back to |kAttached|.
   };
-  enum class DragSource {
-    kMouse,
-    kTouch,
-  };
 
   WaylandWindowDragController(WaylandConnection* connection,
                               WaylandDataDeviceManager* device_manager,
@@ -75,7 +72,8 @@
   // the event type that is triggering the drag session, ie: mouse or touch. See
   // https://wayland.app/protocols/wayland#wl_data_device:request:start_drag for
   // more protocol-related information.
-  bool StartDragSession(WaylandToplevelWindow* origin, DragSource event_source);
+  bool StartDragSession(WaylandToplevelWindow* origin,
+                        mojom::DragEventSource event_source);
 
   bool Drag(WaylandToplevelWindow* window, const gfx::Vector2d& offset);
   void StopDragging();
@@ -94,7 +92,7 @@
 
   WaylandWindow* origin_window_for_testing() { return origin_window_; }
 
-  absl::optional<DragSource> drag_source() { return drag_source_; }
+  absl::optional<mojom::DragEventSource> drag_source() { return drag_source_; }
 
  private:
   class ExtendedDragSource;
@@ -149,7 +147,7 @@
 
   // Returns the serial for the given |drag_source| if |origin| has the
   // corresponding focus, otherwise return null.
-  absl::optional<wl::Serial> GetSerial(DragSource drag_source,
+  absl::optional<wl::Serial> GetSerial(mojom::DragEventSource drag_source,
                                        WaylandToplevelWindow* origin);
 
   const raw_ptr<WaylandConnection> connection_;
@@ -160,7 +158,7 @@
   const raw_ptr<WaylandTouch::Delegate> touch_delegate_;
 
   State state_ = State::kIdle;
-  absl::optional<DragSource> drag_source_;
+  absl::optional<mojom::DragEventSource> drag_source_;
 
   gfx::Vector2d drag_offset_;
 
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
index 7e56b04..0b98de2 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
@@ -1448,7 +1448,6 @@
 }
 
 TEST_P(WaylandWindowDragControllerTest, GetSerial) {
-  using DragSource = WaylandWindowDragController::DragSource;
   auto* origin = static_cast<WaylandToplevelWindow*>(window_.get());
   auto& window_manager = *connection_->window_manager();
 
@@ -1456,20 +1455,20 @@
   window_manager.SetTouchFocusedWindow(nullptr);
   serial_tracker().ClearForTesting();
   {  // No serial, no window focused.
-    auto serial = drag_controller()->GetSerial(DragSource::kMouse, origin);
+    auto serial = drag_controller()->GetSerial(DragEventSource::kMouse, origin);
     EXPECT_FALSE(serial.has_value());
   }
 
   // Check cases where only pointer focus info is set.
   {  // Serial available, but no window focused.
     serial_tracker().UpdateSerial(wl::SerialType::kMousePress, 1u);
-    auto serial = drag_controller()->GetSerial(DragSource::kMouse, origin);
+    auto serial = drag_controller()->GetSerial(DragEventSource::kMouse, origin);
     EXPECT_FALSE(serial.has_value());
   }
 
   {  // Both serial and focused window available.
     window_manager.SetPointerFocusedWindow(window_.get());
-    auto serial = drag_controller()->GetSerial(DragSource::kMouse, origin);
+    auto serial = drag_controller()->GetSerial(DragEventSource::kMouse, origin);
     ASSERT_TRUE(serial.has_value());
     EXPECT_EQ(wl::SerialType::kMousePress, serial->type);
     EXPECT_EQ(1u, serial->value);
@@ -1481,12 +1480,12 @@
   serial_tracker().ClearForTesting();
   {  // Serial available, but no window focused.
     serial_tracker().UpdateSerial(wl::SerialType::kTouchPress, 2u);
-    auto serial = drag_controller()->GetSerial(DragSource::kTouch, origin);
+    auto serial = drag_controller()->GetSerial(DragEventSource::kTouch, origin);
     EXPECT_FALSE(serial.has_value());
   }
   {  // Both serial and focused window available.
     window_manager.SetTouchFocusedWindow(window_.get());
-    auto serial = drag_controller()->GetSerial(DragSource::kTouch, origin);
+    auto serial = drag_controller()->GetSerial(DragEventSource::kTouch, origin);
     ASSERT_TRUE(serial.has_value());
     EXPECT_EQ(wl::SerialType::kTouchPress, serial->type);
     EXPECT_EQ(2u, serial->value);
diff --git a/ui/ozone/platform/wayland/host/wayland_window_manager.cc b/ui/ozone/platform/wayland/host/wayland_window_manager.cc
index 0443d34..10ff600 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_manager.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_manager.cc
@@ -5,6 +5,7 @@
 #include "ui/ozone/platform/wayland/host/wayland_window_manager.h"
 
 #include "base/observer_list.h"
+#include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection.h"
 #include "ui/ozone/platform/wayland/host/wayland_window.h"
 #include "ui/ozone/platform/wayland/host/wayland_window_drag_controller.h"
@@ -101,7 +102,7 @@
   // TODO(https://crbug.com/1317063): Apply the same logic to data drag sessions
   // too?
   if (auto drag_source = connection_->window_drag_controller()->drag_source()) {
-    return *drag_source == WaylandWindowDragController::DragSource::kMouse
+    return *drag_source == mojom::DragEventSource::kMouse
                ? GetCurrentPointerFocusedWindow()
                : GetCurrentTouchFocusedWindow();
   }