diff --git a/DEPS b/DEPS
index 7d298167..33fe59b 100644
--- a/DEPS
+++ b/DEPS
@@ -318,11 +318,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'b17ee34f337883f45840d16927eb9eb799df8768',
+  'skia_revision': '91b16a4fdf6ebbb59df08617886375d21041fe9c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'eaac5ac5bf7c449ca20198abbb8961b7038bc38d',
+  'v8_revision': 'cb7e3eb9cb05d2f42d99a8e6fef4df6f81263d53',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -393,7 +393,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling chromium_variations
   # and whatever else without interference from each other.
-  'chromium_variations_revision': '1d9fe73073424c48d77355589c3f1fe1cae8f957',
+  'chromium_variations_revision': 'dbb3277934d7cb4b35b302941437871f2f579879',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling CrossBench
   # and whatever else without interference from each other.
@@ -409,7 +409,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'd2267b529d602a797f9d326b4a1610ad92373caa',
+  'devtools_frontend_revision': 'e4590077122a04c3ab18c08a87bb6eff665fe2a8',
   # 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.
@@ -475,6 +475,10 @@
   # and whatever else without interference from each other.
   'libavifinfo_revision': '707919b2f8ac1920b2f7ae252c233f9c6dcf84e1',
   # Three lines of non-changing comments so that
+  # the commit queue can handle CLs rolling Speedometer v3.0
+  # and whatever else without interference from each other.
+  'speedometer_3.0_revision': '5107c739c1b2a008e7293e3b489c4f80a8fb2e01',
+  # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling nearby
   # and whatever else without interference from each other.
   'nearby_revision': 'ea7aa00e0cd99a0fab900ae55e727fd5acf672fd',
@@ -845,7 +849,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '266719310f4a0028db81ba7fe84f79067f589c37',
+    '53a7e81a8728e0b93c34a1a7d162c4b75e960f6d',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1051,7 +1055,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'ShorF2fS6vMBeVoGm6R9T3VGk6tbzhf9_rVunvTPbg4C',
+          'version': 'Rs0MozIVHR4zqROQNSuoZAss3M4WWCtQRnrNSaDa-VEC',
       },
     ],
     'condition': 'checkout_android',
@@ -1301,7 +1305,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '2ef89ce126db2ec09937b6eafe38582ee6605531',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '2c6423900dc9b550cba8f3954b60104f3fc433c8',
     'condition': 'checkout_src_internal',
   },
 
@@ -1576,6 +1580,9 @@
   'src/third_party/securemessage/src':
     Var('chromium_git') + '/external/github.com/google/securemessage.git' + '@' + Var('securemessage_revision'),
 
+  'src/third_party/speedometer/v3.0':
+    Var('chromium_git') + '/external/github.com/WebKit/Speedometer.git' + '@' + Var('speedometer_3.0_revision'),
+
   'src/third_party/ukey2/src':
     Var('chromium_git') + '/external/github.com/google/ukey2.git' + '@' + Var('ukey2_revision'),
 
@@ -1770,7 +1777,7 @@
     Var('pdfium_git') + '/pdfium.git' + '@' +  Var('pdfium_revision'),
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '10b980190fea75c5472eee93fc42a8c4a3eaadd3',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '1d0ca0005e4681498030fc4c1015abbec4a2077c',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1810,7 +1817,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'yG6aCoW-nKG7aqWMZkE1TsvMCxvP7KxJ9PsaRbytuyEC',
+              'version': '1HLdfcfdsOjdYB7O7uOnFZxewyQ2zrJNqytyrQk1GRIC',
           },
       ],
       'condition': 'checkout_android',
@@ -1955,7 +1962,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '2ee990a4cb91b41491f83b52c9520476b18a9fd8',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '0720e9ac1dd4230e051b3e415f69ff4fc505315b',
+    Var('webrtc_git') + '/src.git' + '@' + '92fe5c4db3bf97b559640b196d8c40a7b3e10a78',
 
   # 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.
@@ -2122,7 +2129,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'ePDvwkG732_MZCt7B59-O9Soz4L4QNBWUrlvJHs1naIC',
+        'version': 'wHDE3uIVW6jYYJKEITB2gHaQZSwHb9PN9-zjtbFK6NMC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -4220,7 +4227,7 @@
 
   'src/components/test/data/autofill/heuristics-json/internal': {
       'url': Var('chrome_git') + '/chrome/test/autofill/structured_forms.git' + '@' +
-        'fc9323141d970c474cb466c32c9be6cfcf20e549',
+        '7bae2821e7e52bc963559dc9989c05850a8b6853',
       'condition': 'checkout_chromium_autofill_test_dependencies',
   },
 
@@ -4244,7 +4251,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        '395eebb2cf8df3529abc75b898367d14de84978b',
+        '90b6ca5bc5942ca1b25e4504339f80716d2dadbe',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/android_webview/OWNERS b/android_webview/OWNERS
index cc7324d..27a3dbe 100644
--- a/android_webview/OWNERS
+++ b/android_webview/OWNERS
@@ -4,6 +4,9 @@
 torne@chromium.org
 peter@chromium.org
 
+# Coverage for peter@ during out of office time:
+peconn@chromium.org
+
 # Documentation changes:
 per-file *.md=file://android_webview/docs/OWNERS
 
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index ceb00b2..468017e 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -45,6 +45,7 @@
 #include "base/base_paths_android.h"
 #include "base/base_switches.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/files/scoped_file.h"
 #include "base/functional/bind.h"
@@ -208,7 +209,7 @@
 
   // If accept languages do not contain en-US, add in en-US which will be
   // used with a lower q-value.
-  if (locales_string.find("en-US") == std::string::npos) {
+  if (!base::Contains(locales_string, "en-US")) {
     locales_string += ",en-US";
   }
   return locales_string;
diff --git a/android_webview/browser/aw_permission_manager.cc b/android_webview/browser/aw_permission_manager.cc
index 905bd0f..5f37ce9 100644
--- a/android_webview/browser/aw_permission_manager.cc
+++ b/android_webview/browser/aw_permission_manager.cc
@@ -10,6 +10,7 @@
 #include <utility>
 
 #include "android_webview/browser/aw_browser_permission_request_delegate.h"
+#include "base/containers/contains.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/logging.h"
@@ -209,7 +210,7 @@
   }
 
   bool HasPermissionType(PermissionType type) {
-    return permission_index_map_.find(type) != permission_index_map_.end();
+    return base::Contains(permission_index_map_, type);
   }
 
   bool IsCompleted() const {
diff --git a/android_webview/browser/aw_settings.cc b/android_webview/browser/aw_settings.cc
index b7cc65c..2b193953 100644
--- a/android_webview/browser/aw_settings.cc
+++ b/android_webview/browser/aw_settings.cc
@@ -20,6 +20,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
+#include "base/containers/contains.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/supports_user_data.h"
@@ -224,7 +225,7 @@
     const bool propagate_uach_metadata =
         base::FeatureList::IsEnabled(blink::features::kUserAgentClientHint) &&
         !ua_string_override.empty() &&
-        ua_string_override.find(ua_default) != std::string::npos;
+        base::Contains(ua_string_override, ua_default);
     if (propagate_uach_metadata) {
       override_ua_with_metadata.ua_metadata_override =
           AwClientHintsControllerDelegate::GetUserAgentMetadataOverrideBrand();
diff --git a/android_webview/browser/icon_helper.cc b/android_webview/browser/icon_helper.cc
index 370b13db..46935eaa 100644
--- a/android_webview/browser/icon_helper.cc
+++ b/android_webview/browser/icon_helper.cc
@@ -5,6 +5,7 @@
 #include "android_webview/browser/icon_helper.h"
 
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/hash/hash.h"
@@ -128,7 +129,7 @@
 
 bool IconHelper::WasUnableToDownloadFavicon(const GURL& icon_url) const {
   MissingFaviconURLHash url_hash = base::FastHash(icon_url.spec());
-  return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end();
+  return base::Contains(missing_favicon_urls_, url_hash);
 }
 
 void IconHelper::ClearUnableToDownloadFavicons() {
diff --git a/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.cc b/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.cc
index f804101..87ee52b 100644
--- a/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.cc
+++ b/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "android_webview/browser_jni_headers/AwContentsLifecycleNotifier_jni.h"
+#include "base/containers/contains.h"
 #include "content/public/browser/browser_thread.h"
 
 using base::android::AttachCurrentThread;
@@ -66,7 +67,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   has_aw_contents_ever_created_ = true;
   bool first_created = !HasAwContentsInstance();
-  DCHECK(aw_contents_to_data_.find(aw_contents) == aw_contents_to_data_.end());
+  DCHECK(!base::Contains(aw_contents_to_data_, aw_contents));
 
   aw_contents_to_data_.emplace(aw_contents, AwContentsData());
   state_count_[ToIndex(AwContentsState::kDetached)]++;
@@ -206,7 +207,7 @@
 
 AwContentsLifecycleNotifier::AwContentsData*
 AwContentsLifecycleNotifier::GetAwContentsData(const AwContents* aw_contents) {
-  DCHECK(aw_contents_to_data_.find(aw_contents) != aw_contents_to_data_.end());
+  DCHECK(base::Contains(aw_contents_to_data_, aw_contents));
   return &aw_contents_to_data_.at(aw_contents);
 }
 
diff --git a/android_webview/browser/metrics/visibility_metrics_logger.cc b/android_webview/browser/metrics/visibility_metrics_logger.cc
index 8143c91..af6b9f42 100644
--- a/android_webview/browser/metrics/visibility_metrics_logger.cc
+++ b/android_webview/browser/metrics/visibility_metrics_logger.cc
@@ -4,6 +4,7 @@
 
 #include "android_webview/browser/metrics/visibility_metrics_logger.h"
 
+#include "base/containers/contains.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_base.h"
 #include "base/time/time.h"
@@ -162,7 +163,7 @@
 
 void VisibilityMetricsLogger::AddClient(Client* client) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  DCHECK(client_visibility_.find(client) == client_visibility_.end());
+  DCHECK(!base::Contains(client_visibility_, client));
 
   UpdateDurations();
 
@@ -173,7 +174,7 @@
 
 void VisibilityMetricsLogger::RemoveClient(Client* client) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  DCHECK(client_visibility_.find(client) != client_visibility_.end());
+  DCHECK(base::Contains(client_visibility_, client));
 
   UpdateDurations();
 
@@ -183,7 +184,7 @@
 
 void VisibilityMetricsLogger::ClientVisibilityChanged(Client* client) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  DCHECK(client_visibility_.find(client) != client_visibility_.end());
+  DCHECK(base::Contains(client_visibility_, client));
 
   UpdateDurations();
 
diff --git a/android_webview/nonembedded/component_updater/aw_component_update_service.cc b/android_webview/nonembedded/component_updater/aw_component_update_service.cc
index 41b01c9b..c70db8a 100644
--- a/android_webview/nonembedded/component_updater/aw_component_update_service.cc
+++ b/android_webview/nonembedded/component_updater/aw_component_update_service.cc
@@ -15,6 +15,7 @@
 #include "base/android/scoped_java_ref.h"
 #include "base/check.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/functional/callback_helpers.h"
 #include "base/no_destructor.h"
 #include "base/task/single_thread_task_runner.h"
@@ -105,7 +106,7 @@
   std::vector<std::string> secure_ids;    // Require HTTPS for update checks.
   std::vector<std::string> unsecure_ids;  // Can fallback to HTTP.
   for (const auto& id : components_order_) {
-    DCHECK(components_.find(id) != components_.end());
+    DCHECK(base::Contains(components_, id));
 
     const auto component = component_updater::GetComponent(components_, id);
     if (!component || component->requires_network_encryption)
diff --git a/android_webview/nonembedded/component_updater/aw_component_update_service_test.cc b/android_webview/nonembedded/component_updater/aw_component_update_service_test.cc
index 8865657..0366ace 100644
--- a/android_webview/nonembedded/component_updater/aw_component_update_service_test.cc
+++ b/android_webview/nonembedded/component_updater/aw_component_update_service_test.cc
@@ -14,6 +14,7 @@
 #include "android_webview/nonembedded/component_updater/aw_component_updater_configurator.h"
 #include "base/android/path_utils.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/functional/callback.h"
@@ -178,10 +179,10 @@
         .Run(/* responseCode= */ 200, /* content_size= */ 0);
     std::string response_body;
     int network_error = 0;
-    if (post_data.find("updatecheck") != std::string::npos) {
+    if (base::Contains(post_data, "updatecheck")) {
       ASSERT_TRUE(base::ReadFileToString(
           GetTestFile("fake_component_update_response.json"), &response_body));
-    } else if (post_data.find("eventtype") != std::string::npos) {
+    } else if (base::Contains(post_data, "eventtype")) {
       ASSERT_TRUE(base::ReadFileToString(
           GetTestFile("fake_component_ping_response.json"), &response_body));
     } else {  // error post request not a ping nor update.
diff --git a/android_webview/test/browser/embedded_component_loader_test_helper.cc b/android_webview/test/browser/embedded_component_loader_test_helper.cc
index c473a27..f09d9c0 100644
--- a/android_webview/test/browser/embedded_component_loader_test_helper.cc
+++ b/android_webview/test/browser/embedded_component_loader_test_helper.cc
@@ -14,6 +14,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/files/scoped_file.h"
 #include "base/values.h"
@@ -59,7 +60,7 @@
     ExpectTrueToJava(version.GetString() == "123.456.789",
                      "version != 123.456.789");
     ExpectTrueToJava(fd_map.size() == 1u, "fd_map.size != 1");
-    ExpectTrueToJava(fd_map.find("file.test") != fd_map.end(),
+    ExpectTrueToJava(base::Contains(fd_map, "file.test"),
                      "file.test is not found in the fd_map");
     Java_EmbeddedComponentLoaderTest_onComponentLoaded(
         base::android::AttachCurrentThread());
diff --git a/android_webview/test/embedded_test_server/aw_embedded_test_server.cc b/android_webview/test/embedded_test_server/aw_embedded_test_server.cc
index aeb8ea6..8b274608 100644
--- a/android_webview/test/embedded_test_server/aw_embedded_test_server.cc
+++ b/android_webview/test/embedded_test_server/aw_embedded_test_server.cc
@@ -32,24 +32,29 @@
 std::unique_ptr<HttpResponse> HandleClickRedirect(const HttpRequest& request) {
   if (!ShouldHandle(request, "/click-redirect"))
     return nullptr;
-  GURL request_url = request.GetURL();
-  RequestQuery query = ParseQuery(request_url);
+
+  const GURL request_url = request.GetURL();
+  const RequestQuery query = ParseQuery(request_url);
 
   std::unique_ptr<BasicHttpResponse> http_response(new BasicHttpResponse);
   http_response->set_content_type("text/html");
   http_response->AddCustomHeader("Cache-Control", "no-cache, no-store");
 
   std::string url;
-  if (query.find("url") != query.end()) {
-    url = query.at("url").front();
+  auto url_query_iter = query.find("url");
+  if (url_query_iter != query.end() && !url_query_iter->second.empty()) {
+    url = url_query_iter->second.front();
   }
 
   std::string content;
-  if (query.find("header") != query.end()) {
-    for (const auto& header : query.at("header")) {
+  auto header_query_iter = query.find("header");
+  if (header_query_iter != query.end() && !header_query_iter->second.empty()) {
+    for (const std::string& header : header_query_iter->second) {
       std::string header_value = "None";
-      if (request.headers.find(header) != request.headers.end())
-        header_value = request.headers.at(header);
+      auto header_iter = request.headers.find(header);
+      if (header_iter != request.headers.end()) {
+        header_value = header_iter->second;
+      }
       content += header_value + "\n";
     }
   }
@@ -69,15 +74,17 @@
     const HttpRequest& request) {
   if (!ShouldHandle(request, "/echoheader-and-set-data"))
     return nullptr;
-  GURL request_url = request.GetURL();
-  RequestQuery query = ParseQuery(request_url);
+
+  const GURL request_url = request.GetURL();
+  const RequestQuery query = ParseQuery(request_url);
 
   std::string header_content;
-  if (query.find("header") != query.end()) {
-    for (const auto& header : query.at("header")) {
-      std::string header_value = "None";
-      if (request.headers.find(header) != request.headers.end())
-        header_value = request.headers.at(header);
+  auto header_query_iter = query.find("header");
+  if (header_query_iter != query.end() && !header_query_iter->second.empty()) {
+    for (const std::string& header : header_query_iter->second) {
+      auto header_iter = request.headers.find(header);
+      std::string header_value =
+          (header_iter != request.headers.end()) ? header_iter->second : "None";
       if (!header_content.empty())
         header_content += ",";
       header_content += "\"" + header_value + "\"";
@@ -85,8 +92,9 @@
   }
 
   std::string data_content;
-  if (query.find("data") != query.end()) {
-    for (const auto& data : query.at("data")) {
+  auto data_query_iter = query.find("data");
+  if (data_query_iter != query.end() && !data_query_iter->second.empty()) {
+    for (const std::string& data : data_query_iter->second) {
       if (!data_content.empty())
         data_content += ", ";
       data_content += "\"" + data + "\"";
@@ -113,20 +121,23 @@
     const HttpRequest& request) {
   if (!ShouldHandle(request, "/server-redirect-echoheader"))
     return nullptr;
-  GURL request_url = request.GetURL();
-  RequestQuery query = ParseQuery(request_url);
+
+  const GURL request_url = request.GetURL();
+  const RequestQuery query = ParseQuery(request_url);
 
   std::string url;
-  if (query.find("url") != query.end()) {
-    url = query.at("url").front();
+  auto url_query_iter = query.find("url");
+  if (url_query_iter != query.end() && !url_query_iter->second.empty()) {
+    url = url_query_iter->second.front();
   }
 
   std::string url_suffix;
-  if (query.find("header") != query.end()) {
-    for (const auto& header : query.at("header")) {
-      std::string header_value = "None";
-      if (request.headers.find(header) != request.headers.end())
-        header_value = request.headers.at(header);
+  auto header_query_iter = query.find("header");
+  if (header_query_iter != query.end() && !header_query_iter->second.empty()) {
+    for (const std::string& header : header_query_iter->second) {
+      auto header_iter = request.headers.find(header);
+      std::string header_value =
+          (header_iter != request.headers.end()) ? header_iter->second : "None";
       url_suffix += "&data=" + header_value;
     }
   }
@@ -147,17 +158,21 @@
     const HttpRequest& request) {
   if (!ShouldHandle(request, "/image-response-if-header-not-exists"))
     return nullptr;
-  GURL request_url = request.GetURL();
-  RequestQuery query = ParseQuery(request_url);
+
+  const GURL request_url = request.GetURL();
+  const RequestQuery query = ParseQuery(request_url);
 
   std::string resource;
-  if (query.find("resource") != query.end()) {
-    resource = query.at("resource").front();
+  auto resource_query_iter = query.find("resource");
+  if (resource_query_iter != query.end() &&
+      !resource_query_iter->second.empty()) {
+    resource = resource_query_iter->second.front();
   }
 
   bool header_exist = false;
-  if (query.find("header") != query.end()) {
-    for (const auto& header : query.at("header")) {
+  auto header_query_iter = query.find("header");
+  if (header_query_iter != query.end() && !header_query_iter->second.empty()) {
+    for (const std::string& header : header_query_iter->second) {
       if (request.headers.find(header) != request.headers.end()) {
         header_exist = true;
         break;
@@ -172,12 +187,13 @@
   std::unique_ptr<BasicHttpResponse> http_response(new BasicHttpResponse);
   http_response->set_content_type("image/png");
   http_response->AddCustomHeader("Cache-Control", "no-store");
-  if (!header_exist)
+  if (!header_exist) {
     http_response->set_content(decoded_resource);
-  else {
+  } else {
     http_response->set_code(net::HTTP_NOT_FOUND);
     http_response->set_content("Found Extra Header. Validation Failed.");
   }
+
   return std::move(http_response);
 }
 
@@ -187,20 +203,26 @@
     const HttpRequest& request) {
   if (!ShouldHandle(request, "/image-onload-html"))
     return nullptr;
-  GURL request_url = request.GetURL();
-  RequestQuery query = ParseQuery(request_url);
+
+  const GURL request_url = request.GetURL();
+  const RequestQuery query = ParseQuery(request_url);
 
   std::string image_url;
-  if (query.find("imagesrc") != query.end()) {
-    image_url = query.at("imagesrc").front();
+  auto imagesrc_query_iter = query.find("imagesrc");
+  if (imagesrc_query_iter != query.end() &&
+      !imagesrc_query_iter->second.empty()) {
+    image_url = imagesrc_query_iter->second.front();
   }
 
   std::string content;
-  if (query.find("header") != query.end()) {
-    for (const auto& header : query.at("header")) {
+  auto header_query_iter = query.find("header");
+  if (header_query_iter != query.end() && !header_query_iter->second.empty()) {
+    for (const std::string& header : header_query_iter->second) {
       std::string header_value = "None";
-      if (request.headers.find(header) != request.headers.end())
-        header_value = request.headers.at(header);
+      auto header_value_iter = request.headers.find(header);
+      if (header_value_iter != request.headers.end()) {
+        header_value = header_value_iter->second;
+      }
       content += header_value + "\n";
     }
   }
@@ -214,6 +236,7 @@
       "<div onload='updateTitle();'><img id='img' onload='updateTitle();' "
       "src='%s'></div></body></html>",
       content.c_str(), image_url.c_str()));
+
   return std::move(http_response);
 }
 
diff --git a/base/functional/bind_internal.h b/base/functional/bind_internal.h
index 8fea91eb..6c64265 100644
--- a/base/functional/bind_internal.h
+++ b/base/functional/bind_internal.h
@@ -23,7 +23,6 @@
 #include "base/functional/unretained_traits.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ptr_asan_bound_arg_tracker.h"
-#include "base/memory/raw_ptr_asan_service.h"
 #include "base/memory/raw_ref.h"
 #include "base/memory/raw_scoped_refptr_mismatch_checker.h"
 #include "base/memory/weak_ptr.h"
diff --git a/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py b/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
index 0fd7dcdd..67821275 100644
--- a/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
+++ b/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
@@ -37,7 +37,7 @@
     return DiffTestBlueprint(
         trace=DataPath('event_latency_with_args.perfetto-trace'),
         query="""
-        SELECT RUN_METRIC('chrome/event_latency_to_breakdowns.sql');
+        SELECT IMPORT('chrome.scroll_jank.event_latency_to_breakdowns');
 
         SELECT
           event_latency_ts,
@@ -48,7 +48,7 @@
           BrowserMainToRendererCompositorNs,
           RendererCompositorQueueingDelayNs,
           unknown_stages_seen
-        FROM event_latency_to_breakdowns
+        FROM chrome_event_latency_to_breakdowns
         ORDER BY event_latency_id
         LIMIT 30;
         """,
@@ -58,7 +58,7 @@
     return DiffTestBlueprint(
         trace=DataPath('chrome_input_with_frame_view.pftrace'),
         query="""
-        SELECT RUN_METRIC('chrome/chrome_scroll_jank_v3.sql');
+        SELECT IMPORT('chrome.scroll_jank.scroll_jank_v3');
 
         SELECT
           cause_of_jank,
@@ -73,7 +73,7 @@
     return DiffTestBlueprint(
         trace=DataPath('chrome_input_with_frame_view.pftrace'),
         query="""
-        SELECT RUN_METRIC('chrome/chrome_scroll_jank_v3.sql');
+        SELECT IMPORT('chrome.scroll_jank.scroll_jank_v3');
 
         SELECT
           delayed_frame_percentage
@@ -85,7 +85,7 @@
     return DiffTestBlueprint(
         trace=DataPath('event_latency_with_args.perfetto-trace'),
         query="""
-        SELECT RUN_METRIC('chrome/event_latency_scroll_jank.sql');
+        SELECT IMPORT('chrome.scroll_jank.event_latency_scroll_jank');
 
         SELECT
           jank,
@@ -100,7 +100,7 @@
           next_dur,
           prev_ts,
           prev_dur
-        FROM scroll_event_latency_jank
+        FROM chrome_scroll_event_latency_jank
         ORDER BY jank DESC
         LIMIT 10;
         """,
@@ -110,7 +110,7 @@
     return DiffTestBlueprint(
         trace=DataPath('event_latency_with_args.perfetto-trace'),
         query="""
-        SELECT RUN_METRIC('chrome/event_latency_scroll_jank_cause.sql');
+        SELECT IMPORT('chrome.scroll_jank.event_latency_scroll_jank_cause');
 
         SELECT
           dur,
@@ -123,7 +123,7 @@
           cause_of_jank,
           max_delta_dur_ns,
           sub_cause_of_jank
-        FROM event_latency_scroll_jank_cause
+        FROM chrome_event_latency_scroll_jank_cause
         ORDER by ts;
         """,
         out=Path('event_latency_scroll_jank_cause.out'))
@@ -373,7 +373,8 @@
     return DiffTestBlueprint(
         trace=DataPath('fling_with_input_delay.pftrace'),
         query="""
-        SELECT RUN_METRIC('chrome/chrome_tasks_delaying_input_processing.sql',
+        SELECT
+        RUN_METRIC('chrome/chrome_tasks_delaying_input_processing.sql',
           'duration_causing_jank_ms',
          /* duration_causing_jank_ms = */ '8');
 
@@ -391,7 +392,7 @@
         trace=DataPath('long_task_tracking_trace'),
         query="""
         SELECT
-          RUN_METRIC('chrome/chrome_long_tasks_delaying_input_processing.sql');
+        RUN_METRIC('chrome/chrome_long_tasks_delaying_input_processing.sql');
 
         SELECT
           full_name,
@@ -655,35 +656,33 @@
   def test_chrome_scroll_jank_v3(self):
     return DiffTestBlueprint(
         trace=DataPath('chrome_input_with_frame_view.pftrace'),
-        query=Metric('chrome_scroll_jank_v3'),
-        out=TextProto(r"""
-        [perfetto.protos.chrome_scroll_jank_v3] {
-          trace_num_frames: 291
-          trace_num_janky_frames: 3
-          trace_scroll_jank_percentage: 1.0309278350515463
-          vsync_interval_ms: 16.368
-          scrolls {
-            num_frames: 105
-            num_janky_frames: 2
-            scroll_jank_percentage: 1.9047619047619047
-            max_delay_since_last_frame: 6.126221896383187
-            scroll_jank_causes {
-              delay_since_last_frame: 2.044354838709678
-            }
-            scroll_jank_causes {
-              cause: "RendererCompositorFinishedToBeginImplFrame"
-              delay_since_last_frame: 6.126221896383187
-            }
-          }
-          scrolls {
-            num_frames: 84
-            num_janky_frames: 1
-            scroll_jank_percentage: 1.1904761904761905
-            max_delay_since_last_frame: 2.040811339198436
-            scroll_jank_causes {
-              cause: "RendererCompositorQueueingDelay"
-              delay_since_last_frame: 2.040811339198436
-            }
-          }
-        }
+        query="""
+          SELECT IMPORT('chrome.scroll_jank.scroll_jank_v3');
+
+          SELECT
+            (SELECT COUNT(*) FROM chrome_janky_frame_info_with_delay)
+              AS trace_num_frames,
+            (SELECT COUNT(*) FROM chrome_janky_frames)
+              AS trace_num_janky_frames,
+            causes.vsync_interval,
+            frames.num_frames,
+            frames.num_janky_frames,
+            frames.scroll_jank_percentage,
+            causes.max_delay_since_last_frame,
+            c.cause_of_jank,
+            c.delay_since_last_frame
+          FROM chrome_frames_per_scroll AS frames
+          INNER JOIN chrome_causes_per_scroll AS causes USING(scroll_id)
+          INNER JOIN chrome_janky_frames c USING (scroll_id)
+        """,
+        out=Csv("""
+        "trace_num_frames","trace_num_janky_frames","vsync_interval",
+                "num_frames","num_janky_frames","scroll_jank_percentage",
+                "max_delay_since_last_frame","cause_of_jank",
+                "delay_since_last_frame"
+        291,3,16.368000,105,2,1.904762,6.126222,"[NULL]",33.462000
+        291,3,16.368000,105,2,1.904762,6.126222,
+                "RendererCompositorFinishedToBeginImplFrame",100.274000
+        291,3,16.368000,84,1,1.190476,2.040811,
+                "RendererCompositorQueueingDelay",33.404000
         """))
diff --git a/build/config/siso/blink_all.star b/build/config/siso/blink_all.star
index b35e1da..46b50341 100644
--- a/build/config/siso/blink_all.star
+++ b/build/config/siso/blink_all.star
@@ -31,7 +31,6 @@
     ])
     return step_config
 
-
 blink_all = module(
     "blink_all",
     filegroups = __filegroups,
diff --git a/build/config/siso/reproxy.star b/build/config/siso/reproxy.star
index cb6fe984..8a351f7 100644
--- a/build/config/siso/reproxy.star
+++ b/build/config/siso/reproxy.star
@@ -218,6 +218,7 @@
                 "command_prefix": rule["command_prefix"],
                 "handler": "rewrite_clang_code_coverage_wrapper",
             }
+
             # Insert clang-coverage/ rules at the top.
             # They are more specific than reproxy clang/ rules, therefore should not be placed after.
             new_rules.insert(0, new_rule)
diff --git a/chrome/VERSION b/chrome/VERSION
index b6635c08..abce84a 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=118
 MINOR=0
-BUILD=5970
+BUILD=5971
 PATCH=0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridge.java
index 80589c52..690f4a1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridge.java
@@ -12,6 +12,8 @@
 
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.NativeMethods;
+import org.chromium.components.autofill.payments.AutofillSaveCardUiInfo;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider;
@@ -22,12 +24,15 @@
  */
 @JNINamespace("autofill")
 public class AutofillSaveCardBottomSheetBridge {
+    private long mNativeAutofillSaveCardBottomSheetBridge;
     private WindowAndroid mWindow;
     private BottomSheetController mBottomSheetController;
 
     @CalledByNative
     @VisibleForTesting
-    /* package */ AutofillSaveCardBottomSheetBridge(WindowAndroid window) {
+    /* package */ AutofillSaveCardBottomSheetBridge(
+            long nativeAutofillSaveCardBottomSheetBridge, WindowAndroid window) {
+        mNativeAutofillSaveCardBottomSheetBridge = nativeAutofillSaveCardBottomSheetBridge;
         mWindow = window;
         mBottomSheetController = BottomSheetControllerProvider.from(window);
     }
@@ -41,7 +46,7 @@
      * @return True if shown.
      */
     @CalledByNative
-    public boolean requestShowContent() {
+    public boolean requestShowContent(AutofillSaveCardUiInfo uiInfo) {
         return mBottomSheetController.requestShowContent(
                 new BottomSheetContentImpl(mWindow.getApplicationContext()), /* animate= */ true);
     }
@@ -104,4 +109,12 @@
             return android.R.string.ok;
         }
     }
+
+    @NativeMethods
+    public interface Natives {
+        void onUiShown(long nativeAutofillSaveCardBottomSheetBridge);
+        void onUiAccepted(long nativeAutofillSaveCardBottomSheetBridge);
+        void onUiCanceled(long nativeAutofillSaveCardBottomSheetBridge);
+        void onUiIgnored(long nativeAutofillSaveCardBottomSheetBridge);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
index 59cac079..3521731 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -113,8 +113,6 @@
                     ChromeFeatureList.DEFER_KEEP_SCREEN_ON_DURING_GESTURE, false);
     private static final MutableFlagWithSafeDefault sDeferNotifyInMotion =
             new MutableFlagWithSafeDefault(ChromeFeatureList.DEFER_NOTIFY_IN_MOTION, false);
-    private static final MutableFlagWithSafeDefault sResizeOnlyActiveTab =
-            new MutableFlagWithSafeDefault(ChromeFeatureList.RESIZE_ONLY_ACTIVE_TAB, false);
 
     /**
      * Initializer interface used to decouple initialization from the class that owns
@@ -403,27 +401,16 @@
         addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
                                           oldBottom) -> {
             Tab tab = getCurrentTab();
-            if (sResizeOnlyActiveTab.isEnabled()) {
-                if (tab != null) {
-                    // Set the size of NTP if we're in the attached state as it may have not been
-                    // sized properly when initializing tab. See the comment in #initializeTab() for
-                    // why.
-                    boolean attachedNativePage =
-                            tab.isNativePage() && isAttachedToWindow(tab.getView());
-                    boolean sizeChanged = (right - left) != (oldRight - oldLeft)
-                            || (top - bottom) != (oldTop - oldBottom);
-                    if (attachedNativePage || sizeChanged) {
-                        tryUpdateControlsAndWebContentsSizing();
-                    }
-                }
-            } else {
-                // TODO(bokan): This old path is behind an on-by-default flag as changing it is
-                // potentially risky. Can be removed after successful landing.
-
-                // Set the size of NTP if we're in the attached state as it may have not been sized
-                // properly when initializing tab. See the comment in #initializeTab() for why.
-                if (tab != null && tab.isNativePage() && isAttachedToWindow(tab.getView())) {
-                    updateWebContentsSize(tab);
+            if (tab != null) {
+                // Set the size of NTP if we're in the attached state as it may have not been
+                // sized properly when initializing tab. See the comment in #initializeTab() for
+                // why.
+                boolean attachedNativePage =
+                        tab.isNativePage() && isAttachedToWindow(tab.getView());
+                boolean sizeChanged = (right - left) != (oldRight - oldLeft)
+                        || (top - bottom) != (oldTop - oldBottom);
+                if (attachedNativePage || sizeChanged) {
+                    tryUpdateControlsAndWebContentsSizing();
                 }
             }
 
@@ -851,9 +838,6 @@
     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
         super.onSizeChanged(w, h, oldw, oldh);
 
-        // TODO(bokan): On-by-default flag guard, remove once landed.
-        if (sResizeOnlyActiveTab.isEnabled()) return;
-
         if (mTabModelSelector == null) return;
 
         for (TabModel tabModel : mTabModelSelector.getModels()) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
index e478915..c5483b1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
@@ -533,7 +533,7 @@
         // If the ContentSettingsType.NUM_TYPES value changes *and* a new value has been exposed on
         // Android, then please update this code block to include a test for your new type.
         // Otherwise, just update count in the assert.
-        Assert.assertEquals(91, ContentSettingsType.NUM_TYPES);
+        Assert.assertEquals(92, ContentSettingsType.NUM_TYPES);
         websitePreferenceBridge.addContentSettingException(
                 new ContentSettingException(ContentSettingsType.COOKIES, googleOrigin,
                         ContentSettingValues.DEFAULT, preferenceSource, /*isEmbargoed=*/false));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridgeTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridgeTest.java
index 8071f17..7986949 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridgeTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillSaveCardBottomSheetBridgeTest.java
@@ -36,6 +36,8 @@
 /** Unit tests for {@link AutofillSaveCardBottomSheetBridge}. */
 @RunWith(BaseRobolectricTestRunner.class)
 public final class AutofillSaveCardBottomSheetBridgeTest {
+    private static final long MOCK_POINTER = 0xb00fb00f;
+
     @Rule
     public MockitoRule mMockitoRule = MockitoJUnit.rule();
 
@@ -51,7 +53,8 @@
         Context mApplicationContext = ApplicationProvider.getApplicationContext();
         mWindow = new WindowAndroid(mApplicationContext);
         BottomSheetControllerFactory.attach(mWindow, mBottomSheetController);
-        mAutofillSaveCardBottomSheetBridge = new AutofillSaveCardBottomSheetBridge(mWindow);
+        mAutofillSaveCardBottomSheetBridge =
+                new AutofillSaveCardBottomSheetBridge(MOCK_POINTER, mWindow);
     }
 
     @After
@@ -63,7 +66,7 @@
     @Test
     @SmallTest
     public void requestShowContent_callsControllerRequestShowContent() {
-        mAutofillSaveCardBottomSheetBridge.requestShowContent();
+        mAutofillSaveCardBottomSheetBridge.requestShowContent(/*saveCardDelegate=*/null);
 
         verify(mBottomSheetController)
                 .requestShowContent(
@@ -74,7 +77,7 @@
     @Test
     @SmallTest
     public void requestShowContent_bottomSheetContentImplIsStubbed() {
-        mAutofillSaveCardBottomSheetBridge.requestShowContent();
+        mAutofillSaveCardBottomSheetBridge.requestShowContent(/*saveCardDelegate=*/null);
 
         ArgumentCaptor<AutofillSaveCardBottomSheetBridge.BottomSheetContentImpl> contentCaptor =
                 ArgumentCaptor.forClass(
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 7206fae..75369cc 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5748,6 +5748,15 @@
           <message name="IDS_EXTENSIONS_PINNED_BY_ADMIN" desc="The text indicating that an extension has been 'pinned' to the toolbar by the controlling administrator (sentence case).">
             Pinned by your administrator
           </message>
+          <message name="IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME" desc="The accessible name for the menu item to pin an extension to the toolbar (sentence case).">
+            Pin <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>
+          </message>
+          <message name="IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME" desc="The accessible name for the menu item to unpin an extension from the toolbar (sentence case).">
+            Unpin <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>
+          </message>
+          <message name="IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME" desc="The accessible name indicating that an extension has been 'pinned' to the toolbar by the controlling administrator (sentence case).">
+            <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph> is pinned by your administrator
+          </message>
           <message name="IDS_MANAGE_EXTENSION" desc="The text for the button in the extension's context menu used to open the chrome://extensions/?id=xxx page and manage a specific extension (sentence case).">
             Manage extension
           </message>
@@ -5834,6 +5843,15 @@
           <message name="IDS_EXTENSIONS_PINNED_BY_ADMIN" desc="The text indicating that an extension has been 'pinned' to the toolbar by the controlling administrator (title case).">
             Pinned by your Administrator
           </message>
+          <message name="IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME" desc="The accessible name for the menu item to pin an extension to the toolbar (sentence case).">
+            Pin <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>
+          </message>
+          <message name="IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME" desc="The accessible name for the menu item to unpin an extension from the toolbar (sentence case).">
+            Unpin <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>
+          </message>
+          <message name="IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME" desc="The accessible name indicating that an extension has been 'pinned' to the toolbar by the controlling administrator (sentence case).">
+            <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph> is pinned by your Administrator
+          </message>
           <message name="IDS_MANAGE_EXTENSION" desc="The text for the button in the extension's context menu used to open the chrome://extensions/?id=xxx page and manage a specific extension (title case).">
             Manage Extension
           </message>
@@ -13031,9 +13049,12 @@
           Turn on "Google Chrome" in Location Services on your Mac
         </message>
       </if>
-        <message name="IDS_GEOLOCATION_TURNED_OFF" desc="Description text in the omnibox icon showing when location permission is blocked on an OS level.">
-          Location turned off
-        </message>
+      <message name="IDS_GEOLOCATION_TURNED_OFF_IN_OS" desc="Title for the geolocation bubble that is used when a site requests geolocation, but geolocation is blocked on an OS level (platform independent wording).">
+        Location is turned off in the System Preferences
+      </message>
+      <message name="IDS_GEOLOCATION_TURNED_OFF" desc="Description text in the omnibox icon showing when location permission is blocked on an OS level.">
+        Location turned off
+      </message>
 
       <!-- Web MIDI messages -->
       <message name="IDS_ALLOWED_MIDI_SYSEX_TITLE" desc="Title of the info bubble shown when a site is allowed to use MIDI system exclusive messages.">
@@ -13114,18 +13135,12 @@
         <message name="IDS_MIC_TURNED_OFF_IN_MACOS" desc="Title for the media status bubble that is used when a site requests microphone access, but microphone is blocked on an OS level in macOS.">
           Microphone is turned off in Mac System Preferences
         </message>
-        <message name="IDS_OPEN_SETTINGS_LINK" desc="Title for the button that takes the user to the Security and Privacy settings in macOS, in order for the user to be able to modify the ability to access camera and microphone for Chrome. The translation for this string should match the translation of the System Settings app title in the macOS target locale. You can find this by selecting the locale from https://support.apple.com/guide/mac-help/mh15217/mac/localeselector. The title of the next page after that includes the desired translation. Note that, for size reasons, the English string omits 'System' and the same contraction may be suitable in other languages.">
-          Open Settings
-        </message>
         <message name="IDS_CAMERA" desc="Description text for the camera.">
           Camera
         </message>
         <message name="IDS_MIC" desc="Decription text for the microphone.">
           Microphone
         </message>
-        <message name="IDS_TURNED_OFF" desc="Description text for the state of camera or microphone">
-          Turned off
-        </message>
         <message name="IDS_CAMERA_TURNED_OFF" desc="Description text in the omnibox icon showing when camera permission is turned off.">
           Camera turned off
         </message>
@@ -13134,6 +13149,16 @@
         </message>
       </if>
 
+      <message name="IDS_OPEN_SETTINGS_LINK" desc="Title for the button that takes the user to the Security and Privacy settings in the OS. In order for the user to be able to modify the ability to access camera and microphone for Chrome. The translation for this string should match the translation of the OS System Settings app title in the target locale. For Mac OS, you can find this by selecting the locale from https://support.apple.com/guide/mac-help/mh15217/mac/localeselector. The title of the next page after that includes the desired translation. Note that, for size reasons, the English string omits 'System' and the same contraction may be suitable in other languages.">
+        Open Settings
+      </message>
+
+      <if expr="is_macosx or is_chromeos">
+        <message name="IDS_TURNED_OFF" desc="Description text for the state of camera or microphone">
+          Turned off
+        </message>
+      </if>
+
       <message name="IDS_A11Y_OMNIBOX_CHIP_HINT" desc="A navigational hint given to screenreader users, informing them that a setting which was just announced is accessible via the address bar.">
         Change this setting in the address bar.
       </message>
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME.png.sha1
new file mode 100644
index 0000000..e30a7f7
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME.png.sha1
@@ -0,0 +1 @@
+67d67191a1b23b330afacf135c1d87b37525224a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME.png.sha1
new file mode 100644
index 0000000..8d05696
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME.png.sha1
@@ -0,0 +1 @@
+c9294a786e42d294a0f6401c6eb3b6c1f4524e63
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME.png.sha1
new file mode 100644
index 0000000..e30a7f7
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME.png.sha1
@@ -0,0 +1 @@
+67d67191a1b23b330afacf135c1d87b37525224a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_GEOLOCATION_TURNED_OFF_IN_OS.png.sha1 b/chrome/app/generated_resources_grd/IDS_GEOLOCATION_TURNED_OFF_IN_OS.png.sha1
new file mode 100644
index 0000000..1baaf26d
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_GEOLOCATION_TURNED_OFF_IN_OS.png.sha1
@@ -0,0 +1 @@
+b86b6746b92da34f7ac010969c83725356ee9dd8
\ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index ef21acb..b4590d3 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2313,6 +2313,14 @@
   <message name="IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION1" desc="A part of the feature description of the standard protection section of the safe browsing card in the 'Privacy guide'.">
     Detects and warns you about dangerous events when they happen
   </message>
+  <if expr="_google_chrome">
+    <message name="IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2_PROXY" desc="A part of the feature description of the standard protection section of the safe browsing card in the 'Privacy guide'.">
+      Sends an obfuscated portion of the URL to Google through a privacy server that hides your IP address
+    </message>
+    <message name="IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1_PROXY" desc="A part of the privacy description of the standard protection section of the safe browsing card in the 'Privacy Guide'.">
+      If a site tries to steal your password, or when you download a harmful file, Chrome may also send URLs, including bits of page content, to Google
+    </message>
+  </if>
   <message name="IDS_SETTINGS_PRIVACY_GUIDE_SEARCH_SUGGESTIONS_CARD_HEADER" desc="Header of the 'search suggestions' card in the 'Privacy Guide'.">
     Choose whether to get additional search suggestions
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2_PROXY.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2_PROXY.png.sha1
new file mode 100644
index 0000000..518fa39
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2_PROXY.png.sha1
@@ -0,0 +1 @@
+4a2af9788ccababb26bb6f0cf09563766bd64a3b
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1_PROXY.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1_PROXY.png.sha1
new file mode 100644
index 0000000..518fa39
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1_PROXY.png.sha1
@@ -0,0 +1 @@
+4a2af9788ccababb26bb6f0cf09563766bd64a3b
\ No newline at end of file
diff --git a/chrome/browser/ash/input_method/editor_mediator.cc b/chrome/browser/ash/input_method/editor_mediator.cc
index 07762ec..11e2e8b 100644
--- a/chrome/browser/ash/input_method/editor_mediator.cc
+++ b/chrome/browser/ash/input_method/editor_mediator.cc
@@ -38,6 +38,10 @@
   return g_instance_;
 }
 
+bool EditorMediator::HasInstance() {
+  return g_instance_ != nullptr;
+}
+
 void EditorMediator::BindEditorInstance(
     mojo::PendingReceiver<mojom::EditorInstance> pending_receiver) {
   editor_instance_impl_.BindReceiver(std::move(pending_receiver));
@@ -86,6 +90,14 @@
       IMEBridge::Get()->GetCurrentInputContext(), info);
 }
 
+bool EditorMediator::IsAllowedForUse() {
+  return editor_switch_->IsAllowedForUse();
+}
+
+bool EditorMediator::CanBeTriggered() {
+  return editor_switch_->CanBeTriggered();
+}
+
 ConsentStatus EditorMediator::GetConsentStatus() {
   return consent_store_->GetConsentStatus();
 }
diff --git a/chrome/browser/ash/input_method/editor_mediator.h b/chrome/browser/ash/input_method/editor_mediator.h
index 96da759..67b4364 100644
--- a/chrome/browser/ash/input_method/editor_mediator.h
+++ b/chrome/browser/ash/input_method/editor_mediator.h
@@ -36,6 +36,8 @@
   // constructed prior to calling this method.
   static EditorMediator* Get();
 
+  static bool HasInstance();
+
   // Binds a new editor instance request from a client.
   void BindEditorInstance(
       mojo::PendingReceiver<mojom::EditorInstance> pending_receiver);
@@ -53,6 +55,12 @@
   // EditorInstanceImpl::Delegate overrides
   void CommitEditorResult(std::string_view text) override;
 
+  // Checks if the feature should be visible.
+  bool IsAllowedForUse();
+
+  // Checks if the feature can be triggered.
+  bool CanBeTriggered();
+
   ConsentStatus GetConsentStatus();
 
   // ProfileObserver:
diff --git a/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.cc b/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.cc
index ac5cdd63..b825636 100644
--- a/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.cc
+++ b/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.cc
@@ -52,7 +52,8 @@
 
 NearbyPresenceServiceFactory::~NearbyPresenceServiceFactory() = default;
 
-KeyedService* NearbyPresenceServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+NearbyPresenceServiceFactory::BuildServiceInstanceForBrowserContext(
     content::BrowserContext* context) const {
   if (!context) {
     return nullptr;
@@ -81,7 +82,7 @@
   // TODO(b/276344576): add the NearbyPresence feature flag.
 
   VLOG(1) << __func__ << ": creating NearbyPresenceService.";
-  return new NearbyPresenceServiceImpl(
+  return std::make_unique<NearbyPresenceServiceImpl>(
       Profile::FromBrowserContext(context)->GetPrefs(),
       ash::nearby::NearbyProcessManagerFactory::GetForProfile(profile),
       IdentityManagerFactory::GetForProfile(profile),
diff --git a/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.h b/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.h
index 4c617adb..a2938073 100644
--- a/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.h
+++ b/chrome/browser/ash/nearby/presence/nearby_presence_service_factory.h
@@ -38,7 +38,7 @@
   ~NearbyPresenceServiceFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  KeyedService* BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext(
       content::BrowserContext* context) const override;
   void RegisterProfilePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
diff --git a/chrome/browser/ash/ownership/owner_key_loader.cc b/chrome/browser/ash/ownership/owner_key_loader.cc
index ddb96423..3ee2582 100644
--- a/chrome/browser/ash/ownership/owner_key_loader.cc
+++ b/chrome/browser/ash/ownership/owner_key_loader.cc
@@ -269,13 +269,7 @@
     return std::move(callback_).Run(public_key_, nullptr);
   }
 
-  std::string profile_email = user->GetAccountId().GetUserEmail();
-  if (profile_email.empty()) {
-    // In some cases (e.g. right after a crash) this returns an empty string
-    // even when the method above succeeds, so only use it as a fallback.
-    profile_email = profile_->GetProfileUserName();
-  }
-  if (profile_email.empty()) {
+  if (user->GetAccountId().GetUserEmail().empty()) {
     RecordOwnerKeyEvent(OwnerKeyEvent::kUserNotAnOwnerBasedOnEmptyUsername,
                         /*success=*/IsKeyPresent(public_key_));
     // This is not expected to happen, regular users should have a valid
@@ -291,7 +285,7 @@
   if (policy_data && policy_data->has_username()) {
     // If the policy says that the current user is the owner, generate a new key
     // pair for them.
-    if (policy_data->username() == profile_->GetProfileUserName()) {
+    if (policy_data->username() == user->GetAccountId().GetUserEmail()) {
       // Expect public key to be present. It's not likely to lose private and
       // public keys simultaneously, they are stored independently.
       RecordOwnerKeyEvent(OwnerKeyEvent::kRegeneratingOwnerKeyBasedOnPolicy,
@@ -310,8 +304,9 @@
   // If the policies are empty, check the local state PrefService.
   absl::optional<std::string> owner_email =
       user_manager::UserManager::Get()->GetOwnerEmail();
+
   if (owner_email.has_value() &&
-      owner_email.value() == profile_->GetProfileUserName()) {
+      owner_email.value() == user->GetAccountId().GetUserEmail()) {
     // This brunch is more likely to be used before device policies are created
     // for the first time, so expect the public key to not be present.
     RecordOwnerKeyEvent(OwnerKeyEvent::kRegeneratingOwnerKeyBasedOnLocalState,
@@ -319,7 +314,7 @@
     LOG(WARNING) << "Generating new owner key based on local state data.";
     return GenerateNewKey();
   } else if (owner_email.has_value() &&
-             owner_email.value() != profile_->GetProfileUserName()) {
+             owner_email.value() != user->GetAccountId().GetUserEmail()) {
     RecordOwnerKeyEvent(OwnerKeyEvent::kUserNotAnOwnerBasedOnLocalState,
                         /*success=*/IsKeyPresent(public_key_));
     return std::move(callback_).Run(std::move(public_key_), nullptr);
diff --git a/chrome/browser/ash/privacy_hub/privacy_hub_util.cc b/chrome/browser/ash/privacy_hub/privacy_hub_util.cc
index 65d2e595..daf20eb5b 100644
--- a/chrome/browser/ash/privacy_hub/privacy_hub_util.cc
+++ b/chrome/browser/ash/privacy_hub/privacy_hub_util.cc
@@ -7,7 +7,9 @@
 #include <string>
 
 #include "ash/public/cpp/privacy_hub_delegate.h"
+#include "ash/public/cpp/system_tray_client.h"
 #include "ash/shell.h"
+#include "ash/system/model/system_tray_model.h"
 #include "ash/system/privacy_hub/camera_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/geolocation_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
@@ -105,6 +107,10 @@
   return camera_led_fallback_for_testing.value();
 }
 
+void OpenPrivacyControlsInSettings() {
+  Shell::Get()->system_tray_model()->client()->ShowPrivacyHubSettings();
+}
+
 ScopedCameraLedFallbackForTesting::ScopedCameraLedFallbackForTesting(
     bool value) {
   CHECK(!camera_led_fallback_for_testing.has_value());
diff --git a/chrome/browser/ash/privacy_hub/privacy_hub_util.h b/chrome/browser/ash/privacy_hub/privacy_hub_util.h
index 38e2f48..4075875 100644
--- a/chrome/browser/ash/privacy_hub/privacy_hub_util.h
+++ b/chrome/browser/ash/privacy_hub/privacy_hub_util.h
@@ -36,6 +36,9 @@
 // switch.
 bool UsingCameraLEDFallback();
 
+// Opens the Privacy Controls section in the OS settings.
+void OpenPrivacyControlsInSettings();
+
 // Used to override the value of the LED Fallback value in tests.
 // Should not be nested.
 // TODO(b/289510726): remove when all cameras fully support the software
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 1eb294d..f678a92 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -3584,7 +3584,7 @@
   return google_apis::GetAPIKey();
 }
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 device::GeolocationManager*
 ChromeContentBrowserClient::GetGeolocationManager() {
   return device::GeolocationManager::GetInstance();
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 46d348b..e75b4bc 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -36,6 +36,7 @@
 #include "media/media_buildflags.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "services/device/public/cpp/geolocation/buildflags.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -365,7 +366,7 @@
   network::mojom::NetworkContext* GetSystemNetworkContext() override;
   std::string GetGeolocationApiKey() override;
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   device::GeolocationManager* GetGeolocationManager() override;
 #endif
 
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 29c0903..f7f2a2e 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -52,6 +52,8 @@
     "arc/open_with_menu.h",
     "arc/start_smart_selection_action_menu.cc",
     "arc/start_smart_selection_action_menu.h",
+    "enterprise/cloud_storage/policy_utils.cc",
+    "enterprise/cloud_storage/policy_utils.h",
     "enterprise/incognito_navigation_throttle.cc",
     "enterprise/incognito_navigation_throttle.h",
     "extensions/accessibility_service_private.cc",
diff --git a/chrome/browser/chromeos/enterprise/cloud_storage/OWNERS b/chrome/browser/chromeos/enterprise/cloud_storage/OWNERS
new file mode 100644
index 0000000..4a7101d
--- /dev/null
+++ b/chrome/browser/chromeos/enterprise/cloud_storage/OWNERS
@@ -0,0 +1,4 @@
+greengrape@google.com
+hendrich@chromium.org
+lmasopust@google.com
+simonha@chromium.org
\ No newline at end of file
diff --git a/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.cc b/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.cc
new file mode 100644
index 0000000..8e49a28
--- /dev/null
+++ b/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.cc
@@ -0,0 +1,21 @@
+// 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/chromeos/enterprise/cloud_storage/policy_utils.h"
+
+#include "chrome/common/pref_names.h"
+#include "components/prefs/pref_registry_simple.h"
+
+namespace {
+constexpr char MicrosoftOneDriveMountAllowed[] = "allowed";
+}  // namespace
+
+namespace chromeos::cloud_storage {
+
+void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterStringPref(prefs::kMicrosoftOneDriveMount,
+                               MicrosoftOneDriveMountAllowed);
+}
+
+}  // namespace chromeos::cloud_storage
diff --git a/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.h b/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.h
new file mode 100644
index 0000000..60d20250
--- /dev/null
+++ b/chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.h
@@ -0,0 +1,14 @@
+// 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_CHROMEOS_ENTERPRISE_CLOUD_STORAGE_POLICY_UTILS_H_
+#define CHROME_BROWSER_CHROMEOS_ENTERPRISE_CLOUD_STORAGE_POLICY_UTILS_H_
+
+class PrefRegistrySimple;
+
+namespace chromeos::cloud_storage {
+void RegisterProfilePrefs(PrefRegistrySimple* registry);
+}  // namespace chromeos::cloud_storage
+
+#endif  // CHROME_BROWSER_CHROMEOS_ENTERPRISE_CLOUD_STORAGE_POLICY_UTILS_H_
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc b/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc
index 14229ba..69cc8924 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc
@@ -36,9 +36,10 @@
 
 CleanupManagerLacrosFactory::~CleanupManagerLacrosFactory() = default;
 
-KeyedService* CleanupManagerLacrosFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+CleanupManagerLacrosFactory::BuildServiceInstanceForBrowserContext(
     content::BrowserContext* browser_context) const {
-  return new CleanupManagerLacros(browser_context);
+  return std::make_unique<CleanupManagerLacros>(browser_context);
 }
 
 bool CleanupManagerLacrosFactory::ServiceIsNULLWhileTesting() const {
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h b/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h
index ab0e68ad..14da5e3 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h
+++ b/chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h
@@ -31,7 +31,7 @@
   ~CleanupManagerLacrosFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  KeyedService* BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext(
       content::BrowserContext* browser_context) const override;
   bool ServiceIsNULLWhileTesting() const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc b/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc
index 56f3962..21c469f 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc
@@ -41,9 +41,10 @@
 ExternalLogoutDoneEventHandlerFactory::
     ~ExternalLogoutDoneEventHandlerFactory() = default;
 
-KeyedService* ExternalLogoutDoneEventHandlerFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+ExternalLogoutDoneEventHandlerFactory::BuildServiceInstanceForBrowserContext(
     content::BrowserContext* browser_context) const {
-  return new ExternalLogoutDoneEventHandler(browser_context);
+  return std::make_unique<ExternalLogoutDoneEventHandler>(browser_context);
 }
 
 bool ExternalLogoutDoneEventHandlerFactory::ServiceIsNULLWhileTesting() const {
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h b/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h
index d27e69df..408bb0a 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h
+++ b/chrome/browser/chromeos/extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h
@@ -33,7 +33,7 @@
   ~ExternalLogoutDoneEventHandlerFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  KeyedService* BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext(
       content::BrowserContext* browser_context) const override;
   bool ServiceIsNULLWhileTesting() const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
diff --git a/chrome/browser/devtools/protocol/autofill_handler.cc b/chrome/browser/devtools/protocol/autofill_handler.cc
index 3df02ea..dec705a 100644
--- a/chrome/browser/devtools/protocol/autofill_handler.cc
+++ b/chrome/browser/devtools/protocol/autofill_handler.cc
@@ -6,15 +6,19 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/devtools/protocol/autofill.h"
 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h"
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
+#include "components/autofill/core/browser/autofill_address_util.h"
+#include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/browser_autofill_manager.h"
 #include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/manual_testing_import.h"
+#include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/mojom/autofill_types.mojom-shared.h"
 #include "components/autofill/core/common/unique_ids.h"
@@ -22,6 +26,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+using autofill::AutofillField;
 using autofill::AutofillTriggerSource;
 using autofill::CreditCard;
 using autofill::FieldGlobalId;
@@ -52,10 +57,21 @@
                                  const std::string& target_id)
     : target_id_(target_id) {
   protocol::Autofill::Dispatcher::wire(dispatcher, this);
+
+  if (base::FeatureList::IsEnabled(
+          autofill::features::kAutofillTestFormWithDevtools)) {
+    frontend_ =
+        std::make_unique<protocol::Autofill::Frontend>(dispatcher->channel());
+  }
 }
 
 AutofillHandler::~AutofillHandler() = default;
 
+void AutofillHandler::OnAutofillManagerDestroyed(
+    autofill::AutofillManager& manager) {
+  observation_.Reset();
+}
+
 void AutofillHandler::Trigger(
     int field_id,
     Maybe<String> frame_id,
@@ -197,6 +213,108 @@
   std::move(callback)->sendSuccess();
 }
 
+void AutofillHandler::OnAutofillProfileOrCreditCardFormFilled(
+    autofill::AutofillManager& manager,
+    autofill::FormGlobalId form,
+    base::span<const std::pair<const FormFieldData*, const AutofillField*>>
+        filled_fields,
+    absl::variant<const autofill::AutofillProfile*, const autofill::CreditCard*>
+        profile_or_credit_card) {
+  if (!base::FeatureList::IsEnabled(
+          autofill::features::kAutofillTestFormWithDevtools)) {
+    return;
+  }
+
+  // We only care about address forms that were filled.
+  if (!absl::holds_alternative<const autofill::AutofillProfile*>(
+          profile_or_credit_card)) {
+    return;
+  }
+
+  const autofill::AutofillProfile* profile_used_to_fill_form =
+      absl::get<const autofill::AutofillProfile*>(profile_or_credit_card);
+
+  auto filled_fields_to_be_sent_to_devtools =
+      std::make_unique<protocol::Array<protocol::Autofill::FilledField>>();
+  filled_fields_to_be_sent_to_devtools->reserve(filled_fields.size());
+  for (const std::pair<const FormFieldData*, const AutofillField*>& field :
+       filled_fields) {
+    // Whether the field was classified from the autocomplete attribute or
+    // predictions. If no autocomplete attribute exists OR the actual ServerType
+    // differs from what it would have been with only autocomplete, autofill
+    // inferred the type.
+    bool autofill_inferred =
+        field.second->html_type() ==
+            autofill::mojom::HtmlFieldType::kUnspecified ||
+        field.second->html_type() ==
+            autofill::mojom::HtmlFieldType::kUnrecognized ||
+        (autofill::AutofillType(field.second->html_type(),
+                                field.second->html_mode())
+             .GetStorableType() != field.second->Type().GetStorableType());
+    filled_fields_to_be_sent_to_devtools->push_back(
+        protocol::Autofill::FilledField::Create()
+            .SetId(base::UTF16ToASCII(field.second->id_attribute))
+            .SetName(base::UTF16ToASCII(field.second->name_attribute))
+            .SetValue(base::UTF16ToASCII(field.first->value))
+            .SetHtmlType(field.second->form_control_type)
+            .SetAutofillType(
+                std::string(FieldTypeToDeveloperRepresentationString(
+                    field.second->Type().GetStorableType())))
+            .SetFillingStrategy(
+                autofill_inferred
+                    ? protocol::Autofill::FillingStrategyEnum::AutofillInferred
+                    : protocol::Autofill::FillingStrategyEnum::
+                          AutocompleteAttribute)
+            .Build());
+  }
+
+  // Send profile information to devtools so that it can build the UI.
+  // We use the same format we see in the settings page.
+  std::vector<std::vector<autofill::AutofillAddressUIComponent>> components;
+  // Devtools is already in english, so we can default the local to en-US.
+  const std::string locale = "en-US";
+  autofill::GetAddressComponents(
+      base::UTF16ToASCII(profile_used_to_fill_form->GetInfo(
+          autofill::ServerFieldType::ADDRESS_HOME_COUNTRY, locale)),
+      locale,
+      /*include_literals=*/false, &components, nullptr);
+
+  // `profile_address_fields` is used to represent a profile as seen in the
+  // settings page. It consists of a 2D array where each inner array is used
+  // build a "profile line". The following `profile_address_fields` for
+  // instance:
+  // [[{name: "GIVE_NAME", value: "Jon"}, {name: "FAMILY_NAME", value: "Doe"}],
+  // [{name: "CITY", value: "Munich"}, {name: "ZIP", value: "81456"}]] should
+  // allow the receiver to render:
+  // Jon Doe
+  // Munich 81456
+  auto profile_address_fields =
+      std::make_unique<protocol::Array<protocol::Autofill::AddressFields>>();
+  for (const std::vector<autofill::AutofillAddressUIComponent>& line :
+       components) {
+    auto profile_values =
+        std::make_unique<protocol::Array<protocol::Autofill::AddressField>>();
+    profile_values->reserve(line.size());
+    for (const autofill::AutofillAddressUIComponent& component : line) {
+      profile_values->push_back(
+          protocol::Autofill::AddressField::Create()
+              .SetName(std::string(FieldTypeToStringPiece(component.field)))
+              .SetValue(base::UTF16ToASCII(
+                  profile_used_to_fill_form->GetInfo(component.field, locale)))
+              .Build());
+    }
+    profile_address_fields->push_back(
+        protocol::Autofill::AddressFields::Create()
+            .SetFields(std::move(profile_values))
+            .Build());
+  }
+  frontend_->AddressFormFilled(
+      std::move(filled_fields_to_be_sent_to_devtools),
+      protocol::Autofill::AddressUI::Create()
+          .SetAddressFields(std::move(profile_address_fields))
+          .Build());
+}
+
 autofill::ContentAutofillDriver* AutofillHandler::GetAutofillDriver() {
   auto host = content::DevToolsAgentHost::GetForId(target_id_);
   DCHECK(host);
@@ -210,10 +328,18 @@
 
 Response AutofillHandler::Enable() {
   enabled_ = true;
+  if (base::FeatureList::IsEnabled(
+          autofill::features::kAutofillTestFormWithDevtools)) {
+    autofill::ContentAutofillDriver* autofill_driver = GetAutofillDriver();
+    if (autofill_driver) {
+      observation_.Observe(autofill_driver->autofill_manager());
+    }
+  }
   return Response::FallThrough();
 }
 
 Response AutofillHandler::Disable() {
   enabled_ = false;
-    return Response::FallThrough();
+  observation_.Reset();
+  return Response::FallThrough();
 }
diff --git a/chrome/browser/devtools/protocol/autofill_handler.h b/chrome/browser/devtools/protocol/autofill_handler.h
index 58d38c0..16111ea 100644
--- a/chrome/browser/devtools/protocol/autofill_handler.h
+++ b/chrome/browser/devtools/protocol/autofill_handler.h
@@ -5,8 +5,11 @@
 #ifndef CHROME_BROWSER_DEVTOOLS_PROTOCOL_AUTOFILL_HANDLER_H_
 #define CHROME_BROWSER_DEVTOOLS_PROTOCOL_AUTOFILL_HANDLER_H_
 
+#include "base/scoped_observation.h"
 #include "chrome/browser/devtools/protocol/autofill.h"
 #include "chrome/browser/devtools/protocol/protocol.h"
+#include "components/autofill/core/browser/autofill_manager.h"
+#include "components/autofill/core/common/form_field_data.h"
 #include "content/public/browser/web_contents.h"
 
 using protocol::Maybe;
@@ -14,9 +17,13 @@
 
 namespace autofill {
 class ContentAutofillDriver;
+class AutofillProfile;
+class CreditCard;
+class AutofillField;
 }
 
-class AutofillHandler : public protocol::Autofill::Backend {
+class AutofillHandler : public protocol::Autofill::Backend,
+                        autofill::AutofillManager::Observer {
  public:
   AutofillHandler(protocol::UberDispatcher* dispatcher,
                   const std::string& target_id);
@@ -37,16 +44,39 @@
                      std::unique_ptr<protocol::Autofill::CreditCard> card,
                      std::unique_ptr<TriggerCallback> callback,
                      uint64_t field_id);
+  // Sets a list of addresses inside `AutofillManager`, used to provide
+  // developers addresses from different countries so that they can be used for
+  // testing their form.
   void SetAddresses(
       std::unique_ptr<protocol::Array<protocol::Autofill::Address>> addresses,
       std::unique_ptr<SetAddressesCallback> callback) override;
 
+  // Autofill::AutofillManagerObserver
+  // Observes form filled events. In the case of an address form, we emit to
+  // devtools the filled fields details and information about the profile used.
+  // These information is then used to build a UI inside devtools, which will
+  // provide developers more visibility on how autofill works on their form.
+  void OnAutofillProfileOrCreditCardFormFilled(
+      autofill::AutofillManager& manager,
+      autofill::FormGlobalId form,
+      base::span<const std::pair<const autofill::FormFieldData*,
+                                 const autofill::AutofillField*>> filled_fields,
+      absl::variant<const autofill::AutofillProfile*,
+                    const autofill::CreditCard*> profile_or_credit_card)
+      override;
+  // Called when the manager is destroyed and used to reset the observer.
+  void OnAutofillManagerDestroyed(autofill::AutofillManager& manager) override;
+
   // Returns the driver for the outermost frame, not the one that created the
   // `DevToolsAgentHost` and iniated the session.
   autofill::ContentAutofillDriver* GetAutofillDriver();
 
   const std::string target_id_;
-  bool enabled_;
+  bool enabled_ = false;
+  std::unique_ptr<protocol::Autofill::Frontend> frontend_;
+  base::ScopedObservation<autofill::AutofillManager,
+                          autofill::AutofillManager::Observer>
+      observation_{this};
   base::WeakPtrFactory<AutofillHandler> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/devtools/protocol/devtools_autofill_browsertest.cc b/chrome/browser/devtools/protocol/devtools_autofill_browsertest.cc
index 2de58cdf..9c71414 100644
--- a/chrome/browser/devtools/protocol/devtools_autofill_browsertest.cc
+++ b/chrome/browser/devtools/protocol/devtools_autofill_browsertest.cc
@@ -6,21 +6,58 @@
 #include "base/strings/strcat.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/autofill/autofill_uitest_util.h"
 #include "chrome/browser/devtools/protocol/devtools_protocol_test_support.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/content/browser/test_autofill_manager_injector.h"
+#include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/browser_autofill_manager.h"
 #include "components/autofill/core/browser/browser_autofill_manager_test_api.h"
+#include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/test_autofill_manager_waiter.h"
+#include "components/autofill/core/common/autofill_features.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
 #include "net/dns/mock_host_resolver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
+using testing::Eq;
+using testing::Not;
+using testing::ResultOf;
+
+namespace autofill {
+
 namespace {
 
+// Asserts that a filled field sent to devtools has `attribute` set with
+// `expected_value`.
+auto FilledFieldHasAttributeWithValue(const std::string& attribute,
+                                      const std::string& expected_value) {
+  return ResultOf(
+      [&](const base::Value& filled_field) {
+        const std::string* value =
+            filled_field.GetDict().FindStringByDottedPath(attribute);
+        return value ? *value : "";
+      },
+      Eq(expected_value));
+}
+
+auto FilledFieldHasAttributeWithValue16(const std::string& attribute,
+                                        const std::u16string& expected_value) {
+  return FilledFieldHasAttributeWithValue(attribute,
+                                          base::UTF16ToASCII(expected_value));
+}
+
+std::string GetProfileInfoFromAddressField(const AutofillProfile profile,
+                                           const base::Value& address_field) {
+  return base::UTF16ToASCII(profile.GetRawInfo(TypeNameToFieldType(
+      *address_field.GetDict().FindStringByDottedPath("name"))));
+}
+
+}  // namespace
+
 // Adds waiting capabilities to BrowserAutofillManager.
 class TestAutofillManager : public autofill::BrowserAutofillManager {
  public:
@@ -115,6 +152,14 @@
     return card;
   }
 
+  AutofillProfile CreateTestProfile() {
+    AutofillProfile profile = test::GetFullProfile();
+    AddTestProfile(browser()->profile(), profile);
+    return profile;
+  }
+
+  FormGlobalId form_id() const { return form_id_; }
+
   base::Value::Dict GetFilledOutForm(const std::string& unique_context_id) {
     return GetFilledOutForm(unique_context_id, "");
   }
@@ -145,6 +190,10 @@
   }
 
  private:
+  test::AutofillUnitTestEnvironment autofill_test_environment_;
+  base::test::ScopedFeatureList feature_list_{
+      features::kAutofillTestFormWithDevtools};
+  FormGlobalId form_id_ = test::MakeFormGlobalId();
   autofill::TestAutofillManagerInjector<TestAutofillManager>
       autofill_manager_injector_;
 };
@@ -327,4 +376,94 @@
   EXPECT_EQ(GetFilledOutForm("", session_id), GetTestCreditCard());
 }
 
-}  // namespace
+IN_PROC_BROWSER_TEST_F(DevToolsAutofillTest, AddressFormFilled) {
+  Attach();
+  // Create a profile to read information from and send to devtools.
+  AutofillProfile profile = CreateTestProfile();
+  // Create fake filled fields.
+  // First field. Please note that we only use `form_field_data` to grab the
+  // field value, everything else comes from `autofill_field`.
+  // TODO(crbug.com/1331312): Get rid of FormFieldData.
+  FormFieldData form_field_data =
+      test::CreateTestFormField(/*label*/ "", "name_1", "value_1", "text");
+  form_field_data.id_attribute = u"id_1";
+  AutofillField autofill_field(form_field_data);
+  // set `autofill_field_2` to empty to assert that we always use
+  // `form_field_data_2`.
+  autofill_field.value = u"";
+  autofill_field.set_server_predictions(
+      {test::CreateFieldPrediction(NAME_FULL)});
+  autofill_field.SetHtmlType(autofill::mojom::HtmlFieldType::kName,
+                             autofill::mojom::HtmlFieldMode::kShipping);
+  // Second field.
+  FormFieldData form_field_data_2 =
+      test::CreateTestFormField(/*label*/ "", "name_2", "value_2", "text");
+  form_field_data_2.id_attribute = u"id_2";
+  AutofillField autofill_field_2(form_field_data_2);
+  // set `autofill_field_2` to empty to assert that we always use
+  // `form_field_data_2`.
+  autofill_field_2.value = u"";
+  autofill_field_2.set_server_predictions(
+      {test::CreateFieldPrediction(NAME_FULL)});
+  autofill_field_2.SetHtmlType(autofill::mojom::HtmlFieldType::kUnspecified,
+                               autofill::mojom::HtmlFieldMode::kShipping);
+  std::vector<const std::pair<const FormFieldData*, const AutofillField*>>
+      filled_fields_by_autofill = {{{&form_field_data, &autofill_field},
+                                    {&form_field_data_2, &autofill_field_2}}};
+
+  // Enabled events and emit event about forming being filled.
+  SendCommandSync("Autofill.enable");
+  test_api(*main_autofill_manager())
+      .OnAutofillProfileOrCreditCardFormFilled(
+          form_id(), filled_fields_by_autofill, &profile);
+
+  base::Value::Dict notification = WaitForNotification(
+      "Autofill.addressFormFilled", /*allow_existing=*/true);
+  for (const base::Value& address_line :
+       *notification.FindListByDottedPath("addressUi.addressFields")) {
+    for (const base::Value& address_field :
+         *address_line.GetDict().FindListByDottedPath("fields")) {
+      // Test that the profile address values sent to devtools match what we
+      // have in `profile`.
+      EXPECT_EQ(GetProfileInfoFromAddressField(profile, address_field),
+                *address_field.GetDict().FindStringByDottedPath("value"));
+    }
+  }
+
+  // Assert that the filled fields sent to devtools match exactly the ones
+  // filled by autofill.
+  const base::Value::List* filled_fields =
+      notification.FindListByDottedPath("filledFields");
+  ASSERT_EQ(filled_fields->size(), filled_fields_by_autofill.size());
+  for (size_t i = 0; i < filled_fields->size(); ++i) {
+    const base::Value& ff = (*filled_fields)[i];
+    const FormFieldData* ffd = filled_fields_by_autofill[i].first;
+    const AutofillField* af = filled_fields_by_autofill[i].second;
+
+    EXPECT_THAT(ff, FilledFieldHasAttributeWithValue16("id", af->id_attribute));
+    EXPECT_THAT(ff, FilledFieldHasAttributeWithValue(
+                        "autofillType",
+                        std::string(FieldTypeToDeveloperRepresentationString(
+                            af->Type().GetStorableType()))));
+    // Note: we read the value from `FormFieldData`.
+    EXPECT_THAT(ff, FilledFieldHasAttributeWithValue16("value", ffd->value));
+    EXPECT_THAT(ff,
+                Not(FilledFieldHasAttributeWithValue16("value", af->value)));
+    EXPECT_THAT(ff, FilledFieldHasAttributeWithValue("htmlType",
+                                                     af->form_control_type));
+    EXPECT_THAT(ff,
+                FilledFieldHasAttributeWithValue16("name", af->name_attribute));
+  }
+
+  // The first filled field uses autocomplete attribute as filling strategy.
+  EXPECT_EQ(*filled_fields->front().GetDict().FindStringByDottedPath(
+                "fillingStrategy"),
+            "autocompleteAttribute");
+  // The second one used autofill internals, either local heuristics or server
+  // predictions.
+  EXPECT_EQ(*filled_fields->back().GetDict().FindStringByDottedPath(
+                "fillingStrategy"),
+            "autofillInferred");
+}
+
+}  // namespace autofill
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index ed3b7239..ba3211be 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -318,7 +318,6 @@
     &kToolbarMicIphAndroid,
     &kToolbarScrollAblationAndroid,
     &kTrustedWebActivityPostMessage,
-    &kResizeOnlyActiveTab,
     &kSpareTab,
     &kStartSurfaceAndroid,
     &kStartSurfaceOnTablet,
@@ -1052,10 +1051,6 @@
              "TrustedWebActivityPostMessage",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kResizeOnlyActiveTab,
-             "ResizeOnlyActiveTab",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // This feature updates the triggering logic for the default search engine
 // choice promo. See crbug.com/1471643 for more details.
 BASE_FEATURE(kSearchEnginesPromoV3,
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index dfde4df..07b62082 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -188,7 +188,6 @@
 BASE_DECLARE_FEATURE(kToolbarScrollAblationAndroid);
 BASE_DECLARE_FEATURE(kToolbarUseHardwareBitmapDraw);
 BASE_DECLARE_FEATURE(kTrustedWebActivityPostMessage);
-BASE_DECLARE_FEATURE(kResizeOnlyActiveTab);
 BASE_DECLARE_FEATURE(kSpareTab);
 BASE_DECLARE_FEATURE(kStartSurfaceAndroid);
 BASE_DECLARE_FEATURE(kStartSurfaceOnTablet);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index dd2ddc5..b708e67 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -411,7 +411,6 @@
             "RequestDesktopSiteOptInControlSynthetic";
     public static final String REQUEST_DESKTOP_SITE_OPT_IN_SYNTHETIC =
             "RequestDesktopSiteOptInSynthetic";
-    public static final String RESIZE_ONLY_ACTIVE_TAB = "ResizeOnlyActiveTab";
     public static final String SAFE_BROWSING_DELAYED_WARNINGS = "SafeBrowsingDelayedWarnings";
     public static final String SAFE_MODE_FOR_CACHED_FLAGS = "SafeModeForCachedFlags";
     public static final String SCREENSHOTS_FOR_ANDROID_V2 = "ScreenshotsForAndroidV2";
diff --git a/chrome/browser/lacros/chrome_browser_main_extra_parts_lacros.cc b/chrome/browser/lacros/chrome_browser_main_extra_parts_lacros.cc
index de631a29..360c362 100644
--- a/chrome/browser/lacros/chrome_browser_main_extra_parts_lacros.cc
+++ b/chrome/browser/lacros/chrome_browser_main_extra_parts_lacros.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/check_is_test.h"
 #include "base/feature_list.h"
 #include "base/unguessable_token.h"
 #include "build/chromeos_buildflags.h"
@@ -131,9 +132,15 @@
         std::make_unique<DeviceLocalAccountExtensionInstallerLacros>();
   }
 
-  DCHECK(!device::GeolocationManager::GetInstance());
-  device::GeolocationManager::SetInstance(
-      SystemGeolocationSourceLacros::CreateGeolocationManagerOnLacros());
+  const auto* const geolocation_manager =
+      device::GeolocationManager::GetInstance();
+  if (!geolocation_manager) {
+    device::GeolocationManager::SetInstance(
+        SystemGeolocationSourceLacros::CreateGeolocationManagerOnLacros());
+  } else {
+    // Geolocation manager instance can be set at this point only in tests.
+    CHECK_IS_TEST();
+  }
 }
 
 void ChromeBrowserMainExtraPartsLacros::PostBrowserStart() {
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index cd789d5..09d3d6c 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -248,6 +248,19 @@
       settings));
 }
 
+void Update3pcdMetadataGrantsSettings(Profile* profile) {
+  ContentSettingsForOneType settings =
+      HostContentSettingsMapFactory::GetForProfile(profile)
+          ->GetSettingsForOneType(ContentSettingsType::TPCD_METADATA_GRANTS);
+  profile->ForEachLoadedStoragePartition(base::BindRepeating(
+      [](ContentSettingsForOneType settings,
+         content::StoragePartition* storage_partition) {
+        storage_partition->GetCookieManagerForBrowserProcess()
+            ->SetContentSettingsFor3pcdMetadataGrants(settings);
+      },
+      settings));
+}
+
 // `kPermissionStorageAccessAPI` enables feature: Storage Access API with
 // Prompts (https://chromestatus.com/feature/5085655327047680). StorageAccessAPI
 // is considered enabled when either feature is enabled (by different field
@@ -637,6 +650,10 @@
   out->settings_for_3pcd = host_content_settings_map->GetSettingsForOneType(
       ContentSettingsType::TPCD_SUPPORT);
 
+  out->settings_for_3pcd_metadata_grants =
+      host_content_settings_map->GetSettingsForOneType(
+          ContentSettingsType::TPCD_METADATA_GRANTS);
+
   if (StorageAccessAPIEnabled()) {
     out->settings_for_storage_access =
         host_content_settings_map->GetSettingsForOneType(
@@ -1132,6 +1149,9 @@
     case ContentSettingsType::TPCD_SUPPORT:
       Update3pcdSettings(profile_);
       break;
+    case ContentSettingsType::TPCD_METADATA_GRANTS:
+      Update3pcdMetadataGrantsSettings(profile_);
+      break;
     case ContentSettingsType::STORAGE_ACCESS:
       UpdateStorageAccessSettings(profile_);
       break;
@@ -1143,6 +1163,7 @@
       UpdateCookieSettings(profile_);
       UpdateLegacyCookieSettings(profile_);
       Update3pcdSettings(profile_);
+      Update3pcdMetadataGrantsSettings(profile_);
       UpdateAllStorageAccessSettings(profile_);
       break;
     default:
diff --git a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc
index 214b34a..5495876 100644
--- a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc
+++ b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc
@@ -64,11 +64,11 @@
 void WorkingSetTrimmerChromeOS::TrimWorkingSet(base::ProcessId pid) {
   const std::string reclaim_file = base::StringPrintf("/proc/%d/reclaim", pid);
   const std::string kReclaimMode = "all";
-  [[maybe_unused]] bool success =
-      base::WriteFile(base::FilePath(reclaim_file), kReclaimMode);
+  ssize_t written = base::WriteFile(base::FilePath(reclaim_file),
+                                    kReclaimMode.c_str(), kReclaimMode.size());
 
   // We won't log an error if reclaim failed due to the process being dead.
-  PLOG_IF(ERROR, success && errno != ENOENT)
+  PLOG_IF(ERROR, written < 0 && errno != ENOENT)
       << "Write failed on " << reclaim_file << " mode: " << kReclaimMode;
 }
 
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 52160d3..39f2453 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -943,6 +943,9 @@
   { key::kGoogleWorkspaceCloudUpload,
     prefs::kGoogleWorkspaceCloudUpload,
     base::Value::Type::STRING},
+    { key::kMicrosoftOneDriveMount,
+    prefs::kMicrosoftOneDriveMount,
+    base::Value::Type::STRING},
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
index c48f139..bc32967e 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -446,7 +446,6 @@
             "LocaleManager_SEARCH_WIDGET_PRESENT_FIRST_START";
     public static final String LOCALE_MANAGER_SHOULD_REPING_RLZ_FOR_SEARCH_PROMO =
             "LocaleManager_SHOULD_REPING_RLZ_FOR_SEARCH_PROMO_KEYWORD";
-    public static final String LOCALE_MANAGER_USER_TYPE = "LocaleManager_USR_TYPE";
     public static final String LOCALE_MANAGER_WAS_IN_SPECIAL_LOCALE =
             "LocaleManager_WAS_IN_SPECIAL_LOCALE";
 
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/DeprecatedChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/DeprecatedChromePreferenceKeys.java
index 58d23b33..4fca7f8 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/DeprecatedChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/DeprecatedChromePreferenceKeys.java
@@ -47,6 +47,7 @@
                 "Chrome.RequestDesktopSiteGlobalSetting.OptInMessageShown",
                 "Chrome.SigninPromo.NTPImpressions",
                 "Chrome.VideoTutorials.ShareUrls",
+                "LocaleManager_USR_TYPE",
                 "PersistedNotificationId",
                 "PhysicalWeb.ActivityReferral",
                 "PhysicalWeb.HasDeferredMetrics",
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
index d0fb19d..93dee55 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
@@ -78,7 +78,6 @@
                 ChromePreferenceKeys.LOCALE_MANAGER_SEARCH_ENGINE_PROMO_SHOW_STATE,
                 ChromePreferenceKeys.LOCALE_MANAGER_SEARCH_WIDGET_PRESENT_FIRST_START,
                 ChromePreferenceKeys.LOCALE_MANAGER_SHOULD_REPING_RLZ_FOR_SEARCH_PROMO,
-                ChromePreferenceKeys.LOCALE_MANAGER_USER_TYPE,
                 ChromePreferenceKeys.LOCALE_MANAGER_WAS_IN_SPECIAL_LOCALE,
                 ChromePreferenceKeys.MEDIA_WEBRTC_NOTIFICATION_IDS,
                 ChromePreferenceKeys.METRICS_MAIN_INTENT_LAUNCH_COUNT,
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 2506dc6..e3ee98a 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -21,6 +21,7 @@
 #include "chrome/browser/ash/notifications/update_notification_showing_controller.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/chrome_content_browser_client.h"
+#include "chrome/browser/chromeos/enterprise/cloud_storage/policy_utils.h"
 #include "chrome/browser/chromeos/upload_office_to_cloud/upload_office_to_cloud.h"
 #include "chrome/browser/component_updater/component_updater_prefs.h"
 #include "chrome/browser/devtools/devtools_window.h"
@@ -1866,6 +1867,7 @@
   extensions::login_api::RegisterProfilePrefs(registry);
   extensions::platform_keys::RegisterProfilePrefs(registry);
   certificate_manager::CertificatesHandler::RegisterProfilePrefs(registry);
+  chromeos::cloud_storage::RegisterProfilePrefs(registry);
   chromeos::cloud_upload::RegisterProfilePrefs(registry);
   policy::PolicyCertService::RegisterProfilePrefs(registry);
   registry->RegisterBooleanPref(prefs::kDeskAPIThirdPartyAccessEnabled, false);
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 185f3e77..d403a5b 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -16,6 +16,7 @@
 
 #include "base/command_line.h"
 #include "base/containers/contains.h"
+#include "base/debug/stack_trace.h"
 #include "base/feature_list.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
@@ -77,6 +78,7 @@
 #include "components/bookmarks/common/bookmark_pref_names.h"
 #include "components/browsing_data/core/pref_names.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/crash/core/common/crash_key.h"
 #include "components/policy/core/common/policy_pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
@@ -180,6 +182,44 @@
 
 namespace {
 
+// There may be multiple profile creations happening, but only one stack trace
+// is recorded (the most recent one). See https://crbug.com/1472849
+void SetCrashKeysForAsyncProfileCreation(Profile* profile,
+                                         bool creation_complete) {
+  static crash_reporter::CrashKeyString<1024> async_profile_creation_trace_key(
+      "ProfileAsyncCreationStartStack");
+  static crash_reporter::CrashKeyString<32> async_profile_creation_basename(
+      "ProfileAsyncCreationStartBasename");
+  static base::NoDestructor<base::FilePath> basename_for_current_trace;
+
+  base::FilePath profile_dir_basename = profile->GetPath().BaseName();
+
+  if (creation_complete) {
+    if (profile_dir_basename == *basename_for_current_trace) {
+      async_profile_creation_trace_key.Clear();
+      async_profile_creation_basename.Clear();
+      basename_for_current_trace->clear();
+    }
+    return;
+  }
+
+  crash_reporter::SetCrashKeyStringToStackTrace(
+      &async_profile_creation_trace_key, base::debug::StackTrace());
+  async_profile_creation_basename.Set(profile_dir_basename.AsUTF8Unsafe());
+  *basename_for_current_trace = profile_dir_basename;
+}
+
+// Assigns `profile` to `captured_profile` and runs `closure`.
+void CaptureProfile(base::WeakPtr<Profile>* captured_profile,
+                    base::OnceClosure closure,
+                    Profile* profile) {
+  CHECK(captured_profile);
+  if (profile) {
+    *captured_profile = profile->GetWeakPtr();
+  }
+  std::move(closure).Run();
+}
+
 int64_t ComputeFilesSize(const base::FilePath& directory,
                          const base::FilePath::StringType& pattern) {
   int64_t running_size = 0;
@@ -1591,6 +1631,8 @@
   std::unique_ptr<ProfileInfo> info(new ProfileInfo());
   info->unowned_profile_ = profile;
 
+  SetCrashKeysForAsyncProfileCreation(profile, /*creation_complete=*/false);
+
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // Lacros primary profile should not be destroyed, this KeepAlive will be
   // set and not expected to be removed at any point. On Secondary profiles, we
@@ -1614,6 +1656,7 @@
 void ProfileManager::ProfileInfo::MarkProfileAsCreated(Profile* profile) {
   DCHECK_EQ(GetRawProfile(), profile);
   created_ = true;
+  SetCrashKeysForAsyncProfileCreation(profile, /*creation_complete=*/true);
 }
 
 Profile* ProfileManager::ProfileInfo::GetCreatedProfile() const {
@@ -1736,14 +1779,36 @@
   // profile corruption. Note that this check also covers the case when we have
   // already started loading the profile but it is not fully initialized yet,
   // which would make Bad Things happen if we returned it.
-  CHECK(!GetProfileByPathInternal(profile_dir));
+  ProfileInfo* info = GetProfileInfoByPath(profile_dir);
+  if (info) {
+    SCOPED_CRASH_KEY_STRING32("CreateAndInitializeProfile", "basename",
+                              profile_dir.BaseName().AsUTF8Unsafe());
+    CHECK(!info->GetCreatedProfile())
+        << "Profile is loaded twice " << profile_dir;
+
+    // Load the profile synchronously while it's being loaded asynchronously.
+    // Try recovering from this and avoid crashing.
+    // See https://crbug.com/1472849
+    base::debug::DumpWithoutCrashing();
+    base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
+    // Use a weak pointer, in case the profile is deleted by a task executed by
+    // the `RunLoop`.
+    base::WeakPtr<Profile> profile_being_loaded;
+    // Using `init_callbacks` rather than `created_callbacks`, so that the
+    // profile is fully initialized, like in the main codepath of this function.
+    info->init_callbacks.push_back(base::BindOnce(
+        &CaptureProfile, &profile_being_loaded, loop.QuitClosure()));
+    loop.Run();
+    return profile_being_loaded.get();
+  }
+
   std::unique_ptr<Profile> profile = CreateProfileHelper(profile_dir);
   if (!profile)
     return nullptr;
 
   // Place the unique_ptr inside ProfileInfo, which was added by
   // OnProfileCreationStarted().
-  ProfileInfo* info = GetProfileInfoByPath(profile->GetPath());
+  info = GetProfileInfoByPath(profile->GetPath());
   DCHECK(info);
   info->TakeOwnershipOfProfile(std::move(profile));
   info->MarkProfileAsCreated(info->GetRawProfile());
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc
index c5375a3..38bc6340 100644
--- a/chrome/browser/profiles/profile_manager_browsertest.cc
+++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -655,6 +655,23 @@
   // Verifies that the browser doesn't crash when it is restarted.
 }
 
+// Regression test for https://crbug.com/1472849
+IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTestBase,
+                       ConcurrentCreationAsyncAndSync) {
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+  base::FilePath profile_path =
+      profile_manager->GenerateNextProfileDirectoryPath();
+  // Initiate asynchronous creation.
+  profile_manager->CreateProfileAsync(profile_path, base::DoNothing());
+  // The profile is being created, but creation is not complete.
+  EXPECT_EQ(nullptr, profile_manager->GetProfileByPath(profile_path));
+  // Request synchronous creation of the same profile, this should not crash.
+  Profile* profile = profile_manager->GetProfile(profile_path);
+  // The profile has been loaded.
+  EXPECT_EQ(profile, profile_manager->GetProfileByPath(profile_path));
+  EXPECT_EQ(profile->GetPath(), profile_path);
+}
+
 IN_PROC_BROWSER_TEST_P(ProfileManagerBrowserTest, EphemeralProfile) {
   // If multiprofile mode is not enabled, you can't switch between profiles.
   if (!profiles::IsMultipleProfilesEnabled())
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 44769543..0e2af9b5 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -589,6 +589,39 @@
   content::RunAllTasksUntilIdle();
 }
 
+// Regression test for https://crbug.com/1472849
+TEST_F(ProfileManagerTest, ConcurrentCreationAsyncAndSync) {
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+
+  MockObserver mock_observer;
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::_)).Times(0);
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::_)).Times(0);
+
+  base::FilePath profile_path = temp_dir_.GetPath().AppendASCII("New Profile");
+  CreateProfileAsync(profile_manager, profile_path, &mock_observer);
+
+  // The profile is being created, but creation is not complete.
+  EXPECT_EQ(nullptr, profile_manager->GetProfileByPath(profile_path));
+
+  // Request synchronous creation of the same profile, this should not crash.
+  Profile* profile_created = nullptr;
+  Profile* profile_initialized = nullptr;
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull()))
+      .Times(1)
+      .WillOnce(testing::SaveArg<0>(&profile_created));
+  EXPECT_CALL(mock_observer, OnProfileInitialized(testing::NotNull()))
+      .Times(1)
+      .WillOnce(testing::SaveArg<0>(&profile_initialized));
+  Profile* profile = profile_manager->GetProfile(profile_path);
+
+  // The profile has been loaded correctly, and all callbacks were called.
+  EXPECT_EQ(profile, profile_manager->GetProfileByPath(profile_path));
+  testing::Mock::VerifyAndClearExpectations(&mock_observer);
+  EXPECT_EQ(profile->GetPath(), profile_path);
+  EXPECT_EQ(profile, profile_initialized);
+  EXPECT_EQ(profile, profile_created);
+}
+
 #if !BUILDFLAG(IS_ANDROID)
 // There's no multi-profiles on Android.
 TEST_F(ProfileManagerTest, CreateMultiProfileAsync) {
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java
index 2c8429a..86d3d6a3 100644
--- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java
+++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java
@@ -23,7 +23,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
-import org.chromium.components.browser_ui.settings.SettingsLauncher;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modelutil.PropertyModel;
@@ -76,17 +75,15 @@
                 LayoutInflater.from(context).inflate(R.layout.quick_delete_dialog, null);
         mPropertyModel = new PropertyModel.Builder(QuickDeleteProperties.ALL_KEYS)
                                  .with(QuickDeleteProperties.CONTEXT, mContext)
-                                 .with(QuickDeleteProperties.ON_MORE_OPTIONS_CLICKED,
-                                         this::onMoreOptionsButtonClicked)
                                  .build();
         mPropertyModelChangeProcessor = PropertyModelChangeProcessor.create(
                 mPropertyModel, quickDeleteView, QuickDeleteViewBinder::bind);
         mQuickDeleteMediator = new QuickDeleteMediator(
                 mPropertyModel, profile, mQuickDeleteBridge, mDeleteTabsFilter);
 
-        QuickDeleteDialogDelegate dialogDelegate =
-                new QuickDeleteDialogDelegate(context, quickDeleteView, modalDialogManager,
-                        this::onDialogDismissed, tabModelSelector, mQuickDeleteMediator);
+        QuickDeleteDialogDelegate dialogDelegate = new QuickDeleteDialogDelegate(context,
+                quickDeleteView, modalDialogManager, this::onDialogDismissed, tabModelSelector,
+                mDelegate.getSettingsLauncher(), mQuickDeleteMediator);
         dialogDelegate.showDialog();
     }
 
@@ -166,11 +163,4 @@
                 Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_QUICK_DELETE);
         mSnackbarManager.showSnackbar(snackbar);
     }
-
-    private void onMoreOptionsButtonClicked() {
-        QuickDeleteMetricsDelegate.recordHistogram(
-                QuickDeleteMetricsDelegate.QuickDeleteAction.MORE_OPTIONS_CLICKED);
-        mDelegate.getSettingsLauncher().launchSettingsActivity(
-                mContext, SettingsLauncher.SettingsFragment.CLEAR_BROWSING_DATA_ADVANCED_PAGE);
-    }
 }
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegate.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegate.java
index e6b85045..243520e 100644
--- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegate.java
+++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegate.java
@@ -23,6 +23,7 @@
 import org.chromium.chrome.browser.browsing_data.TimePeriodUtils.TimePeriodSpinnerOption;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.components.browser_ui.settings.SettingsLauncher;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -31,6 +32,7 @@
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.text.NoUnderlineClickableSpan;
 import org.chromium.ui.text.SpanApplier;
+import org.chromium.ui.widget.ButtonCompat;
 import org.chromium.ui.widget.TextViewWithClickableSpans;
 
 import java.util.Objects;
@@ -54,6 +56,7 @@
     private final @NonNull View mQuickDeleteView;
     private final @NonNull Callback<Integer> mOnDismissCallback;
     private final @NonNull TabModelSelector mTabModelSelector;
+    private final @NonNull SettingsLauncher mSettingsLauncher;
     private final @NonNull TimePeriodChangeObserver mTimePeriodChangeObserver;
     /**
      * The {@link PropertyModel} of the underlying dialog where the quick dialog view would be
@@ -94,19 +97,22 @@
      *                           cancels the deletion;
      * @param tabModelSelector   {@link TabModelSelector} to use for opening the links in search
      *                           history disambiguation notice.
+     * @param settingsLauncher   @link SettingsLauncher} used to launch the Clear browsing data
+     *                           settings fragment.
      * @param timePeriodChangeObserver {@link TimePeriodChangeObserver} which would be notified when
      *         the spinner is toggled.
      */
     QuickDeleteDialogDelegate(@NonNull Context context, @NonNull View quickDeleteView,
             @NonNull ModalDialogManager modalDialogManager,
             @NonNull Callback<Integer> onDismissCallback,
-            @NonNull TabModelSelector tabModelSelector,
+            @NonNull TabModelSelector tabModelSelector, @NonNull SettingsLauncher settingsLauncher,
             @NonNull TimePeriodChangeObserver timePeriodChangeObserver) {
         mContext = context;
         mQuickDeleteView = quickDeleteView;
         mModalDialogManager = modalDialogManager;
         mOnDismissCallback = onDismissCallback;
         mTabModelSelector = tabModelSelector;
+        mSettingsLauncher = settingsLauncher;
         mTimePeriodChangeObserver = timePeriodChangeObserver;
 
         mCurrentTimePeriodOption = new TimePeriodSpinnerOption(TimePeriod.LAST_15_MINUTES,
@@ -121,6 +127,11 @@
         Spinner quickDeleteSpinner = mQuickDeleteView.findViewById(R.id.quick_delete_spinner);
         updateSpinner(quickDeleteSpinner);
 
+        // Update the "More options" button.
+        ButtonCompat moreOptionsView =
+                mQuickDeleteView.findViewById(R.id.quick_delete_more_options);
+        moreOptionsView.setOnClickListener(view -> openClearBrowsingDataDialog());
+
         // Update search history text
         setUpSearchHistoryText();
 
@@ -180,6 +191,15 @@
         });
     }
 
+    private void openClearBrowsingDataDialog() {
+        QuickDeleteMetricsDelegate.recordHistogram(
+                QuickDeleteMetricsDelegate.QuickDeleteAction.MORE_OPTIONS_CLICKED);
+        mSettingsLauncher.launchSettingsActivity(
+                mContext, SettingsLauncher.SettingsFragment.CLEAR_BROWSING_DATA_ADVANCED_PAGE);
+        mModalDialogManager.dismissDialog(
+                mModalDialogPropertyModel, DialogDismissalCause.ACTION_ON_CONTENT);
+    }
+
     private void setUpSearchHistoryText() {
         TextViewWithClickableSpans text =
                 mQuickDeleteView.findViewById(R.id.search_history_disambiguation);
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteProperties.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteProperties.java
index 4e79d793..2460b11 100644
--- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteProperties.java
+++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteProperties.java
@@ -30,10 +30,8 @@
 
     public static final PropertyModel.ReadableObjectPropertyKey<Context> CONTEXT =
             new PropertyModel.ReadableObjectPropertyKey();
-    public static final PropertyModel.ReadableObjectPropertyKey<Runnable> ON_MORE_OPTIONS_CLICKED =
-            new PropertyModel.ReadableObjectPropertyKey();
 
     public static final PropertyKey[] ALL_KEYS = {TIME_PERIOD, DOMAIN_VISITED_DATA,
             CLOSED_TABS_COUNT, IS_SIGNED_IN, IS_SYNCING_HISTORY, IS_DOMAIN_VISITED_DATA_PENDING,
-            CONTEXT, ON_MORE_OPTIONS_CLICKED};
+            CONTEXT};
 }
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteViewBinder.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteViewBinder.java
index 226a128..d5bd6522 100644
--- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteViewBinder.java
+++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteViewBinder.java
@@ -48,11 +48,6 @@
             updateBrowsingHistoryRowIfPending(model.get(QuickDeleteProperties.CONTEXT),
                     quickDeleteView,
                     model.get(QuickDeleteProperties.IS_DOMAIN_VISITED_DATA_PENDING));
-        } else if (QuickDeleteProperties.ON_MORE_OPTIONS_CLICKED == propertyKey) {
-            Runnable runnable = model.get(QuickDeleteProperties.ON_MORE_OPTIONS_CLICKED);
-            assert runnable != null : "More options runnable can't be null.";
-            quickDeleteView.findViewById(R.id.quick_delete_more_options)
-                    .setOnClickListener(view -> runnable.run());
         }
     }
 
diff --git a/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java b/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java
index ee604f6..1b35002 100644
--- a/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java
+++ b/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java
@@ -292,8 +292,13 @@
         openQuickDeleteDialog();
 
         HistogramWatcher histogramWatcher =
-                HistogramWatcher.newSingleRecordWatcher(QuickDeleteMetricsDelegate.HISTOGRAM_NAME,
-                        QuickDeleteMetricsDelegate.QuickDeleteAction.MORE_OPTIONS_CLICKED);
+                HistogramWatcher.newBuilder()
+                        .expectIntRecord(QuickDeleteMetricsDelegate.HISTOGRAM_NAME,
+                                QuickDeleteMetricsDelegate.QuickDeleteAction.MORE_OPTIONS_CLICKED)
+                        .expectIntRecord(QuickDeleteMetricsDelegate.HISTOGRAM_NAME,
+                                QuickDeleteMetricsDelegate.QuickDeleteAction
+                                        .DIALOG_DISMISSED_IMPLICITLY)
+                        .build();
 
         onViewWaiting(withId(R.id.quick_delete_more_options)).perform(click());
 
diff --git a/chrome/browser/quick_delete/android/junit/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegateUnitTest.java b/chrome/browser/quick_delete/android/junit/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegateUnitTest.java
index 4e0d165f..e3c0d1e 100644
--- a/chrome/browser/quick_delete/android/junit/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegateUnitTest.java
+++ b/chrome/browser/quick_delete/android/junit/src/org/chromium/chrome/browser/quick_delete/QuickDeleteDialogDelegateUnitTest.java
@@ -37,6 +37,7 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.components.browser_ui.settings.SettingsLauncher;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -59,6 +60,8 @@
     @Mock
     private Tab mTabMock;
     @Mock
+    private SettingsLauncher mSettingsLauncherMock;
+    @Mock
     private TimePeriodChangeObserver mTimePeriodChangeObserverMock;
 
     private FakeModalDialogManager mModalDialogManager;
@@ -86,7 +89,8 @@
     @SmallTest
     public void testObserverFired_OnSpinnerChanges() {
         new QuickDeleteDialogDelegate(mActivity, mQuickDeleteView, mModalDialogManager,
-                mOnDismissCallbackMock, mTabModelSelectorMock, mTimePeriodChangeObserverMock)
+                mOnDismissCallbackMock, mTabModelSelectorMock, mSettingsLauncherMock,
+                mTimePeriodChangeObserverMock)
                 .showDialog();
 
         HistogramWatcher histogramWatcher =
@@ -106,7 +110,8 @@
     @SmallTest
     public void testCancelQuickDelete() {
         new QuickDeleteDialogDelegate(mActivity, mQuickDeleteView, mModalDialogManager,
-                mOnDismissCallbackMock, mTabModelSelectorMock, mTimePeriodChangeObserverMock)
+                mOnDismissCallbackMock, mTabModelSelectorMock, mSettingsLauncherMock,
+                mTimePeriodChangeObserverMock)
                 .showDialog();
 
         mModalDialogManager.clickNegativeButton();
@@ -118,7 +123,8 @@
     @SmallTest
     public void testConfirmQuickDelete() {
         new QuickDeleteDialogDelegate(mActivity, mQuickDeleteView, mModalDialogManager,
-                mOnDismissCallbackMock, mTabModelSelectorMock, mTimePeriodChangeObserverMock)
+                mOnDismissCallbackMock, mTabModelSelectorMock, mSettingsLauncherMock,
+                mTimePeriodChangeObserverMock)
                 .showDialog();
 
         mModalDialogManager.clickPositiveButton();
@@ -133,7 +139,8 @@
                 HistogramWatcher.newSingleRecordWatcher(QuickDeleteMetricsDelegate.HISTOGRAM_NAME,
                         QuickDeleteMetricsDelegate.QuickDeleteAction.SEARCH_HISTORY_LINK_CLICKED);
         new QuickDeleteDialogDelegate(mActivity, mQuickDeleteView, mModalDialogManager,
-                mOnDismissCallbackMock, mTabModelSelectorMock, mTimePeriodChangeObserverMock)
+                mOnDismissCallbackMock, mTabModelSelectorMock, mSettingsLauncherMock,
+                mTimePeriodChangeObserverMock)
                 .showDialog();
 
         TextViewWithClickableSpans searchHistoryDisambiguation =
@@ -159,7 +166,8 @@
                 HistogramWatcher.newSingleRecordWatcher(QuickDeleteMetricsDelegate.HISTOGRAM_NAME,
                         QuickDeleteMetricsDelegate.QuickDeleteAction.MY_ACTIVITY_LINK_CLICKED);
         new QuickDeleteDialogDelegate(mActivity, mQuickDeleteView, mModalDialogManager,
-                mOnDismissCallbackMock, mTabModelSelectorMock, mTimePeriodChangeObserverMock)
+                mOnDismissCallbackMock, mTabModelSelectorMock, mSettingsLauncherMock,
+                mTimePeriodChangeObserverMock)
                 .showDialog();
 
         TextViewWithClickableSpans searchHistoryDisambiguation =
diff --git a/chrome/browser/resources/downloads/item.html b/chrome/browser/resources/downloads/item.html
index 34c31f6..24ce6e2 100644
--- a/chrome/browser/resources/downloads/item.html
+++ b/chrome/browser/resources/downloads/item.html
@@ -311,7 +311,7 @@
   <div id="details">
     <div id="title-area" role="gridcell"><!--
       Can't have any line breaks.
-      --><a is="action-link" id="file-link" href="[[data.url]]"
+      --><a is="action-link" id="file-link" href="[[data.url.url]]"
           on-click="onFileLinkClick_" focus-row-control
           focus-type="fileLink"
           hidden="[[!shouldLinkFilename_]]">[[data.fileName]]</a><!--
@@ -325,7 +325,7 @@
 
     <div role="gridcell">
       <a id="url" target="_blank" on-click="onUrlClick_" focus-row-control
-          focus-type="url">[[chopUrl_(data.url)]]</a>
+          focus-type="url">[[getDisplayUrlStr_(data.displayUrl)]]</a>
     </div>
 
     <div class="description" role="gridcell"
diff --git a/chrome/browser/resources/downloads/item.ts b/chrome/browser/resources/downloads/item.ts
index 2b3172d..0a25d449 100644
--- a/chrome/browser/resources/downloads/item.ts
+++ b/chrome/browser/resources/downloads/item.ts
@@ -21,8 +21,10 @@
 import {assert} from 'chrome://resources/js/assert_ts.js';
 import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
+import {mojoString16ToString} from 'chrome://resources/js/mojo_type_util.js';
 import {sanitizeInnerHtml} from 'chrome://resources/js/parse_html_subset.js';
 import {htmlEscape} from 'chrome://resources/js/util_ts.js';
+import {String16} from 'chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-webui.js';
 import {beforeNextRender, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {BrowserProxy} from './browser_proxy.js';
@@ -226,10 +228,10 @@
   }
 
   /**
-   * @return A reasonably long URL.
+   * @return A JS string of the display URL.
    */
-  private chopUrl_(url: string): string {
-    return url.slice(0, 300);
+  private getDisplayUrlStr_(displayUrl: String16): string {
+    return mojoString16ToString(displayUrl);
   }
 
   private computeClass_(): string {
@@ -576,6 +578,11 @@
   }
 
   private observeIsDangerous_() {
+    const removeFileUrlLinks = () => {
+      this.$.url.removeAttribute('href');
+      this.$['file-link'].removeAttribute('href');
+    };
+
     if (!this.data) {
       return;
     }
@@ -587,28 +594,41 @@
       DangerType.DEEP_SCANNED_FAILED,
     ];
 
+    // Handle various dangerous cases.
     if (this.isDangerous_) {
-      this.$.url.removeAttribute('href');
+      removeFileUrlLinks();
       this.useFileIcon_ = false;
-    } else if (OVERRIDDEN_ICON_TYPES.includes(
-                   this.data.dangerType as DangerType)) {
-      this.useFileIcon_ = false;
-    } else if (this.data.state === States.ASYNC_SCANNING) {
-      this.useFileIcon_ = false;
-    } else if (this.data.state === States.PROMPT_FOR_SCANNING) {
-      this.useFileIcon_ = false;
-    } else {
-      this.$.url.href = this.data.url;
-      const path = this.data.filePath;
-      IconLoaderImpl.getInstance()
-          .loadIcon(this.$['file-icon'], path)
-          .then(success => {
-            if (path === this.data.filePath &&
-                this.data.state !== States.ASYNC_SCANNING) {
-              this.useFileIcon_ = success;
-            }
-          });
+      return;
     }
+    if (OVERRIDDEN_ICON_TYPES.includes(this.data.dangerType as DangerType)) {
+      this.useFileIcon_ = false;
+      return;
+    }
+    if (this.data.state === States.ASYNC_SCANNING) {
+      this.useFileIcon_ = false;
+      return;
+    }
+    if (this.data.state === States.PROMPT_FOR_SCANNING) {
+      this.useFileIcon_ = false;
+      return;
+    }
+
+    // The file is not dangerous. Link the url if supplied.
+    if (this.data.url) {
+      this.$.url.href = this.data.url.url;
+    } else {
+      removeFileUrlLinks();
+    }
+
+    const path = this.data.filePath;
+    IconLoaderImpl.getInstance()
+        .loadIcon(this.$['file-icon'], path)
+        .then(success => {
+          if (path === this.data.filePath &&
+              this.data.state !== States.ASYNC_SCANNING) {
+            this.useFileIcon_ = success;
+          }
+        });
   }
 
   private onCancelClick_() {
@@ -651,6 +671,9 @@
   }
 
   private onUrlClick_() {
+    if (!this.data.url) {
+      return;
+    }
     chrome.send(
         'metricsHandler:recordAction', ['Downloads_OpenUrlOfDownloadedItem']);
   }
diff --git a/chrome/browser/resources/new_tab_page/lazy_load.ts b/chrome/browser/resources/new_tab_page/lazy_load.ts
index fa6f858d..128a38f 100644
--- a/chrome/browser/resources/new_tab_page/lazy_load.ts
+++ b/chrome/browser/resources/new_tab_page/lazy_load.ts
@@ -57,5 +57,5 @@
 export {HistoryClustersProxyImpl as HistoryClustersProxyImplV2} from './modules/v2/history_clusters/history_clusters_proxy.js';
 export {historyClustersDescriptor as historyClustersV2Descriptor, HistoryClustersModuleElement as HistoryClustersV2ModuleElement} from './modules/v2/history_clusters/module.js';
 export {ModuleHeaderElementV2} from './modules/v2/module_header.js';
-export {DismissModuleInstanceEvent, MAX_COLUMN_COUNT, ModulesV2Element, NamedWidth, SUPPORTED_MODULE_WIDTHS} from './modules/v2/modules.js';
+export {DismissModuleInstanceEvent, ModulesV2Element, NamedWidth, SUPPORTED_MODULE_WIDTHS} from './modules/v2/modules.js';
 export {VoiceSearchOverlayElement} from './voice_search_overlay.js';
diff --git a/chrome/browser/resources/new_tab_page/modules/v2/modules.ts b/chrome/browser/resources/new_tab_page/modules/v2/modules.ts
index 17a25e4..74fea58 100644
--- a/chrome/browser/resources/new_tab_page/modules/v2/modules.ts
+++ b/chrome/browser/resources/new_tab_page/modules/v2/modules.ts
@@ -31,16 +31,11 @@
   {name: 'wide', value: 728},
 ];
 
-export const MAX_COLUMN_COUNT = 5;
-
 interface QueryDetails {
   maxWidth: number;
   query: string;
 }
 
-/* Derived from 5 * narrow module width + 4 * wrapper gap width. */
-const CONTAINER_MAX_WIDTH = 1592;
-
 const CONTAINER_GAP_WIDTH = 8;
 
 const MARGIN_WIDTH = 48;
@@ -99,6 +94,8 @@
   }
 
   modulesShownToUser: boolean;
+  private maxColumnCount_: number;
+  private containerMaxWidth_: number;
   private disabledModules_: {all: boolean, ids: string[]};
   private eventTracker_: EventTracker = new EventTracker();
   private undoData_: {message: string, undo?: () => void}|null;
@@ -120,9 +117,9 @@
     const widths: Set<number> = new Set();
     for (let i = 0; i < SUPPORTED_MODULE_WIDTHS.length; i++) {
       const namedWidth = SUPPORTED_MODULE_WIDTHS[i];
-      for (let u = 1; u <= MAX_COLUMN_COUNT - i; u++) {
+      for (let u = 1; u <= this.maxColumnCount_ - i; u++) {
         const width = (namedWidth.value * u) + (CONTAINER_GAP_WIDTH * (u - 1));
-        if (width <= CONTAINER_MAX_WIDTH) {
+        if (width <= this.containerMaxWidth_) {
           widths.add(width);
         }
       }
@@ -189,6 +186,10 @@
       '--container-gap': `${CONTAINER_GAP_WIDTH}px`,
     });
 
+    this.maxColumnCount_ = loadTimeData.getInteger('modulesMaxColumnCount');
+    this.containerMaxWidth_ =
+        this.maxColumnCount_ * SUPPORTED_MODULE_WIDTHS[0].value +
+        (this.maxColumnCount_ - 1) * CONTAINER_GAP_WIDTH;
     this.loadModules_();
   }
 
@@ -276,7 +277,8 @@
   private updateContainerAndChildrenStyles_(availableWidth?: number) {
     if (typeof availableWidth === 'undefined') {
       availableWidth = Math.min(
-          document.body.clientWidth - 2 * MARGIN_WIDTH, CONTAINER_MAX_WIDTH);
+          document.body.clientWidth - 2 * MARGIN_WIDTH,
+          this.containerMaxWidth_);
     }
 
     const moduleWrappers =
@@ -296,7 +298,7 @@
         Math.floor(
             (availableWidth + CONTAINER_GAP_WIDTH) /
             (CONTAINER_GAP_WIDTH + SUPPORTED_MODULE_WIDTHS[0].value)),
-        MAX_COLUMN_COUNT);
+        this.maxColumnCount_);
 
     let index = 0;
     while (index < moduleWrappers.length) {
diff --git a/chrome/browser/resources/search_engine_choice/app.html b/chrome/browser/resources/search_engine_choice/app.html
index 96bff07..e426718 100644
--- a/chrome/browser/resources/search_engine_choice/app.html
+++ b/chrome/browser/resources/search_engine_choice/app.html
@@ -173,7 +173,7 @@
   </p>
   <cr-radio-group class="choice-list" selected="{{selectedChoice_}}">
     <template is="dom-repeat" items="[[choiceList_]]">
-      <cr-radio-button class="label-first" name="[[item.id]]">
+      <cr-radio-button class="label-first" name="[[item.prepopulate_id]]">
         <div class="choice">
           <div class="choice-icon"></div>
           <div class="choice-title">[[item.name]]</div>
@@ -182,7 +182,7 @@
     </template>
   </cr-radio-group>
 </div>
-<cr-button class="action-button" id="submitButton"
+<cr-button class="action-button" id="submitButton" on-click="onSubmitClicked_"
     disabled="[[isSubmitDisabled_]]">
   $i18n{buttonText}
 </cr-button>
diff --git a/chrome/browser/resources/search_engine_choice/app.ts b/chrome/browser/resources/search_engine_choice/app.ts
index 0b1de83..3fcdaec 100644
--- a/chrome/browser/resources/search_engine_choice/app.ts
+++ b/chrome/browser/resources/search_engine_choice/app.ts
@@ -52,9 +52,12 @@
         },
       },
 
+      // The choice will always be > 0 when selected.
+      // TODO(b/280753754): Handle custom search engines that do not have a
+      // prepopulate_id.
       selectedChoice_: {
-        type: String,
-        value: '',
+        type: Number,
+        value: -1,
       },
 
       isSubmitDisabled_: {
@@ -65,7 +68,7 @@
   }
 
   private choiceList_: SearchEngineChoice[];
-  private selectedChoice_: string;
+  private selectedChoice_: number;
 
   override connectedCallback() {
     super.connectedCallback();
@@ -84,7 +87,12 @@
   }
 
   private isSubmitButtonDisabled_() {
-    return this.selectedChoice_.length === 0;
+    return this.selectedChoice_ === -1;
+  }
+
+  private onSubmitClicked_() {
+    SearchEngineChoiceBrowserProxy.getInstance()
+        .handler.handleSearchEngineChoiceSelected(this.selectedChoice_);
   }
 }
 
diff --git a/chrome/browser/resources/search_engine_choice/browser_proxy.ts b/chrome/browser/resources/search_engine_choice/browser_proxy.ts
index bc24b37..6fdbc76b 100644
--- a/chrome/browser/resources/search_engine_choice/browser_proxy.ts
+++ b/chrome/browser/resources/search_engine_choice/browser_proxy.ts
@@ -10,22 +10,28 @@
 import {PageHandlerFactory, PageHandlerInterface, PageHandlerRemote} from './search_engine_choice.mojom-webui.js';
 
 export interface SearchEngineChoice {
+  prepopulate_id: number;
   name: string;
 }
 
 export class SearchEngineChoiceBrowserProxy {
   handler: PageHandlerInterface;
 
-  constructor() {
-    this.handler = new PageHandlerRemote();
-
-    const factory = PageHandlerFactory.getRemote();
-    factory.createPageHandler(
-        (this.handler as PageHandlerRemote).$.bindNewPipeAndPassReceiver());
+  constructor(handler: PageHandlerRemote) {
+    this.handler = handler;
   }
 
   static getInstance(): SearchEngineChoiceBrowserProxy {
-    return instance || (instance = new SearchEngineChoiceBrowserProxy());
+    if (instance) {
+      return instance;
+    }
+
+    const handler = new PageHandlerRemote();
+    const factory = PageHandlerFactory.getRemote();
+    factory.createPageHandler(
+        (handler as PageHandlerRemote).$.bindNewPipeAndPassReceiver());
+
+    return instance = new SearchEngineChoiceBrowserProxy(handler);
   }
 
   static setInstance(obj: SearchEngineChoiceBrowserProxy) {
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_description_item.ts b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_description_item.ts
index d61b535..0fc7208 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_description_item.ts
+++ b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_description_item.ts
@@ -44,6 +44,8 @@
     };
   }
 
+  label: string;
+
   private sanitizeInnerHtml_(rawString: string): TrustedHTML {
     return sanitizeInnerHtml(rawString);
   }
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.html b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.html
index 3ce1ae02..5d531e2 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.html
@@ -143,7 +143,8 @@
         name="[[safeBrowsingSettingEnum_.STANDARD]]"
         label="$i18n{safeBrowsingStandard}"
         sub-label="[[getSafeBrowsingStandardSubLabel_(
-                    enableFriendlierSafeBrowsingSettings_)]]"
+                    enableFriendlierSafeBrowsingSettings_,
+                    enableHashPrefixRealTimeLookups_)]]"
         expand-aria-label="$i18n{safeBrowsingStandardExpandA11yLabel}"
         on-click="onSafeBrowsingStandardClick_">
         <template is="dom-if" if="[[!enableFriendlierSafeBrowsingSettings_]]">
@@ -160,9 +161,11 @@
                     label="$i18n{privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription1}">
                 </privacy-guide-description-item>
                 <privacy-guide-description-item
+                    id="standardProtectionFeatureDescription2"
                     role="listitem"
                     icon="settings20:googleg"
-                    label="$i18n{privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2}">
+                    label="[[getStandardProtectionFeatureDescription2_(
+                            enableHashPrefixRealTimeLookups_)]]">
                 </privacy-guide-description-item>
               </div>
             </div>
@@ -172,9 +175,11 @@
               </div>
               <div role="list">
                 <privacy-guide-description-item
+                    id="standardProtectionPrivacyDescription1"
                     role="listitem"
                     icon="settings20:data"
-                    label="$i18n{privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1}">
+                    label="[[getStandardProtectionPrivacyDescription1_(
+                            enableHashPrefixRealTimeLookups_)]]">
                 </privacy-guide-description-item>
               </div>
             </div>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.ts b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.ts
index f0fa969..c568ad1 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.ts
+++ b/chrome/browser/resources/settings/privacy_page/privacy_guide/privacy_guide_safe_browsing_fragment.ts
@@ -62,6 +62,13 @@
               'enableFriendlierSafeBrowsingSettings');
         },
       },
+
+      enableHashPrefixRealTimeLookups_: {
+        type: Boolean,
+        value() {
+          return loadTimeData.getBoolean('enableHashPrefixRealTimeLookups');
+        },
+      },
     };
   }
 
@@ -69,6 +76,7 @@
       MetricsBrowserProxyImpl.getInstance();
   private startStateEnhanced_: boolean;
   private enableFriendlierSafeBrowsingSettings_: boolean;
+  private enableHashPrefixRealTimeLookups_: boolean;
 
   override ready() {
     super.ready();
@@ -142,9 +150,25 @@
   private getSafeBrowsingStandardSubLabel_(): string {
     return this.i18n(
         this.enableFriendlierSafeBrowsingSettings_ ?
+            this.enableHashPrefixRealTimeLookups_ ?
+            'safeBrowsingStandardDescUpdatedProxy' :
             'safeBrowsingStandardDescUpdated' :
             'safeBrowsingStandardDesc');
   }
+
+  private getStandardProtectionFeatureDescription2_(): string {
+    return this.i18n(
+        this.enableHashPrefixRealTimeLookups_ ?
+            'privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2Proxy' :
+            'privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2');
+  }
+
+  private getStandardProtectionPrivacyDescription1_(): string {
+    return this.i18n(
+        this.enableHashPrefixRealTimeLookups_ ?
+            'privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1Proxy' :
+            'privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1');
+  }
 }
 
 declare global {
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_browsertest.cc b/chrome/browser/search_engine_choice/search_engine_choice_browsertest.cc
index 371b0efd..2a58945 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_browsertest.cc
+++ b/chrome/browser/search_engine_choice/search_engine_choice_browsertest.cc
@@ -28,7 +28,6 @@
 #include "components/keep_alive_registry/scoped_keep_alive.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
-#include "components/prefs/pref_service.h"
 #include "components/search_engines/search_engines_pref_names.h"
 #include "components/signin/public/base/signin_switches.h"
 #include "content/public/browser/browser_context.h"
@@ -46,7 +45,8 @@
 // class' functions but is needed to be able to use `EXPECT_CALL`.
 class MockSearchEngineChoiceService : public SearchEngineChoiceService {
  public:
-  MockSearchEngineChoiceService() {
+  explicit MockSearchEngineChoiceService(Profile* profile)
+      : SearchEngineChoiceService(*profile) {
     ON_CALL(*this, NotifyDialogOpened)
         .WillByDefault([this](Browser* browser, base::OnceClosure callback) {
           number_of_browsers_with_dialogs_open_++;
@@ -54,16 +54,17 @@
                                                         std::move(callback));
         });
 
-    ON_CALL(*this, NotifyChoiceMade).WillByDefault([this]() {
+    ON_CALL(*this, NotifyChoiceMade).WillByDefault([this](int prepopulate_id) {
       number_of_browsers_with_dialogs_open_ = 0;
-      SearchEngineChoiceService::NotifyChoiceMade();
+      SearchEngineChoiceService::NotifyChoiceMade(prepopulate_id);
     });
   }
   ~MockSearchEngineChoiceService() override = default;
 
   static std::unique_ptr<KeyedService> Create(
       content::BrowserContext* context) {
-    return std::make_unique<testing::NiceMock<MockSearchEngineChoiceService>>();
+    return std::make_unique<testing::NiceMock<MockSearchEngineChoiceService>>(
+        Profile::FromBrowserContext(context));
   }
 
   unsigned int GetNumberOfBrowsersWithDialogsOpen() const {
@@ -74,7 +75,7 @@
               NotifyDialogOpened,
               (Browser*, base::OnceClosure),
               (override));
-  MOCK_METHOD(void, NotifyChoiceMade, (), (override));
+  MOCK_METHOD(void, NotifyChoiceMade, (int), (override));
 
  private:
   unsigned int number_of_browsers_with_dialogs_open_ = 0;
@@ -269,7 +270,7 @@
 #endif
   // Simulate a dialog closing event for the first profile and test that the
   // dialogs for that profile are closed.
-  first_profile_service->NotifyChoiceMade();
+  first_profile_service->NotifyChoiceMade(/*prepopulate_id=*/1);
   EXPECT_FALSE(
       first_profile_service->IsShowingDialog(first_browser_with_first_profile));
   EXPECT_FALSE(first_profile_service->IsShowingDialog(
@@ -292,10 +293,7 @@
   EXPECT_TRUE(service->IsShowingDialog(browser()));
 
   // Set the pref and simulate a dialog closing event.
-  PrefService* prefs = profile->GetPrefs();
-  prefs->SetInt64(prefs::kDefaultSearchProviderChoiceScreenCompletionTimestamp,
-                  base::Time::Now().ToDeltaSinceWindowsEpoch().InSeconds());
-  service->NotifyChoiceMade();
+  service->NotifyChoiceMade(/*prepopulate_id=*/1);
   EXPECT_FALSE(service->IsShowingDialog(browser()));
 
   // Test that the dialog doesn't get shown again after opening a new tab.
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_service.cc b/chrome/browser/search_engine_choice/search_engine_choice_service.cc
index 1f60e36..051686d 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_service.cc
+++ b/chrome/browser/search_engine_choice/search_engine_choice_service.cc
@@ -12,6 +12,9 @@
 #include "chrome/browser/ui/browser.h"
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/search_engines_pref_names.h"
+#include "components/search_engines/template_url_data.h"
+#include "components/search_engines/template_url_prepopulate_data.h"
+#include "components/search_engines/util.h"
 #include "components/signin/public/base/signin_switches.h"
 
 namespace {
@@ -37,9 +40,26 @@
 
 SearchEngineChoiceService::~SearchEngineChoiceService() = default;
 
-SearchEngineChoiceService::SearchEngineChoiceService() = default;
+SearchEngineChoiceService::SearchEngineChoiceService(Profile& profile)
+    : profile_(profile) {}
 
-void SearchEngineChoiceService::NotifyChoiceMade() {
+void SearchEngineChoiceService::NotifyChoiceMade(int prepopulate_id) {
+  // Sets the timestamp and search engine choice preferences.
+  PrefService* pref_service = profile_->GetPrefs();
+  pref_service->SetInt64(
+      prefs::kDefaultSearchProviderChoiceScreenCompletionTimestamp,
+      base::Time::Now().ToDeltaSinceWindowsEpoch().InSeconds());
+
+  // TODO(b/280753754): Handle custom search engines that do not have a
+  // prepopulate_id
+  std::unique_ptr<TemplateURLData> search_engine =
+      TemplateURLPrepopulateData::GetPrepopulatedEngine(pref_service,
+                                                        prepopulate_id);
+  CHECK(search_engine);
+  SetDefaultSearchProviderPrefValue(*pref_service, search_engine->sync_guid);
+
+  // Closes the dialogs that are open on other browser windows that
+  // have the same profile as the one on which the choice was made.
   for (auto& browsers_with_open_dialog : browsers_with_open_dialogs_) {
     std::move(browsers_with_open_dialog.second).Run();
   }
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_service.h b/chrome/browser/search_engine_choice/search_engine_choice_service.h
index c90f777..d5016dba 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_service.h
+++ b/chrome/browser/search_engine_choice/search_engine_choice_service.h
@@ -20,7 +20,7 @@
 // Service handling the Search Engine Choice dialog.
 class SearchEngineChoiceService : public KeyedService {
  public:
-  SearchEngineChoiceService();
+  explicit SearchEngineChoiceService(Profile& profile);
   ~SearchEngineChoiceService() override;
 
   // Informs the service that a Search Engine Choice dialog has been opened
@@ -31,9 +31,12 @@
 
   // This function is called when the user makes a search engine choice. It
   // closes the dialogs that are open on other browser windows that
-  // have the same profile as the one on which the choice was made.
+  // have the same profile as the one on which the choice was made and sets the
+  // corresponding preferences.
+  // `prepopulate_id` is the `prepopulate_id` of the search engine found in
+  // `components/search_engines/template_url_data.h`. It will always be > 0.
   // Virtual to be able to mock in tests.
-  virtual void NotifyChoiceMade();
+  virtual void NotifyChoiceMade(int prepopulate_id);
 
   // Informs the service that a Search Engine Choice dialog has been closed for
   // `browser`.
@@ -78,6 +81,8 @@
   // Observes the browser list for closed browsers.
   BrowserObserver browser_observer_{*this};
 
+  // The `KeyedService` lifetime is expected to exceed the profile's.
+  const raw_ref<Profile> profile_;
   base::WeakPtrFactory<SearchEngineChoiceService> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_service_factory.cc b/chrome/browser/search_engine_choice/search_engine_choice_service_factory.cc
index 23390cc..b24020d2 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_service_factory.cc
+++ b/chrome/browser/search_engine_choice/search_engine_choice_service_factory.cc
@@ -94,5 +94,5 @@
           CHECK_DEREF(g_browser_process->policy_service()), profile)) {
     return nullptr;
   }
-  return std::make_unique<SearchEngineChoiceService>();
+  return std::make_unique<SearchEngineChoiceService>(profile);
 }
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.cc b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.cc
index df45995..361d444 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.cc
@@ -11,7 +11,9 @@
     const bound_session_credentials::RegistrationParams& registration_params,
     const base::flat_set<std::string>& cookie_names,
     Delegate* delegate)
-    : url_(registration_params.site()), delegate_(delegate) {
+    : url_(registration_params.site()),
+      session_id_(registration_params.session_id()),
+      delegate_(delegate) {
   CHECK(!url_.is_empty());
   CHECK(!cookie_names.empty());
   for (const std::string& cookie_name : cookie_names) {
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.h b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.h
index dc6221d..866b84b0 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.h
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_controller.h
@@ -60,12 +60,14 @@
       base::OnceClosure resume_blocked_request) = 0;
 
   const GURL& url() const { return url_; }
+  const std::string& session_id() const { return session_id_; }
   base::Time min_cookie_expiration_time();
   chrome::mojom::BoundSessionThrottlerParamsPtr
   bound_session_throttler_params();
 
  protected:
   const GURL url_;
+  const std::string session_id_;
   // Map from cookie name to cookie expiration time, it is expected to have two
   // elements the 1P and 3P cookies.
   // Cookie expiration time is reduced by threshold to guarantee cookie will be
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl.cc b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl.cc
index ea6a313..e66a160 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl.cc
@@ -68,8 +68,13 @@
   std::string session_id;
   if (headers->GetNormalizedHeader(kGoogleSessionTerminationHeader,
                                    &session_id)) {
-    // TODO(b/293433229): Verify `session_id` matches the current session's id.
-    TerminateSession();
+    if (session_id == cookie_controller_->session_id()) {
+      TerminateSession();
+    } else {
+      DVLOG(1) << "Session id on session termination header (" << session_id
+               << ") doesn't match with the current session id ("
+               << cookie_controller_->session_id() << ")";
+    }
   }
 }
 
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl_unittest.cc b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl_unittest.cc
index 292a347..a32d1c5 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl_unittest.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_cookie_refresh_service_impl_unittest.cc
@@ -35,6 +35,7 @@
     "bound_session_credentials_registration_params";
 const char kSessionTerminationHeader[] = "Sec-Session-Google-Termination";
 constexpr char kWrappedKey[] = "wrapped_key";
+constexpr char kTestSessionId[] = "test_session_id";
 
 class FakeBoundSessionCookieController : public BoundSessionCookieController {
  public:
@@ -199,7 +200,7 @@
   bound_session_credentials::RegistrationParams CreateTestRegistrationParams() {
     bound_session_credentials::RegistrationParams params;
     params.set_site(kTestGaiaURL.spec());
-    params.set_session_id("test_session_id");
+    params.set_session_id(kTestSessionId);
     params.set_wrapped_key(kWrappedKey);
     return params;
   }
@@ -221,6 +222,7 @@
   FakeBoundSessionCookieController* controller = cookie_controller();
   EXPECT_TRUE(controller);
   EXPECT_EQ(controller->url(), kTestGaiaURL);
+  EXPECT_EQ(controller->session_id(), kTestSessionId);
   EXPECT_EQ(
       controller->cookie_names(),
       base::flat_set<std::string>({k1PSIDTSCookieName, k3PSIDTSCookieName}));
@@ -350,21 +352,30 @@
   VerifyNoBoundSession();
 }
 
-// TODO(b/293433229): Verify session terminated only if `session_id` matches the
-// current session's id.
 TEST_F(BoundSessionCookieRefreshServiceImplTest,
        TerminateSessionOnSessionTerminationHeader) {
   SetupPreConditionForBoundSession();
   scoped_refptr<net::HttpResponseHeaders> headers =
       base::MakeRefCounted<net::HttpResponseHeaders>("");
-  headers->AddHeader(kSessionTerminationHeader, "session-id");
-
+  headers->AddHeader(kSessionTerminationHeader, kTestSessionId);
   BoundSessionCookieRefreshServiceImpl* service = GetCookieRefreshServiceImpl();
   service->MaybeTerminateSession(headers.get());
   VerifyNoBoundSession();
 }
 
 TEST_F(BoundSessionCookieRefreshServiceImplTest,
+       DontTerminateSessionSessionIdsMismatch) {
+  SetupPreConditionForBoundSession();
+  scoped_refptr<net::HttpResponseHeaders> headers =
+      base::MakeRefCounted<net::HttpResponseHeaders>("");
+  headers->AddHeader(kSessionTerminationHeader, "different_session_id");
+
+  BoundSessionCookieRefreshServiceImpl* service = GetCookieRefreshServiceImpl();
+  service->MaybeTerminateSession(headers.get());
+  VerifyBoundSession();
+}
+
+TEST_F(BoundSessionCookieRefreshServiceImplTest,
        DontTerminateSessionWithoutSessionTerminationHeader) {
   SetupPreConditionForBoundSession();
   scoped_refptr<net::HttpResponseHeaders> headers =
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.cc b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.cc
index 1e44f7e..737fbf0 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.cc
@@ -14,6 +14,7 @@
     case Result::kServerPersistentError:
     case Result::kServerUnexepectedResponse:
     case Result::kChallengeRequiredUnexpectedFormat:
+    case Result::kChallengeRequiredLimitExceeded:
     case Result::kSignChallengeFailed:
       return true;
   }
@@ -38,6 +39,9 @@
     case BoundSessionRefreshCookieFetcher::Result::
         kChallengeRequiredUnexpectedFormat:
       return os << "Challenge required unexpected format.";
+    case BoundSessionRefreshCookieFetcher::Result::
+        kChallengeRequiredLimitExceeded:
+      return os << "Challenge required limit exceeded.";
     case BoundSessionRefreshCookieFetcher::Result::kSignChallengeFailed:
       return os << "Sign challenge failed on cookie rotation request.";
   }
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.h b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.h
index 70af820..494992e1 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.h
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.h
@@ -21,7 +21,8 @@
     kServerPersistentError = 3,
     kServerUnexepectedResponse = 4,
     kChallengeRequiredUnexpectedFormat = 5,
-    kSignChallengeFailed = 6,
+    kChallengeRequiredLimitExceeded = 6,
+    kSignChallengeFailed = 7,
   };
 
   static bool IsPersistentError(Result result);
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.cc b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.cc
index 5a0145a29..74fb3d8 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.cc
@@ -30,6 +30,7 @@
 constexpr char kRotationChallengeResponseHeader[] =
     "Sec-Session-Google-Response";
 constexpr char kChallengeItemKey[] = "challenge";
+const size_t kMaxAssertionRequestsAllowed = 5;
 
 bool IsExpectedCookie(
     const GURL& url,
@@ -236,18 +237,18 @@
 
 void BoundSessionRefreshCookieFetcherImpl::HandleBindingKeyAssertionRequired(
     const std::string& challenge_header_value) {
-  if (has_assertion_been_already_requested_) {
-    // TODO(b/293838716): Handle expired challenges. We currently can't
-    // distinguish expired challenges.
-    ReportChallengeRequiredUnexpectedFormat();
+  if (assertion_requests_count_ >= kMaxAssertionRequestsAllowed) {
+    CompleteRequestAndReportRefreshResult(
+        Result::kChallengeRequiredLimitExceeded);
     return;
   }
 
   // Binding key assertion required.
-  has_assertion_been_already_requested_ = true;
+  assertion_requests_count_++;
   std::string challenge = ParseChallengeHeader(challenge_header_value);
   if (challenge.empty()) {
-    ReportChallengeRequiredUnexpectedFormat();
+    CompleteRequestAndReportRefreshResult(
+        Result::kChallengeRequiredUnexpectedFormat);
     return;
   }
   RefreshWithChallenge(challenge);
@@ -274,9 +275,9 @@
 }
 
 void BoundSessionRefreshCookieFetcherImpl::
-    ReportChallengeRequiredUnexpectedFormat() {
+    CompleteRequestAndReportRefreshResult(Result result) {
   cookie_refresh_completed_ = true;
-  result_ = Result::kChallengeRequiredUnexpectedFormat;
+  result_ = result;
   ReportRefreshResult();
 }
 
@@ -292,9 +293,7 @@
 void BoundSessionRefreshCookieFetcherImpl::OnGenerateBindingKeyAssertion(
     std::string assertion) {
   if (assertion.empty()) {
-    result_ = Result::kSignChallengeFailed;
-    cookie_refresh_completed_ = true;
-    ReportRefreshResult();
+    CompleteRequestAndReportRefreshResult(Result::kSignChallengeFailed);
     return;
   }
   wait_for_network_callback_helper_->DelayNetworkCall(
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.h b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.h
index 6072a08..7a9612c2 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.h
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl.h
@@ -7,6 +7,7 @@
 
 #include "chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher.h"
 
+#include <cstddef>
 #include <memory>
 
 #include "base/functional/callback_forward.h"
@@ -69,7 +70,7 @@
       const scoped_refptr<net::HttpResponseHeaders>& headers) const;
   void HandleBindingKeyAssertionRequired(
       const std::string& challenge_header_value);
-  void ReportChallengeRequiredUnexpectedFormat();
+  void CompleteRequestAndReportRefreshResult(Result result);
   void RefreshWithChallenge(const std::string& challenge);
   void OnGenerateBindingKeyAssertion(std::string assertion);
 
@@ -97,7 +98,7 @@
   // Refresh request result.
   Result result_;
   bool cookie_refresh_completed_ = false;
-  bool has_assertion_been_already_requested_ = false;
+  size_t assertion_requests_count_ = 0;
 
   // Non-null after a fetch has started.
   std::unique_ptr<network::SimpleURLLoader> url_loader_;
diff --git a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl_unittest.cc b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl_unittest.cc
index ae5cb4e..d415703 100644
--- a/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl_unittest.cc
+++ b/chrome/browser/signin/bound_session_credentials/bound_session_refresh_cookie_fetcher_impl_unittest.cc
@@ -433,20 +433,23 @@
                               kChallengeRequiredUnexpectedFormat);
 }
 
-TEST_F(BoundSessionRefreshCookieFetcherImplTest, AssertionAlreadyRequested) {
+TEST_F(BoundSessionRefreshCookieFetcherImplTest,
+       AssertionRequestsLimitExceeded) {
   ASSERT_FALSE(wait_for_network_callback_helper_.AreNetworkCallsDelayed());
   RefreshTestFuture future;
   fetcher_->Start(future.GetCallback());
 
   size_t assertion_requests = 0;
-  while (assertion_requests < 2) {
+  const size_t max_assertion_requests_allowed = 5;
+  do {
     SimulateChallengeRequired(CreateChallengeHeaderValue(kChallenge));
     task_environment_.RunUntilIdle();
     assertion_requests++;
-    EXPECT_EQ(future.IsReady(), assertion_requests > 1);
-  }
+    ASSERT_EQ(future.IsReady(),
+              assertion_requests > max_assertion_requests_allowed);
+  } while (!future.IsReady());
   EXPECT_EQ(future.Get(), BoundSessionRefreshCookieFetcher::Result::
-                              kChallengeRequiredUnexpectedFormat);
+                              kChallengeRequiredLimitExceeded);
 }
 
 TEST_F(BoundSessionRefreshCookieFetcherImplTest, SignChallengeFailed) {
diff --git a/chrome/browser/signin/chrome_device_id_helper.cc b/chrome/browser/signin/chrome_device_id_helper.cc
index be9badcd..ffe0f43 100644
--- a/chrome/browser/signin/chrome_device_id_helper.cc
+++ b/chrome/browser/signin/chrome_device_id_helper.cc
@@ -25,6 +25,11 @@
 
 std::string GetSigninScopedDeviceIdForProfile(Profile* profile) {
 #if BUILDFLAG(IS_CHROMEOS_ASH)
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kDisableSigninScopedDeviceId)) {
+    return std::string();
+  }
+
   // UserManager may not exist in unit_tests.
   if (!user_manager::UserManager::IsInitialized())
     return std::string();
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index ba9eab6..4b9f2897 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -943,6 +943,7 @@
       "//chrome/browser/ui/android/toolbar:jni_headers",
       "//chrome/browser/ui/webui/feed_internals:mojo_bindings",
       "//components/autofill/android:payments_autofill_cc",
+      "//components/autofill/android:payments_jni_headers",
       "//components/browser_ui/accessibility/android",
       "//components/browser_ui/client_certificate/android",
       "//components/browser_ui/share/android",
diff --git a/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.cc b/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.cc
index 35969c5..6c3db4c0 100644
--- a/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.cc
+++ b/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.cc
@@ -4,30 +4,66 @@
 
 #include "chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h"
 
-#include <jni.h>
+#include <memory>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/android/scoped_java_ref.h"
 #include "chrome/android/chrome_jni_headers/AutofillSaveCardBottomSheetBridge_jni.h"
+#include "chrome/browser/android/resource_mapper.h"
+#include "components/autofill/android/payments/legal_message_line_android.h"
+#include "components/autofill/android/payments_jni_headers/AutofillSaveCardUiInfo_jni.h"
+#include "components/autofill/core/browser/payments/autofill_save_card_delegate.h"
+#include "components/autofill/core/browser/payments/autofill_save_card_ui_info.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/android/window_android.h"
 
 namespace autofill {
 
+namespace {
+
+static base::android::ScopedJavaLocalRef<jobject> ConvertUiInfoToJavaObject(
+    JNIEnv* env,
+    const AutofillSaveCardUiInfo& ui_info) {
+  // LINT.IfChange
+  return Java_AutofillSaveCardUiInfo_Constructor(
+      env, ui_info.is_for_upload,
+      ResourceMapper::MapToJavaDrawableId(ui_info.logo_icon_id),
+      ResourceMapper::MapToJavaDrawableId(ui_info.issuer_icon_id),
+      LegalMessageLineAndroid::ConvertToJavaLinkedList(
+          ui_info.legal_message_lines),
+      base::android::ConvertUTF16ToJavaString(env, ui_info.card_label),
+      base::android::ConvertUTF16ToJavaString(env, ui_info.card_sub_label),
+      base::android::ConvertUTF16ToJavaString(env, ui_info.title_text),
+      base::android::ConvertUTF16ToJavaString(env, ui_info.confirm_text),
+      base::android::ConvertUTF16ToJavaString(env, ui_info.cancel_text),
+      ui_info.is_google_pay_branding_enabled,
+      base::android::ConvertUTF16ToJavaString(env, ui_info.description_text));
+  // LINT.ThenChange(//components/autofill/android/java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java)
+}
+
+}  // namespace
+
 AutofillSaveCardBottomSheetBridge::AutofillSaveCardBottomSheetBridge(
-    content::WebContents* web_contents) {
-  auto* window = web_contents->GetNativeView()->GetWindowAndroid();
+    ui::WindowAndroid* window_android) {
+  CHECK(window_android);
   java_autofill_save_card_bottom_sheet_bridge_ =
       Java_AutofillSaveCardBottomSheetBridge_Constructor(
-          base::android::AttachCurrentThread(), window->GetJavaObject());
+          base::android::AttachCurrentThread(), reinterpret_cast<jlong>(this),
+          window_android->GetJavaObject());
 }
 
 AutofillSaveCardBottomSheetBridge::~AutofillSaveCardBottomSheetBridge() =
     default;
 
-bool AutofillSaveCardBottomSheetBridge::RequestShowContent() {
-  return Java_AutofillSaveCardBottomSheetBridge_requestShowContent(
-      base::android::AttachCurrentThread(),
-      java_autofill_save_card_bottom_sheet_bridge_);
+void AutofillSaveCardBottomSheetBridge::RequestShowContent(
+    const AutofillSaveCardUiInfo& ui_info,
+    std::unique_ptr<AutofillSaveCardDelegate> delegate) {
+  JNIEnv* env = base::android::AttachCurrentThread();
+  save_card_delegate_ = std::move(delegate);
+  Java_AutofillSaveCardBottomSheetBridge_requestShowContent(
+      env, java_autofill_save_card_bottom_sheet_bridge_,
+      ConvertUiInfoToJavaObject(env, ui_info));
 }
 
 AutofillSaveCardBottomSheetBridge::AutofillSaveCardBottomSheetBridge(
@@ -36,4 +72,23 @@
     : java_autofill_save_card_bottom_sheet_bridge_(
           java_autofill_save_card_bottom_sheet_bridge) {}
 
+void AutofillSaveCardBottomSheetBridge::OnUiShown(JNIEnv* env) {
+  save_card_delegate_->OnUiShown();
+}
+
+void AutofillSaveCardBottomSheetBridge::OnUiAccepted(JNIEnv* env) {
+  save_card_delegate_->OnUiAccepted();
+  save_card_delegate_.reset(nullptr);
+}
+
+void AutofillSaveCardBottomSheetBridge::OnUiCanceled(JNIEnv* env) {
+  save_card_delegate_->OnUiCanceled();
+  save_card_delegate_.reset(nullptr);
+}
+
+void AutofillSaveCardBottomSheetBridge::OnUiIgnored(JNIEnv* env) {
+  save_card_delegate_->OnUiIgnored();
+  save_card_delegate_.reset(nullptr);
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h b/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h
index 7275af23c..150c8f4 100644
--- a/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h
+++ b/chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h
@@ -5,17 +5,25 @@
 #ifndef CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_SAVE_CARD_BOTTOM_SHEET_BRIDGE_H_
 #define CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_SAVE_CARD_BOTTOM_SHEET_BRIDGE_H_
 
+#include <jni.h>
+
 #include "base/android/scoped_java_ref.h"
-#include "content/public/browser/web_contents_user_data.h"
-#include "ui/android/window_android.h"
+
+namespace ui {
+class WindowAndroid;
+}
 
 namespace autofill {
 
+class AutofillSaveCardDelegate;
+struct AutofillSaveCardUiInfo;
+
 // Bridge class owned by ChromeAutofillClient providing an entry point
 // to trigger the save card bottom sheet on Android.
 class AutofillSaveCardBottomSheetBridge {
  public:
-  explicit AutofillSaveCardBottomSheetBridge(content::WebContents* contents);
+  // The window must not be null.
+  explicit AutofillSaveCardBottomSheetBridge(ui::WindowAndroid* window_android);
 
   AutofillSaveCardBottomSheetBridge(const AutofillSaveCardBottomSheetBridge&) =
       delete;
@@ -25,9 +33,20 @@
   virtual ~AutofillSaveCardBottomSheetBridge();
 
   // Requests to show the save card bottom sheet.
-  // Returns true if the bottom sheet was shown.
   // Overridden in tests.
-  virtual bool RequestShowContent();
+  virtual void RequestShowContent(
+      const AutofillSaveCardUiInfo& ui_info,
+      std::unique_ptr<AutofillSaveCardDelegate> delegate);
+
+  // -- JNI calls bridged to AutofillSaveCardDelegate --
+  // Called when the UI is shown.
+  void OnUiShown(JNIEnv* env);
+  // Called when the user has accepted the prompt.
+  void OnUiAccepted(JNIEnv* env);
+  // Called when the user explicitly cancelled the prompt.
+  void OnUiCanceled(JNIEnv* env);
+  // Called if the user has ignored the prompt.
+  void OnUiIgnored(JNIEnv* env);
 
  protected:
   // Used in tests to inject dependencies.
@@ -38,6 +57,7 @@
  private:
   base::android::ScopedJavaGlobalRef<jobject>
       java_autofill_save_card_bottom_sheet_bridge_;
+  std::unique_ptr<AutofillSaveCardDelegate> save_card_delegate_;
 };
 
 }  // namespace autofill
diff --git a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
index f5d8be1..589f138 100644
--- a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
@@ -211,7 +211,9 @@
 
 bool AutofillPopupControllerImpl::
     ShouldIgnoreMouseObservedOutsideItemBoundsCheck() const {
-  return should_ignore_mouse_observed_outside_item_bounds_check_;
+  return should_ignore_mouse_observed_outside_item_bounds_check_ ||
+         base::FeatureList::IsEnabled(
+             features::kAutofillPopupDisablePaintChecks);
 }
 
 void AutofillPopupControllerImpl::UpdateDataListValues(
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index 85d640a..d78dd11 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -772,15 +772,6 @@
     UploadSaveCardPromptCallback callback) {
 #if BUILDFLAG(IS_ANDROID)
   DCHECK(options.show_prompt);
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillEnablePaymentsAndroidBottomSheet)) {
-    if (!autofill_save_card_bottom_sheet_bridge_) {
-      autofill_save_card_bottom_sheet_bridge_ =
-          std::make_unique<AutofillSaveCardBottomSheetBridge>(web_contents());
-    }
-    autofill_save_card_bottom_sheet_bridge_->RequestShowContent();
-    return;
-  }
   signin::IdentityManager* identity_manager =
       IdentityManagerFactory::GetForProfile(GetProfile());
   AccountInfo account_info = identity_manager->FindExtendedAccountInfo(
@@ -789,6 +780,22 @@
       options, card, legal_message_lines, account_info);
   auto common_delegate =
       std::make_unique<AutofillSaveCardDelegate>(std::move(callback), options);
+  if (base::FeatureList::IsEnabled(
+          features::kAutofillEnablePaymentsAndroidBottomSheet)) {
+    if (!autofill_save_card_bottom_sheet_bridge_) {
+      // During shutdown the window may be null. There is no need to show the
+      // bottom sheet during shutdown.
+      auto* window_android = web_contents()->GetTopLevelNativeWindow();
+      if (!window_android) {
+        return;
+      }
+      autofill_save_card_bottom_sheet_bridge_ =
+          std::make_unique<AutofillSaveCardBottomSheetBridge>(window_android);
+    }
+    autofill_save_card_bottom_sheet_bridge_->RequestShowContent(
+        ui_info, std::move(common_delegate));
+    return;
+  }
   infobars::ContentInfoBarManager::FromWebContents(web_contents())
       ->AddInfoBar(CreateSaveCardInfoBarMobile(
           std::make_unique<AutofillSaveCardInfoBarDelegateMobile>(
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc b/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
index 06f28c2..76c7106 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
@@ -30,6 +30,8 @@
 
 #if BUILDFLAG(IS_ANDROID)
 #include "chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.h"
+#include "components/autofill/core/browser/payments/autofill_save_card_delegate.h"
+#include "components/autofill/core/browser/payments/autofill_save_card_ui_info.h"
 #endif
 
 namespace autofill {
@@ -45,7 +47,11 @@
       : AutofillSaveCardBottomSheetBridge(
             base::android::ScopedJavaGlobalRef<jobject>(nullptr)) {}
 
-  MOCK_METHOD(bool, RequestShowContent, (), (override));
+  MOCK_METHOD(void,
+              RequestShowContent,
+              (const AutofillSaveCardUiInfo&,
+               std::unique_ptr<AutofillSaveCardDelegate>),
+              (override));
 };
 #endif
 
@@ -216,13 +222,25 @@
   auto* bottom_sheet_bridge =
       autofill_client->InjectMockAutofillSaveCardBottomSheetBridge();
 
-  EXPECT_CALL(*bottom_sheet_bridge, RequestShowContent());
+  EXPECT_CALL(*bottom_sheet_bridge,
+              RequestShowContent(testing::An<const AutofillSaveCardUiInfo&>(),
+                                 testing::NotNull()));
 
   autofill_client->ConfirmSaveCreditCardToCloud(
       CreditCard(), LegalMessageLines(),
       ChromeAutofillClient::SaveCreditCardOptions().with_show_prompt(true),
       base::DoNothing());
 }
+
+TEST_F(ChromeAutofillClientTestWithPaymentsAndroidBottomSheetFeature,
+       ConfirmSaveCreditCardToCloud_DoesNotFailWithoutAWindow) {
+  TestChromeAutofillClient* autofill_client = client();
+
+  EXPECT_NO_FATAL_FAILURE(autofill_client->ConfirmSaveCreditCardToCloud(
+      CreditCard(), LegalMessageLines(),
+      ChromeAutofillClient::SaveCreditCardOptions().with_show_prompt(true),
+      base::DoNothing()));
+}
 #endif
 
 }  // namespace
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
index e9b55ec3..ef945a0 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -77,6 +77,7 @@
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "ppapi/buildflags/buildflags.h"
 #include "services/device/public/cpp/device_features.h"
+#include "services/device/public/cpp/geolocation/buildflags.h"
 #include "services/device/public/cpp/geolocation/location_system_permission_status.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
@@ -94,6 +95,11 @@
 #if BUILDFLAG(IS_MAC)
 #include "base/mac/mac_util.h"
 #include "chrome/browser/media/webrtc/system_media_capture_permissions_mac.h"
+#endif
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ash/privacy_hub/privacy_hub_util.h"
+#endif
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #include "services/device/public/cpp/geolocation/geolocation_manager.h"
 #endif
 
@@ -1415,7 +1421,7 @@
                                      web_contents,
                                      ContentSettingsType::GEOLOCATION) {
   SetCustomLink();
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   // Get the stored geolocation content setting and the system permission state
   // to determine whether geolocation is blocked by a system permission.
   //
@@ -1432,11 +1438,11 @@
   if (content_setting == CONTENT_SETTING_ALLOW &&
       device::GeolocationManager::GetInstance()->GetSystemPermission() !=
           LocationSystemPermissionStatus::kAllowed) {
-    // If the permission is turned off in MacOS system preferences, overwrite
+    // If the permission is turned off in OS preferences, overwrite
     // the bubble to enable the user to trigger the system dialog.
     InitializeSystemGeolocationPermissionBubble();
   }
-#endif  // BUILDFLAG(IS_MAC)
+#endif  // BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 }
 
 ContentSettingGeolocationBubbleModel::~ContentSettingGeolocationBubbleModel() =
@@ -1444,16 +1450,24 @@
 
 void ContentSettingGeolocationBubbleModel::OnDoneButtonClicked() {
   if (show_system_geolocation_bubble_) {
-#if BUILDFLAG(IS_MAC)
+    // This is a no-op on platforms that do not support OS-level geolocation
+    // permissions.
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
     if (show_system_geolocation_bubble_) {
       base::RecordAction(UserMetricsAction(
           "ContentSettings.GeolocationDialog.OpenPreferencesClicked"));
     }
 
+#if BUILDFLAG(IS_MAC)
     base::mac::OpenSystemSettingsPane(
         base::mac::SystemSettingsPane::kPrivacySecurity_LocationServices);
-    return;
-#endif  // BUILDFLAG(IS_MAC)
+#elif BUILDFLAG(IS_CHROMEOS_ASH)
+    ash::privacy_hub_util::OpenPrivacyControlsInSettings();
+#elif BUILDFLAG(IS_CHROMEOS_LACROS)
+    // TODO(b/280836944): Open system settings on ChromeOS.
+#endif
+
+#endif
   }
 }
 
@@ -1470,13 +1484,16 @@
 
 void ContentSettingGeolocationBubbleModel::
     InitializeSystemGeolocationPermissionBubble() {
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #if BUILDFLAG(IS_MAC)
-  if (base::FeatureList::IsEnabled(features::kLocationPermissionsExperiment)) {
-    set_title(l10n_util::GetStringUTF16(
-        IDS_GEOLOCATION_TURNED_OFF_IN_MACOS_SETTINGS));
-  } else {
-    set_title(l10n_util::GetStringUTF16(IDS_GEOLOCATION_TURNED_OFF_IN_MACOS));
-  }
+  const int message_id =
+      base::FeatureList::IsEnabled(features::kLocationPermissionsExperiment)
+          ? IDS_GEOLOCATION_TURNED_OFF_IN_MACOS_SETTINGS
+          : IDS_GEOLOCATION_TURNED_OFF_IN_MACOS;
+#else
+  const int message_id = IDS_GEOLOCATION_TURNED_OFF_IN_OS;
+#endif
+  set_title(l10n_util::GetStringUTF16(message_id));
 
   clear_message();
   AddListItem(ContentSettingBubbleModel::ListItem(
@@ -1487,7 +1504,7 @@
   set_done_button_text(l10n_util::GetStringUTF16(IDS_OPEN_SETTINGS_LINK));
   set_radio_group(RadioGroup());
   show_system_geolocation_bubble_ = true;
-#endif  // BUILDFLAG(IS_MAC)
+#endif  // BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 }
 
 void ContentSettingGeolocationBubbleModel::SetCustomLink() {
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
index c6edd8e..42c5afa 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
@@ -52,11 +52,12 @@
 #include "content/public/test/web_contents_tester.h"
 #include "net/base/schemeful_site.h"
 #include "services/device/public/cpp/device_features.h"
+#include "services/device/public/cpp/geolocation/buildflags.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #include "services/device/public/cpp/geolocation/geolocation_manager.h"
 #include "services/device/public/cpp/geolocation/location_system_permission_status.h"
 #include "services/device/public/cpp/test/fake_geolocation_manager.h"
@@ -754,13 +755,13 @@
 }
 
 TEST_F(ContentSettingBubbleModelTest, Geolocation) {
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   auto fake_geolocation_manager =
       std::make_unique<device::FakeGeolocationManager>();
   device::FakeGeolocationManager* geolocation_manager =
       fake_geolocation_manager.get();
   device::GeolocationManager::SetInstance(std::move(fake_geolocation_manager));
-#endif  // BUILDFLAG(IS_MAC)
+#endif
 
   WebContentsTester::For(web_contents())
       ->NavigateAndCommit(GURL("https://www.example.com"));
@@ -775,7 +776,7 @@
                                          CONTENT_SETTING_ALLOW);
   content_settings->OnContentAllowed(ContentSettingsType::GEOLOCATION);
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   // System-level geolocation permission is blocked.
   {
     auto content_setting_bubble_model =
@@ -785,8 +786,14 @@
         FakeOwner::Create(*content_setting_bubble_model, 0);
     const auto& bubble_content = content_setting_bubble_model->bubble_content();
 
+#if BUILDFLAG(IS_MAC)
     EXPECT_EQ(bubble_content.title,
               l10n_util::GetStringUTF16(IDS_GEOLOCATION_TURNED_OFF_IN_MACOS));
+#else
+    EXPECT_EQ(bubble_content.title,
+              l10n_util::GetStringUTF16(IDS_GEOLOCATION_TURNED_OFF_IN_OS));
+#endif
+
     EXPECT_TRUE(bubble_content.message.empty());
     EXPECT_EQ(bubble_content.radio_group.radio_items.size(), 0U);
 
@@ -807,8 +814,13 @@
     geolocation_manager->SetSystemPermission(
         device::LocationSystemPermissionStatus::kAllowed);
 
+#if BUILDFLAG(IS_MAC)
     EXPECT_EQ(bubble_content.title,
               l10n_util::GetStringUTF16(IDS_GEOLOCATION_TURNED_OFF_IN_MACOS));
+#else
+    EXPECT_EQ(bubble_content.title,
+              l10n_util::GetStringUTF16(IDS_GEOLOCATION_TURNED_OFF_IN_OS));
+#endif
     EXPECT_TRUE(bubble_content.message.empty());
     EXPECT_EQ(bubble_content.radio_group.radio_items.size(), 0U);
 
diff --git a/chrome/browser/ui/content_settings/content_setting_image_model.cc b/chrome/browser/ui/content_settings/content_setting_image_model.cc
index cdfcb18..486f1ad 100644
--- a/chrome/browser/ui/content_settings/content_setting_image_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_image_model.cc
@@ -63,7 +63,7 @@
 #include "chrome/browser/media/webrtc/system_media_capture_permissions_mac.h"
 #endif
 
-#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #include "services/device/public/cpp/geolocation/geolocation_manager.h"
 #endif
 
@@ -726,7 +726,7 @@
           "ContentSettings.Geolocation.BlockedIconShown"));
       set_tooltip(l10n_util::GetStringUTF16(IDS_BLOCKED_GEOLOCATION_MESSAGE));
       if (content_settings->geolocation_was_just_granted_on_site_level()) {
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
         if (IsGeolocationPermissionDetermined()) {
           // If the system permission is already denied then requesting the
           // system permission will not show a prompt. Show the bubble instead.
@@ -792,7 +792,7 @@
 }
 
 bool ContentSettingGeolocationImageModel::IsGeolocationAllowedOnASystemLevel() {
-#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_CHROMEOS)
+#if !BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   return true;
 #else
   device::GeolocationManager* geolocation_manager =
@@ -806,7 +806,7 @@
 }
 
 bool ContentSettingGeolocationImageModel::IsGeolocationPermissionDetermined() {
-#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_CHROMEOS)
+#if !BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   return true;
 #else
 
diff --git a/chrome/browser/ui/content_settings/content_setting_image_model_unittest.cc b/chrome/browser/ui/content_settings/content_setting_image_model_unittest.cc
index d8370a1..d93294ad 100644
--- a/chrome/browser/ui/content_settings/content_setting_image_model_unittest.cc
+++ b/chrome/browser/ui/content_settings/content_setting_image_model_unittest.cc
@@ -48,13 +48,14 @@
 #include "content/public/test/web_contents_tester.h"
 #include "net/cookies/cookie_options.h"
 #include "services/device/public/cpp/device_features.h"
+#include "services/device/public/cpp/geolocation/buildflags.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/paint_vector_icon.h"
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #include "services/device/public/cpp/geolocation/geolocation_manager.h"
 #include "services/device/public/cpp/geolocation/location_system_permission_status.h"
 #include "services/device/public/cpp/test/fake_geolocation_manager.h"
@@ -303,7 +304,7 @@
       /* explanatory_string_id = */ 0);
 }
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 // Test the correct ContentSettingImageModel for various permutations of site
 // and system level Geolocation permissions
 TEST_F(ContentSettingImageModelTest, GeolocationAccessPermissionsChanged) {
@@ -409,7 +410,10 @@
       /* tooltip_empty = */ false, IDS_BLOCKED_GEOLOCATION_MESSAGE, 0);
 }
 
+#if BUILDFLAG(IS_MAC)
 TEST_F(ContentSettingImageModelTest, GeolocationAccessDeniedExperiment) {
+  // This is run only on Mac, because the kLocationPermissionExperiment is a Mac
+  // only feature.
   base::test::ScopedFeatureList feature_list;
   feature_list.InitWithFeatures({features::kLocationPermissionsExperiment}, {});
   auto test_geolocation_manager =
@@ -474,7 +478,9 @@
         IDS_GEOLOCATION_TURNED_OFF);
   }
 }
-#endif
+#endif  // BUILDFLAG(IS_MAC)
+
+#endif  // BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 
 // Regression test for https://crbug.com/955408
 // See also: ContentSettingBubbleModelTest.SensorAccessPermissionsChanged
diff --git a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
index 82465158e..cc181b1 100644
--- a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
+++ b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
@@ -344,6 +344,22 @@
   cookie_controls()->OnCookieBlockingEnabledForSite(false);
   testing::Mock::VerifyAndClearExpectations(mock());
   testing::Mock::VerifyAndClearExpectations(&incognito_mock_);
+
+  // This should be enforced regardless of the default cookie setting in the
+  // default profile.
+  EXPECT_CALL(*mock(),
+              OnStatusChanged(CookieControlsStatus::kDisabled,
+                              CookieControlsEnforcement::kNoEnforcement, 0, 0));
+  EXPECT_CALL(incognito_mock_,
+              OnStatusChanged(
+                  CookieControlsStatus::kDisabledForSite,
+                  CookieControlsEnforcement::kEnforcedByCookieSetting, 0, 0));
+  profile()->GetPrefs()->SetInteger(
+      prefs::kCookieControlsMode,
+      static_cast<int>(content_settings::CookieControlsMode::kIncognitoOnly));
+  incognito_cookie_controls.Update(incognito_web_contents.get());
+  testing::Mock::VerifyAndClearExpectations(mock());
+  testing::Mock::VerifyAndClearExpectations(&incognito_mock_);
 }
 
 TEST_F(CookieControlsTest, CookieBlockingChanged) {
@@ -771,6 +787,27 @@
   cookie_controls()->OnCookieBlockingEnabledForSite(false);
   testing::Mock::VerifyAndClearExpectations(mock());
   testing::Mock::VerifyAndClearExpectations(&incognito_mock_);
+
+  // This should be enforced regardless of the default cookie setting in the
+  // default profile.
+  EXPECT_CALL(*mock(),
+              OnStatusChanged(CookieControlsStatus::kDisabled,
+                              CookieControlsEnforcement::kNoEnforcement,
+                              // Although there is an allow exception with an
+                              // expiration, because the default allow never
+                              // expires, zero_expiration is correct.
+                              zero_expiration()));
+  EXPECT_CALL(
+      incognito_mock_,
+      OnStatusChanged(CookieControlsStatus::kDisabledForSite,
+                      CookieControlsEnforcement::kEnforcedByCookieSetting,
+                      expiration()));
+  profile()->GetPrefs()->SetInteger(
+      prefs::kCookieControlsMode,
+      static_cast<int>(content_settings::CookieControlsMode::kIncognitoOnly));
+  incognito_cookie_controls.Update(incognito_web_contents.get());
+  testing::Mock::VerifyAndClearExpectations(mock());
+  testing::Mock::VerifyAndClearExpectations(&incognito_mock_);
 }
 
 TEST_P(CookieControlsUserBypassTest, ThirdPartyCookiesException) {
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc
index 7820800..697a5bc 100644
--- a/chrome/browser/ui/ui_features.cc
+++ b/chrome/browser/ui/ui_features.cc
@@ -19,6 +19,16 @@
              "AllowWindowDragUsingSystemDragDrop",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Enables the use of WGC for the Eye Dropper screen capture.
+BASE_FEATURE(kAllowEyeDropperWGCScreenCapture,
+             "AllowEyeDropperWGCScreenCapture",
+#if BUILDFLAG(IS_WIN)
+             base::FEATURE_ENABLED_BY_DEFAULT
+#else
+             base::FEATURE_DISABLED_BY_DEFAULT
+#endif  // BUILDFLAG(IS_WIN)
+);
+
 #if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID)
 BASE_FEATURE(kDesktopPWAsAppHomePage,
              "DesktopPWAsAppHomePage",
diff --git a/chrome/browser/ui/ui_features.h b/chrome/browser/ui/ui_features.h
index 9080d5a..ef462218 100644
--- a/chrome/browser/ui/ui_features.h
+++ b/chrome/browser/ui/ui_features.h
@@ -25,6 +25,8 @@
 // interactive_ui_tests pass on Wayland.
 BASE_DECLARE_FEATURE(kAllowWindowDragUsingSystemDragDrop);
 
+BASE_DECLARE_FEATURE(kAllowEyeDropperWGCScreenCapture);
+
 #if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID)
 BASE_DECLARE_FEATURE(kDesktopPWAsAppHomePage);
 #endif  // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/ui/views/autofill/popup/popup_autocomplete_cell_view.cc b/chrome/browser/ui/views/autofill/popup/popup_autocomplete_cell_view.cc
index b2f264a7..84c5d938 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_autocomplete_cell_view.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_autocomplete_cell_view.cc
@@ -215,10 +215,11 @@
         DeleteAutocomplete();
         return true;
       }
-      return false;
+      break;
     default:
-      return false;
+      break;
   }
+  return PopupCellView::HandleKeyPressEvent(event);
 }
 
 void PopupAutocompleteCellView::SetSelected(bool selected) {
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
index 9695eb3..5f6dd34 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
@@ -215,8 +215,6 @@
       SetSelectedCell(absl::nullopt);
       SelectPreviousRow();
       return true;
-    case ui::VKEY_RETURN:
-      return AcceptSelectedCell(/*tab_key_pressed=*/false);
     case ui::VKEY_DELETE:
       return kHasShiftModifier && RemoveSelectedCell();
     case ui::VKEY_TAB:
@@ -226,7 +224,7 @@
       // We do not want to handle Mod+TAB for other modifiers because this may
       // have other purposes (e.g., change the tab).
       if (!kHasNonShiftModifier) {
-        AcceptSelectedCell(/*tab_key_pressed=*/true);
+        AcceptSelectedContentOrCreditCardCell();
       }
       return false;
     default:
@@ -269,24 +267,21 @@
   SetSelectedCell(CellIndex{new_row, kNewCellType});
 }
 
-bool PopupViewViews::AcceptSelectedCell(bool tab_key_pressed) {
+bool PopupViewViews::AcceptSelectedContentOrCreditCardCell() {
   absl::optional<CellIndex> index = GetSelectedCell();
   if (!controller_ || !index) {
     return false;
   }
 
-  // If the tab key is pressed, only content cells that contain fillable items
-  // or scanning a credit card may be accepted.
-  if (tab_key_pressed) {
-    if (index->second != PopupRowView::CellType::kContent) {
-      return false;
-    }
-    PopupItemId popup_item_id =
-        controller_->GetSuggestionAt(index->first).popup_item_id;
-    if (!base::Contains(kItemsTriggeringFieldFilling, popup_item_id) &&
-        popup_item_id != PopupItemId::kScanCreditCard) {
-      return false;
-    }
+  if (index->second != PopupRowView::CellType::kContent) {
+    return false;
+  }
+
+  const PopupItemId popup_item_id =
+      controller_->GetSuggestionAt(index->first).popup_item_id;
+  if (!base::Contains(kItemsTriggeringFieldFilling, popup_item_id) &&
+      popup_item_id != PopupItemId::kScanCreditCard) {
+    return false;
   }
 
   controller_->AcceptSuggestion(index->first);
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views.h b/chrome/browser/ui/views/autofill/popup/popup_view_views.h
index 49447bf..f9e724b 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_views.h
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_views.h
@@ -113,11 +113,10 @@
   // selected.
   void SelectNextRow();
 
-  // Attempts to accept the selected cell. It will return false if the cell is
-  // not selectable or the current cell selection is invalid.
-  // If `tab_key_pressed` is true, only cells that trigger field filling or
-  // scanning a credit card qualify as selectable.
-  bool AcceptSelectedCell(bool tab_key_pressed);
+  // Attempts to accept the selected cell. It will return false if there is no
+  // selected cell or the cell does not trigger field filling or scanning a
+  // credit card.
+  bool AcceptSelectedContentOrCreditCardCell();
 
   // Attempts to remove the selected cell. Only content cells are allowed to be
   // selected.
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
index 1c979b4..aa75e9c7 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
@@ -26,6 +26,7 @@
 #include "components/vector_icons/vector_icons.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/common/extension_features.h"
+#include "ui/accessibility/ax_enums.mojom-shared.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
@@ -78,6 +79,19 @@
   return l10n_util::GetStringUTF16(tooltip_id);
 }
 
+std::u16string GetPinButtonAccessibleName(
+    bool is_force_pinned,
+    bool is_pinned,
+    const std::u16string& extension_name) {
+  int tooltip_id = IDS_EXTENSIONS_PIN_TO_TOOLBAR_ACCESSIBLE_NAME;
+  if (is_force_pinned) {
+    tooltip_id = IDS_EXTENSIONS_PINNED_BY_ADMIN_ACCESSIBLE_NAME;
+  } else if (is_pinned) {
+    tooltip_id = IDS_EXTENSIONS_UNPIN_FROM_TOOLBAR_ACCESSIBLE_NAME;
+  }
+  return l10n_util::GetStringFUTF16(tooltip_id, extension_name);
+}
+
 std::u16string GetContextMenuAccessibleName(bool is_pinned) {
   int tooltip_id =
       is_pinned
@@ -185,6 +199,13 @@
                 ChromeLayoutProvider::Get()->GetDistanceMetric(
                     DISTANCE_EXTENSIONS_MENU_BUTTON_MARGIN))),
         index);
+    // By default, the button's accessible description is set to the button's
+    // tooltip text. For the pin button, we only want the accessible name to be
+    // read on accessibility mode since it includes the tooltip text. Thus we
+    // override the accessible description.
+    pin_button_->GetViewAccessibility().OverrideDescription(
+        std::u16string(),
+        ax::mojom::DescriptionFrom::kAttributeExplicitlyEmpty);
   }
 
   std::move(builder).BuildChildren();
@@ -386,6 +407,8 @@
   }
 
   pin_button_->SetTooltipText(GetPinButtonTooltip(is_force_pinned, is_pinned));
+  pin_button_->SetAccessibleName(GetPinButtonAccessibleName(
+      is_force_pinned, is_pinned, controller_->GetActionName()));
   // Extension pinning is not available in Incognito as it leaves a trace of
   // user activity.
   pin_button_->SetEnabled(!is_force_pinned &&
diff --git a/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc b/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
index ad77b4d2..3c198a0 100644
--- a/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
+++ b/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
@@ -8,6 +8,7 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
+#include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/views/eye_dropper/eye_dropper.h"
 #include "content/public/browser/desktop_capture.h"
 #include "content/public/browser/render_view_host.h"
@@ -22,6 +23,10 @@
 #include "ui/gfx/native_widget_types.h"
 #include "ui/views/widget/widget.h"
 
+#if BUILDFLAG(IS_WIN)
+#include "base/win/windows_version.h"
+#endif
+
 class EyeDropperView::ViewPositionHandler {
  public:
   explicit ViewPositionHandler(EyeDropperView* owner);
@@ -79,11 +84,25 @@
 };
 
 EyeDropperView::ScreenCapturer::ScreenCapturer() {
+  static bool allow_wgc_screen_capture =
+#if BUILDFLAG(IS_WIN)
+      // Allow WGC screen capture if Windows version is greater or equal
+      // than 10.0.20348.0, as the following API, which controls if a border is
+      // to be painted around the captured content, needs to be present as the
+      // border should not be shown during eye dropper color selection:
+      // https://learn.microsoft.com/en-us/uwp/api/windows.graphics.capture.graphicscapturesession.isborderrequired
+      base::win::GetVersion() >= base::win::Version::SERVER_2022 &&
+#endif  // BUILDFLAG(IS_WIN)
+      base::FeatureList::IsEnabled(features::kAllowEyeDropperWGCScreenCapture);
   // TODO(iopopesc): Update the captured frame after a period of time to match
   // latest content on screen.
-  capturer_ = content::desktop_capture::CreateScreenCapturer();
+  capturer_ =
+      content::desktop_capture::CreateScreenCapturer(allow_wgc_screen_capture);
   if (capturer_) {
     capturer_->Start(this);
+    if (allow_wgc_screen_capture) {
+      capturer_->SelectSource(webrtc::kFullDesktopScreenId);
+    }
     capturer_->CaptureFrame();
   }
 }
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 83e19c0..97d393fb 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -201,7 +201,7 @@
     }
     views::InstallPillHighlightPathGenerator(this);
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
     geolocation_permission_observation_.Observe(
         device::GeolocationManager::GetInstance());
 #endif
@@ -1049,7 +1049,7 @@
   return delegate_->GetContentSettingBubbleModelDelegate();
 }
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 void LocationBarView::OnSystemPermissionUpdated(
     device::LocationSystemPermissionStatus new_status) {
   UpdateContentSettingsIcons();
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index 6fd3631..3378d72a 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -73,7 +73,7 @@
                         public IconLabelBubbleView::Delegate,
                         public LocationIconView::Delegate,
                         public ContentSettingImageView::Delegate,
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
                         public device::GeolocationManager::PermissionObserver,
 #endif
                         public PageActionIconView::Delegate {
@@ -206,7 +206,7 @@
   ContentSettingBubbleModelDelegate* GetContentSettingBubbleModelDelegate()
       override;
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   // GeolocationManager::PermissionObserver:
   void OnSystemPermissionUpdated(
       device::LocationSystemPermissionStatus new_status) override;
@@ -262,7 +262,7 @@
                            IMEInlineAutocompletePosition);
   using ContentSettingViews = std::vector<ContentSettingImageView*>;
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   // Manage a subscription to GeolocationManager, which may
   // outlive this object.
   base::ScopedObservation<device::GeolocationManager,
diff --git a/chrome/browser/ui/views/page_info/page_info_security_content_view.cc b/chrome/browser/ui/views/page_info/page_info_security_content_view.cc
index ec0aed6..40ffaff 100644
--- a/chrome/browser/ui/views/page_info/page_info_security_content_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_security_content_view.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/browser/ui/views/page_info/page_info_view_factory.h"
+#include "components/safe_browsing/core/common/features.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/ui_base_features.h"
@@ -38,7 +39,19 @@
   security_description_type_ = security_description->type;
 
   if (security_description->summary_style == SecuritySummaryColor::RED) {
-    security_view_->SetIcon(PageInfoViewFactory::GetConnectionNotSecureIcon());
+    if (base::FeatureList::IsEnabled(safe_browsing::kRedInterstitialFacelift) &&
+        (identity_info.safe_browsing_status ==
+             PageInfo::SAFE_BROWSING_STATUS_MALWARE ||
+         identity_info.safe_browsing_status ==
+             PageInfo::SAFE_BROWSING_STATUS_SOCIAL_ENGINEERING ||
+         identity_info.safe_browsing_status ==
+             PageInfo::SAFE_BROWSING_STATUS_UNWANTED_SOFTWARE)) {
+      security_view_->SetIcon(
+          PageInfoViewFactory::GetConnectionDangerousIcon());
+    } else {
+      security_view_->SetIcon(
+          PageInfoViewFactory::GetConnectionNotSecureIcon());
+    }
     security_view_->SetSummary(security_description->summary, STYLE_RED);
   } else {
     security_view_->SetIcon(PageInfoViewFactory::GetConnectionSecureIcon());
diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrome/browser/ui/views/page_info/page_info_view_factory.cc
index aeaba72..57aa072 100644
--- a/chrome/browser/ui/views/page_info/page_info_view_factory.cc
+++ b/chrome/browser/ui/views/page_info/page_info_view_factory.cc
@@ -595,6 +595,12 @@
 }
 
 // static
+const ui::ImageModel PageInfoViewFactory::GetConnectionDangerousIcon() {
+  return ui::ImageModel::FromVectorIcon(
+      vector_icons::kDangerousIcon, ui::kColorAlertHighSeverity, GetIconSize());
+}
+
+// static
 const ui::ImageModel PageInfoViewFactory::GetConnectionSecureIcon() {
   return GetImageModel(features::IsChromeRefresh2023()
                            ? vector_icons::kHttpsValidChromeRefreshIcon
diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.h b/chrome/browser/ui/views/page_info/page_info_view_factory.h
index faae7b16..c4f39bf 100644
--- a/chrome/browser/ui/views/page_info/page_info_view_factory.h
+++ b/chrome/browser/ui/views/page_info/page_info_view_factory.h
@@ -105,6 +105,9 @@
   // Returns the not secure state icon for the SecurityInformationView.
   static const ui::ImageModel GetConnectionNotSecureIcon();
 
+  // Returns the dangerous icon for the SecurityInformationView.
+  static const ui::ImageModel GetConnectionDangerousIcon();
+
   // Returns the icon for the secure connection button.
   static const ui::ImageModel GetConnectionSecureIcon();
 
diff --git a/chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.cc b/chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.cc
index 22bd27da..75fbf33 100644
--- a/chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.cc
+++ b/chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_location.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
@@ -27,8 +28,8 @@
 #include "components/web_package/signed_web_bundles/signed_web_bundle_id.h"
 #include "content/public/common/content_features.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "ui/base/page_transition_types.h"
 #include "ui/base/window_open_disposition.h"
-#include "ui/gfx/geometry/rect.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -116,18 +117,15 @@
       WebAppProvider::GetForWebApps(profile)->registrar_unsafe();
   const WebApp* app = registrar.GetAppById(app_id);
   EXPECT_TRUE(app);
-  Browser* app_window = Browser::Create(Browser::CreateParams::CreateForApp(
-      GenerateApplicationNameFromAppId(app->app_id()),
-      /*trusted_source=*/true, gfx::Rect(), profile,
-      /*user_gesture=*/true));
 
-  auto new_contents =
-      content::WebContents::Create(content::WebContents::CreateParams(profile));
-  app_window->tab_strip_model()->AppendWebContents(std::move(new_contents),
-                                                   /*foreground=*/true);
-  return ui_test_utils::NavigateToURLWithDisposition(
-      app_window, app->start_url(), WindowOpenDisposition::NEW_WINDOW,
-      ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
+  NavigateParams params(profile, app->start_url(),
+                        ui::PAGE_TRANSITION_GENERATED);
+  params.app_id = app->app_id();
+  params.window_action = NavigateParams::SHOW_WINDOW;
+  params.disposition = WindowOpenDisposition::NEW_WINDOW;
+  params.user_gesture = true;
+  ui_test_utils::NavigateToURL(&params);
+  return params.navigated_or_inserted_contents->GetPrimaryMainFrame();
 }
 
 void CreateIframe(content::RenderFrameHost* parent_frame,
diff --git a/chrome/browser/ui/webui/downloads/BUILD.gn b/chrome/browser/ui/webui/downloads/BUILD.gn
index 0bb8b1c..0c3ab41 100644
--- a/chrome/browser/ui/webui/downloads/BUILD.gn
+++ b/chrome/browser/ui/webui/downloads/BUILD.gn
@@ -10,4 +10,9 @@
   sources = [ "downloads.mojom" ]
   webui_module_path = "/"
   use_typescript_sources = true
+
+  public_deps = [
+    "//mojo/public/mojom/base",
+    "//url/mojom:url_mojom_gurl",
+  ]
 }
diff --git a/chrome/browser/ui/webui/downloads/downloads.mojom b/chrome/browser/ui/webui/downloads/downloads.mojom
index 721e8f4..a6868f77 100644
--- a/chrome/browser/ui/webui/downloads/downloads.mojom
+++ b/chrome/browser/ui/webui/downloads/downloads.mojom
@@ -4,6 +4,9 @@
 
 module downloads.mojom;
 
+import "mojo/public/mojom/base/string16.mojom";
+import "url/mojom/url.mojom";
+
 // This is the information associated with a download used for rendering in the
 // UI.
 struct Data {
@@ -38,7 +41,13 @@
   // confirmation, the state will indicate the download is in progress, complete
   // or cancelled.
   string state;
-  string url;
+  // The URL of the download item. Present if this field is populated with the
+  // original URL. Omitted if the URL should not be clickable on the downloads
+  // page, due to URL size limits requiring truncation.
+  url.mojom.Url? url;
+  // The display string for the URL in the UI. May be truncated/elided from the
+  // original URL, and IDN domains may be converted to Unicode.
+  mojo_base.mojom.String16 display_url;
 };
 
 interface PageHandlerFactory {
diff --git a/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc b/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc
index ad02ddef..ba71bc32 100644
--- a/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc
+++ b/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc
@@ -14,6 +14,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/i18n/rtl.h"
 #include "base/i18n/unicodestring.h"
+#include "base/strings/escape.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
@@ -27,6 +28,7 @@
 #include "components/download/public/common/download_danger_type.h"
 #include "components/download/public/common/download_item.h"
 #include "components/safe_browsing/core/common/features.h"
+#include "components/url_formatter/elide_url.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/download_item_utils.h"
 #include "content/public/browser/download_manager.h"
@@ -36,6 +38,7 @@
 #include "net/base/filename_util.h"
 #include "third_party/icu/source/i18n/unicode/datefmt.h"
 #include "ui/base/l10n/time_format.h"
+#include "url/url_constants.h"
 
 using content::BrowserContext;
 using content::DownloadManager;
@@ -45,9 +48,6 @@
 
 namespace {
 
-// Max URL length to be sent to the download page.
-const int kMaxURLLength = 2 * 1024 * 1024;
-
 // Returns a string constant to be used as the |danger_type| value in
 // CreateDownloadData(). This can be the empty string, if the danger type is not
 // relevant for the UI.
@@ -107,6 +107,17 @@
   return base::UTF16ToUTF8(base::i18n::UnicodeStringToString16(date_string));
 }
 
+std::u16string GetFormattedDisplayUrl(const GURL& url) {
+  std::u16string result = url_formatter::FormatUrlForSecurityDisplay(url);
+  // Truncate long URL to avoid surpassing mojo data limit (c.f.
+  // crbug.com/1070451). If it's really this long, the user won't be able to see
+  // the end of it anyway.
+  if (result.size() > url::kMaxURLChars) {
+    result.resize(url::kMaxURLChars);
+  }
+  return result;
+}
+
 }  // namespace
 
 DownloadsListTracker::DownloadsListTracker(
@@ -267,10 +278,12 @@
   file_name = base::i18n::GetDisplayStringInLTRDirectionality(file_name);
 
   file_value->file_name = base::UTF16ToUTF8(file_name);
-  file_value->url = download_item->GetURL().spec();
-  // If URL is too long, truncate it.
-  if (file_value->url.size() > kMaxURLLength)
-    file_value->url.resize(kMaxURLLength);
+  // If URL is too long, don't make it clickable.
+  if (download_item->GetURL().is_valid() &&
+      download_item->GetURL().spec().length() <= url::kMaxURLChars) {
+    file_value->url = absl::make_optional<GURL>(download_item->GetURL());
+  }
+  file_value->display_url = GetFormattedDisplayUrl(download_item->GetURL());
   file_value->total = static_cast<int>(download_item->GetTotalBytes());
   file_value->file_externally_removed =
       download_item->GetFileExternallyRemoved();
diff --git a/chrome/browser/ui/webui/downloads/downloads_list_tracker.h b/chrome/browser/ui/webui/downloads/downloads_list_tracker.h
index 2de77ad4..79c9718 100644
--- a/chrome/browser/ui/webui/downloads/downloads_list_tracker.h
+++ b/chrome/browser/ui/webui/downloads/downloads_list_tracker.h
@@ -12,6 +12,7 @@
 #include <string>
 
 #include "base/functional/callback_forward.h"
+#include "base/gtest_prod_util.h"
 #include "chrome/browser/ui/webui/downloads/downloads.mojom.h"
 #include "components/download/content/public/all_download_item_notifier.h"
 #include "components/download/public/common/download_item.h"
@@ -81,6 +82,13 @@
   void SetChunkSizeForTesting(size_t chunk_size);
 
  private:
+  FRIEND_TEST_ALL_PREFIXES(DownloadsListTrackerTest,
+                           CreateDownloadData_UrlFormatting_OmitUserPass);
+  FRIEND_TEST_ALL_PREFIXES(DownloadsListTrackerTest,
+                           CreateDownloadData_UrlFormatting_Idn);
+  FRIEND_TEST_ALL_PREFIXES(DownloadsListTrackerTest,
+                           CreateDownloadData_UrlFormatting_VeryLong);
+
   struct StartTimeComparator {
     bool operator()(const download::DownloadItem* a,
                     const download::DownloadItem* b) const;
diff --git a/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc b/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc
index 722245b..8d8adf54 100644
--- a/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc
+++ b/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc
@@ -33,6 +33,7 @@
 using DownloadVector = std::vector<DownloadItem*>;
 using testing::_;
 using testing::Return;
+using testing::ReturnRefOfCopy;
 
 namespace {
 
@@ -90,6 +91,9 @@
     ON_CALL(*new_item, GetId()).WillByDefault(Return(id));
     ON_CALL(*new_item, GetStartTime()).WillByDefault(Return(started));
     ON_CALL(*new_item, IsTransient()).WillByDefault(Return(false));
+    ON_CALL(*new_item, GetTargetFilePath())
+        .WillByDefault(
+            ReturnRefOfCopy(base::FilePath(FILE_PATH_LITERAL("foo.txt"))));
 
     return new_item;
   }
@@ -314,3 +318,48 @@
   std::vector<uint64_t> expected;
   EXPECT_CALL(page_, InsertItems(0, MatchIds(expected)));
 }
+
+TEST_F(DownloadsListTrackerTest,
+       CreateDownloadData_UrlFormatting_OmitUserPass) {
+  MockDownloadItem* item = CreateNextItem();
+  ON_CALL(*item, GetURL())
+      .WillByDefault(ReturnRefOfCopy(GURL("https://user:pass@example.test")));
+
+  auto tracker = std::make_unique<DownloadsListTracker>(
+      manager(), page_.BindAndGetRemote());
+
+  downloads::mojom::DataPtr data = tracker->CreateDownloadData(item);
+  EXPECT_TRUE(data->url);
+  EXPECT_EQ(*data->url, "https://user:pass@example.test/");
+  EXPECT_EQ(data->display_url, u"https://example.test");
+}
+
+TEST_F(DownloadsListTrackerTest, CreateDownloadData_UrlFormatting_Idn) {
+  MockDownloadItem* item = CreateNextItem();
+  ON_CALL(*item, GetURL())
+      .WillByDefault(ReturnRefOfCopy(GURL("https://xn--6qqa088eba.test")));
+
+  auto tracker = std::make_unique<DownloadsListTracker>(
+      manager(), page_.BindAndGetRemote());
+
+  downloads::mojom::DataPtr data = tracker->CreateDownloadData(item);
+  EXPECT_TRUE(data->url);
+  EXPECT_EQ(*data->url, "https://xn--6qqa088eba.test/");
+  EXPECT_EQ(data->display_url, u"https://\u4f60\u597d\u4f60\u597d.test");
+}
+
+TEST_F(DownloadsListTrackerTest, CreateDownloadData_UrlFormatting_VeryLong) {
+  std::string url = "https://" + std::string(2 * 1024 * 1024, 'a') + ".test";
+  std::u16string expected =
+      u"https://" + std::u16string(2 * 1024 * 1024 - 8, 'a');
+
+  MockDownloadItem* item = CreateNextItem();
+  ON_CALL(*item, GetURL()).WillByDefault(ReturnRefOfCopy(GURL(url)));
+
+  auto tracker = std::make_unique<DownloadsListTracker>(
+      manager(), page_.BindAndGetRemote());
+
+  downloads::mojom::DataPtr data = tracker->CreateDownloadData(item);
+  EXPECT_FALSE(data->url);
+  EXPECT_EQ(data->display_url, expected);
+}
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
index adf31798..a2f7530b80 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -236,6 +236,8 @@
                                                ntp_features::kNtpModulesLoad));
   source->AddInteger("modulesLoadTimeout",
                      ntp_features::GetModulesLoadTimeout().InMilliseconds());
+  source->AddInteger("modulesMaxColumnCount",
+                     ntp_features::GetModulesMaxColumnCount());
   source->AddBoolean("mostVisitedReflowOnOverflowEnabled",
                      base::FeatureList::IsEnabled(
                          ntp_features::kNtpMostVisitedReflowOnOverflow));
diff --git a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice.mojom b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice.mojom
index 1dd4300d..4b38609 100644
--- a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice.mojom
+++ b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice.mojom
@@ -17,4 +17,9 @@
   // Triggered by the `displayDialog()` call in
   // `chrome/browser/resources/search_engine_choice/app.ts`
   DisplayDialog(uint32 content_height);
+
+  // Changes the search engine based on the user's choice.
+  // Triggered by the `handleSearchEngineChoiceSelected()` call in
+  // `chrome/browser/resources/search_engine_choice/app.ts`
+  HandleSearchEngineChoiceSelected(int32 prepopulate_id);
 };
diff --git a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.cc b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.cc
index dea63f5..5fae5f7 100644
--- a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.cc
+++ b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.cc
@@ -8,10 +8,14 @@
 
 SearchEngineChoiceHandler::SearchEngineChoiceHandler(
     mojo::PendingReceiver<search_engine_choice::mojom::PageHandler> receiver,
-    base::OnceCallback<void(int)> display_dialog_callback)
+    base::OnceCallback<void(int)> display_dialog_callback,
+    base::OnceCallback<void(int)> handle_choice_selected_callback)
     : receiver_(this, std::move(receiver)),
-      display_dialog_callback_(std::move(display_dialog_callback)) {
+      display_dialog_callback_(std::move(display_dialog_callback)),
+      handle_choice_selected_callback_(
+          std::move(handle_choice_selected_callback)) {
   CHECK(base::FeatureList::IsEnabled(switches::kSearchEngineChoice));
+  CHECK(handle_choice_selected_callback_);
 }
 
 SearchEngineChoiceHandler::~SearchEngineChoiceHandler() = default;
@@ -21,3 +25,10 @@
     std::move(display_dialog_callback_).Run(content_height);
   }
 }
+
+void SearchEngineChoiceHandler::HandleSearchEngineChoiceSelected(
+    int prepopulate_id) {
+  if (handle_choice_selected_callback_) {
+    std::move(handle_choice_selected_callback_).Run(prepopulate_id);
+  }
+}
diff --git a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h
index 27eb10e..a88676b 100644
--- a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h
+++ b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h
@@ -14,7 +14,8 @@
  public:
   explicit SearchEngineChoiceHandler(
       mojo::PendingReceiver<search_engine_choice::mojom::PageHandler> receiver,
-      base::OnceCallback<void(int)> display_dialog_callback_);
+      base::OnceCallback<void(int)> display_dialog_callback,
+      base::OnceCallback<void(int)> handle_choice_selected_callback);
 
   SearchEngineChoiceHandler(const SearchEngineChoiceHandler&) = delete;
   SearchEngineChoiceHandler& operator=(const SearchEngineChoiceHandler&) =
@@ -24,10 +25,12 @@
 
   // search_engine_choice::mojom::PageHandler:
   void DisplayDialog(uint32_t content_height) override;
+  void HandleSearchEngineChoiceSelected(int32_t prepopulate_id) override;
 
  private:
   mojo::Receiver<search_engine_choice::mojom::PageHandler> receiver_;
   base::OnceCallback<void(int)> display_dialog_callback_;
+  base::OnceCallback<void(int)> handle_choice_selected_callback_;
 };
 
 #endif  // CHROME_BROWSER_UI_WEBUI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.cc b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.cc
index ac1dcac38..99ed758 100644
--- a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.cc
+++ b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.cc
@@ -4,11 +4,14 @@
 
 #include "chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.h"
 
+#include "base/check_deref.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/functional/callback_forward.h"
 #include "base/json/json_writer.h"
-#include "base/strings/string_number_conversions.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/search_engine_choice/search_engine_choice_service.h"
+#include "chrome/browser/search_engine_choice/search_engine_choice_service_factory.h"
 #include "chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h"
 #include "chrome/browser/ui/webui/webui_util.h"
 #include "chrome/common/webui_url_constants.h"
@@ -25,20 +28,16 @@
 #include "content/public/browser/web_ui_data_source.h"
 
 namespace {
-std::string GetChoiceListJSON(Profile* profile) {
-  if (!profile) {
-    return "";
-  }
-
+std::string GetChoiceListJSON(Profile& profile) {
   base::Value::List choice_value_list;
-  auto* pref_service = profile->GetPrefs();
+  auto* pref_service = profile.GetPrefs();
   const std::vector<std::unique_ptr<TemplateURLData>> choices =
       TemplateURLPrepopulateData::GetPrepopulatedEngines(
           pref_service, /*default_search_provider_index=*/nullptr);
 
   for (const auto& choice : choices) {
     base::Value::Dict choice_value;
-    choice_value.Set("id", base::NumberToString(choice->prepopulate_id));
+    choice_value.Set("prepopulate_id", choice->prepopulate_id);
     choice_value.Set("name", choice->short_name());
     choice_value_list.Append(std::move(choice_value));
   }
@@ -50,9 +49,9 @@
 }  // namespace
 
 SearchEngineChoiceUI::SearchEngineChoiceUI(content::WebUI* web_ui)
-    : ui::MojoWebUIController(web_ui, true) {
+    : ui::MojoWebUIController(web_ui, true),
+      profile_(CHECK_DEREF(Profile::FromWebUI(web_ui))) {
   CHECK(base::FeatureList::IsEnabled(switches::kSearchEngineChoice));
-  auto* profile = Profile::FromWebUI(web_ui);
 
   content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
       web_ui->GetWebContents()->GetBrowserContext(),
@@ -83,7 +82,7 @@
                           IDR_SIGNIN_TANGIBLE_SYNC_STYLE_SHARED_CSS_JS);
   source->AddResourcePath("signin_vars.css.js", IDR_SIGNIN_SIGNIN_VARS_CSS_JS);
 
-  source->AddString("choiceList", GetChoiceListJSON(profile));
+  source->AddString("choiceList", GetChoiceListJSON(profile_.get()));
 
   webui::SetupWebUIDataSource(
       source,
@@ -109,8 +108,16 @@
   display_dialog_callback_ = std::move(display_dialog_callback);
 }
 
+void SearchEngineChoiceUI::HandleSearchEngineChoiceMade(int prepopulate_id) {
+  SearchEngineChoiceService* search_engine_choice_service =
+      SearchEngineChoiceServiceFactory::GetForProfile(&profile_.get());
+  search_engine_choice_service->NotifyChoiceMade(prepopulate_id);
+}
+
 void SearchEngineChoiceUI::CreatePageHandler(
     mojo::PendingReceiver<search_engine_choice::mojom::PageHandler> receiver) {
   page_handler_ = std::make_unique<SearchEngineChoiceHandler>(
-      std::move(receiver), std::move(display_dialog_callback_));
+      std::move(receiver), std::move(display_dialog_callback_),
+      base::BindOnce(&SearchEngineChoiceUI::HandleSearchEngineChoiceMade,
+                     weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.h b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.h
index 2823e7b..7a23bf9 100644
--- a/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.h
+++ b/chrome/browser/ui/webui/search_engine_choice/search_engine_choice_ui.h
@@ -6,10 +6,13 @@
 #define CHROME_BROWSER_UI_WEBUI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_UI_H_
 
 #include "base/functional/callback_forward.h"
+#include "base/memory/raw_ref.h"
 #include "chrome/browser/ui/webui/search_engine_choice/search_engine_choice.mojom.h"
 #include "chrome/browser/ui/webui/search_engine_choice/search_engine_choice_handler.h"
 #include "ui/webui/mojo_web_ui_controller.h"
 
+class Profile;
+
 // The WebUI controller for `chrome://search-engine-choice`.
 class SearchEngineChoiceUI
     : public ui::MojoWebUIController,
@@ -39,12 +42,17 @@
       mojo::PendingReceiver<search_engine_choice::mojom::PageHandler> receiver)
       override;
 
+  // Notifies the search engine choice service that a choice has been made.
+  void HandleSearchEngineChoiceMade(int prepopulate_id);
+
   std::unique_ptr<SearchEngineChoiceHandler> page_handler_;
 
   mojo::Receiver<search_engine_choice::mojom::PageHandlerFactory>
       page_factory_receiver_{this};
 
   base::OnceCallback<void(int)> display_dialog_callback_;
+  const raw_ref<Profile> profile_;
+  base::WeakPtrFactory<SearchEngineChoiceUI> weak_ptr_factory_{this};
 
   WEB_UI_CONTROLLER_TYPE_DECL();
 };
diff --git a/chrome/browser/ui/webui/settings/ash/languages_section.cc b/chrome/browser/ui/webui/settings/ash/languages_section.cc
index 97d5a0ce..e41eb8a 100644
--- a/chrome/browser/ui/webui/settings/ash/languages_section.cc
+++ b/chrome/browser/ui/webui/settings/ash/languages_section.cc
@@ -10,6 +10,7 @@
 #include "base/feature_list.h"
 #include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/ash/input_method/editor_mediator.h"
 #include "chrome/browser/ash/input_method/input_method_settings.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h"
@@ -168,9 +169,9 @@
        IDS_SETTINGS_SUGGESTIONS_EMOJI_SUGGESTION_DESCRIPTION}};
   html_source->AddLocalizedStrings(kLocalizedStrings);
 
-  // TODO: b/294962917 - Hook up with the EditorSwitch component instead of
-  // hard-coding "false".
-  html_source->AddBoolean("allowOrca", false);
+  html_source->AddBoolean(
+      "allowOrca", input_method::EditorMediator::HasInstance() &&
+                       input_method::EditorMediator::Get()->IsAllowedForUse());
   html_source->AddBoolean("allowEmojiSuggestion", is_emoji_suggestion_allowed);
 }
 
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index ddbe0455..1df17dfa 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2375,107 +2375,114 @@
 
 void AddPrivacyGuideStrings(content::WebUIDataSource* html_source) {
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
-      {"privacyGuideLabel", IDS_SETTINGS_PRIVACY_GUIDE_LABEL},
-      {"privacyGuideSublabel", IDS_SETTINGS_PRIVACY_GUIDE_SUBLABEL},
-      {"privacyGuidePromoHeader", IDS_SETTINGS_PRIVACY_GUIDE_PROMO_HEADER},
-      {"privacyGuidePromoBody", IDS_SETTINGS_PRIVACY_GUIDE_PROMO_BODY},
-      {"privacyGuidePromoStartButton",
-       IDS_SETTINGS_PRIVACY_GUIDE_PROMO_START_BUTTON},
-      {"privacyGuideBackToSettingsAriaLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_BACK_TO_SETTINGS_ARIA_LABEL},
-      {"privacyGuideBackToSettingsAriaRoleDescription",
-       IDS_SETTINGS_PRIVACY_GUIDE_BACK_TO_SETTINGS_ARIA_ROLE_DESC},
-      {"privacyGuideBackButton", IDS_SETTINGS_PRIVACY_GUIDE_BACK_BUTTON},
-      {"privacyGuideSteps", IDS_SETTINGS_PRIVACY_GUIDE_STEPS},
-      {"privacyGuideNextButton", IDS_SETTINGS_PRIVACY_GUIDE_NEXT_BUTTON},
-      {"privacyGuideFeatureDescriptionHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_FEATURE_DESCRIPTION_HEADER},
-      {"privacyGuideThingsToConsider",
-       IDS_SETTINGS_PRIVACY_GUIDE_THINGS_TO_CONSIDER},
-      {"privacyGuideWelcomeCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_WELCOME_CARD_HEADER},
-      {"privacyGuideWelcomeCardSubHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_WELCOME_CARD_SUB_HEADER},
-      {"privacyGuideCompletionCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_HEADER},
-      {"privacyGuideCompletionCardSubHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_SUB_HEADER},
-      {"privacyGuideCompletionCardSubHeaderNoLinks",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_SUB_HEADER_NO_LINKS},
-      {"privacyGuideCompletionCardLeaveButton",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_LEAVE_BUTTON},
-      {"privacyGuideCompletionCardPrivacySandboxLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_PRIVACY_SANDBOX_LABEL},
-      {"privacyGuideCompletionCardPrivacySandboxSubLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_PRIVACY_SANDBOX_SUB_LABEL},
-      {"privacyGuideCompletionCardWaaLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_WAA_LABEL},
-      {"privacyGuideCompletionCardWaaSubLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_WAA_SUB_LABEL},
-      {"privacyGuideMsbbCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_CARD_HEADER},
-      {"privacyGuideMsbbFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION1},
-      {"privacyGuideMsbbFeatureDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION2},
-      {"privacyGuideMsbbFeatureDescription3",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION3},
-      {"privacyGuideMsbbPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_PRIVACY_DESCRIPTION1},
-      {"privacyGuideMsbbPrivacyDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_MSBB_PRIVACY_DESCRIPTION2},
-      {"privacyGuideHistorySyncCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_CARD_HEADER},
-      {"privacyGuideHistorySyncSettingLabel",
-       IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_SETTING_LABEL},
-      {"privacyGuideHistorySyncFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_FEATURE_DESCRIPTION1},
-      {"privacyGuideHistorySyncFeatureDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_FEATURE_DESCRIPTION2},
-      {"privacyGuideHistorySyncPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_PRIVACY_DESCRIPTION1},
-      {"privacyGuideCookiesCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_HEADER},
-      {"privacyGuideCookiesCardBlockTpcIncognitoSubheader",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_SUBHEADER},
-      {"privacyGuideCookiesCardBlockTpcIncognitoFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_FEATURE_DESCRIPTION1},
-      {"privacyGuideCookiesCardBlockTpcIncognitoFeatureDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_FEATURE_DESCRIPTION2},
-      {"privacyGuideCookiesCardBlockTpcIncognitoPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_PRIVACY_DESCRIPTION1},
-      {"privacyGuideCookiesCardBlockTpcIncognitoPrivacyDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_PRIVACY_DESCRIPTION2},
-      {"privacyGuideCookiesCardBlockTpcSubheader",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_SUBHEADER},
-      {"privacyGuideCookiesCardBlockTpcFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_FEATURE_DESCRIPTION1},
-      {"privacyGuideCookiesCardBlockTpcFeatureDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_FEATURE_DESCRIPTION2},
-      {"privacyGuideCookiesCardBlockTpcPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_PRIVACY_DESCRIPTION1},
-      {"privacyGuideSafeBrowsingCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_HEADER},
-      {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION1},
-      {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION2},
-      {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription3",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION3},
-      {"privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION1},
-      {"privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2},
-      {"privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1},
-      {"privacyGuideSearchSuggestionsCardHeader",
-       IDS_SETTINGS_PRIVACY_GUIDE_SEARCH_SUGGESTIONS_CARD_HEADER},
-      {"privacyGuideSearchSuggestionsFeatureDescription1",
-       IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_FEATURE_DESCRIPTION1},
-      {"privacyGuideSearchSuggestionsPrivacyDescription1",
-       IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_PRIVACY_DESCRIPTION1},
-      {"privacyGuideSearchSuggestionsPrivacyDescription2",
-       IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_PRIVACY_DESCRIPTION2},
+    {"privacyGuideLabel", IDS_SETTINGS_PRIVACY_GUIDE_LABEL},
+    {"privacyGuideSublabel", IDS_SETTINGS_PRIVACY_GUIDE_SUBLABEL},
+    {"privacyGuidePromoHeader", IDS_SETTINGS_PRIVACY_GUIDE_PROMO_HEADER},
+    {"privacyGuidePromoBody", IDS_SETTINGS_PRIVACY_GUIDE_PROMO_BODY},
+    {"privacyGuidePromoStartButton",
+     IDS_SETTINGS_PRIVACY_GUIDE_PROMO_START_BUTTON},
+    {"privacyGuideBackToSettingsAriaLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_BACK_TO_SETTINGS_ARIA_LABEL},
+    {"privacyGuideBackToSettingsAriaRoleDescription",
+     IDS_SETTINGS_PRIVACY_GUIDE_BACK_TO_SETTINGS_ARIA_ROLE_DESC},
+    {"privacyGuideBackButton", IDS_SETTINGS_PRIVACY_GUIDE_BACK_BUTTON},
+    {"privacyGuideSteps", IDS_SETTINGS_PRIVACY_GUIDE_STEPS},
+    {"privacyGuideNextButton", IDS_SETTINGS_PRIVACY_GUIDE_NEXT_BUTTON},
+    {"privacyGuideFeatureDescriptionHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_FEATURE_DESCRIPTION_HEADER},
+    {"privacyGuideThingsToConsider",
+     IDS_SETTINGS_PRIVACY_GUIDE_THINGS_TO_CONSIDER},
+    {"privacyGuideWelcomeCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_WELCOME_CARD_HEADER},
+    {"privacyGuideWelcomeCardSubHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_WELCOME_CARD_SUB_HEADER},
+    {"privacyGuideCompletionCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_HEADER},
+    {"privacyGuideCompletionCardSubHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_SUB_HEADER},
+    {"privacyGuideCompletionCardSubHeaderNoLinks",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_SUB_HEADER_NO_LINKS},
+    {"privacyGuideCompletionCardLeaveButton",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_LEAVE_BUTTON},
+    {"privacyGuideCompletionCardPrivacySandboxLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_PRIVACY_SANDBOX_LABEL},
+    {"privacyGuideCompletionCardPrivacySandboxSubLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_PRIVACY_SANDBOX_SUB_LABEL},
+    {"privacyGuideCompletionCardWaaLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_WAA_LABEL},
+    {"privacyGuideCompletionCardWaaSubLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_COMPLETION_CARD_WAA_SUB_LABEL},
+    {"privacyGuideMsbbCardHeader", IDS_SETTINGS_PRIVACY_GUIDE_MSBB_CARD_HEADER},
+    {"privacyGuideMsbbFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION1},
+    {"privacyGuideMsbbFeatureDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION2},
+    {"privacyGuideMsbbFeatureDescription3",
+     IDS_SETTINGS_PRIVACY_GUIDE_MSBB_FEATURE_DESCRIPTION3},
+    {"privacyGuideMsbbPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_MSBB_PRIVACY_DESCRIPTION1},
+    {"privacyGuideMsbbPrivacyDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_MSBB_PRIVACY_DESCRIPTION2},
+    {"privacyGuideHistorySyncCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_CARD_HEADER},
+    {"privacyGuideHistorySyncSettingLabel",
+     IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_SETTING_LABEL},
+    {"privacyGuideHistorySyncFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_FEATURE_DESCRIPTION1},
+    {"privacyGuideHistorySyncFeatureDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_FEATURE_DESCRIPTION2},
+    {"privacyGuideHistorySyncPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_HISTORY_SYNC_PRIVACY_DESCRIPTION1},
+    {"privacyGuideCookiesCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_HEADER},
+    {"privacyGuideCookiesCardBlockTpcIncognitoSubheader",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_SUBHEADER},
+    {"privacyGuideCookiesCardBlockTpcIncognitoFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_FEATURE_DESCRIPTION1},
+    {"privacyGuideCookiesCardBlockTpcIncognitoFeatureDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_FEATURE_DESCRIPTION2},
+    {"privacyGuideCookiesCardBlockTpcIncognitoPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_PRIVACY_DESCRIPTION1},
+    {"privacyGuideCookiesCardBlockTpcIncognitoPrivacyDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_INCOGNITO_PRIVACY_DESCRIPTION2},
+    {"privacyGuideCookiesCardBlockTpcSubheader",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_SUBHEADER},
+    {"privacyGuideCookiesCardBlockTpcFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_FEATURE_DESCRIPTION1},
+    {"privacyGuideCookiesCardBlockTpcFeatureDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_FEATURE_DESCRIPTION2},
+    {"privacyGuideCookiesCardBlockTpcPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_COOKIES_CARD_BLOCK_TPC_PRIVACY_DESCRIPTION1},
+    {"privacyGuideSafeBrowsingCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_HEADER},
+    {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION1},
+    {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION2},
+    {"privacyGuideSafeBrowsingCardEnhancedProtectionPrivacyDescription3",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_ENHANCED_PROTECTION_PRIVACY_DESCRIPTION3},
+    {"privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION1},
+    {"privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2},
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+    {"privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2Proxy",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_FEATURE_DESCRIPTION2_PROXY},
+#endif
+    {"privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1},
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+    {"privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1Proxy",
+     IDS_SETTINGS_PRIVACY_GUIDE_SAFE_BROWSING_CARD_STANDARD_PROTECTION_PRIVACY_DESCRIPTION1_PROXY},
+#endif
+    {"privacyGuideSearchSuggestionsCardHeader",
+     IDS_SETTINGS_PRIVACY_GUIDE_SEARCH_SUGGESTIONS_CARD_HEADER},
+    {"privacyGuideSearchSuggestionsFeatureDescription1",
+     IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_FEATURE_DESCRIPTION1},
+    {"privacyGuideSearchSuggestionsPrivacyDescription1",
+     IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_PRIVACY_DESCRIPTION1},
+    {"privacyGuideSearchSuggestionsPrivacyDescription2",
+     IDS_SETTINGS_PRIVACY_SEARCH_SUGGESTIONS_PRIVACY_DESCRIPTION2},
   };
   html_source->AddLocalizedStrings(kLocalizedStrings);
 }
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc
index e1f9f394..9bc1f508 100644
--- a/chrome/browser/ui/webui/settings/site_settings_helper.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
@@ -197,6 +197,7 @@
     {ContentSettingsType::ALL_SCREEN_CAPTURE, nullptr},
     {ContentSettingsType::COOKIE_CONTROLS_METADATA, nullptr},
     {ContentSettingsType::TPCD_SUPPORT, nullptr},
+    {ContentSettingsType::TPCD_METADATA_GRANTS, nullptr},
 };
 
 static_assert(std::size(kContentSettingsTypeGroupNames) ==
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index f9da03f5..1a81bbcd 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1692950245-7ec18b6610ad865c161d803f8a8b1286d6b93acb.profdata
+chrome-mac-arm-main-1692957598-15d91a9185035e5b98b61c5e20bbcd12a237ad42.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 5f90c88..e94c788 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1692942356-5e913c8cc227eb44d30c7106b454181668063f4d.profdata
+chrome-win32-main-1692953766-e45cedfe58c2c322f01f9497a9efc1527cfce09a.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 1b2b2bb..f219cd51 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1692942356-a392353db77d729ac54d44990f243b683cb3b66f.profdata
+chrome-win64-main-1692953766-00df678225401da616a5601a0c40c443f03cf501.profdata
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 044e60e..6f3b438 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -2089,6 +2089,10 @@
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS)
+// Pref that contains the value of the MicrosoftOneDriveMount policy.
+inline constexpr char kMicrosoftOneDriveMount[] =
+    "filebrowser.office.microsoft_one_drive_mount";
+
 // Pref that contains the value of the MicrosoftOfficeCloudUpload policy.
 inline constexpr char kMicrosoftOfficeCloudUpload[] =
     "filebrowser.office.microsoft_office_cloud_upload";
diff --git a/chrome/test/data/webui/downloads/BUILD.gn b/chrome/test/data/webui/downloads/BUILD.gn
index cb97b8f5..031b4b8e 100644
--- a/chrome/test/data/webui/downloads/BUILD.gn
+++ b/chrome/test/data/webui/downloads/BUILD.gn
@@ -23,5 +23,6 @@
     "//chrome/browser/resources/downloads:build_ts",
     "//third_party/polymer/v3_0:library",
     "//ui/webui/resources/js:build_ts",
+    "//ui/webui/resources/mojo:build_ts",
   ]
 }
diff --git a/chrome/test/data/webui/downloads/item_test.ts b/chrome/test/data/webui/downloads/item_test.ts
index b8116f6..36af0c1 100644
--- a/chrome/test/data/webui/downloads/item_test.ts
+++ b/chrome/test/data/webui/downloads/item_test.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import {BrowserProxy, CrToastManagerElement, DangerType, DownloadsItemElement, IconLoaderImpl, loadTimeData, States} from 'chrome://downloads/downloads.js';
+import {stringToMojoString16, stringToMojoUrl} from 'chrome://resources/js/mojo_type_util.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {isVisible} from 'chrome://webui-test/test_util.js';
@@ -36,12 +37,28 @@
                fileExternallyRemoved: false,
                hideDate: true,
                state: States.DANGEROUS,
-               url: 'http://evil.com',
+               url: stringToMojoUrl('http://evil.com'),
              }));
     flush();
 
     assertFalse(isVisible(item.$['file-link']));
     assertFalse(item.$.url.hasAttribute('href'));
+    assertFalse(item.$['file-link'].hasAttribute('href'));
+  });
+
+  test('downloads without original url in data aren\'t linkable', () => {
+    const displayUrl = 'https://test.test';
+    item.set('data', createDownload({
+               hideDate: false,
+               state: States.COMPLETE,
+               url: undefined,
+               displayUrl: stringToMojoString16(displayUrl),
+             }));
+    flush();
+
+    assertFalse(item.$.url.hasAttribute('href'));
+    assertFalse(item.$['file-link'].hasAttribute('href'));
+    assertEquals(displayUrl, item.$.url.text);
   });
 
   test('failed deep scans aren\'t linkable', () => {
@@ -50,7 +67,7 @@
                fileExternallyRemoved: false,
                hideDate: true,
                state: States.COMPLETE,
-               url: 'http://evil.com',
+               url: stringToMojoUrl('http://evil.com'),
              }));
     flush();
 
@@ -58,6 +75,24 @@
     assertFalse(item.$.url.hasAttribute('href'));
   });
 
+  test('url display string is a link to the original url', () => {
+    const url = 'https://' +
+        'a'.repeat(1000) + '.com/document.pdf';
+    const displayUrl = 'https://' +
+        '啊'.repeat(1000) + '.com/document.pdf';
+    item.set('data', createDownload({
+               hideDate: false,
+               state: States.COMPLETE,
+               url: stringToMojoUrl(url),
+               displayUrl: stringToMojoString16(displayUrl),
+             }));
+    flush();
+
+    assertEquals(url, item.$.url.href);
+    assertEquals(url, item.$['file-link'].href);
+    assertEquals(displayUrl, item.$.url.text);
+  });
+
   test('icon loads successfully', async () => {
     testIconLoader.setShouldIconsLoad(true);
     item.set('data', createDownload({filePath: 'unique1', hideDate: false}));
diff --git a/chrome/test/data/webui/downloads/manager_test.ts b/chrome/test/data/webui/downloads/manager_test.ts
index 89eaffd..b2e3b69 100644
--- a/chrome/test/data/webui/downloads/manager_test.ts
+++ b/chrome/test/data/webui/downloads/manager_test.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import {BrowserProxy, CrToastManagerElement, DangerType, DownloadsManagerElement, loadTimeData, PageRemote, States} from 'chrome://downloads/downloads.js';
+import {stringToMojoString16, stringToMojoUrl} from 'chrome://resources/js/mojo_type_util.js';
 import {isMac} from 'chrome://resources/js/platform.js';
 import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -30,19 +31,28 @@
     assertTrue(!!toastManager);
   });
 
-  test('long URLs elide', async () => {
-    callbackRouterRemote.insertItems(0, [createDownload({
-                                       fileName: 'file name',
-                                       state: States.COMPLETE,
-                                       sinceString: 'Today',
-                                       url: 'a'.repeat(1000),
-                                     })]);
+  test('long URLs don\'t elide', async () => {
+    const url = 'https://' +
+        'a'.repeat(1000) + '.com/document.pdf';
+    const displayUrl = 'https://' +
+        '啊'.repeat(1000) + '.com/document.pdf';
+    callbackRouterRemote.insertItems(
+        0, [createDownload({
+          fileName: 'file name',
+          state: States.COMPLETE,
+          sinceString: 'Today',
+          url: stringToMojoUrl(url),
+          displayUrl: stringToMojoString16(displayUrl),
+        })]);
     await callbackRouterRemote.$.flushForTesting();
     flush();
 
     const item = manager.shadowRoot!.querySelector('downloads-item')!;
     assertLT(item.$.url.offsetWidth, item.offsetWidth);
-    assertEquals(300, item.$.url.textContent!.length);
+    assertEquals(displayUrl, item.$.url.textContent);
+    assertEquals(url, item.$.url.href);
+    assertEquals(url, item.$['file-link'].href);
+    assertEquals(url, item.$.url.href);
   });
 
   test('inserting items at beginning render dates correctly', async () => {
@@ -101,7 +111,7 @@
                                        fileName: 'file name',
                                        state: States.COMPLETE,
                                        sinceString: 'Today',
-                                       url: 'a'.repeat(1000),
+                                       url: stringToMojoUrl('a'.repeat(1000)),
                                      })]);
     await callbackRouterRemote.$.flushForTesting();
     flush();
@@ -153,7 +163,7 @@
                                        fileName: 'file name',
                                        state: States.COMPLETE,
                                        sinceString: 'Today',
-                                       url: 'a'.repeat(1000),
+                                       url: stringToMojoUrl('a'.repeat(1000)),
                                      })]);
     await callbackRouterRemote.$.flushForTesting();
 
diff --git a/chrome/test/data/webui/downloads/test_support.ts b/chrome/test/data/webui/downloads/test_support.ts
index 08685662..f1e4dff 100644
--- a/chrome/test/data/webui/downloads/test_support.ts
+++ b/chrome/test/data/webui/downloads/test_support.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import {DangerType, IconLoader, MojomData, PageCallbackRouter, PageHandlerInterface, PageRemote, States} from 'chrome://downloads/downloads.js';
+import {stringToMojoString16, stringToMojoUrl} from 'chrome://resources/js/mojo_type_util.js';
 import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
 
 export class TestDownloadsProxy {
@@ -105,7 +106,8 @@
         started: Date.now() - 10000,
         state: States.COMPLETE,
         total: -1,
-        url: 'http://permission.site',
+        url: stringToMojoUrl('http://permission.site'),
+        displayUrl: stringToMojoString16('http://permission.site'),
       },
       config || {});
 }
diff --git a/chrome/test/data/webui/js/mojo_type_util_test.ts b/chrome/test/data/webui/js/mojo_type_util_test.ts
index c38717a..4a77b37 100644
--- a/chrome/test/data/webui/js/mojo_type_util_test.ts
+++ b/chrome/test/data/webui/js/mojo_type_util_test.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 {mojoString16ToString, stringToMojoString16} from 'chrome://resources/js/mojo_type_util.js';
+import {mojoString16ToString, stringToMojoString16, stringToMojoUrl} from 'chrome://resources/js/mojo_type_util.js';
 import {assertDeepEquals, assertEquals} from 'chrome://webui-test/chai_assert.js';
 
 suite('MojoTypeUtilTest', () => {
@@ -17,4 +17,18 @@
     assertEquals(mojoString16ToString({data: [0x68, 0x69]}), 'hi');
     assertEquals(mojoString16ToString({data: [0x4f60, 0x597d]}), '你好');
   });
+
+  test('Can convert strings to mojo Urls', () => {
+    assertDeepEquals(stringToMojoUrl(''), {url: ''});
+    assertDeepEquals(
+        stringToMojoUrl('https://chromium.org'), {url: 'https://chromium.org'});
+    assertDeepEquals(
+        stringToMojoUrl('https://user:pass@example.test'),
+        {url: 'https://user:pass@example.test'});
+    assertDeepEquals(
+        stringToMojoUrl('http://insecure.test'), {url: 'http://insecure.test'});
+    assertDeepEquals(
+        stringToMojoUrl('file:///home/test/test.pdf'),
+        {url: 'file:///home/test/test.pdf'});
+  });
 });
diff --git a/chrome/test/data/webui/new_tab_page/modules/v2/modules_test.ts b/chrome/test/data/webui/new_tab_page/modules/v2/modules_test.ts
index 32df309..6c3c4099 100644
--- a/chrome/test/data/webui/new_tab_page/modules/v2/modules_test.ts
+++ b/chrome/test/data/webui/new_tab_page/modules/v2/modules_test.ts
@@ -2,9 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {MAX_COLUMN_COUNT, Module, ModuleDescriptor, ModuleRegistry, ModulesV2Element, ModuleWrapperElement, NamedWidth, SUPPORTED_MODULE_WIDTHS} from 'chrome://new-tab-page/lazy_load.js';
+import {Module, ModuleDescriptor, ModuleRegistry, ModulesV2Element, ModuleWrapperElement, NamedWidth, SUPPORTED_MODULE_WIDTHS} from 'chrome://new-tab-page/lazy_load.js';
 import {NewTabPageProxy} from 'chrome://new-tab-page/new_tab_page.js';
 import {PageCallbackRouter, PageHandlerRemote, PageRemote} from 'chrome://new-tab-page/new_tab_page.mojom-webui.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {fakeMetricsPrivate, MetricsTracker} from 'chrome://webui-test/metrics_test_support.js';
 import {waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js';
@@ -13,6 +14,7 @@
 import {assertNotStyle, assertStyle, createElement, initNullModule, installMock} from '../../test_support.js';
 
 const SAMPLE_SCREEN_WIDTH = 1080;
+const MAX_COLUMN_COUNT = 5;
 
 suite('NewTabPageModulesModulesV2Test', () => {
   let callbackRouterRemote: PageRemote;
@@ -22,6 +24,9 @@
 
   setup(async () => {
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    loadTimeData.overrideValues({
+      modulesMaxColumnCount: MAX_COLUMN_COUNT,
+    });
     handler = installMock(
         PageHandlerRemote,
         (mock: PageHandlerRemote) =>
diff --git a/chrome/test/data/webui/search_engine_choice/search_engine_choice_test.ts b/chrome/test/data/webui/search_engine_choice/search_engine_choice_test.ts
index 5cfdda1..67d7d2e 100644
--- a/chrome/test/data/webui/search_engine_choice/search_engine_choice_test.ts
+++ b/chrome/test/data/webui/search_engine_choice/search_engine_choice_test.ts
@@ -5,14 +5,22 @@
 import 'chrome://search-engine-choice/app.js';
 
 import {SearchEngineChoiceAppElement} from 'chrome://search-engine-choice/app.js';
-import {assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {SearchEngineChoiceBrowserProxy} from 'chrome://search-engine-choice/browser_proxy.js';
+import {PageHandlerRemote} from 'chrome://search-engine-choice/search_engine_choice.mojom-webui.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {waitBeforeNextRender} from 'chrome://webui-test/polymer_test_util.js';
+import {TestMock} from 'chrome://webui-test/test_mock.js';
 
 suite('SearchEngineChoiceTest', function() {
   let testElement: SearchEngineChoiceAppElement;
+  let handler: TestMock<PageHandlerRemote>&PageHandlerRemote;
 
   setup(function() {
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    handler = TestMock.fromClass(PageHandlerRemote);
+    SearchEngineChoiceBrowserProxy.setInstance(
+        new SearchEngineChoiceBrowserProxy(handler));
+
     testElement = document.createElement('search-engine-choice-app');
     document.body.appendChild(testElement);
     return waitBeforeNextRender(testElement);
@@ -22,14 +30,27 @@
     testElement.remove();
   });
 
-  test('Submit button enabled on choice click', function() {
-    assertTrue(testElement.$.submitButton.disabled);
-
+  // Selects the first search engine from the list of search engine choices.
+  function selectChoice() {
     const radioButtons =
         testElement.shadowRoot!.querySelectorAll('cr-radio-button');
 
     assertTrue(radioButtons.length > 0);
     radioButtons[0]!.click();
+  }
+
+  test('Submit button enabled on choice click', function() {
+    assertTrue(testElement.$.submitButton.disabled);
+
+    selectChoice();
     assertFalse(testElement.$.submitButton.disabled);
   });
+
+  test('Clicking submit button calls correct function', function() {
+    // Select a search engine to enable the submit button.
+    selectChoice();
+
+    testElement.$.submitButton.click();
+    assertEquals(handler.getCallCount('handleSearchEngineChoiceSelected'), 1);
+  });
 });
diff --git a/chrome/test/data/webui/settings/privacy_guide_fragments_test.ts b/chrome/test/data/webui/settings/privacy_guide_fragments_test.ts
index 7cd05727..cb7f7a66 100644
--- a/chrome/test/data/webui/settings/privacy_guide_fragments_test.ts
+++ b/chrome/test/data/webui/settings/privacy_guide_fragments_test.ts
@@ -6,7 +6,7 @@
 import {webUIListenerCallback} from 'chrome://resources/js/cr.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-import {CookiePrimarySetting, PrivacyGuideCompletionFragmentElement, PrivacyGuideCookiesFragmentElement, PrivacyGuideHistorySyncFragmentElement, PrivacyGuideMsbbFragmentElement, PrivacyGuideSafeBrowsingFragmentElement, PrivacyGuideWelcomeFragmentElement, SafeBrowsingSetting, SettingsCollapseRadioButtonElement, SettingsRadioGroupElement} from 'chrome://settings/lazy_load.js';
+import {CookiePrimarySetting, PrivacyGuideCompletionFragmentElement, PrivacyGuideCookiesFragmentElement, PrivacyGuideDescriptionItemElement, PrivacyGuideHistorySyncFragmentElement, PrivacyGuideMsbbFragmentElement, PrivacyGuideSafeBrowsingFragmentElement, PrivacyGuideWelcomeFragmentElement, SafeBrowsingSetting, SettingsCollapseRadioButtonElement, SettingsRadioGroupElement} from 'chrome://settings/lazy_load.js';
 import {CrSettingsPrefs, MetricsBrowserProxyImpl, PrivacyGuideInteractions, PrivacyGuideSettingsStates, Router, routes, SettingsPrefsElement, SyncBrowserProxyImpl, SyncPrefs, syncPrefsIndividualDataTypes} from 'chrome://settings/settings.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {eventToPromise, isChildVisible} from 'chrome://webui-test/test_util.js';
@@ -467,19 +467,6 @@
     assertTrue(isChildVisible(fragment, '#updatedDescItemContainer'));
   });
 
-  test('UpdatedStandardProtectionPrivacyGuide', function() {
-    const standardProtection =
-        fragment.shadowRoot!.querySelector<SettingsCollapseRadioButtonElement>(
-            '#safeBrowsingRadioStandard');
-    assertTrue(!!standardProtection);
-    const spSubLabel =
-        loadTimeData.getString('safeBrowsingStandardDescUpdated');
-    assertEquals(spSubLabel, standardProtection.subLabel);
-    assertTrue(standardProtection.noCollapse);
-    assertFalse(
-        isChildVisible(fragment, '#whenOnThingsToConsiderStandardProtection'));
-  });
-
   test('safeBrowsingMetricsEnhancedToStandard', function() {
     return assertSafeBrowsingMetrics({
       safeBrowsingStartsEnhanced: true,
@@ -533,12 +520,101 @@
         Number(radioButtonGroup.selected), SafeBrowsingSetting.STANDARD);
   });
 
-  suite('SafeBrowsingFragment_FlagsDisabled', function() {
+  suite('HashPrefixRealTimeDisabled', function() {
     suiteSetup(function() {
-      loadTimeData.overrideValues(
-          {enableFriendlierSafeBrowsingSettings: false});
+      loadTimeData.overrideValues({
+        enableFriendlierSafeBrowsingSettings: true,
+        enableHashPrefixRealTimeLookups: false,
+      });
     });
 
+    test('StandardProtectionDescription', function() {
+      const standardProtection =
+          fragment.shadowRoot!
+              .querySelector<SettingsCollapseRadioButtonElement>(
+                  '#safeBrowsingRadioStandard');
+      assertTrue(!!standardProtection);
+      const spSubLabel =
+          loadTimeData.getString('safeBrowsingStandardDescUpdated');
+      assertEquals(spSubLabel, standardProtection.subLabel);
+      assertTrue(standardProtection.noCollapse);
+      assertFalse(isChildVisible(
+          fragment, '#whenOnThingsToConsiderStandardProtection'));
+    });
+  });
+
+  // <if expr="_google_chrome">
+  suite('HashPrefixRealTimeEnabled', function() {
+    suiteSetup(function() {
+      loadTimeData.overrideValues({
+        enableFriendlierSafeBrowsingSettings: true,
+        enableHashPrefixRealTimeLookups: true,
+      });
+    });
+
+    test('StandardProtectionDescriptionWithProxy', function() {
+      const standardProtection =
+          fragment.shadowRoot!
+              .querySelector<SettingsCollapseRadioButtonElement>(
+                  '#safeBrowsingRadioStandard');
+      assertTrue(!!standardProtection);
+      const spSubLabel =
+          loadTimeData.getString('safeBrowsingStandardDescUpdatedProxy');
+      assertEquals(spSubLabel, standardProtection.subLabel);
+    });
+  });
+  // TODO(crbug.com/1466292): Remove once friendlier safe browsing settings
+  // standard protection is launched.
+  suite('HashPrefixRealTimeEnabled_FriendlierSettingsDisabled', function() {
+    suiteSetup(function() {
+      loadTimeData.overrideValues({
+        enableFriendlierSafeBrowsingSettings: false,
+        enableHashPrefixRealTimeLookups: true,
+      });
+    });
+
+    test('NotUpdatedStandardProtectionDescription', function() {
+      const standardProtection =
+          fragment.shadowRoot!
+              .querySelector<SettingsCollapseRadioButtonElement>(
+                  '#safeBrowsingRadioStandard');
+      assertTrue(!!standardProtection);
+      const spSubLabel = loadTimeData.getString('safeBrowsingStandardDesc');
+      assertEquals(spSubLabel, standardProtection.subLabel);
+
+      const standardProtectionFeatureDescription2 =
+          fragment.shadowRoot!
+              .querySelector<PrivacyGuideDescriptionItemElement>(
+                  '#standardProtectionFeatureDescription2');
+      assertTrue(!!standardProtectionFeatureDescription2);
+      const featureDesc2Label = loadTimeData.getString(
+          'privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2Proxy');
+      assertEquals(
+          featureDesc2Label, standardProtectionFeatureDescription2.label);
+
+      const standardProtectionPrivacyDescription1 =
+          fragment.shadowRoot!
+              .querySelector<PrivacyGuideDescriptionItemElement>(
+                  '#standardProtectionPrivacyDescription1');
+      assertTrue(!!standardProtectionPrivacyDescription1);
+      const privacyDesc1Label = loadTimeData.getString(
+          'privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1Proxy');
+      assertEquals(
+          privacyDesc1Label, standardProtectionPrivacyDescription1.label);
+    });
+  });
+  // </if>
+
+  suite('FlagsDisabled', function() {
+    suiteSetup(function() {
+      loadTimeData.overrideValues({
+        enableFriendlierSafeBrowsingSettings: false,
+        enableHashPrefixRealTimeLookups: false,
+      });
+    });
+
+    // TODO(crbug.com/1466292): Remove once friendlier safe browsing settings
+    // standard protection is launched.
     test('NotUpdatedStandardProtectionPrivacyGuide', function() {
       const standardProtection =
           fragment.shadowRoot!
@@ -550,8 +626,30 @@
       assertFalse(standardProtection.noCollapse);
       assertTrue(isChildVisible(
           fragment, '#whenOnThingsToConsiderStandardProtection'));
+
+      const standardProtectionFeatureDescription2 =
+          fragment.shadowRoot!
+              .querySelector<PrivacyGuideDescriptionItemElement>(
+                  '#standardProtectionFeatureDescription2');
+      assertTrue(!!standardProtectionFeatureDescription2);
+      const featureDesc2Label = loadTimeData.getString(
+          'privacyGuideSafeBrowsingCardStandardProtectionFeatureDescription2');
+      assertEquals(
+          featureDesc2Label, standardProtectionFeatureDescription2.label);
+
+      const standardProtectionPrivacyDescription1 =
+          fragment.shadowRoot!
+              .querySelector<PrivacyGuideDescriptionItemElement>(
+                  '#standardProtectionPrivacyDescription1');
+      assertTrue(!!standardProtectionPrivacyDescription1);
+      const privacyDesc1Label = loadTimeData.getString(
+          'privacyGuideSafeBrowsingCardStandardProtectionPrivacyDescription1');
+      assertEquals(
+          privacyDesc1Label, standardProtectionPrivacyDescription1.label);
     });
 
+    // TODO(crbug.com/1470385): Remove once friendlier safe browsing settings
+    // enhanced protection is launched.
     test('NotUpdatedEnhancedProtectionPrivacyGuide', function() {
       const enhancedProtection =
           fragment.shadowRoot!
@@ -568,7 +666,6 @@
       assertFalse(isChildVisible(fragment, '#updatedDescItemContainer'));
     });
   });
-
 });
 
 suite('CookiesFragment', function() {
diff --git a/chromeos/profiles/arm.afdo.newest.txt b/chromeos/profiles/arm.afdo.newest.txt
index 93e4b9c4..76fc2c6 100644
--- a/chromeos/profiles/arm.afdo.newest.txt
+++ b/chromeos/profiles/arm.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-none-118-5938.4-1692617964-benchmark-118.0.5966.0-r1-redacted.afdo.xz
+chromeos-chrome-arm-none-118-5938.4-1692617964-benchmark-118.0.5968.0-r2-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index bf6057c2..0842c581 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-118-5938.4-1692610741-benchmark-118.0.5966.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-118-5938.4-1692610741-benchmark-118.0.5968.0-r2-redacted.afdo.xz
diff --git a/clank b/clank
index 2667193..53a7e81 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 266719310f4a0028db81ba7fe84f79067f589c37
+Subproject commit 53a7e81a8728e0b93c34a1a7d162c4b75e960f6d
diff --git a/components/attribution_reporting/filters.cc b/components/attribution_reporting/filters.cc
index 3e274a2..56f8d66 100644
--- a/components/attribution_reporting/filters.cc
+++ b/components/attribution_reporting/filters.cc
@@ -260,9 +260,15 @@
   // key does not match between the two (negating the function result is not
   // sufficient by the API definition).
   return base::ranges::any_of(filters, [&](const FilterConfig& config) {
-    if (config.lookback_window() &&
-        duration_since_source_registration > config.lookback_window().value()) {
-      return negated;
+    if (config.lookback_window()) {
+      if (duration_since_source_registration >
+          config.lookback_window().value()) {
+        if (!negated) {
+          return false;
+        }
+      } else if (negated) {
+        return false;
+      }
     }
 
     return base::ranges::all_of(
diff --git a/components/attribution_reporting/filters_unittest.cc b/components/attribution_reporting/filters_unittest.cc
index 59d00bc..65f789b8 100644
--- a/components/attribution_reporting/filters_unittest.cc
+++ b/components/attribution_reporting/filters_unittest.cc
@@ -749,6 +749,15 @@
           .match_expected = true,
       },
       {
+          .description = "duration-smaller-than-window",
+          .filter_data = {},
+          .filters = FiltersDisjunction({*FilterConfig::Create(
+              {}, /*lookback_window=*/kTriggerTime - kSourceTime +
+                      base::Microseconds(1))}),
+          .negated = true,
+          .match_expected = false,
+      },
+      {
           .description = "duration-equal-to-window",
           .filter_data = {},
           .filters = FiltersDisjunction({*FilterConfig::Create(
@@ -762,7 +771,7 @@
           .filters = FiltersDisjunction({*FilterConfig::Create(
               {}, /*lookback_window=*/kTriggerTime - kSourceTime)}),
           .negated = true,
-          .match_expected = true,
+          .match_expected = false,
       },
       {
           .description = "duration-equal-to-window-with-matching-filter",
@@ -773,6 +782,15 @@
           .match_expected = true,
       },
       {
+          .description =
+              "duration-equal-to-window-with-matching-filter-negated",
+          .filter_data = *FilterData::Create(one_filter),
+          .filters = FiltersDisjunction({*FilterConfig::Create(
+              {one_filter}, /*lookback_window=*/kTriggerTime - kSourceTime)}),
+          .negated = true,
+          .match_expected = false,
+      },
+      {
           .description = "duration-equal-to-window-with-non-matching-filter",
           .filter_data = *FilterData::Create(one_filter),
           .filters = FiltersDisjunction({*FilterConfig::Create(
@@ -782,6 +800,16 @@
           .match_expected = false,
       },
       {
+          .description =
+              "duration-equal-to-window-with-non-matching-filter-negated",
+          .filter_data = *FilterData::Create(one_filter),
+          .filters = FiltersDisjunction({*FilterConfig::Create(
+              {one_filter_different},
+              /*lookback_window=*/kTriggerTime - kSourceTime)}),
+          .negated = true,
+          .match_expected = false,
+      },
+      {
           .description = "duration-greater-than-window",
           .filter_data = {},
           .filters = FiltersDisjunction({*FilterConfig::Create(
@@ -808,6 +836,38 @@
           .negated = false,
           .match_expected = false,
       },
+      {
+          .description =
+              "duration-greater-than-window-with-matching-filter-negated",
+          .filter_data = *FilterData::Create(one_filter),
+          .filters = FiltersDisjunction({*FilterConfig::Create(
+              {one_filter}, /*lookback_window=*/kTriggerTime - kSourceTime -
+                                base::Microseconds(1))}),
+          .negated = true,
+          .match_expected = false,
+      },
+      {
+          .description =
+              "duration-greater-than-window-with-non-matching-filter",
+          .filter_data = *FilterData::Create(one_filter),
+          .filters = FiltersDisjunction(
+              {*FilterConfig::Create({one_filter_different},
+                                     /*lookback_window=*/kTriggerTime -
+                                         kSourceTime - base::Microseconds(1))}),
+          .negated = false,
+          .match_expected = false,
+      },
+      {
+          .description =
+              "duration-greater-than-window-with-non-matching-filter-negated",
+          .filter_data = *FilterData::Create(one_filter),
+          .filters = FiltersDisjunction(
+              {*FilterConfig::Create({one_filter_different},
+                                     /*lookback_window=*/kTriggerTime -
+                                         kSourceTime - base::Microseconds(1))}),
+          .negated = true,
+          .match_expected = true,
+      },
   };
 
   for (const auto& test_case : kTestCases) {
diff --git a/components/autofill/android/BUILD.gn b/components/autofill/android/BUILD.gn
index 432701d..132884dc 100644
--- a/components/autofill/android/BUILD.gn
+++ b/components/autofill/android/BUILD.gn
@@ -202,17 +202,21 @@
   sources = [
     "java/src/org/chromium/components/autofill/Completable.java",
     "java/src/org/chromium/components/autofill/EditableOption.java",
+    "java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java",
     "java/src/org/chromium/components/autofill/payments/CardDetail.java",
     "java/src/org/chromium/components/autofill/payments/LegalMessageLine.java",
   ]
   deps = [
     "//base:jni_java",
+    "//third_party/android_deps:guava_android_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
   ]
+  srcjar_deps = [ ":payments_jni_headers" ]
 }
 
 robolectric_library("payments_autofill_junit_tests") {
   sources = [
+    "javatests/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfoTest.java",
     "javatests/src/org/chromium/components/autofill/payments/CardDetailTest.java",
     "javatests/src/org/chromium/components/autofill/payments/LegalMessageLineTest.java",
   ]
@@ -220,14 +224,17 @@
     ":payments_autofill_java",
     "//base:base_java_test_support",
     "//base:base_junit_test_support",
+    "//third_party/android_deps:guava_android_java",
     "//third_party/hamcrest:hamcrest_core_java",
     "//third_party/hamcrest:hamcrest_library_java",
     "//third_party/junit:junit",
+    "//third_party/mockito:mockito_java",
   ]
 }
 
 generate_jni("payments_jni_headers") {
   sources = [
+    "java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java",
     "java/src/org/chromium/components/autofill/payments/LegalMessageLine.java",
   ]
   deps = [ "//base:jni_java" ]
diff --git a/components/autofill/android/java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java b/components/autofill/android/java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java
new file mode 100644
index 0000000..3eaf1adc9
--- /dev/null
+++ b/components/autofill/android/java/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfo.java
@@ -0,0 +1,165 @@
+// 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.
+
+package org.chromium.components.autofill.payments;
+
+import androidx.annotation.DrawableRes;
+import androidx.annotation.VisibleForTesting;
+
+import com.google.common.collect.ImmutableList;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
+
+import java.util.List;
+
+@JNINamespace("autofill")
+/**
+ * The android version of the C++ AutofillSaveCardUiInfo providing text and icons.
+ *
+ * Fields not needed by the save card bottom sheet UI on Android are not present.
+ */
+public class AutofillSaveCardUiInfo {
+    private final boolean mIsForUpload;
+    private final @DrawableRes int mLogoIcon;
+    private final @DrawableRes int mIssuerIcon;
+    private final ImmutableList<LegalMessageLine> mLegalMessageLines;
+    private final String mCardLabel;
+    private final String mCardSubLabel;
+    private final String mTitleText;
+    private final String mConfirmText;
+    private final String mCancelText;
+    private final String mDescriptionText;
+    private final boolean mIsGooglePayBrandingEnabled;
+
+    public boolean isForUpload() {
+        return mIsForUpload;
+    }
+
+    @DrawableRes
+    public int getLogoIcon() {
+        return mLogoIcon;
+    }
+
+    /** @return an immutable list of legal message lines. */
+    public ImmutableList<LegalMessageLine> getLegalMessageLines() {
+        return ImmutableList.copyOf(mLegalMessageLines);
+    }
+
+    /** @return a CardDetail of the issuer icon, label, and sub label. */
+    public CardDetail getCardDetail() {
+        return new CardDetail(mIssuerIcon, mCardLabel, mCardSubLabel);
+    }
+
+    public String getTitleText() {
+        return mTitleText;
+    }
+
+    public String getConfirmText() {
+        return mConfirmText;
+    }
+
+    public String getCancelText() {
+        return mCancelText;
+    }
+
+    public String getDescriptionText() {
+        return mDescriptionText;
+    }
+
+    public boolean isGooglePayBrandingEnabled() {
+        return mIsGooglePayBrandingEnabled;
+    }
+
+    // LINT.IfChange
+    @CalledByNative
+    /** Construct the delegate given all the members. */
+    private AutofillSaveCardUiInfo(boolean isForUpload, @DrawableRes int logoIcon,
+            @DrawableRes int issuerIcon, List<LegalMessageLine> legalMessageLines, String cardLabel,
+            String cardSubLabel, String titleText, String confirmText, String cancelText,
+            boolean isGooglePayBrandingEnabled, String descriptionText) {
+        mIsForUpload = isForUpload;
+        mLogoIcon = logoIcon;
+        mIssuerIcon = issuerIcon;
+        mLegalMessageLines = ImmutableList.copyOf(legalMessageLines);
+        mCardLabel = cardLabel;
+        mCardSubLabel = cardSubLabel;
+        mTitleText = titleText;
+        mConfirmText = confirmText;
+        mCancelText = cancelText;
+        mIsGooglePayBrandingEnabled = isGooglePayBrandingEnabled;
+        mDescriptionText = descriptionText;
+    }
+    // LINT.ThenChange(//chrome/browser/ui/android/autofill/autofill_save_card_bottom_sheet_bridge.cc)
+
+    /** Builder for {@link AutofillSaveCardUiInfo} */
+    @VisibleForTesting
+    public static class Builder {
+        private boolean mIsForUpload;
+        @DrawableRes
+        private int mLogoIcon;
+        private CardDetail mCardDetail;
+        private ImmutableList<LegalMessageLine> mLegalMessageLines = ImmutableList.of();
+        private String mTitleText;
+        private String mConfirmText;
+        private String mCancelText;
+        private boolean mIsGooglePayBrandingEnabled;
+        private String mDescriptionText;
+
+        public Builder withIsForUpload(boolean isForUpload) {
+            mIsForUpload = isForUpload;
+            return this;
+        }
+
+        public Builder withLogoIcon(@DrawableRes int logoIcon) {
+            mLogoIcon = logoIcon;
+            return this;
+        }
+
+        public Builder withCardDetail(CardDetail cardDetail) {
+            mCardDetail = cardDetail;
+            return this;
+        }
+
+        public Builder withLegalMessageLines(List<LegalMessageLine> legalMessageLines) {
+            mLegalMessageLines = ImmutableList.copyOf(legalMessageLines);
+            return this;
+        }
+
+        public Builder withTitleText(String titleText) {
+            mTitleText = titleText;
+            return this;
+        }
+
+        public Builder withConfirmText(String confirmText) {
+            mConfirmText = confirmText;
+            return this;
+        }
+
+        public Builder withCancelText(String cancelText) {
+            mCancelText = cancelText;
+            return this;
+        }
+
+        public Builder withIsGooglePayBrandingEnabled(boolean isGooglePayBrandingEnabled) {
+            mIsGooglePayBrandingEnabled = isGooglePayBrandingEnabled;
+            return this;
+        }
+
+        public Builder withDescriptionText(String descriptionText) {
+            mDescriptionText = descriptionText;
+            return this;
+        }
+
+        /**
+         * Create the {@link AutofillSaveCardUiInfo} object.
+         */
+        public AutofillSaveCardUiInfo build() {
+            return new AutofillSaveCardUiInfo(mIsForUpload, mLogoIcon,
+                    mCardDetail.issuerIconDrawableId, mLegalMessageLines, mCardDetail.label,
+                    mCardDetail.subLabel, mTitleText, mConfirmText, mCancelText,
+                    mIsGooglePayBrandingEnabled, mDescriptionText);
+        }
+    }
+}
diff --git a/components/autofill/android/javatests/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfoTest.java b/components/autofill/android/javatests/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfoTest.java
new file mode 100644
index 0000000..9780828
--- /dev/null
+++ b/components/autofill/android/javatests/src/org/chromium/components/autofill/payments/AutofillSaveCardUiInfoTest.java
@@ -0,0 +1,141 @@
+// 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.
+
+package org.chromium.components.autofill.payments;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
+import android.annotation.SuppressLint;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.Matchers;
+import org.hamcrest.TypeSafeMatcher;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@RunWith(BaseRobolectricTestRunner.class)
+public class AutofillSaveCardUiInfoTest {
+    private static AutofillSaveCardUiInfo.Builder defaultBuilder() {
+        return new AutofillSaveCardUiInfo.Builder()
+                .withLogoIcon(0)
+                .withIsForUpload(false)
+                .withCardDetail(new CardDetail(0, "", ""))
+                .withLegalMessageLines(Collections.EMPTY_LIST)
+                .withTitleText("")
+                .withConfirmText("")
+                .withCancelText("")
+                .withIsGooglePayBrandingEnabled(false)
+                .withDescriptionText("");
+    }
+
+    @Test
+    public void testBuilder_setsIsForUpload() {
+        AutofillSaveCardUiInfo uiInfo = defaultBuilder().withIsForUpload(true).build();
+
+        assertThat(uiInfo.isForUpload(), equalTo(true));
+    }
+
+    @Test
+    public void testBuilder_setsLogoIcon() {
+        @SuppressLint("ResourceType")
+        AutofillSaveCardUiInfo uiInfo = defaultBuilder().withLogoIcon(1234).build();
+
+        assertThat(uiInfo.getLogoIcon(), equalTo(1234));
+    }
+
+    @Test
+    public void testBuilder_setsCardDetail() {
+        @SuppressLint("ResourceType")
+        AutofillSaveCardUiInfo uiInfo =
+                defaultBuilder()
+                        .withCardDetail(new CardDetail(/*iconId=*/1, "cardLabel", "cardSubLabel"))
+                        .build();
+
+        assertThat(uiInfo.getCardDetail().issuerIconDrawableId, equalTo(1));
+        assertThat(uiInfo.getCardDetail().label, equalTo("cardLabel"));
+        assertThat(uiInfo.getCardDetail().subLabel, equalTo("cardSubLabel"));
+    }
+
+    @Test
+    public void testBuilder_setsLegalMessageLine() {
+        List<LegalMessageLine> legalMessageLines = Arrays.asList(new LegalMessageLine("abc"),
+                new LegalMessageLine("xyz"), new LegalMessageLine("uvw"));
+
+        AutofillSaveCardUiInfo uiInfo =
+                defaultBuilder().withLegalMessageLines(legalMessageLines).build();
+
+        assertThat(uiInfo.getLegalMessageLines(),
+                Matchers.contains(legalMessageLines.stream()
+                                          .map(line -> equalToLegalMessageLineWithText(line.text))
+                                          .collect(Collectors.toList())));
+    }
+
+    private static Matcher<LegalMessageLine> equalToLegalMessageLineWithText(String text) {
+        return new TypeSafeMatcher<LegalMessageLine>() {
+            @Override
+            protected boolean matchesSafely(LegalMessageLine legalMessageLine) {
+                return Objects.equals(legalMessageLine.text, text);
+            }
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("LegalLineMessage with text of ").appendValue(text);
+            }
+
+            @Override
+            protected void describeMismatchSafely(
+                    LegalMessageLine item, Description mismatchDescription) {
+                mismatchDescription.appendText("LegalLineMessage with text of ")
+                        .appendValue(item.text);
+            }
+        };
+    }
+
+    @Test
+    public void testBuilder_setsTitleText() {
+        AutofillSaveCardUiInfo uiInfo = defaultBuilder().withTitleText("Title Text").build();
+
+        assertThat(uiInfo.getTitleText(), equalTo("Title Text"));
+    }
+
+    @Test
+    public void testBuilder_setsConfirmText() {
+        AutofillSaveCardUiInfo uiInfo = defaultBuilder().withConfirmText("Confirm Text").build();
+
+        assertThat(uiInfo.getConfirmText(), equalTo("Confirm Text"));
+    }
+
+    @Test
+    public void testBuilder_setsCancelText() {
+        AutofillSaveCardUiInfo uiInfo = defaultBuilder().withCancelText("Cancel Text").build();
+
+        assertThat(uiInfo.getCancelText(), equalTo("Cancel Text"));
+    }
+
+    @Test
+    public void testBuilder_setsDescriptionText() {
+        AutofillSaveCardUiInfo uiInfo =
+                defaultBuilder().withDescriptionText("Description Text").build();
+
+        assertThat(uiInfo.getDescriptionText(), equalTo("Description Text"));
+    }
+
+    @Test
+    public void testBuilder_setsGooglePayBrandingEnabled() {
+        AutofillSaveCardUiInfo uiInfo =
+                defaultBuilder().withIsGooglePayBrandingEnabled(true).build();
+
+        assertThat(uiInfo.isGooglePayBrandingEnabled(), equalTo(true));
+    }
+}
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index 55db346..dec4206a 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -678,7 +678,6 @@
   if (is_android) {
     deps += [
       "//components/autofill/android:main_autofill_jni_headers",
-      "//components/autofill/android:payments_jni_headers",
       "//components/messages/android:feature_flags",
     ]
   }
diff --git a/components/autofill/core/browser/autofill_manager_test_api.h b/components/autofill/core/browser/autofill_manager_test_api.h
index f2cf88e..3466cc0b 100644
--- a/components/autofill/core/browser/autofill_manager_test_api.h
+++ b/components/autofill/core/browser/autofill_manager_test_api.h
@@ -22,6 +22,16 @@
     manager_->OnLoadedServerPredictions(response, queried_form_signatures);
   }
 
+  void OnAutofillProfileOrCreditCardFormFilled(
+      autofill::FormGlobalId form,
+      base::span<const std::pair<const FormFieldData*, const AutofillField*>>
+          filled_fields,
+      absl::variant<const AutofillProfile*, const CreditCard*>
+          profile_or_credit_card) {
+    manager_->OnAutofillProfileOrCreditCardFormFilled(form, filled_fields,
+                                                      profile_or_credit_card);
+  }
+
   std::map<FormGlobalId, std::unique_ptr<FormStructure>>*
   mutable_form_structures() {
     return manager_->mutable_form_structures();
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index 859855e..b055c96 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -2289,8 +2289,8 @@
     const FormStructure& form_structure,
     const FormFieldData& trigger_field,
     const Section& filling_section,
-    const absl::optional<CreditCard>& optional_credit_card,
-    const std::set<FieldTypeGroup>& type_groups_originally_filled,
+    const CreditCard* optional_credit_card,
+    const DenseSet<FieldTypeGroup>* optional_type_groups_originally_filled,
     bool skip_unrecognized_autocomplete_fields,
     bool is_refill) const {
   // Counts the number of times a type was seen in the section to be filled.
@@ -2364,8 +2364,9 @@
 
     // On a refill, only fill fields from type groups that were present during
     // the initial fill.
-    if (is_refill &&
-        !base::Contains(type_groups_originally_filled, field_group_type)) {
+    if (is_refill && optional_type_groups_originally_filled &&
+        !base::Contains(*optional_type_groups_originally_filled,
+                        field_group_type)) {
       skip_statuses[i] = SkipStatus::kRefillNotInInitialFill;
       continue;
     }
@@ -2493,10 +2494,10 @@
   std::vector<SkipStatus> skip_statuses = GetSkipStatuses(
       result, *form_structure, field, autofill_trigger_field->section,
       absl::holds_alternative<const CreditCard*>(profile_or_credit_card)
-          ? absl::make_optional(
-                *absl::get<const CreditCard*>(profile_or_credit_card))
-          : absl::nullopt,
-      filling_context->type_groups_originally_filled,
+          ? absl::get<const CreditCard*>(profile_or_credit_card)
+          : nullptr,
+      filling_context ? &filling_context->type_groups_originally_filled
+                      : nullptr,
       /*skip_unrecognized_autocomplete_fields=*/
       trigger_details.trigger_source !=
           AutofillTriggerSource::kManualFallbackForAutocompleteUnrecognized,
@@ -2810,8 +2811,8 @@
       form.fields.size() == form_structure.field_count()
           ? GetSkipStatuses(
                 form, form_structure, field, autofill_field.section,
-                /*optional_credit_card=*/absl::nullopt,
-                /*type_groups_originally_filled=*/{},
+                /*optional_credit_card=*/nullptr,
+                /*optional_type_groups_originally_filled=*/nullptr,
                 /*skip_unrecognized_autocomplete_fields=*/trigger_source !=
                     AutofillSuggestionTriggerSource::
                         kManualFallbackForAutocompleteUnrecognized,
diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
index ad89b73e..0561356 100644
--- a/components/autofill/core/browser/browser_autofill_manager.h
+++ b/components/autofill/core/browser/browser_autofill_manager.h
@@ -446,7 +446,7 @@
     // The timer used to trigger a refill.
     base::OneShotTimer on_refill_timer;
     // The field type groups that were initially filled.
-    std::set<FieldTypeGroup> type_groups_originally_filled;
+    DenseSet<FieldTypeGroup> type_groups_originally_filled;
     // If populated, this map determines which values will be filled into a
     // field (it does not matter whether the field already contains a value).
     std::map<FieldGlobalId, std::u16string> forced_fill_values;
@@ -468,8 +468,8 @@
       const FormStructure& form_structure,
       const FormFieldData& trigger_field,
       const Section& filling_section,
-      const absl::optional<CreditCard>& optional_credit_card,
-      const std::set<FieldTypeGroup>& type_groups_originally_filled,
+      const CreditCard* optional_credit_card,
+      const DenseSet<FieldTypeGroup>* optional_type_groups_originally_filled,
       bool skip_unrecognized_autocomplete_fields,
       bool is_refill) const;
 
diff --git a/components/autofill/core/browser/heuristic_classification_unittests.cc b/components/autofill/core/browser/heuristic_classification_unittests.cc
index 81bc68a..2574b0f 100644
--- a/components/autofill/core/browser/heuristic_classification_unittests.cc
+++ b/components/autofill/core/browser/heuristic_classification_unittests.cc
@@ -432,7 +432,17 @@
   scoped_feature_list.InitWithFeatures(
       /*enabled_features=*/
       {// This is always enabled to classify autocomplete=invalid fields.
-       features::kAutofillPredictionsForAutocompleteUnrecognized},
+       features::kAutofillPredictionsForAutocompleteUnrecognized,
+       // Support for new field types.
+       features::kAutofillEnableSupportForBetweenStreets,
+       features::kAutofillEnableSupportForAdminLevel2,
+       features::kAutofillEnableSupportForAddressOverflow,
+       features::kAutofillEnableSupportForLandmark,
+       features::kAutofillEnableSupportForApartmentNumbers,
+       features::kAutofillEnableDependentLocalityParsing,
+       features::kAutofillEnableExpirationDateImprovements,
+       // Allow local heuristics to take precedence.
+       features::kAutofillStreetNameOrHouseNumberPrecedenceOverAutocomplete},
       /*disabled_features=*/{});
 
   base::FilePath input_file = GetParam();
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index db31a420..0223a385 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -480,6 +480,13 @@
              "AutofillPassRendererFormsToPasswordManager",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+// If the feature is enabled, paint checks over individual `PopupCellView`s (to
+// verify that a user's cursor has been outside the cell before accepting it)
+// are disabled.
+BASE_FEATURE(kAutofillPopupDisablePaintChecks,
+             "kutofillPopupDisablePaintChecks",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // If the feature is enabled, FormTracker's probable-form-submission detection
 // is disabled and replaced with browser-side detection.
 // TODO(crbug/1117451): Remove once it works.
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h
index fcb4d47..d307d99 100644
--- a/components/autofill/core/common/autofill_features.h
+++ b/components/autofill/core/common/autofill_features.h
@@ -166,6 +166,8 @@
 COMPONENT_EXPORT(AUTOFILL)
 BASE_DECLARE_FEATURE(kAutofillPassRendererFormsToPasswordManager);
 COMPONENT_EXPORT(AUTOFILL)
+BASE_DECLARE_FEATURE(kAutofillPopupDisablePaintChecks);
+COMPONENT_EXPORT(AUTOFILL)
 BASE_DECLARE_FEATURE(kAutofillPreventOverridingPrefilledValues);
 COMPONENT_EXPORT(AUTOFILL)
 BASE_DECLARE_FEATURE(kAutofillProbableFormSubmissionInBrowser);
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc
index 1bfc017..373509f7 100644
--- a/components/autofill/core/common/autofill_payments_features.cc
+++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -271,6 +271,13 @@
              base::FEATURE_DISABLED_BY_DEFAULT);
 #endif
 
+#if BUILDFLAG(IS_ANDROID)
+// When enabled, Chrome will offer to pay with accounts supporting Pix.
+BASE_FEATURE(kEnablePixPayments,
+             "EnablePixPayments",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+#endif
+
 bool ShouldShowImprovedUserConsentForCreditCardSave() {
 // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
 // of lacros-chrome is complete.
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h
index 90f95896..0f6f1f18f 100644
--- a/components/autofill/core/common/autofill_payments_features.h
+++ b/components/autofill/core/common/autofill_payments_features.h
@@ -58,6 +58,10 @@
 BASE_DECLARE_FEATURE(kAutofillEnablePaymentsMandatoryReauthOnBling);
 #endif
 
+#if BUILDFLAG(IS_ANDROID)
+BASE_DECLARE_FEATURE(kEnablePixPayments);
+#endif
+
 // Return whether a [No thanks] button and new messaging is shown in the save
 // card bubbles. This will be called only on desktop platforms.
 bool ShouldShowImprovedUserConsentForCreditCardSave();
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 7b46b83..0efa60a4 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "24.14",
-  "log_list_timestamp": "2023-08-24T12:54:55Z",
+  "version": "24.15",
+  "log_list_timestamp": "2023-08-25T12:59:10Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.cc b/components/content_settings/browser/ui/cookie_controls_controller.cc
index 132c49d..35234ab 100644
--- a/components/content_settings/browser/ui/cookie_controls_controller.cc
+++ b/components/content_settings/browser/ui/cookie_controls_controller.cc
@@ -175,8 +175,9 @@
   SettingInfo info;
   bool is_allowed = cookie_settings_->IsThirdPartyAccessAllowed(url, &info);
 
-  const bool is_default_setting = info.primary_pattern.MatchesAllHosts() &&
-                                  info.secondary_pattern.MatchesAllHosts();
+  const bool is_default_setting =
+      info.primary_pattern == ContentSettingsPattern::Wildcard() &&
+      info.secondary_pattern == ContentSettingsPattern::Wildcard();
 
   // The UI can reset only host-scoped (without wildcards in the domain) or
   // site-scoped exceptions.
@@ -185,11 +186,15 @@
       info.secondary_pattern == URLToSchemefulSitePattern(url);
 
   // Rules from regular mode can't be temporarily overridden in incognito.
-  const bool is_exception_from_regular_mode_in_incognito =
-      is_allowed && original_cookie_settings_ &&
-      original_cookie_settings_->ShouldBlockThirdPartyCookies() &&
-      original_cookie_settings_->IsThirdPartyAccessAllowed(url,
-                                                           nullptr /* info */);
+  bool exception_exists_in_regular_profile = false;
+  if (is_allowed && original_cookie_settings_) {
+    SettingInfo original_info;
+    original_cookie_settings_->IsThirdPartyAccessAllowed(url, &original_info);
+
+    exception_exists_in_regular_profile =
+        original_info.primary_pattern != ContentSettingsPattern::Wildcard() ||
+        original_info.secondary_pattern != ContentSettingsPattern::Wildcard();
+  }
 
   CookieControlsStatus status = is_allowed
                                     ? CookieControlsStatus::kDisabledForSite
@@ -199,7 +204,7 @@
     enforcement = CookieControlsEnforcement::kEnforcedByPolicy;
   } else if (info.source == SETTING_SOURCE_EXTENSION) {
     enforcement = CookieControlsEnforcement::kEnforcedByExtension;
-  } else if (is_exception_from_regular_mode_in_incognito ||
+  } else if (exception_exists_in_regular_profile ||
              (!is_default_setting && !host_or_site_scoped_exception)) {
     // If the exception cannot be reset in-context because of the nature of the
     // setting, display as managed by setting.
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
index 8c6de09..0486610 100644
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -292,6 +292,15 @@
            ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE,
            ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
 
+  Register(ContentSettingsType::TPCD_METADATA_GRANTS, "3pcd-metadata-grants",
+           CONTENT_SETTING_BLOCK, WebsiteSettingsInfo::UNSYNCABLE,
+           /*allowlisted_schemes=*/{},
+           /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
+           WebsiteSettingsInfo::REQUESTING_AND_TOP_SCHEMEFUL_SITE_SCOPE,
+           WebsiteSettingsRegistry::ALL_PLATFORMS,
+           ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE,
+           ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+
   // Content settings that aren't used to store any data. TODO(raymes): use a
   // different mechanism rather than content settings to represent these.
   // Since nothing is stored in them, there is no real point in them being a
diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc
index f3855852..bee86e7 100644
--- a/components/content_settings/core/browser/content_settings_uma_util.cc
+++ b/components/content_settings/core/browser/content_settings_uma_util.cc
@@ -118,6 +118,7 @@
     {ContentSettingsType::COOKIE_CONTROLS_METADATA, 104},
     {ContentSettingsType::TPCD_SUPPORT, 105},
     {ContentSettingsType::AUTO_PICTURE_IN_PICTURE, 106},
+    {ContentSettingsType::TPCD_METADATA_GRANTS, 107},
 
     // As mentioned at the top, please don't forget to update ContentType in
     // enums.xml when you add entries here!
diff --git a/components/content_settings/core/browser/cookie_settings_unittest.cc b/components/content_settings/core/browser/cookie_settings_unittest.cc
index ec39218..3f2b0768 100644
--- a/components/content_settings/core/browser/cookie_settings_unittest.cc
+++ b/components/content_settings/core/browser/cookie_settings_unittest.cc
@@ -25,6 +25,7 @@
 #include "components/content_settings/core/test/content_settings_test_utils.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "extensions/buildflags/buildflags.h"
+#include "net/base/features.h"
 #include "net/cookies/cookie_constants.h"
 #include "net/cookies/cookie_setting_override.h"
 #include "net/cookies/cookie_util.h"
@@ -51,18 +52,41 @@
   bool storage_access_grant_eligible;
   bool top_level_storage_access_grant_eligible;
   bool eligible_for_3pcd_support;
+  // tpcd_metadata_grant_eligible aka the feature
+  // `net::features::kThirdPartyStoragePartitioning` is enabled.
+  bool tpcd_metadata_grant_eligible;
 };
 
 static constexpr TestCase kTestCases[] = {
-    {"disable_all", false, false, false},
-    {"disable_SAA_enable_TopLevel_disable_3PCD", false, true, false},
+    {"disable_all", false, false, false, false},
+    {"disable_SAA_disable_TopLevel_disable_3PCD_enable_metadata", false, false,
+     false, true},
+    {"disable_SAA_enable_TopLevel_disable_3PCD_enable_metadata", false, true,
+     false, true},
+    {"disable_SAA_enable_TopLevel_disable_3PCD_disable_metadata", false, true,
+     false, false},
 #if !BUILDFLAG(IS_IOS)
-    {"disable_SAA_enable_TopLevel_enable_3PCD", false, true, true},
-    {"disable_SAA_disable_TopLevel_enable_3PCD", false, false, true},
-    {"enable_SAA_disable_TopLevel_disable_3PCD", true, false, false},
-    {"enable_SAA_disable_TopLevel_enable_3PCD", true, false, true},
-    {"enable_SAA_enable_TopLevel_disable_3PCD", true, true, false},
-    {"enable_all", true, true, true},
+    {"disable_SAA_enable_TopLevel_enable_3PCD_enable_metadata", false, true,
+     true, true},
+    {"disable_SAA_disable_TopLevel_enable_3PCD_enable_metadata", false, false,
+     true, true},
+    {"enable_SAA_disable_TopLevel_disable_3PCD_enable_metadata", true, false,
+     false, true},
+    {"enable_SAA_disable_TopLevel_enable_3PCD_enable_metadata", true, false,
+     true, true},
+    {"enable_SAA_enable_TopLevel_disable_3PCD_enable_metadata", true, true,
+     false, true},
+    {"disable_SAA_enable_TopLevel_enable_3PCD_disable_metadata", false, true,
+     true, false},
+    {"disable_SAA_disable_TopLevel_enable_3PCD_disable_metadata", false, false,
+     true, false},
+    {"enable_SAA_disable_TopLevel_disable_3PCD_disable_metadata", true, false,
+     false, false},
+    {"enable_SAA_disable_TopLevel_enable_3PCD_disable_metadata", true, false,
+     true, false},
+    {"enable_SAA_enable_TopLevel_disable_3PCD_disable_metadata", true, true,
+     false, false},
+    {"enable_all", true, true, true, true},
 #endif
 };
 }  // namespace
@@ -129,6 +153,7 @@
     std::vector<base::test::FeatureRef> disabled_features;
     enabled_features.push_back(
         {content_settings::features::kUserBypassUI, {{"expiration", "0d"}}});
+    enabled_features.push_back({net::features::kTpcdMetadataGrants, {}});
 #if BUILDFLAG(IS_IOS)
     enabled_features.push_back({kImprovedCookieControls, {}});
     disabled_features.push_back(net::features::kTpcdSupportSettings);
@@ -180,6 +205,10 @@
     return GetParam().eligible_for_3pcd_support;
   }
 
+  bool Is3pcdMetadataGrantEligible() const {
+    return GetParam().tpcd_metadata_grant_eligible;
+  }
+
   net::CookieSettingOverrides GetCookieSettingOverrides() const {
     net::CookieSettingOverrides overrides;
     if (IsStorageAccessGrantEligible()) {
@@ -192,6 +221,9 @@
     if (Is3pcdSupportEligible()) {
       overrides.Put(net::CookieSettingOverride::k3pcdSupport);
     }
+    if (Is3pcdMetadataGrantEligible()) {
+      overrides.Put(net::CookieSettingOverride::k3pcdMetadataGrantEligible);
+    }
     return overrides;
   }
 
@@ -218,6 +250,13 @@
                                    : CONTENT_SETTING_BLOCK;
   }
 
+  // Assumes that cookie access would be blocked if not for a
+  // `net::CookieSettingOverride::k3pcdMetadataGrantEligible` override.
+  ContentSetting SettingWith3pcdMetadataGrantEligibleOverride() const {
+    return Is3pcdMetadataGrantEligible() ? CONTENT_SETTING_ALLOW
+                                         : CONTENT_SETTING_BLOCK;
+  }
+
   // The cookie access result would be blocked if not for a Storage Access API
   // grant.
   net::cookie_util::StorageAccessResult
@@ -255,6 +294,17 @@
     return net::cookie_util::StorageAccessResult::ACCESS_BLOCKED;
   }
 
+  // The storage access result would be blocked if not for a
+  // `net::CookieSettingOverride::k3pcdMetadataGrantEligible` override.
+  net::cookie_util::StorageAccessResult
+  BlockedStorageAccessResultWith3pcdMetadataGrantOverride() const {
+    if (Is3pcdMetadataGrantEligible()) {
+      return net::cookie_util::StorageAccessResult::
+          ACCESS_ALLOWED_3PCD_METADATA_GRANT;
+    }
+    return net::cookie_util::StorageAccessResult::ACCESS_BLOCKED;
+  }
+
  protected:
   bool ShouldDeleteCookieOnExit(const std::string& domain, bool is_https) {
     return cookie_settings_->ShouldDeleteCookieOnExit(
@@ -1269,8 +1319,8 @@
       kAllowedRequestsHistogram,
       static_cast<int>(BlockedStorageAccessResultWithTopLevelSaaOverride()), 1);
 
-  // Invalid pair the |top_level_url| granting access to |url| is now
-  // being loaded under |url| as the top level url.
+  // Invalid pair the |top_level_url| granting access to |url| is now being
+  // loaded under |url| as the top level url.
   EXPECT_EQ(cookie_settings_->GetCookieSetting(
                 top_level_url, url, GetCookieSettingOverrides(), nullptr),
             CONTENT_SETTING_BLOCK);
@@ -1411,8 +1461,49 @@
       kAllowedRequestsHistogram,
       static_cast<int>(BlockedStorageAccessResultWith3pcdSupportOverride()), 1);
 
-  // Invalid pair the |top_level_url| granting access to |url| is now
-  // being loaded under |url| as the top level url.
+  // Invalid pair the |top_level_url| granting access to |url| is now being
+  // loaded under |url| as the top level url.
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(
+                top_level_url, url, GetCookieSettingOverrides(), nullptr),
+            CONTENT_SETTING_BLOCK);
+
+  // Invalid pairs where a |third_url| is used.
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(
+                url, third_url, GetCookieSettingOverrides(), nullptr),
+            CONTENT_SETTING_BLOCK);
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(
+                third_url, top_level_url, GetCookieSettingOverrides(), nullptr),
+            CONTENT_SETTING_BLOCK);
+}
+
+TEST_P(CookieSettingsTest, GetCookieSetting3pcdMetadataGrants) {
+  const GURL top_level_url(kFirstPartySite);
+  const GURL url(kAllowedSite);
+  const GURL third_url(kBlockedSite);
+
+  base::HistogramTester histogram_tester;
+  histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 0);
+
+  prefs_.SetInteger(prefs::kCookieControlsMode,
+                    static_cast<int>(CookieControlsMode::kBlockThirdParty));
+
+  settings_map_->SetContentSettingCustomScope(
+      ContentSettingsPattern::FromURLNoWildcard(url),
+      ContentSettingsPattern::FromURLNoWildcard(top_level_url),
+      ContentSettingsType::TPCD_METADATA_GRANTS, CONTENT_SETTING_ALLOW);
+
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(
+                url, top_level_url, GetCookieSettingOverrides(), nullptr),
+            SettingWith3pcdMetadataGrantEligibleOverride());
+  histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
+  histogram_tester.ExpectBucketCount(
+      kAllowedRequestsHistogram,
+      static_cast<int>(
+          BlockedStorageAccessResultWith3pcdMetadataGrantOverride()),
+      1);
+
+  // Invalid pair the |top_level_url| granting access to |url| is now being
+  // loaded under |url| as the top level url.
   EXPECT_EQ(cookie_settings_->GetCookieSetting(
                 top_level_url, url, GetCookieSettingOverrides(), nullptr),
             CONTENT_SETTING_BLOCK);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
index 9b2546f..30ad7c86 100644
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -344,13 +344,18 @@
   // Stores per origin metadata for cookie controls.
   COOKIE_CONTROLS_METADATA,
 
-  // Setting for supporting 3PCD.
+  // Content Setting for 3PC accesses granted via 3PC deprecation trial.
   TPCD_SUPPORT,
 
   // Content setting used to indicate whether entering picture-in-picture
   // automatically should be enabled.
   AUTO_PICTURE_IN_PICTURE,
 
+  // Content Setting for 3PC accesses granted by metadata delivered via the
+  // component updater service. This type will only be used when
+  // `net::features::kTpcdMetadataGrants` is enabled.
+  TPCD_METADATA_GRANTS,
+
   NUM_TYPES,
 };
 
diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc
index d24f6bf..0a4922d 100644
--- a/components/content_settings/core/common/cookie_settings_base.cc
+++ b/components/content_settings/core/common/cookie_settings_base.cc
@@ -193,6 +193,12 @@
          overrides.Has(net::CookieSettingOverride::k3pcdSupport);
 }
 
+bool CookieSettingsBase::ShouldConsider3pcdMetadataGrantsSettings(
+    net::CookieSettingOverrides overrides) const {
+  return base::FeatureList::IsEnabled(net::features::kTpcdMetadataGrants) &&
+         overrides.Has(net::CookieSettingOverride::k3pcdMetadataGrantEligible);
+}
+
 bool CookieSettingsBase::ShouldConsiderStorageAccessGrants(
     net::CookieSettingOverrides overrides) const {
   return overrides.Has(net::CookieSettingOverride::kStorageAccessGrantEligible);
@@ -211,6 +217,8 @@
     // TODO(crbug.com/1466156): Revisit whether the global setting/pref should
     // be checked here.
     overrides.Put(net::CookieSettingOverride::k3pcdSupport);
+
+    overrides.Put(net::CookieSettingOverride::k3pcdMetadataGrantEligible);
   }
   return overrides;
 }
@@ -298,6 +306,15 @@
         net::cookie_util::StorageAccessResult::ACCESS_ALLOWED_3PCD);
   }
 
+  if (block_third && ShouldConsider3pcdMetadataGrantsSettings(overrides) &&
+      GetContentSetting(url, first_party_url,
+                        ContentSettingsType::TPCD_METADATA_GRANTS) ==
+          CONTENT_SETTING_ALLOW) {
+    block_third = false;
+    FireStorageAccessHistogram(net::cookie_util::StorageAccessResult::
+                                   ACCESS_ALLOWED_3PCD_METADATA_GRANT);
+  }
+
   if (!IsAllowed(setting) || block_third) {
     FireStorageAccessHistogram(
         net::cookie_util::StorageAccessResult::ACCESS_BLOCKED);
diff --git a/components/content_settings/core/common/cookie_settings_base.h b/components/content_settings/core/common/cookie_settings_base.h
index 566f5b3..e813ebf9 100644
--- a/components/content_settings/core/common/cookie_settings_base.h
+++ b/components/content_settings/core/common/cookie_settings_base.h
@@ -215,6 +215,9 @@
   bool ShouldConsider3pcdSupportSettings(
       net::CookieSettingOverrides overrides) const;
 
+  bool ShouldConsider3pcdMetadataGrantsSettings(
+      net::CookieSettingOverrides overrides) const;
+
   // Returns a set of overrides that includes Storage Access API and Top-Level
   // Storage Access API overrides iff the config booleans indicate that Storage
   // Access API and Top-Level Storage Access API should unlock access to DOM
@@ -260,9 +263,8 @@
  private:
   // Returns a content setting for the requested parameters and populates |info|
   // if not null. Implementations might only implement a subset of all
-  // ContentSettingsTypes. Currently only COOKIES,
-  // TPCD_SUPPORT, STORAGE_ACCESS and TOP_LEVEL_STORAGE_ACCESS
-  // are required.
+  // ContentSettingsTypes. Currently only COOKIES, TPCD_SUPPORT, STORAGE_ACCESS,
+  // TPCD_METADATA_GRANTS, and TOP_LEVEL_STORAGE_ACCESS are required.
   virtual ContentSetting GetContentSetting(
       const GURL& primary_url,
       const GURL& secondary_url,
diff --git a/components/content_settings/core/common/cookie_settings_base_unittest.cc b/components/content_settings/core/common/cookie_settings_base_unittest.cc
index 86ef654..9726d0a 100644
--- a/components/content_settings/core/common/cookie_settings_base_unittest.cc
+++ b/components/content_settings/core/common/cookie_settings_base_unittest.cc
@@ -272,6 +272,9 @@
       IsStoragePartitioned());
   EXPECT_EQ(overrides.Has(net::CookieSettingOverride::k3pcdSupport),
             IsStoragePartitioned());
+  EXPECT_EQ(
+      overrides.Has(net::CookieSettingOverride::k3pcdMetadataGrantEligible),
+      IsStoragePartitioned());
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn
index f4b77eef..a0c30ad 100644
--- a/components/omnibox/browser/BUILD.gn
+++ b/components/omnibox/browser/BUILD.gn
@@ -466,6 +466,7 @@
     ":buildflags",
     "//build:chromeos_buildflags",
     "//components/dom_distiller/core:core",
+    "//components/safe_browsing/core/common:common",
     "//components/search_engines",
     "//components/strings",
     "//components/url_formatter",
@@ -842,6 +843,7 @@
     "//components/optimization_guide/core:test_support",
     "//components/optimization_guide/proto:optimization_guide_proto",
     "//components/prefs:test_support",
+    "//components/safe_browsing/core/common:common",
     "//components/search",
     "//components/search_engines",
     "//components/search_engines:test_support",
diff --git a/components/omnibox/browser/DEPS b/components/omnibox/browser/DEPS
index 69f75ae..40e361d 100644
--- a/components/omnibox/browser/DEPS
+++ b/components/omnibox/browser/DEPS
@@ -27,6 +27,7 @@
   "+components/prefs",
   "+components/query_parser",
   "+components/query_tiles",
+  "+components/safe_browsing/core/common",
   "+components/search",
   "+components/search_engines",
   "+components/security_state",
diff --git a/components/omnibox/browser/location_bar_model_impl.cc b/components/omnibox/browser/location_bar_model_impl.cc
index a1321530..86c9202 100644
--- a/components/omnibox/browser/location_bar_model_impl.cc
+++ b/components/omnibox/browser/location_bar_model_impl.cc
@@ -214,7 +214,8 @@
 
   return location_bar_model::GetSecurityVectorIcon(
       GetSecurityLevel(),
-      delegate_->ShouldUseUpdatedConnectionSecurityIndicators());
+      delegate_->ShouldUseUpdatedConnectionSecurityIndicators(),
+      delegate_->GetVisibleSecurityState()->malicious_content_status);
 }
 
 std::u16string LocationBarModelImpl::GetSecureDisplayText() const {
diff --git a/components/omnibox/browser/location_bar_model_util.cc b/components/omnibox/browser/location_bar_model_util.cc
index 24f1109..a879a17 100644
--- a/components/omnibox/browser/location_bar_model_util.cc
+++ b/components/omnibox/browser/location_bar_model_util.cc
@@ -9,6 +9,7 @@
 #include "build/build_config.h"
 #include "components/omnibox/browser/buildflags.h"
 #include "components/omnibox/common/omnibox_features.h"
+#include "components/safe_browsing/core/common/features.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/gfx/vector_icon_types.h"
 
@@ -21,7 +22,8 @@
 
 const gfx::VectorIcon& GetSecurityVectorIcon(
     security_state::SecurityLevel security_level,
-    bool use_updated_connection_security_indicators) {
+    bool use_updated_connection_security_indicators,
+    security_state::MaliciousContentStatus malicious_content_status) {
 #if (!BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !BUILDFLAG(IS_IOS)
   switch (security_level) {
     case security_state::NONE:
@@ -36,10 +38,22 @@
                  ? vector_icons::kBusinessChromeRefreshIcon
                  : vector_icons::kBusinessIcon;
     case security_state::WARNING:
-    case security_state::DANGEROUS:
       return IsChromeRefreshIconsEnabled()
                  ? vector_icons::kNotSecureWarningChromeRefreshIcon
                  : vector_icons::kNotSecureWarningIcon;
+    case security_state::DANGEROUS:
+      if (base::FeatureList::IsEnabled(
+              safe_browsing::kRedInterstitialFacelift) &&
+          malicious_content_status !=
+              security_state::MALICIOUS_CONTENT_STATUS_BILLING) {
+        return IsChromeRefreshIconsEnabled()
+                   ? vector_icons::kDangerousChromeRefreshIcon
+                   : vector_icons::kDangerousIcon;
+      }
+      return IsChromeRefreshIconsEnabled()
+                 ? vector_icons::kNotSecureWarningChromeRefreshIcon
+                 : vector_icons::kNotSecureWarningIcon;
+
     case security_state::SECURITY_LEVEL_COUNT:
       NOTREACHED();
       return IsChromeRefreshIconsEnabled() ? omnibox::kHttpChromeRefreshIcon
diff --git a/components/omnibox/browser/location_bar_model_util.h b/components/omnibox/browser/location_bar_model_util.h
index 3ccc730..cf3a8c1 100644
--- a/components/omnibox/browser/location_bar_model_util.h
+++ b/components/omnibox/browser/location_bar_model_util.h
@@ -19,7 +19,8 @@
 // indicates a secure connection.
 const gfx::VectorIcon& GetSecurityVectorIcon(
     security_state::SecurityLevel security_level,
-    bool use_updated_connection_security_indicators);
+    bool use_updated_connection_security_indicators,
+    security_state::MaliciousContentStatus malicious_content_status);
 
 // Helper function to enable the omnibox chrome refresh icons based on the
 // feature flags turned on. This is a duplicate of
diff --git a/components/omnibox/browser/location_bar_model_util_unittest.cc b/components/omnibox/browser/location_bar_model_util_unittest.cc
index 98d350b..e23730308 100644
--- a/components/omnibox/browser/location_bar_model_util_unittest.cc
+++ b/components/omnibox/browser/location_bar_model_util_unittest.cc
@@ -4,7 +4,9 @@
 
 #include "components/omnibox/browser/location_bar_model_util.h"
 
+#include "base/test/scoped_feature_list.h"
 #include "components/omnibox/browser/vector_icons.h"
+#include "components/safe_browsing/core/common/features.h"
 #include "components/vector_icons/vector_icons.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/vector_icon_types.h"
@@ -12,14 +14,18 @@
 TEST(LocationBarModelUtilTest, GetSecurityVectorIconWithNoneLevel) {
   const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
       security_state::SecurityLevel::NONE,
-      /*use_updated_connection_security_indicators=*/false);
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_NONE);
   EXPECT_EQ(icon.name, omnibox::kHttpIcon.name);
 }
 
 TEST(LocationBarModelUtilTest, GetSecurityVectorIconWithSecureLevel) {
   const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
       security_state::SecurityLevel::SECURE,
-      /*use_updated_connection_security_indicators=*/false);
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_NONE);
   EXPECT_EQ(icon.name, vector_icons::kHttpsValidIcon.name);
 }
 
@@ -27,20 +33,39 @@
      GetSecurityVectorIconWithSecureWithPolicyInstalledCertLevel) {
   const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
       security_state::SecurityLevel::SECURE_WITH_POLICY_INSTALLED_CERT,
-      /*use_updated_connection_security_indicators=*/false);
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_NONE);
   EXPECT_EQ(icon.name, vector_icons::kBusinessIcon.name);
 }
 
 TEST(LocationBarModelUtilTest, GetSecurityVectorIconWithDangerousLevel) {
+  base::test::ScopedFeatureList scoped_feature_list_;
+  scoped_feature_list_.InitAndEnableFeature(
+      safe_browsing::kRedInterstitialFacelift);
   const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
       security_state::SecurityLevel::DANGEROUS,
-      /*use_updated_connection_security_indicators=*/false);
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING);
+  EXPECT_EQ(icon.name, vector_icons::kDangerousIcon.name);
+}
+
+TEST(LocationBarModelUtilTest,
+     GetSecurityVectorIconBillingInterstitialWithDangerousLevel) {
+  const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
+      security_state::SecurityLevel::DANGEROUS,
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_BILLING);
   EXPECT_EQ(icon.name, vector_icons::kNotSecureWarningIcon.name);
 }
 
 TEST(LocationBarModelUtilTest, GetSecurityVectorIconWithWarningLevel) {
   const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon(
       security_state::SecurityLevel::WARNING,
-      /*use_updated_connection_security_indicators=*/false);
+      /*use_updated_connection_security_indicators=*/false,
+      /*malicious_content_status=*/
+      security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING);
   EXPECT_EQ(icon.name, vector_icons::kNotSecureWarningIcon.name);
 }
diff --git a/components/policy/resources/templates/policies.yaml b/components/policy/resources/templates/policies.yaml
index 0223faf..15f284f 100644
--- a/components/policy/resources/templates/policies.yaml
+++ b/components/policy/resources/templates/policies.yaml
@@ -1146,6 +1146,7 @@
   1145: MicrosoftOfficeCloudUpload
   1146: GoogleWorkspaceCloudUpload
   1147: ShortcutCustomizationAllowed
+  1148: MicrosoftOneDriveMount
 atomic_groups:
   1: Homepage
   2: RemoteAccess
diff --git a/components/policy/resources/templates/policy_definitions/Drive/MicrosoftOneDriveMount.yaml b/components/policy/resources/templates/policy_definitions/Drive/MicrosoftOneDriveMount.yaml
new file mode 100644
index 0000000..27577c3f
--- /dev/null
+++ b/components/policy/resources/templates/policy_definitions/Drive/MicrosoftOneDriveMount.yaml
@@ -0,0 +1,42 @@
+caption: Configures the mounting of <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>
+default: allowed
+default_for_enterprise_users: disallowed
+desc: |-
+  This policy allows the admins to configure the mounting of <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>.
+
+  Setting the policy to '<ph name="ALLOWED_NAME">allowed</ph>' lets the user set up <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph> if they wish to.
+  After completing the setup process, <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph> will be mounted in the file manager.
+
+  Setting the policy to '<ph name="DISALLOWED_NAME">disallowed</ph>' prohibits the user from setting up <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>.
+
+  Setting the policy to '<ph name="AUTOMATED_NAME">automated</ph>' attempts to set up <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph> automatically. In case of failure it falls back to showing the setup flow.
+
+  Leaving the policy unset is functionally equivalent to setting it to '<ph name="ALLOWED_NAME">allowed</ph>' for regular users; for enterprise users unset policy defaults to '<ph name="DISALLOWED_NAME">disallowed</ph>'.
+example_value: allowed
+features:
+  dynamic_refresh: true
+  per_profile: true
+items:
+- caption: Allow setup of <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>
+  name: allowed
+  value: allowed
+- caption: Disallow setup of <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>
+  name: disallowed
+  value: disallowed
+- caption: Automate setup of <ph name="MICROSOFT_ONE_DRIVE_NAME">Microsoft OneDrive</ph>
+  name: automated
+  value: automated
+owners:
+- simonha@google.com
+- file://ui/file_manager/OWNERS
+- cros-commercial-clippy-eng@google.com
+schema:
+  enum:
+  - allowed
+  - disallowed
+  - automated
+  type: string
+future_on:
+- chrome_os
+tags: []
+type: string-enum
diff --git a/components/policy/test/data/policy_test_cases.json b/components/policy/test/data/policy_test_cases.json
index 8f3b301..f470f8c 100644
--- a/components/policy/test/data/policy_test_cases.json
+++ b/components/policy/test/data/policy_test_cases.json
@@ -22135,6 +22135,52 @@
       }
     ]
   },
+  "MicrosoftOneDriveMount": {
+    "os": [
+      "chromeos_ash",
+      "chromeos_lacros"
+    ],
+    "policy_pref_mapping_tests": [
+      {
+        "policies": {},
+        "prefs": {
+          "filebrowser.office.microsoft_one_drive_mount": {
+            "value": "disallowed"
+          }
+        }
+      },
+      {
+        "policies": {
+          "MicrosoftOneDriveMount": "allowed"
+        },
+        "prefs": {
+          "filebrowser.office.microsoft_one_drive_mount": {
+            "value": "allowed"
+          }
+        }
+      },
+      {
+        "policies": {
+          "MicrosoftOneDriveMount": "disallowed"
+        },
+        "prefs": {
+          "filebrowser.office.microsoft_one_drive_mount": {
+            "value": "disallowed"
+          }
+        }
+      },
+      {
+        "policies": {
+          "MicrosoftOneDriveMount": "automated"
+        },
+        "prefs": {
+          "filebrowser.office.microsoft_one_drive_mount": {
+            "value": "automated"
+          }
+        }
+      }
+    ]
+  },
   "MicrosoftOfficeCloudUpload": {
     "os": [
       "chromeos_ash",
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
index 495737ac..76ef875 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
@@ -240,6 +240,8 @@
                         const gfx::Size& minimum_content_size) override;
   void SetBounds(const gfx::Rect& new_bounds,
                  const gfx::Size& minimum_content_size) override;
+  void SetSize(const gfx::Size& new_size,
+               const gfx::Size& minimum_content_size) override;
   void SetSizeAndCenter(const gfx::Size& content_size,
                         const gfx::Size& minimum_content_size) override;
   void SetVisibilityState(
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
index 15581fc..5855f127 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
@@ -564,6 +564,16 @@
   }
 }
 
+void NativeWidgetNSWindowBridge::SetSize(
+    const gfx::Size& new_size,
+    const gfx::Size& minimum_content_size) {
+  // Ensure the top-left corner stays in-place (rather than the bottom-left,
+  // which -[NSWindow setContentSize:] would do).
+  gfx::Rect new_window_bounds = gfx::ScreenRectFromNSRect([window_ frame]);
+  new_window_bounds.set_size(new_size);
+  SetBounds(new_window_bounds, minimum_content_size);
+}
+
 void NativeWidgetNSWindowBridge::SetSizeAndCenter(
     const gfx::Size& content_size,
     const gfx::Size& minimum_content_size) {
diff --git a/components/remote_cocoa/common/native_widget_ns_window.mojom b/components/remote_cocoa/common/native_widget_ns_window.mojom
index 8ab4aa8..f7a677a22 100644
--- a/components/remote_cocoa/common/native_widget_ns_window.mojom
+++ b/components/remote_cocoa/common/native_widget_ns_window.mojom
@@ -164,6 +164,12 @@
   SetBounds(gfx.mojom.Rect new_bounds,
             gfx.mojom.Size minimum_content_size);
 
+  // Specify new size for the window via |new_size|. The top-left corner of the
+  // window will be kept in place. The size of the window will be expanded so
+  // that the content size will be at least |minimum_content_size|.
+  SetSize(gfx.mojom.Size new_size,
+          gfx.mojom.Size minimum_content_size);
+
   // Centers the window and sets its content size to |content_size|. The size of
   // the window will be expanded so that the content size will be at least
   // |minimum_content_size|.
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index fd4a325..327cab6 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -238,6 +238,10 @@
              "RealTimeUrlFilteringForEnterprise",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+BASE_FEATURE(kRedInterstitialFacelift,
+             "RedInterstitialFacelift",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kReferrerChainParameters,
              "SafeBrowsingReferrerChainParameters",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -391,6 +395,7 @@
     {&kMmapSafeBrowsingDatabase, true},
     {&kNestedArchives, true},
     {&kRealTimeUrlFilteringForEnterprise, true},
+    {&kRedInterstitialFacelift, false},
     {&kSafeBrowsingCsbrrNewDownloadTrigger, true},
     {&kSafeBrowsingLookupMechanismExperiment, true},
     {&kSafeBrowsingRemoveCookiesInAuthRequests, true},
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h
index d159931..2668b764 100644
--- a/components/safe_browsing/core/common/features.h
+++ b/components/safe_browsing/core/common/features.h
@@ -226,6 +226,9 @@
 // managed browsers.
 BASE_DECLARE_FEATURE(kRealTimeUrlFilteringForEnterprise);
 
+// Controls whether we are using red interstitial facelift updates.
+BASE_DECLARE_FEATURE(kRedInterstitialFacelift);
+
 // Enables modifying key parameters on the navigation event collection used to
 // populate referrer chains.
 BASE_DECLARE_FEATURE(kReferrerChainParameters);
diff --git a/components/search/ntp_features.cc b/components/search/ntp_features.cc
index a99a42b..b508d73 100644
--- a/components/search/ntp_features.cc
+++ b/components/search/ntp_features.cc
@@ -158,6 +158,11 @@
              "NtpModulesOrder",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Dummy feature to set param "NtpModulesMaxColumnCountParam".
+BASE_FEATURE(kNtpModulesMaxColumnCount,
+             "NtpModulesMaxColumnCount",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // If true, displays a horizontal scrollbar on overflowing modules.
 BASE_FEATURE(kNtpModulesOverflowScrollbar,
              "NtpModulesOverflowScrollbar",
@@ -351,6 +356,7 @@
     "NtpModulesEligibleForHappinessTrackingSurveyParam";
 const char kNtpModulesLoadTimeoutMillisecondsParam[] =
     "NtpModulesLoadTimeoutMillisecondsParam";
+const char kNtpModulesMaxColumnCountParam[] = "NtpModulesMaxColumnCountParam";
 const char kNtpModulesOrderParam[] = "NtpModulesOrderParam";
 const char kNtpChromeCartModuleDataParam[] = "NtpChromeCartModuleDataParam";
 const char kNtpChromeCartModuleAbandonedCartDiscountParam[] =
@@ -415,6 +421,11 @@
   return base::Milliseconds(param_value_as_int);
 }
 
+int GetModulesMaxColumnCount() {
+  return base::GetFieldTrialParamByFeatureAsInt(
+      kNtpModulesMaxColumnCount, kNtpModulesMaxColumnCountParam, 3);
+}
+
 std::vector<std::string> GetModulesOrder() {
   return base::SplitString(base::GetFieldTrialParamValueByFeature(
                                kNtpModulesOrder, kNtpModulesOrderParam),
diff --git a/components/search/ntp_features.h b/components/search/ntp_features.h
index 0ff5edfe..3b72f17 100644
--- a/components/search/ntp_features.h
+++ b/components/search/ntp_features.h
@@ -181,6 +181,10 @@
 // Returns the timeout after which the load of a module should be aborted.
 base::TimeDelta GetModulesLoadTimeout();
 
+// Returns the maximum number of columns to show on the redesigned modules UI
+// experience.
+int GetModulesMaxColumnCount();
+
 // Returns a list of module IDs ordered by how they should appear on the NTP.
 std::vector<std::string> GetModulesOrder();
 }  // namespace ntp_features
diff --git a/components/security_interstitials/core/browser/resources/images/1x/stop_sign_white.svg b/components/security_interstitials/core/browser/resources/images/1x/stop_sign_white.svg
new file mode 100644
index 0000000..7e4b8ba
--- /dev/null
+++ b/components/security_interstitials/core/browser/resources/images/1x/stop_sign_white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="#FFF"><path d="M330-120 120-330v-300l210-210h300l210 210v300L630-120H330Zm36-190 114-114 114 114 56-56-114-114 114-114-56-56-114 114-114-114-56 56 114 114-114 114 56 56Z"/></svg>
\ No newline at end of file
diff --git a/components/security_interstitials/core/browser/resources/images/2x/stop_sign_white.svg b/components/security_interstitials/core/browser/resources/images/2x/stop_sign_white.svg
new file mode 100644
index 0000000..febbe09
--- /dev/null
+++ b/components/security_interstitials/core/browser/resources/images/2x/stop_sign_white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48" fill="#FFF"><path d="M330-120 120-330v-300l210-210h300l210 210v300L630-120H330Zm27-195 123-123 123 123 42-42-123-123 123-123-42-42-123 123-123-123-42 42 123 123-123 123 42 42Z"/></svg>
\ No newline at end of file
diff --git a/components/security_interstitials/core/browser/resources/images/light_bulb_red.svg b/components/security_interstitials/core/browser/resources/images/light_bulb_red.svg
new file mode 100644
index 0000000..21505d2f
--- /dev/null
+++ b/components/security_interstitials/core/browser/resources/images/light_bulb_red.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#410E0B"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1-.85.6V16h-4v-2.3l-.85-.6A4.997 4.997 0 0 1 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"/></svg>
\ No newline at end of file
diff --git a/components/security_interstitials/core/browser/resources/interstitial_large.js b/components/security_interstitials/core/browser/resources/interstitial_large.js
index 9eb8876d..a35d76ec 100644
--- a/components/security_interstitials/core/browser/resources/interstitial_large.js
+++ b/components/security_interstitials/core/browser/resources/interstitial_large.js
@@ -101,6 +101,10 @@
   const hidePrimaryButton = loadTimeData.getBoolean('hide_primary_button');
   const showRecurrentErrorParagraph = loadTimeData.getBoolean(
     'show_recurrent_error_paragraph');
+  const shouldUseNewDangerIcon =
+      loadTimeData.valueExists('shouldUseNewDangerIcon') ?
+      loadTimeData.getBoolean('shouldUseNewDangerIcon') :
+      false;
 
   const body = document.querySelector('#body');
   if (ssl || blockedInterception) {
@@ -281,6 +285,13 @@
     console.warn(loadTimeData.getString('lookalikeConsoleMessage'));
   }
 
+  if (shouldUseNewDangerIcon) {
+    // If red interstitial facelift is enabled, use new stop sign icons.
+    if (document.getElementById('icon')) {
+      document.getElementById('icon').classList.add('new-icon');
+    }
+  }
+
   preventDefaultOnPoundLinkClicks();
   setupExtendedReportingCheckbox();
   setupEnhancedProtectionMessage();
diff --git a/components/security_interstitials/core/browser/resources/interstitial_safebrowsing.css b/components/security_interstitials/core/browser/resources/interstitial_safebrowsing.css
index d8e1e4b..8411e98 100644
--- a/components/security_interstitials/core/browser/resources/interstitial_safebrowsing.css
+++ b/components/security_interstitials/core/browser/resources/interstitial_safebrowsing.css
@@ -8,8 +8,13 @@
   --google-red-600: rgb(217, 48, 37);
   --google-red-500: rgb(234, 67, 53);
   --google-red-100: rgb(250, 210, 207);
+  --google-red-90: rgb(249, 222, 220);
   --google-red-50: rgb(252, 232, 230);
-  background-color: var(--google-red-600);
+  --google-red-40: rgb(179, 38, 30);
+  --google-red-10: rgb(65, 14, 11);
+  --google-primary-40: rgb(11, 87, 208);
+  --google-primary-90: rgb(211, 227, 253);
+  background-color: var(--google-red-40);
   color: white;
 }
 
@@ -21,7 +26,7 @@
 .safe-browsing button {
   background: white;
   border-color: white;
-  color: var(--google-red-700);
+  color: var(--google-primary-40);
 }
 
 .safe-browsing button:active {
@@ -30,12 +35,12 @@
 }
 
 .safe-browsing button:hover {
-  background: var(--google-red-50);
+  background: var(--google-primary-90);
 }
 
 .safe-browsing .secondary-button {
-  background-color: var(--google-red-600);
-  border-color: var(--google-red-100);
+  background-color: var(--google-red-40);
+  border-color: white;
   color: white;
 }
 
@@ -56,6 +61,14 @@
   background-image: -webkit-image-set(
       url(images/1x/triangle_white.png) 1x,
       url(images/2x/triangle_white.png) 2x);
+  color: var(--google-red-40);
+}
+
+.safe-browsing .new-icon {
+  background-image: -webkit-image-set(
+      url(images/1x/stop_sign_white.svg) 1x,
+      url(images/2x/stop_sign_white.svg) 2x);
+  color: var(--google-red-40);
 }
 
 @media (min-width: 240px) and (max-width: 420px) and
@@ -63,8 +76,8 @@
        (min-width: 421px) and (min-height: 240px) and
        (max-height: 560px) {
   body.safe-browsing .nav-wrapper {
-    background: var(--google-red-600);
-    box-shadow: 0 -12px 24px var(--google-red-600);
+    background: var(--google-red-40);
+    box-shadow: 0 -12px 24px var(--google-red-40);
   }
 }
 
@@ -75,10 +88,10 @@
 }
 
 .safe-browsing-enhanced-protection-message {
-  background-color: rgba(0, 0, 0, 0.2); /* black 20% opacity */
-  border: 1px solid rgba(0, 0, 0, 0.3); /* black 30% opacity */
+  background-color: var(--google-red-90);
+  color: var(--google-red-10);
 }
 
 .safe-browsing-enhanced-protection-message .icon {
-  background-image: url(images/light_bulb_white.svg);
+  background-image: url(images/light_bulb_red.svg);
 }
diff --git a/components/security_interstitials/core/common/resources/interstitial_common.css b/components/security_interstitials/core/common/resources/interstitial_common.css
index 7b6666d..1fd30ea8 100644
--- a/components/security_interstitials/core/common/resources/interstitial_common.css
+++ b/components/security_interstitials/core/common/resources/interstitial_common.css
@@ -4,7 +4,7 @@
 
 button {
   border: 0;
-  border-radius: 4px;
+  border-radius: 20px;
   box-sizing: border-box;
   color: var(--primary-button-text-color);
   cursor: pointer;
@@ -145,12 +145,16 @@
 }
 
 #enhanced-protection-message {
-  border-radius: 4px;
+  border-radius: 20px;
   font-size: 1em;
   margin-top: 32px;
   padding: 10px 5px;
 }
 
+#enhanced-protection-message a {
+  color: var(--google-red-10);
+}
+
 #enhanced-protection-message label {
   display: grid;
   grid-template-columns: 2.5em 1fr;
diff --git a/components/security_interstitials/core/safe_browsing_loud_error_ui.cc b/components/security_interstitials/core/safe_browsing_loud_error_ui.cc
index e63efb4..4e0a91d 100644
--- a/components/security_interstitials/core/safe_browsing_loud_error_ui.cc
+++ b/components/security_interstitials/core/safe_browsing_loud_error_ui.cc
@@ -121,6 +121,11 @@
       break;
   }
 
+  // Change UI based on whether the facelift feature is enabled.
+  load_time_data.Set(
+      "shouldUseNewDangerIcon",
+      base::FeatureList::IsEnabled(safe_browsing::kRedInterstitialFacelift));
+
   // Not used by this interstitial.
   load_time_data.Set("recurrentErrorParagraph", "");
   load_time_data.Set("show_recurrent_error_paragraph", false);
diff --git a/components/signin/public/base/device_id_helper.cc b/components/signin/public/base/device_id_helper.cc
index 1b1e64c..3af1749 100644
--- a/components/signin/public/base/device_id_helper.cc
+++ b/components/signin/public/base/device_id_helper.cc
@@ -17,13 +17,12 @@
 #if !BUILDFLAG(IS_CHROMEOS_ASH)
 
 std::string GetSigninScopedDeviceId(PrefService* prefs) {
-  std::string signin_scoped_device_id =
-      prefs->GetString(prefs::kGoogleServicesSigninScopedDeviceId);
-  if (signin_scoped_device_id.empty()) {
-    // If device_id doesn't exist then generate new and save in prefs.
-    signin_scoped_device_id = RecreateSigninScopedDeviceId(prefs);
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kDisableSigninScopedDeviceId)) {
+    return std::string();
   }
-  return signin_scoped_device_id;
+
+  return GetOrCreateScopedDeviceId(prefs);
 }
 
 std::string RecreateSigninScopedDeviceId(PrefService* prefs) {
@@ -38,6 +37,16 @@
   return base::Uuid::GenerateRandomV4().AsLowercaseString();
 }
 
+std::string GetOrCreateScopedDeviceId(PrefService* prefs) {
+  std::string signin_scoped_device_id =
+      prefs->GetString(prefs::kGoogleServicesSigninScopedDeviceId);
+  if (signin_scoped_device_id.empty()) {
+    // If device_id doesn't exist then generate new and save in prefs.
+    signin_scoped_device_id = RecreateSigninScopedDeviceId(prefs);
+  }
+  return signin_scoped_device_id;
+}
+
 #endif
 
 }  // namespace signin
diff --git a/components/signin/public/base/device_id_helper.h b/components/signin/public/base/device_id_helper.h
index 2684924e4..d608cb2 100644
--- a/components/signin/public/base/device_id_helper.h
+++ b/components/signin/public/base/device_id_helper.h
@@ -30,6 +30,12 @@
 // Creates a new device ID value.
 std::string GenerateSigninScopedDeviceId();
 
+// Helper method. The device ID should generally be obtained through
+// GetSigninScopedDeviceId().
+// Returns the device id read from the kGoogleServicesSigninScopedDeviceId pref.
+// If the pref is empty, a new device ID is created and stored in the pref.
+std::string GetOrCreateScopedDeviceId(PrefService* prefs);
+
 #endif
 
 }  // namespace signin
diff --git a/components/signin/public/base/device_id_helper_unittest.cc b/components/signin/public/base/device_id_helper_unittest.cc
index 20dcd97c..219ac0f 100644
--- a/components/signin/public/base/device_id_helper_unittest.cc
+++ b/components/signin/public/base/device_id_helper_unittest.cc
@@ -41,7 +41,7 @@
             prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId));
 }
 
-TEST(DeviceIdHelper, GetSigninScopedDeviceId) {
+TEST(DeviceIdHelper, GetOrCreateScopedDeviceId) {
   sync_preferences::TestingPrefServiceSyncable prefs;
   prefs.registry()->RegisterStringPref(
       prefs::kGoogleServicesSigninScopedDeviceId, std::string());
@@ -49,12 +49,12 @@
   ASSERT_TRUE(
       prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId).empty());
 
-  std::string device_id_1 = GetSigninScopedDeviceId(&prefs);
+  std::string device_id_1 = GetOrCreateScopedDeviceId(&prefs);
   EXPECT_FALSE(device_id_1.empty());
   EXPECT_EQ(device_id_1,
             prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId));
 
-  std::string device_id_2 = GetSigninScopedDeviceId(&prefs);
+  std::string device_id_2 = GetOrCreateScopedDeviceId(&prefs);
   EXPECT_EQ(device_id_1, device_id_2);
   EXPECT_EQ(device_id_2,
             prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId));
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc
index cc55586..fbd70ae 100644
--- a/components/signin/public/base/signin_switches.cc
+++ b/components/signin/public/base/signin_switches.cc
@@ -20,6 +20,9 @@
 // expiration of credentials during testing.
 const char kClearTokenService[] = "clear-token-service";
 
+// Disables sending signin scoped device id to LSO with refresh token request.
+const char kDisableSigninScopedDeviceId[] = "disable-signin-scoped-device-id";
+
 #if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS)
 // Enable experimental binding session credentials to the device.
 BASE_FEATURE(kEnableBoundSessionCredentials,
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h
index c4c8756..e0820479 100644
--- a/components/signin/public/base/signin_switches.h
+++ b/components/signin/public/base/signin_switches.h
@@ -25,6 +25,8 @@
 
 extern const char kClearTokenService[];
 
+extern const char kDisableSigninScopedDeviceId[];
+
 #if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS)
 BASE_DECLARE_FEATURE(kEnableBoundSessionCredentials);
 bool IsBoundSessionCredentialsEnabled();
diff --git a/components/signin/public/identity_manager/accounts_mutator_unittest.cc b/components/signin/public/identity_manager/accounts_mutator_unittest.cc
index 737c898..23622cfa 100644
--- a/components/signin/public/identity_manager/accounts_mutator_unittest.cc
+++ b/components/signin/public/identity_manager/accounts_mutator_unittest.cc
@@ -636,14 +636,14 @@
   auto* other_accounts_mutator =
       other_identity_test_env.identity_manager()->GetAccountsMutator();
 
-  std::string device_id_1 = GetSigninScopedDeviceId(pref_service());
+  std::string device_id_1 = GetOrCreateScopedDeviceId(pref_service());
   EXPECT_FALSE(device_id_1.empty());
 
   accounts_mutator()->MoveAccount(other_accounts_mutator,
                                   account_info.account_id);
   EXPECT_EQ(0U, identity_manager()->GetAccountsWithRefreshTokens().size());
 
-  std::string device_id_2 = GetSigninScopedDeviceId(pref_service());
+  std::string device_id_2 = GetOrCreateScopedDeviceId(pref_service());
   EXPECT_FALSE(device_id_2.empty());
   // |device_id_1| and |device_id_2| should be different as the device ID is
   // recreated in MoveAccount().
diff --git a/components/sync/model/model_type_change_processor.h b/components/sync/model/model_type_change_processor.h
index c08f46d..0bc3be8 100644
--- a/components/sync/model/model_type_change_processor.h
+++ b/components/sync/model/model_type_change_processor.h
@@ -100,9 +100,9 @@
   virtual void ModelReadyToSync(std::unique_ptr<MetadataBatch> batch) = 0;
 
   // Returns a boolean representing whether the processor's metadata is
-  // currently up to date and accurately tracking the model type's data. If
-  // false, and ModelReadyToSync() has already been called, then Put and Delete
-  // will no-op and can be omitted by bridge.
+  // currently tracking the model type's data. This typically becomes true after
+  // ModelReadyToSync() was called (if the data type is enabled). If false,
+  // then Put() and Delete() will no-op and can be omitted by bridge.
   virtual bool IsTrackingMetadata() const = 0;
 
   // Returns the account ID for which metadata is being tracked, or empty if not
diff --git a/components/test/data/autofill/heuristics-json/internal b/components/test/data/autofill/heuristics-json/internal
index fc93231..7bae282 160000
--- a/components/test/data/autofill/heuristics-json/internal
+++ b/components/test/data/autofill/heuristics-json/internal
@@ -1 +1 @@
-Subproject commit fc9323141d970c474cb466c32c9be6cfcf20e549
+Subproject commit 7bae2821e7e52bc963559dc9989c05850a8b6853
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index d0d6855..5defc50 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -1190,21 +1190,23 @@
   document_checker.CheckAccessible(GetRendererAccessible());
 }
 
-// TODO(accessibility): re-enable after fixing it to work withi
-// kSerializeAccessibilityPostLifecycle.
-IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
-                       DISABLED_FocusEventOnPageLoad) {
+IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, FocusEventOnPageLoad) {
   // Some screen readers, such as older versions of Jaws, require a focus event
   // on the top document after the page loads, if there is no focused element on
   // the page.
   AccessibilityNotificationWaiter waiter(shell()->web_contents(),
                                          ui::kAXModeComplete,
                                          ax::mojom::Event::kLoadComplete);
-  GURL html_data_url(
-      "data:text/html," +
-      base::EscapeQueryParamValue(R"HTML(<p> Hello</ p>)HTML", false));
-  EXPECT_TRUE(NavigateToURL(shell(), html_data_url));
-  WaitForAccessibilityFocusChange();
+  {
+    base::RunLoop run_loop;
+    GURL html_data_url(
+        "data:text/html," +
+        base::EscapeQueryParamValue(R"HTML(<p> Hello</ p>)HTML", false));
+    BrowserAccessibilityManager::SetFocusChangeCallbackForTesting(
+        run_loop.QuitClosure());
+    EXPECT_TRUE(NavigateToURL(shell(), html_data_url));
+    run_loop.Run();  // Wait for the focus change.
+  }
   // TODO(https://crbug.com/1332468): Investigate why this does not return
   // true.
   ASSERT_TRUE(waiter.WaitForNotification());
diff --git a/content/browser/attribution_reporting/attribution_storage_unittest.cc b/content/browser/attribution_reporting/attribution_storage_unittest.cc
index ee7a7a8..e00732c8 100644
--- a/content/browser/attribution_reporting/attribution_storage_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_unittest.cc
@@ -2447,7 +2447,7 @@
           false,
       },
       {
-          "negated filters match",
+          "negated filters false",
           attribution_reporting::AggregatableDedupKey(
               /*dedup_key=*/123,
               FilterPair(
@@ -2457,30 +2457,18 @@
           false,
       },
       {
-          "negated filters match with lookback_window",
+          "negated filters false due to lookback_window",
           attribution_reporting::AggregatableDedupKey(
               /*dedup_key=*/123,
               FilterPair(
                   /*positive=*/{},
                   /*negative=*/attribution_reporting::FiltersForSourceType(
-                      SourceType::kNavigation,
+                      SourceType::kEvent,
                       /*lookback_window=*/kReportDelay))),
           false,
       },
       {
-          "negated filters mismatch due to lookback_window",
-          attribution_reporting::AggregatableDedupKey(
-              /*dedup_key=*/123,
-              FilterPair(
-                  /*positive=*/{},
-                  /*negative=*/attribution_reporting::FiltersForSourceType(
-                      SourceType::kNavigation,
-                      /*lookback_window=*/kReportDelay -
-                          base::Microseconds(1)))),
-          true,
-      },
-      {
-          "negated filters mismatch",
+          "negated filters true",
           attribution_reporting::AggregatableDedupKey(
               /*dedup_key=*/123,
               FilterPair(
@@ -2490,6 +2478,18 @@
           true,
       },
       {
+          "negated filters true with lookback_window",
+          attribution_reporting::AggregatableDedupKey(
+              /*dedup_key=*/123,
+              FilterPair(
+                  /*positive=*/{},
+                  /*negative=*/attribution_reporting::FiltersForSourceType(
+                      SourceType::kEvent,
+                      /*lookback_window=*/kReportDelay -
+                          base::Microseconds(1)))),
+          true,
+      },
+      {
           "null dedup key",
           attribution_reporting::AggregatableDedupKey(
               /*dedup_key=*/absl::nullopt,
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc
index 73a6de7..5bd333e 100644
--- a/content/browser/tracing/background_tracing_manager_impl.cc
+++ b/content/browser/tracing/background_tracing_manager_impl.cc
@@ -122,9 +122,11 @@
 
 BackgroundTracingManagerImpl::BackgroundTracingManagerImpl()
     : delegate_(GetContentClient()->browser()->GetTracingDelegate()),
-      trace_database_(base::ThreadPool::CreateSequencedTaskRunner(
+      database_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-           base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
+           base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
+      trace_database_(new TraceReportDatabase,
+                      base::OnTaskRunnerDeleter(database_task_runner_)) {
   SetInstance(this);
   g_background_tracing_manager_impl = this;
   BackgroundStartupTracingObserver::GetInstance();
@@ -151,7 +153,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!creation_result) {
     RecordMetric(Metrics::DATABASE_INITIALIZATION_FAILED);
-    trace_database_.Reset();
+    trace_database_.reset();
     return;
   }
   clean_database_timer_.Start(
@@ -302,11 +304,13 @@
 void BackgroundTracingManagerImpl::InitializeTraceReportDatabase() {
   auto database_dir = GetContentClient()->browser()->GetLocalTracesDirectory();
   if (database_dir.has_value()) {
-    trace_database_.AsyncCall(&TraceReportDatabase::OpenDatabase)
-        .WithArgs(database_dir.value())
-        .Then(base::BindOnce(
-            &BackgroundTracingManagerImpl::OnTraceDatabaseCreated,
-            weak_factory_.GetWeakPtr()));
+    database_task_runner_->PostTaskAndReplyWithResult(
+        FROM_HERE,
+        base::BindOnce(&TraceReportDatabase::OpenDatabase,
+                       base::Unretained(trace_database_.get()),
+                       std::move(*database_dir)),
+        base::BindOnce(&BackgroundTracingManagerImpl::OnTraceDatabaseCreated,
+                       weak_factory_.GetWeakPtr()));
   } else {
     base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
         FROM_HERE,
@@ -592,19 +596,40 @@
 void BackgroundTracingManagerImpl::CleanDatabase() {
   DCHECK(trace_database_);
 
-  trace_database_
-      .AsyncCall(
-          base::IgnoreResult(&TraceReportDatabase::DeleteTracesOlderThan))
-      .WithArgs(kTraceTimeToLive);
+  database_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          [](TraceReportDatabase* trace_database, base::TimeDelta age) {
+            trace_database->DeleteTracesOlderThan(age);
+          },
+          base::Unretained(trace_database_.get()), kTraceTimeToLive));
 }
 
 void BackgroundTracingManagerImpl::DeleteTracesInDateRange(base::Time start,
                                                            base::Time end) {
-  InitializeTraceReportDatabase();
-  trace_database_
-      .AsyncCall(
-          base::IgnoreResult(&TraceReportDatabase::DeleteTracesInDateRange))
-      .WithArgs(start, end);
+  // Exit early if |trace_database_| was not initialized successfully.
+  if (!trace_database_) {
+    return;
+  }
+
+  // The trace report database needs to exist for clean up. Avoid creating or
+  // initializing the trace report database to perform a database clean up.
+  auto database_dir = GetContentClient()->browser()->GetLocalTracesDirectory();
+  if (database_dir.has_value()) {
+    database_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](TraceReportDatabase* trace_database,
+               absl::optional<base::FilePath> database_dir, base::Time start,
+               base::Time end) {
+              if (trace_database->OpenDatabaseIfExists(database_dir.value())) {
+                if (!trace_database->DeleteTracesInDateRange(start, end)) {
+                  RecordMetric(Metrics::DATABASE_CLEANUP_FAILED);
+                }
+              }
+            },
+            base::Unretained(trace_database_.get()), database_dir, start, end));
+  }
 }
 
 // static
@@ -613,7 +638,6 @@
     mojo::PendingRemote<tracing::mojom::BackgroundTracingAgentProvider>
         pending_provider) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
   // Delay agent initialization until we have an interested AgentObserver.
   // We set disconnect handler for cleanup when the tracing target is closed.
   mojo::Remote<tracing::mojom::BackgroundTracingAgentProvider> provider(
diff --git a/content/browser/tracing/background_tracing_manager_impl.h b/content/browser/tracing/background_tracing_manager_impl.h
index c8f10845..b08a6eb1 100644
--- a/content/browser/tracing/background_tracing_manager_impl.h
+++ b/content/browser/tracing/background_tracing_manager_impl.h
@@ -69,6 +69,7 @@
     REACHED_CODE_SCENARIO_TRIGGERED = 15,
     FINALIZATION_STARTED_WITH_LOCAL_OUTPUT = 16,
     DATABASE_INITIALIZATION_FAILED = 17,
+    DATABASE_CLEANUP_FAILED = 18,
     NUMBER_OF_BACKGROUND_TRACING_METRICS,
   };
   static void RecordMetric(Metrics metric);
@@ -193,7 +194,9 @@
       pending_agents_;
 
   // This contains all the traces saved locally.
-  base::SequenceBound<TraceReportDatabase> trace_database_;
+  scoped_refptr<base::SequencedTaskRunner> database_task_runner_;
+  std::unique_ptr<TraceReportDatabase, base::OnTaskRunnerDeleter>
+      trace_database_;
 
   // This field contains serialized trace log proto.
   std::string trace_to_upload_;
diff --git a/content/browser/tracing/trace_report_database.cc b/content/browser/tracing/trace_report_database.cc
index 4c68f5ba..3e75520c 100644
--- a/content/browser/tracing/trace_report_database.cc
+++ b/content/browser/tracing/trace_report_database.cc
@@ -9,6 +9,7 @@
 
 #include "base/files/file_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/sequence_checker.h"
 #include "base/uuid.h"
 #include "sql/database.h"
 #include "sql/meta_table.h"
@@ -19,9 +20,9 @@
 
 namespace {
 
-const base::FilePath::CharType kLocalTracesDatabaseName[] =
+const base::FilePath::CharType kLocalTracesDatabasePath[] =
     FILE_PATH_LITERAL("LocalTraces.db");
-
+const char kLocalTracesTableName[] = "local_traces";
 constexpr int kCurrentVersionNumber = 2;
 
 TraceReportDatabase::ClientReport GetReportFromStatement(
@@ -84,10 +85,11 @@
 
 bool TraceReportDatabase::OpenDatabase(const base::FilePath& path) {
   if (database_.is_open()) {
-    return true;
+    DCHECK_EQ(db_file_path_, path.Append(kLocalTracesDatabasePath));
+    return EnsureTableCreated();
   }
 
-  db_file_path_ = path.Append(kLocalTracesDatabaseName);
+  db_file_path_ = path.Append(kLocalTracesDatabasePath);
 
   // For logging memory dumps
   database_.set_histogram_tag("LocalTraces");
@@ -106,7 +108,7 @@
 
 bool TraceReportDatabase::OpenDatabaseForTesting() {
   if (database_.is_open()) {
-    return true;
+    return EnsureTableCreated();
   }
 
   if (!database_.OpenInMemory()) {
@@ -116,7 +118,31 @@
   return EnsureTableCreated();
 }
 
+bool TraceReportDatabase::OpenDatabaseIfExists(const base::FilePath& path) {
+  if (database_.is_open()) {
+    DCHECK_EQ(db_file_path_, path.Append(kLocalTracesDatabasePath));
+    return database_.DoesTableExist(kLocalTracesTableName);
+  }
+
+  db_file_path_ = path.Append(kLocalTracesDatabasePath);
+  const base::FilePath dir = db_file_path_.DirName();
+  if (!base::DirectoryExists(dir)) {
+    return false;
+  }
+
+  if (!database_.Open(db_file_path_)) {
+    return false;
+  }
+
+  if (!database_.DoesTableExist(kLocalTracesTableName)) {
+    return false;
+  }
+
+  return EnsureTableCreated();
+}
+
 bool TraceReportDatabase::AddTrace(NewReport new_report) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -148,6 +174,7 @@
 }
 
 bool TraceReportDatabase::UserRequestedUpload(base::Uuid uuid) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -168,6 +195,8 @@
 }
 
 bool TraceReportDatabase::UploadComplete(base::Uuid uuid, base::Time time) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (!database_.is_open()) {
     return false;
   }
@@ -189,6 +218,7 @@
 
 absl::optional<std::string> TraceReportDatabase::GetProtoValue(
     base::Uuid uuid) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return absl::nullopt;
   }
@@ -215,6 +245,7 @@
 }
 
 bool TraceReportDatabase::DeleteTrace(base::Uuid uuid) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -230,6 +261,7 @@
 }
 
 bool TraceReportDatabase::DeleteAllTraces() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -244,6 +276,7 @@
 
 bool TraceReportDatabase::DeleteTracesInDateRange(const base::Time start,
                                                   const base::Time end) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -261,6 +294,7 @@
 }
 
 bool TraceReportDatabase::DeleteTracesOlderThan(base::TimeDelta days_old) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return false;
   }
@@ -279,9 +313,13 @@
 bool TraceReportDatabase::EnsureTableCreated() {
   DCHECK(database_.is_open());
 
+  if (initialized_) {
+    return true;
+  }
+
   sql::MetaTable meta_table;
   bool has_metatable = meta_table.DoesTableExist(&database_);
-  bool has_schema = database_.DoesTableExist("local_traces");
+  bool has_schema = database_.DoesTableExist(kLocalTracesTableName);
   if (!has_metatable && has_schema) {
     // Existing DB with no meta table. Cannot determine DB version.
     if (!database_.Raze()) {
@@ -304,11 +342,14 @@
       return false;
     }
   }
-  return database_.Execute(kLocalTracesTableSql);
+  initialized_ = database_.Execute(kLocalTracesTableSql);
+
+  return initialized_;
 }
 
 std::vector<TraceReportDatabase::ClientReport>
 TraceReportDatabase::GetAllReports() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   std::vector<TraceReportDatabase::ClientReport> all_reports;
 
   if (!database_.is_open()) {
@@ -329,6 +370,7 @@
 
 absl::optional<TraceReportDatabase::ClientReport>
 TraceReportDatabase::GetNextReportPendingUpload() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!database_.is_open()) {
     return absl::nullopt;
   }
diff --git a/content/browser/tracing/trace_report_database.h b/content/browser/tracing/trace_report_database.h
index 644ea13..118c8d6 100644
--- a/content/browser/tracing/trace_report_database.h
+++ b/content/browser/tracing/trace_report_database.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/files/file_path.h"
+#include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "base/uuid.h"
 #include "content/common/content_export.h"
@@ -97,6 +98,9 @@
 
   bool OpenDatabase(const base::FilePath& path);
 
+  // Open database only if it already exists.
+  bool OpenDatabaseIfExists(const base::FilePath& path);
+
   // Initialize DB and open in it memory.
   bool OpenDatabaseForTesting();
 
@@ -133,6 +137,11 @@
 
   sql::Database database_;
   base::FilePath db_file_path_;
+
+  bool initialized_ = false;
+
+  // Guards usage of |database_|
+  SEQUENCE_CHECKER(sequence_checker_);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/trace_report_database_unittest.cc b/content/browser/tracing/trace_report_database_unittest.cc
index cae6f04..e7d48e0 100644
--- a/content/browser/tracing/trace_report_database_unittest.cc
+++ b/content/browser/tracing/trace_report_database_unittest.cc
@@ -7,6 +7,7 @@
 #include <string>
 
 #include "base/files/scoped_file.h"
+#include "base/files/scoped_temp_dir.h"
 #include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
@@ -27,6 +28,18 @@
   EXPECT_EQ(trace_report_.GetAllReports().size(), 0u);
 }
 
+// Test without Initializing the database before
+TEST(TraceReportDatabaseNoOpenTest, OpenDatabaseIfExists) {
+  base::ScopedTempDir temp_dir;
+  TraceReportDatabase trace_report;
+
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  EXPECT_FALSE(trace_report.OpenDatabaseIfExists(temp_dir.GetPath()));
+
+  EXPECT_TRUE(trace_report.OpenDatabase(temp_dir.GetPath()));
+}
+
 TEST_F(TraceReportDatabaseTest, AddingNewReport) {
   EXPECT_EQ(trace_report_.GetAllReports().size(), 0u);
 
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
index 402265e..e8879c5 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
@@ -1066,6 +1066,15 @@
                         (int) (nodeBottomDip * deviceScale));
                 editableNodeBoundsPixOnScreen.offset(
                         0, mWebContents.getRenderCoordinates().getContentOffsetYPixInt());
+                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) {
+                    RectF bounds = new RectF(editableNodeBoundsPixOnScreen);
+                    EditorBoundsInfo editorBoundsInfo = new EditorBoundsInfo.Builder()
+                                                                .setEditorBounds(bounds)
+                                                                .setHandwritingBounds(bounds)
+                                                                .build();
+                    mCursorAnchorInfoController.updateWithEditorBoundsInfo(
+                            editorBoundsInfo, getContainerView());
+                }
             } else {
                 editableNodeBoundsPixOnScreen = new Rect();
             }
@@ -1108,8 +1117,10 @@
                 focusedEditBounds, cursorPosition);
         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) {
             RectF bounds = new RectF(focusedEditBounds);
-            EditorBoundsInfo editorBoundsInfo =
-                    new EditorBoundsInfo.Builder().setHandwritingBounds(bounds).build();
+            EditorBoundsInfo editorBoundsInfo = new EditorBoundsInfo.Builder()
+                                                        .setEditorBounds(bounds)
+                                                        .setHandwritingBounds(bounds)
+                                                        .build();
             mCursorAnchorInfoController.updateWithEditorBoundsInfo(
                     editorBoundsInfo, getContainerView());
         }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java
index e6f50b7..321f9a4 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java
@@ -96,9 +96,11 @@
      */
     /* @Before */
     public void setupTestFramework() {
-        AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
-        AccessibilityState.setIsScreenReaderEnabledForTesting(true);
-        AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
+            AccessibilityState.setIsScreenReaderEnabledForTesting(true);
+            AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        });
 
         mWcax = getWebContentsAccessibility();
         mNodeProvider = getAccessibilityNodeProvider();
@@ -110,8 +112,10 @@
     }
 
     public void setupTestFrameworkForBasicMode() {
-        AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
-        AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
+            AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        });
 
         mWcax = getWebContentsAccessibility();
         mNodeProvider = getAccessibilityNodeProvider();
@@ -123,9 +127,11 @@
     }
 
     public void setupTestFrameworkForFormControlsMode() {
-        AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
-        AccessibilityState.setIsOnlyPasswordManagersEnabledForTesting(true);
-        AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true);
+            AccessibilityState.setIsOnlyPasswordManagersEnabledForTesting(true);
+            AccessibilityState.setEventTypeMaskForTesting(EVENT_TYPE_MASK_ALL);
+        });
 
         mWcax = getWebContentsAccessibility();
         mNodeProvider = getAccessibilityNodeProvider();
diff --git a/content/public/browser/desktop_capture.cc b/content/public/browser/desktop_capture.cc
index 26c02f4..3d2516b 100644
--- a/content/public/browser/desktop_capture.cc
+++ b/content/public/browser/desktop_capture.cc
@@ -23,6 +23,10 @@
 #include "base/nix/xdg_util.h"
 #endif
 
+#if BUILDFLAG(IS_WIN)
+#include "base/win/windows_version.h"
+#endif
+
 namespace content::desktop_capture {
 
 webrtc::DesktopCaptureOptions CreateDesktopCaptureOptions() {
@@ -54,14 +58,20 @@
   return options;
 }
 
-std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer() {
+std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer(
+    bool allow_wgc_screen_capturer) {
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   return std::make_unique<DesktopCapturerLacros>(
       DesktopCapturerLacros::CaptureType::kScreen,
       webrtc::DesktopCaptureOptions());
 #else
-  return webrtc::DesktopCapturer::CreateScreenCapturer(
-      CreateDesktopCaptureOptions());
+  auto options = desktop_capture::CreateDesktopCaptureOptions();
+#if defined(RTC_ENABLE_WIN_WGC)
+  if (allow_wgc_screen_capturer) {
+    options.set_allow_wgc_screen_capturer(true);
+  }
+#endif  // defined(RTC_ENABLE_WIN_WGC)
+  return webrtc::DesktopCapturer::CreateScreenCapturer(options);
 #endif
 }
 
diff --git a/content/public/browser/desktop_capture.h b/content/public/browser/desktop_capture.h
index 6edb830..7511c66 100644
--- a/content/public/browser/desktop_capture.h
+++ b/content/public/browser/desktop_capture.h
@@ -27,7 +27,8 @@
 CONTENT_EXPORT webrtc::DesktopCaptureOptions CreateDesktopCaptureOptions();
 
 // Creates specific DesktopCapturer with required settings.
-CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer();
+CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer(
+    bool allow_wgc_screen_capturer = false);
 CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateWindowCapturer();
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index bd95a5a..eb4fccb 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4626,6 +4626,10 @@
                        : RenderFrameImpl::FromWebFrame(frame_->LocalRoot());
 }
 
+base::WeakPtr<RenderFrameImpl> RenderFrameImpl::GetWeakPtr() {
+  return weak_factory_.GetWeakPtr();
+}
+
 mojom::DidCommitProvisionalLoadParamsPtr
 RenderFrameImpl::MakeDidCommitProvisionalLoadParams(
     blink::WebHistoryCommitType commit_type,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 77583f41..ff2fe1a4 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -784,6 +784,8 @@
   bool IsLocalRoot() const;
   const RenderFrameImpl* GetLocalRoot() const;
 
+  base::WeakPtr<RenderFrameImpl> GetWeakPtr();
+
  private:
   friend class RenderFrameImplTest;
   friend class RenderFrameObserver;
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index c183443..26acf8c 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -77,6 +77,7 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "net/ssl/client_cert_identity.h"
+#include "services/device/public/cpp/geolocation/buildflags.h"
 #include "services/device/public/cpp/geolocation/location_system_permission_status.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/network_service_buildflags.h"
@@ -97,13 +98,10 @@
 #include "base/android/path_utils.h"
 #include "components/variations/android/variations_seed_bridge.h"
 #include "content/shell/android/shell_descriptors.h"
-#endif
-
-#if BUILDFLAG(IS_ANDROID)
 #include "components/crash/content/browser/crash_handler_host_linux.h"
 #endif
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
 #include "services/device/public/cpp/test/fake_geolocation_manager.h"
 #endif
 
@@ -255,14 +253,14 @@
 // needed should be added here so that it's shared between the instances.
 struct SharedState {
   SharedState() {
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
     location_manager = std::make_unique<device::FakeGeolocationManager>();
     location_manager->SetSystemPermission(
         device::LocationSystemPermissionStatus::kAllowed);
 #endif
   }
 
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   std::unique_ptr<device::FakeGeolocationManager> location_manager;
 #endif
 
@@ -431,7 +429,7 @@
 }
 
 device::GeolocationManager* ShellContentBrowserClient::GetGeolocationManager() {
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED)
   return GetSharedState().location_manager.get();
 #elif BUILDFLAG(IS_IOS)
   // TODO(crbug.com/1431447, 1411704): Unify this to FakeGeolocationManager once
diff --git a/content/test/data/attribution_reporting/interop/event_level_trigger_filter_data.json b/content/test/data/attribution_reporting/interop/event_level_trigger_filter_data.json
index 98a40e7..caa52e5 100644
--- a/content/test/data/attribution_reporting/interop/event_level_trigger_filter_data.json
+++ b/content/test/data/attribution_reporting/interop/event_level_trigger_filter_data.json
@@ -168,11 +168,22 @@
                   }
                 },
                 {
+                  "trigger_data": "5",
+                  "filters": {
+                    "source_type": ["navigation"]
+                  },
+                  "not_filters": {
+                    "_lookback_window": 31,
+                    "product": ["789"]
+                  }
+                },
+                {
                   "trigger_data": "6",
                   "filters": {
                     "source_type": ["navigation"]
                   },
                   "not_filters": {
+                    "_lookback_window": 29,
                     "product": ["789"]
                   }
                 },
@@ -182,6 +193,7 @@
                     "source_type": ["navigation"]
                   },
                   "not_filters": {
+                    "_lookback_window": 29,
                     "product": ["789"]
                   }
                 }
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 da83273a..971586f 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
@@ -502,6 +502,8 @@
 crbug.com/795052 [ mac nvidia-0xfe9 ] conformance2/uniforms/draw-with-uniform-blocks.html [ Failure ]
 crbug.com/1457723 [ bigsur nvidia-0xfe9 angle-opengl ] conformance2/textures/canvas_sub_rectangle/tex-3d-* [ Failure ]
 crbug.com/1474910 [ bigsur nvidia-0xfe9 angle-opengl ] conformance2/rendering/vertex-id-large-count.html [ Failure ]
+crbug.com/1475765 [ bigsur nvidia-0xfe9 angle-opengl ] conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ]
+crbug.com/1475765 [ bigsur nvidia-0xfe9 angle-opengl ] conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ]
 
 ## Mac AMD ##
 
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc
index 7e0733f..9545edb6 100644
--- a/content/web_test/browser/web_test_control_host.cc
+++ b/content/web_test/browser/web_test_control_host.cc
@@ -1087,6 +1087,13 @@
       request->GetRenderFrameHostRestoredFromBackForwardCache();
   if (rfh)
     GetWebTestRenderFrameRemote(rfh)->OnReactivated();
+
+  if (navigation_handle->IsInPrimaryMainFrame() &&
+      next_non_blank_nav_is_new_test_ &&
+      navigation_handle->GetURL() != GURL(kAboutBlankResetWebTest)) {
+    GetWebTestRenderFrameRemote(navigation_handle->GetRenderFrameHost())
+        ->BlockTestUntilStart();
+  }
 }
 
 void WebTestControlHost::RenderProcessHostDestroyed(
@@ -1886,26 +1893,59 @@
   // |WebTestControlHost::DidFinishNavigation|.
 }
 
+void WebTestControlHost::FlushInputAndStartTest(WeakDocumentPtr doc) {
+  RenderFrameHost* rfh = doc.AsRenderFrameHostIfValid();
+  if (!rfh) {
+    return;
+  }
+
+  // Ensures any synthetic input (e.g. mouse enter/leave/move events as a
+  // result of navigation) have been handled by the renderer.
+  rfh->GetRenderWidgetHost()->FlushForTesting();
+  GetWebTestRenderFrameRemote(rfh)->StartTest();
+}
+
 void WebTestControlHost::DidFinishNavigation(NavigationHandle* navigation) {
-  if (navigation->GetURL() != GURL(kAboutBlankResetWebTest))
-    return;
+  if (navigation->GetURL() == GURL(kAboutBlankResetWebTest)) {
+    // During fuzzing, the |main_window_| might close itself using
+    // window.close(). This might happens after the end of the test, during the
+    // cleanup phase. In this case, the pending about:blank navigation might be
+    // canceled, within the |main_window_| destructor. It is no longer safe to
+    // access |main_window_| here. See https://crbug.com/1221183
+    if (!navigation->HasCommitted()) {
+      return;
+    }
 
-  // During fuzzing, the |main_window_| might close itself using window.close().
-  // This might happens after the end of the test, during the cleanup phase. In
-  // this case, the pending about:blank navigation might be canceled, within the
-  // |main_window_| destructor. It is no longer safe to access |main_window_|
-  // here. See https://crbug.com/1221183
-  if (!navigation->HasCommitted())
-    return;
+    next_non_blank_nav_is_new_test_ = true;
 
-  // Request additional web test specific cleanup in the renderer process:
-  content::WebContentsImpl* web_contents =
-      static_cast<WebContentsImpl*>(main_window_->web_contents());
-  RenderProcessHost* main_rfh_process =
-      web_contents->GetPrimaryMainFrame()->GetProcess();
-  GetWebTestRenderThreadRemote(main_rfh_process)->ResetRendererAfterWebTest();
+    // Request additional web test specific cleanup in the renderer process:
+    content::WebContentsImpl* web_contents =
+        static_cast<WebContentsImpl*>(main_window_->web_contents());
+    RenderProcessHost* main_rfh_process =
+        web_contents->GetPrimaryMainFrame()->GetProcess();
+    GetWebTestRenderThreadRemote(main_rfh_process)->ResetRendererAfterWebTest();
 
-  PrepareRendererForNextWebTestDone();
+    PrepareRendererForNextWebTestDone();
+  } else if (navigation->IsInPrimaryMainFrame() &&
+             !navigation->GetURL().IsAboutBlank() &&
+             next_non_blank_nav_is_new_test_) {
+    next_non_blank_nav_is_new_test_ = false;
+
+    if (navigation->HasCommitted()) {
+      // If the browser is injecting synthetic mouse moves, it does so at
+      // CommitPending time by posting a task to perform the dispatch. Hence,
+      // that task must already be queued (or complete) by this time. Post the
+      // flush input task to ensure it runs after the synthetic mouse event
+      // dispatch task. See comments on next_non_blank_nav_is_new_test_ for
+      // more details.
+      base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
+          FROM_HERE,
+          base::BindOnce(
+              &WebTestControlHost::FlushInputAndStartTest,
+              weak_factory_.GetWeakPtr(),
+              navigation->GetRenderFrameHost()->GetWeakDocumentPtr()));
+    }
+  }
 }
 
 void WebTestControlHost::PrepareRendererForNextWebTestDone() {
diff --git a/content/web_test/browser/web_test_control_host.h b/content/web_test/browser/web_test_control_host.h
index 1876233..d32640f 100644
--- a/content/web_test/browser/web_test_control_host.h
+++ b/content/web_test/browser/web_test_control_host.h
@@ -272,6 +272,7 @@
       override;
 
   void DiscardMainWindow();
+  void FlushInputAndStartTest(WeakDocumentPtr rfh);
   // Closes all windows opened by the test. This is every window but the main
   // window, since it is created by the test harness and reused between tests.
   void CloseTestOpenedWindows();
@@ -456,6 +457,19 @@
   NextPointerLockAction next_pointer_lock_action_ =
       NextPointerLockAction::kWillSucceed;
 
+  // When navigating to a new web test, the control host blocks the renderer
+  // from starting the test while some initialization to a known state occurs
+  // (e.g. flushing synthetic input events associated with navigation).
+  //
+  // It does so by resetting this bit to `true` at the end of each web test.
+  // When this bit is set, the next ReadyToCommitNavigation seen will call
+  // BlockTestUntilStart in the renderer to block the renderer parser,
+  // preventing the test from running. When that navigation finishes in
+  // DidFinishNavigation, this bit is turned off and this class performs
+  // initialization. Once the initialization is complete, StartTest is run in
+  // the renderer, unblocking the parser.
+  bool next_non_blank_nav_is_new_test_ = true;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<WebTestControlHost> weak_factory_{this};
diff --git a/content/web_test/common/web_test.mojom b/content/web_test/common/web_test.mojom
index 6b07671..f1ca5e4 100644
--- a/content/web_test/common/web_test.mojom
+++ b/content/web_test/common/web_test.mojom
@@ -122,6 +122,15 @@
   // Notifies a frame that has been restored from backward/forward cache.
   // This is called on main frames to add them to TestRunner's management list.
   OnReactivated();
+
+  // Prevents a new test from being run by blocking parsing. Parsing will
+  // resume when StartTest is called.
+  BlockTestUntilStart();
+
+  // Notifies the frame that the browser has fully completed any
+  // potentially-renderer-visible changes it needed to make. The frame may now
+  // perform any initialization and start running the test.
+  StartTest();
 };
 
 // Web test messages related runtime flags sent from the browser process to the
diff --git a/content/web_test/renderer/web_frame_test_proxy.cc b/content/web_test/renderer/web_frame_test_proxy.cc
index 440c075..6ea6806 100644
--- a/content/web_test/renderer/web_frame_test_proxy.cc
+++ b/content/web_test/renderer/web_frame_test_proxy.cc
@@ -751,6 +751,20 @@
   RenderFrameImpl::DidClearWindowObject();
 }
 
+void WebFrameTestProxy::DidCommitNavigation(
+    blink::WebHistoryCommitType commit_type,
+    bool should_reset_browser_interface_broker,
+    const blink::ParsedPermissionsPolicy& permissions_policy_header,
+    const blink::DocumentPolicyFeatureState& document_policy_header) {
+  if (should_block_parsing_in_next_commit_) {
+    should_block_parsing_in_next_commit_ = false;
+    GetWebFrame()->BlockParserForTesting();
+  }
+  RenderFrameImpl::DidCommitNavigation(
+      commit_type, should_reset_browser_interface_broker,
+      permissions_policy_header, document_policy_header);
+}
+
 void WebFrameTestProxy::OnDeactivated() {
   test_runner()->OnFrameDeactivated(this);
 }
@@ -759,6 +773,23 @@
   test_runner()->OnFrameReactivated(this);
 }
 
+void WebFrameTestProxy::BlockTestUntilStart() {
+  should_block_parsing_in_next_commit_ = true;
+}
+
+void WebFrameTestProxy::StartTest() {
+  CHECK(!should_block_parsing_in_next_commit_);
+  GetWebFrame()->FlushInputForTesting(base::BindOnce(
+      [](base::WeakPtr<RenderFrameImpl> render_frame) {
+        if (!render_frame || !render_frame->GetWebFrame()) {
+          return;
+        }
+
+        render_frame->GetWebFrame()->ResumeParserForTesting();
+      },
+      GetWeakPtr()));
+}
+
 blink::FrameWidgetTestHelper*
 WebFrameTestProxy::GetLocalRootFrameWidgetTestHelper() {
   return GetLocalRootWebFrameWidget()->GetFrameWidgetTestHelperForTesting();
diff --git a/content/web_test/renderer/web_frame_test_proxy.h b/content/web_test/renderer/web_frame_test_proxy.h
index a8fff8f..acc7633 100644
--- a/content/web_test/renderer/web_frame_test_proxy.h
+++ b/content/web_test/renderer/web_frame_test_proxy.h
@@ -84,6 +84,11 @@
       const blink::WebString& sink_id,
       blink::WebSetSinkIdCompleteCallback completion_callback) override;
   void DidClearWindowObject() override;
+  void DidCommitNavigation(
+      blink::WebHistoryCommitType commit_type,
+      bool should_reset_browser_interface_broker,
+      const blink::ParsedPermissionsPolicy& permissions_policy_header,
+      const blink::DocumentPolicyFeatureState& document_policy_header) override;
 
   // mojom::WebTestRenderFrame implementation.
   void SynchronouslyCompositeAfterTest(
@@ -93,6 +98,8 @@
                             bool starting_test) override;
   void OnDeactivated() override;
   void OnReactivated() override;
+  void BlockTestUntilStart() override;
+  void StartTest() override;
 
  private:
   void BindReceiver(
@@ -115,6 +122,10 @@
 
   mojo::AssociatedReceiver<mojom::WebTestRenderFrame>
       web_test_render_frame_receiver_{this};
+
+  // Prevents parsing on the next committed document. This is used to stop a
+  // test from running until StartTest() is called.
+  bool should_block_parsing_in_next_commit_ = false;
 };
 
 }  // namespace content
diff --git "a/infra/config/generated/builders/ci/Win Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/ci/Win Builder \050dbg\051/properties.json"
index ff37f1d..f5c5ed3 100644
--- "a/infra/config/generated/builders/ci/Win Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Win Builder \050dbg\051/properties.json"
@@ -44,6 +44,9 @@
     }
   },
   "$build/reclient": {
+    "bootstrap_env": {
+      "RBE_v": "3"
+    },
     "instance": "rbe-chromium-trusted",
     "jobs": 250,
     "metrics_project": "chromium-reclient-metrics",
diff --git "a/infra/config/generated/builders/ci/Win Builder \050dbg\051/shadow-properties.json" "b/infra/config/generated/builders/ci/Win Builder \050dbg\051/shadow-properties.json"
index 999510c..6604671 100644
--- "a/infra/config/generated/builders/ci/Win Builder \050dbg\051/shadow-properties.json"
+++ "b/infra/config/generated/builders/ci/Win Builder \050dbg\051/shadow-properties.json"
@@ -1,5 +1,8 @@
 {
   "$build/reclient": {
+    "bootstrap_env": {
+      "RBE_v": "3"
+    },
     "instance": "rbe-chromium-untrusted",
     "jobs": 250,
     "metrics_project": "chromium-reclient-metrics",
diff --git a/infra/config/subprojects/chromium/ci/chromium.win.star b/infra/config/subprojects/chromium/ci/chromium.win.star
index dddad87..c80ccc2 100644
--- a/infra/config/subprojects/chromium/ci/chromium.win.star
+++ b/infra/config/subprojects/chromium/ci/chromium.win.star
@@ -164,6 +164,10 @@
         short_name = "32",
     ),
     cq_mirrors_console_view = "mirrors",
+    # TODO(crbug/1473182): Remove once the bug is closed.
+    reclient_bootstrap_env = {
+        "RBE_v": "3",
+    },
 )
 
 ci.builder(
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index 9e39ed0..78e837d 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -60,7 +60,6 @@
 #import "ios/chrome/app/tests_hook.h"
 #import "ios/chrome/app/variations_app_state_agent.h"
 #import "ios/chrome/browser/accessibility/model/window_accessibility_change_notifier_app_agent.h"
-#import "ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h"
 #import "ios/chrome/browser/browsing_data/browsing_data_remover.h"
 #import "ios/chrome/browser/browsing_data/browsing_data_remover_factory.h"
 #import "ios/chrome/browser/browsing_data/sessions_storage_util.h"
@@ -447,10 +446,6 @@
   // Start recording field trial info.
   [[PreviousSessionInfo sharedInstance] beginRecordingFieldTrials];
 
-  // Remove the extra browser states as Chrome iOS is single profile in M48+.
-  ChromeBrowserStateRemovalController::GetInstance()
-      ->RemoveBrowserStatesIfNecessary();
-
   ChromeBrowserState* chromeBrowserState = GetApplicationContext()
                                                ->GetChromeBrowserStateManager()
                                                ->GetLastUsedBrowserState();
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn
index 2f3d0b04..3eb1990 100644
--- a/ios/chrome/browser/browser_state/BUILD.gn
+++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -35,8 +35,6 @@
     "chrome_browser_state_io_data.mm",
     "chrome_browser_state_manager_impl.h",
     "chrome_browser_state_manager_impl.mm",
-    "chrome_browser_state_removal_controller.h",
-    "chrome_browser_state_removal_controller.mm",
     "off_the_record_chrome_browser_state_impl.h",
     "off_the_record_chrome_browser_state_impl.mm",
     "off_the_record_chrome_browser_state_io_data.h",
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h
deleted file mode 100644
index f0e02251..0000000
--- a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2015 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_REMOVAL_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_REMOVAL_CONTROLLER_H_
-
-#include <string>
-
-// Controls the removal of extra browser states.
-class ChromeBrowserStateRemovalController {
- public:
-  static ChromeBrowserStateRemovalController* GetInstance();
-
-  // Removes the browser states marked as not to keep if they exist. It also
-  // converts the most recently used bookmarks file to an HTML representation.
-  void RemoveBrowserStatesIfNecessary();
-
-  // Returns whether a browser state has been removed. The value is conserved
-  // across application restarts.
-  bool HasBrowserStateBeenRemoved();
-
-  // Returns the GAIA Id of the removed browser state if it was authenticated.
-  // The value should not be trusted unless HasBrowserStateBeenRemoved() returns
-  // true.
-  const std::string& removed_browser_state_gaia_id() const {
-    return removed_browser_state_gaia_id_;
-  }
-
-  // Returns whether the last used browser sate was changed during this session.
-  bool has_changed_last_used_browser_state() const {
-    return has_changed_last_used_browser_state_;
-  }
-
- private:
-  ChromeBrowserStateRemovalController();
-  ~ChromeBrowserStateRemovalController();
-
-  // Returns the relative path of the browser state path to keep. This value
-  // was stored from the user choice.
-  std::string GetBrowserStatePathToKeep();
-
-  // Sets whether a browser state has been removed. The value is conserved
-  // across application restarts.
-  void SetHasBrowserStateBeenRemoved(bool value);
-
-  // Returns the relative path of the last browser state used (during the
-  // previous application run).
-  std::string GetLastBrowserStatePathUsed();
-
-  // Sets the relative path of the last browser state used.
-  void SetLastBrowserStatePathUsed(const std::string& browser_state_path);
-
-  // The GAIA Id of the removed browser state (if any).
-  std::string removed_browser_state_gaia_id_;
-
-  // Whether the last used browser state was changed.
-  bool has_changed_last_used_browser_state_;
-};
-
-#endif  // IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_REMOVAL_CONTROLLER_H_
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
deleted file mode 100644
index 8326218..0000000
--- a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright 2015 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/browser_state/chrome_browser_state_removal_controller.h"
-
-#import <Foundation/Foundation.h>
-
-#import "base/apple/foundation_util.h"
-#import "base/files/file_path.h"
-#import "base/files/file_util.h"
-#import "base/functional/bind.h"
-#import "base/location.h"
-#import "base/strings/sys_string_conversions.h"
-#import "base/task/thread_pool.h"
-#import "components/prefs/pref_service.h"
-#import "google_apis/gaia/gaia_auth_util.h"
-#import "ios/chrome/browser/browser_state/constants.h"
-#import "ios/chrome/browser/shared/model/application_context/application_context.h"
-#import "ios/chrome/browser/shared/model/browser_state/browser_state_info_cache.h"
-#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state_manager.h"
-#import "ios/chrome/browser/shared/model/paths/paths_internal.h"
-#import "ios/chrome/browser/shared/model/prefs/pref_names.h"
-#import "ios/chrome/browser/signin/chrome_account_manager_service.h"
-#import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
-#import "ios/chrome/browser/signin/system_identity.h"
-
-namespace {
-
-ChromeBrowserStateRemovalController* g_chrome_browser_state_removal_helper =
-    nullptr;
-
-NSString* const kPathToBrowserStateToKeepKey = @"PathToBrowserStateToKeep";
-NSString* const kHasBrowserStateBeenRemovedKey = @"HasBrowserStateBeenRemoved";
-
-const char kGmailDomain[] = "gmail.com";
-
-// Removes from disk the directories used by the browser states in
-// `browser_states_paths`.
-void NukeBrowserStates(const std::vector<base::FilePath>& browser_states_path) {
-  for (const base::FilePath& browser_state_path : browser_states_path) {
-    // Delete both the browser state directory and its corresponding cache.
-    base::FilePath cache_path;
-    ios::GetUserCacheDirectory(browser_state_path, &cache_path);
-    base::DeletePathRecursively(browser_state_path);
-    base::DeletePathRecursively(cache_path);
-  }
-}
-
-// Returns the GAIA Id of the given `browser_state_path` using the `info_cache`.
-std::string GetGaiaIdForBrowserState(const std::string& browser_state_path,
-                                     BrowserStateInfoCache* info_cache) {
-  base::FilePath path = info_cache->GetUserDataDir().Append(browser_state_path);
-  size_t index = info_cache->GetIndexOfBrowserStateWithPath(path);
-  if (index > info_cache->GetNumberOfBrowserStates())
-    return std::string();
-  return info_cache->GetGAIAIdOfBrowserStateAtIndex(index);
-}
-
-// Returns the email's domain of the identity associated with `gaia_id`.
-std::string GetDomainForGaiaId(ChromeBrowserState* browser_state,
-                               const std::string& gaia_id) {
-  ChromeAccountManagerService* account_manager_service =
-      ChromeAccountManagerServiceFactory::GetForBrowserState(browser_state);
-  id<SystemIdentity> identity =
-      account_manager_service->GetIdentityWithGaiaID(gaia_id);
-
-  NSString* user_email = identity.userEmail;
-  if (!user_email.length)
-    return std::string();
-
-  return gaia::ExtractDomainName(
-      gaia::SanitizeEmail(base::SysNSStringToUTF8(user_email)));
-}
-}
-
-ChromeBrowserStateRemovalController::ChromeBrowserStateRemovalController()
-    : has_changed_last_used_browser_state_(false) {}
-
-ChromeBrowserStateRemovalController*
-ChromeBrowserStateRemovalController::GetInstance() {
-  if (!g_chrome_browser_state_removal_helper) {
-    g_chrome_browser_state_removal_helper =
-        new ChromeBrowserStateRemovalController();
-  }
-  return g_chrome_browser_state_removal_helper;
-}
-
-void ChromeBrowserStateRemovalController::RemoveBrowserStatesIfNecessary() {
-  ApplicationContext* application_context = GetApplicationContext();
-  DCHECK(application_context);
-  ios::ChromeBrowserStateManager* manager =
-      application_context->GetChromeBrowserStateManager();
-  DCHECK(manager);
-  BrowserStateInfoCache* info_cache = manager->GetBrowserStateInfoCache();
-  DCHECK(info_cache);
-
-  std::string browser_state_to_keep = GetBrowserStatePathToKeep();
-  std::string browser_state_last_used = GetLastBrowserStatePathUsed();
-  if (browser_state_to_keep.empty()) {
-    // If no browser state was marked as to keep, keep the last used one.
-    browser_state_to_keep = browser_state_last_used;
-  }
-  if (browser_state_to_keep.empty()) {
-    browser_state_to_keep = kIOSChromeInitialBrowserState;
-  }
-  if (browser_state_to_keep != browser_state_last_used) {
-    std::string gaia_id =
-        GetGaiaIdForBrowserState(browser_state_to_keep, info_cache);
-    std::string last_used_gaia_id =
-        GetGaiaIdForBrowserState(browser_state_last_used, info_cache);
-    std::string last_used_domain = GetDomainForGaiaId(
-        manager->GetLastUsedBrowserState(), last_used_gaia_id);
-    if (gaia_id.empty() && last_used_domain == kGmailDomain) {
-      // If browser state to keep is not the last used one, wasn't
-      // authenticated, and the last used browser state was a normal account
-      // (domain starts with "gmail"), keep the last used browser state instead.
-      browser_state_to_keep = browser_state_last_used;
-    }
-  }
-
-  bool is_removing_browser_states = false;
-  std::vector<base::FilePath> browser_states_to_nuke;
-  for (size_t index = 0; index < info_cache->GetNumberOfBrowserStates();
-       ++index) {
-    base::FilePath path = info_cache->GetPathOfBrowserStateAtIndex(index);
-    if (path.BaseName().MaybeAsASCII() == browser_state_to_keep) {
-      continue;
-    }
-    is_removing_browser_states = true;
-    // Note: if there is more than 2 browser states (which should never be the
-    // case), this might show the wrong GAIA Id. However, in this unlikely case,
-    // there isn't really more that can be done.
-    removed_browser_state_gaia_id_ =
-        info_cache->GetGAIAIdOfBrowserStateAtIndex(index);
-    browser_states_to_nuke.push_back(path);
-    info_cache->RemoveBrowserState(path);
-  }
-
-  // Update the last used browser state if the old one was removed.
-  if (browser_state_to_keep != browser_state_last_used) {
-    has_changed_last_used_browser_state_ = true;
-    SetLastBrowserStatePathUsed(browser_state_to_keep);
-  }
-
-  if (is_removing_browser_states) {
-    SetHasBrowserStateBeenRemoved(true);
-    base::ThreadPool::PostTask(
-        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
-        base::BindOnce(&NukeBrowserStates, browser_states_to_nuke));
-  }
-}
-
-bool ChromeBrowserStateRemovalController::HasBrowserStateBeenRemoved() {
-  return [[NSUserDefaults standardUserDefaults]
-      boolForKey:kHasBrowserStateBeenRemovedKey];
-}
-
-void ChromeBrowserStateRemovalController::SetHasBrowserStateBeenRemoved(
-    bool value) {
-  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
-  [defaults setBool:value forKey:kHasBrowserStateBeenRemovedKey];
-  [defaults synchronize];
-}
-
-std::string ChromeBrowserStateRemovalController::GetBrowserStatePathToKeep() {
-  return base::SysNSStringToUTF8([[NSUserDefaults standardUserDefaults]
-      stringForKey:kPathToBrowserStateToKeepKey]);
-}
-
-std::string ChromeBrowserStateRemovalController::GetLastBrowserStatePathUsed() {
-  return GetApplicationContext()->GetLocalState()->GetString(
-      prefs::kBrowserStateLastUsed);
-}
-
-void ChromeBrowserStateRemovalController::SetLastBrowserStatePathUsed(
-    const std::string& browser_state_path) {
-  GetApplicationContext()->GetLocalState()->SetString(
-      prefs::kBrowserStateLastUsed, browser_state_path);
-}
diff --git a/ios/chrome/browser/shared/public/commands/overflow_menu_customization_commands.h b/ios/chrome/browser/shared/public/commands/overflow_menu_customization_commands.h
index b6c7bc9..cb637f3f 100644
--- a/ios/chrome/browser/shared/public/commands/overflow_menu_customization_commands.h
+++ b/ios/chrome/browser/shared/public/commands/overflow_menu_customization_commands.h
@@ -9,9 +9,9 @@
 // process.
 @protocol OverflowMenuCustomizationCommands
 
-- (void)showActionCustomization;
+- (void)showMenuCustomization;
 
-- (void)hideActionCustomization;
+- (void)hideMenuCustomization;
 
 @end
 
diff --git a/ios/chrome/browser/tabs/tab_pickup/features.h b/ios/chrome/browser/tabs/tab_pickup/features.h
index 4535cde..99fa8eb 100644
--- a/ios/chrome/browser/tabs/tab_pickup/features.h
+++ b/ios/chrome/browser/tabs/tab_pickup/features.h
@@ -37,8 +37,12 @@
 // disabled by the user.
 bool IsTabPickupDisabledByUser();
 
-// Convenience method for determining the tab pickup threshold.
+// Convenience method for determining the max tab pickup threshold.
 // The default is 10 minutes.
-const base::TimeDelta TabPickupTimeThreshold();
+const base::TimeDelta TabPickupMaxTimeThreshold();
+
+// Convenience method for determining the min tab pickup threshold.
+// The default is 30 seconds.
+const base::TimeDelta TabPickupMinTimeThreshold();
 
 #endif  // IOS_CHROME_BROWSER_TABS_TAB_PICKUP_FEATURES_H_
diff --git a/ios/chrome/browser/tabs/tab_pickup/features.mm b/ios/chrome/browser/tabs/tab_pickup/features.mm
index 7859e63..dada47b 100644
--- a/ios/chrome/browser/tabs/tab_pickup/features.mm
+++ b/ios/chrome/browser/tabs/tab_pickup/features.mm
@@ -35,7 +35,16 @@
   return base::FeatureList::IsEnabled(kTabPickupMinimumDelay);
 }
 
-const base::TimeDelta TabPickupTimeThreshold() {
+const base::TimeDelta TabPickupMinTimeThreshold() {
+  CHECK(IsTabPickupEnabled());
+  if (IsTabPickupMinimumDelayEnabled()) {
+    return base::Seconds(0);
+  } else {
+    return base::Seconds(30);
+  }
+}
+
+const base::TimeDelta TabPickupMaxTimeThreshold() {
   CHECK(IsTabPickupEnabled());
 
   std::string feature_param = base::GetFieldTrialParamValueByFeature(
diff --git a/ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.mm b/ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.mm
index 4de58623..a8ab05f 100644
--- a/ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.mm
+++ b/ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.mm
@@ -133,16 +133,21 @@
 
   auto const synced_sessions =
       std::make_unique<synced_sessions::SyncedSessions>(session_sync_service_);
-  if (synced_sessions->GetSessionCount()) {
-    // Get the last synced session.
-    session_ = synced_sessions->GetSession(0);
 
-    // Check that the last synced tab is younger than the tab pickup time
-    // threshold.
+  for (size_t i = 0; i < synced_sessions->GetSessionCount(); ++i) {
+    const synced_sessions::DistantSession* session =
+        synced_sessions->GetSession(i);
+    // Check if the synced tab meets tab pickup time
+    // thresholds.
     const base::TimeDelta modified_time =
-        base::Time::Now() - session_->modified_time;
-    if (modified_time < TabPickupTimeThreshold()) {
+        base::Time::Now() - session->modified_time;
+    if (modified_time > TabPickupMaxTimeThreshold()) {
+      return;
+    }
+    if (modified_time > TabPickupMinTimeThreshold()) {
+      session_ = session;
       SetupInfoBarDelegate();
+      return;
     }
   }
 }
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/BUILD.gn b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/BUILD.gn
new file mode 100644
index 0000000..eedef25
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/BUILD.gn
@@ -0,0 +1,43 @@
+# 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.
+
+source_set("account_picker_confirmation") {
+  sources = [
+    "account_picker_confirmation_screen_constants.h",
+    "account_picker_confirmation_screen_constants.mm",
+    "account_picker_confirmation_screen_consumer.h",
+    "account_picker_confirmation_screen_coordinator.h",
+    "account_picker_confirmation_screen_coordinator.mm",
+    "account_picker_confirmation_screen_coordinator_delegate.h",
+    "account_picker_confirmation_screen_mediator.h",
+    "account_picker_confirmation_screen_mediator.mm",
+    "account_picker_confirmation_screen_view_controller.h",
+    "account_picker_confirmation_screen_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/signin/public/base",
+    "//components/strings:components_strings",
+    "//ios/chrome/app/strings:ios_chromium_strings_grit",
+    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
+    "//ios/chrome/browser/shared/model/browser",
+    "//ios/chrome/browser/shared/model/browser_state",
+    "//ios/chrome/browser/shared/public/features",
+    "//ios/chrome/browser/shared/ui/util",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:system_identity",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui/account_picker:account_picker_configuration",
+    "//ios/chrome/browser/ui/account_picker:account_picker_layout",
+    "//ios/chrome/browser/ui/account_picker/account_picker_screen",
+    "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils",
+    "//ios/chrome/browser/ui/authentication/signin:constants",
+    "//ios/chrome/browser/ui/authentication/views",
+    "//ios/chrome/common:button_config",
+    "//ios/chrome/common/ui/colors",
+    "//ios/chrome/common/ui/util",
+    "//ui/base",
+  ]
+}
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/DEPS b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/DEPS
new file mode 100644
index 0000000..f8c7f710
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+ios/chrome/browser/ui/authentication/views/identity_button_control.h",
+  "+ios/chrome/browser/ui/authentication/views/identity_view.h",
+]
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.h
new file mode 100644
index 0000000..1c363a9
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.h
@@ -0,0 +1,18 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSTANTS_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSTANTS_H_
+
+#import <Foundation/Foundation.h>
+
+// Accessibility identifier of the account picker confirmation screen primary
+// button.
+extern NSString* const kAccountPickerPrimaryButtonAccessibilityIdentifier;
+
+// Accessibility identifier of the account picker confirmation screen cancel
+// button.
+extern NSString* const kAccountPickerCancelButtonAccessibilityIdentifier;
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.mm b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.mm
new file mode 100644
index 0000000..7384123
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.mm
@@ -0,0 +1,11 @@
+// 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/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.h"
+
+NSString* const kAccountPickerPrimaryButtonAccessibilityIdentifier =
+    @"AccountPickerPrimaryButtonAccessibilityIdentifier";
+
+NSString* const kAccountPickerCancelButtonAccessibilityIdentifier =
+    @"AccountPickerCancelButtonAccessibilityIdentifier";
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_consumer.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_consumer.h
new file mode 100644
index 0000000..6dceb56
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_consumer.h
@@ -0,0 +1,25 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSUMER_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSUMER_H_
+
+#import <Foundation/Foundation.h>
+
+// Consumer for Account picker confirmation screen.
+@protocol AccountPickerConfirmationScreenConsumer <NSObject>
+
+// Updates the user information, and show the default account.
+- (void)showDefaultAccountWithFullName:(NSString*)fullName
+                             givenName:(NSString*)givenName
+                                 email:(NSString*)email
+                                avatar:(UIImage*)avatar;
+
+// Disables display for the default account button, for when an account isn't
+// available on the device.
+- (void)hideDefaultAccount;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.h
new file mode 100644
index 0000000..31063f3
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.h
@@ -0,0 +1,50 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_H_
+
+#import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h"
+
+@class AccountPickerConfiguration;
+@protocol AccountPickerConfirmationScreenCoordinatorDelegate;
+@protocol AccountPickerLayoutDelegate;
+@protocol SystemIdentity;
+
+// This coordinator presents the an account picker confirmation screen which
+// lets the user pick one of the accounts on the device to perform some action
+// e.g. save an image to that account's Photos library. A switch can be shown to
+// let the user choose whether to be presented the account picker every time
+// that action is performed.
+@interface AccountPickerConfirmationScreenCoordinator : ChromeCoordinator
+
+// Inits the coordinator.
+- (instancetype)initWithBaseViewController:(UIViewController*)baseViewController
+                                   browser:(Browser*)browser
+                             configuration:
+                                 (AccountPickerConfiguration*)configuration
+    NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)initWithBaseViewController:(UIViewController*)baseViewController
+                                   browser:(Browser*)browser NS_UNAVAILABLE;
+
+@property(nonatomic, strong, readonly) UIViewController* viewController;
+@property(nonatomic, weak)
+    id<AccountPickerConfirmationScreenCoordinatorDelegate>
+        delegate;
+@property(nonatomic, weak) id<AccountPickerLayoutDelegate> layoutDelegate;
+// This property can be used only after the coordinator is started.
+@property(nonatomic, strong) id<SystemIdentity> selectedIdentity;
+// If `showAskEveryTimeSwitch` is YES, then this is the current value of the
+// switch. Otherwise defaults to YES.
+@property(nonatomic, assign, readonly) BOOL askEveryTime;
+
+// Starts the spinner and disables buttons.
+- (void)startValidationSpinner;
+// Stops the spinner and enables buttons.
+- (void)stopValidationSpinner;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.mm b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.mm
new file mode 100644
index 0000000..9aa4774
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.mm
@@ -0,0 +1,135 @@
+// 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/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator.h"
+
+#import "ios/chrome/browser/shared/model/browser/browser.h"
+#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
+#import "ios/chrome/browser/signin/system_identity.h"
+#import "ios/chrome/browser/sync/sync_service_factory.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator_delegate.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.h"
+
+@interface AccountPickerConfirmationScreenCoordinator () <
+    AccountPickerConfirmationScreenActionDelegate,
+    AccountPickerConfirmationScreenMediatorDelegate>
+
+@end
+
+@implementation AccountPickerConfirmationScreenCoordinator {
+  // The account picker configuration.
+  __strong AccountPickerConfiguration* _configuration;
+  // View controller.
+  __strong AccountPickerConfirmationScreenViewController*
+      _confirmationViewController;
+  // Mediator.
+  __strong AccountPickerConfirmationScreenMediator* _mediator;
+}
+
+- (instancetype)initWithBaseViewController:(UIViewController*)baseViewController
+                                   browser:(Browser*)browser
+                             configuration:
+                                 (AccountPickerConfiguration*)configuration {
+  self = [super initWithBaseViewController:baseViewController browser:browser];
+  if (self) {
+    _configuration = configuration;
+  }
+  return self;
+}
+
+- (void)start {
+  [super start];
+  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  _mediator = [[AccountPickerConfirmationScreenMediator alloc]
+      initWithAccountManagerService:ChromeAccountManagerServiceFactory::
+                                        GetForBrowserState(browserState)
+                      configuration:_configuration];
+  _mediator.delegate = self;
+  _confirmationViewController =
+      [[AccountPickerConfirmationScreenViewController alloc]
+          initWithConfiguration:_configuration];
+  _mediator.consumer = _confirmationViewController;
+  _confirmationViewController.actionDelegate = self;
+  _confirmationViewController.layoutDelegate = _layoutDelegate;
+  [_confirmationViewController view];
+}
+
+- (void)startValidationSpinner {
+  [_confirmationViewController startSpinner];
+}
+
+- (void)stopValidationSpinner {
+  [_confirmationViewController stopSpinner];
+}
+
+- (void)stop {
+  [_mediator disconnect];
+  _mediator = nil;
+  _confirmationViewController = nil;
+  [super stop];
+}
+
+- (void)dealloc {
+  // TODO(crbug.com/1454777)
+  DUMP_WILL_BE_CHECK(!_mediator);
+}
+
+#pragma mark - Properties
+
+- (UIViewController*)viewController {
+  return _confirmationViewController;
+}
+
+- (id<SystemIdentity>)selectedIdentity {
+  return _mediator.selectedIdentity;
+}
+
+- (void)setSelectedIdentity:(id<SystemIdentity>)identity {
+  DCHECK(_mediator);
+  _mediator.selectedIdentity = identity;
+}
+
+#pragma mark - AccountPickerConfirmationScreenMediatorDelegate
+
+- (void)accountPickerConfirmationScreenMediatorNoIdentities:
+    (AccountPickerConfirmationScreenMediator*)mediator {
+  [_delegate accountPickerConfirmationScreenCoordinatorAllIdentityRemoved:self];
+}
+
+#pragma mark - AccountPickerConfirmationScreenActionDelegate
+
+- (void)accountPickerConfirmationScreenViewControllerCancel:
+    (AccountPickerConfirmationScreenViewController*)viewController {
+  [_delegate accountPickerConfirmationScreenCoordinatorCancel:self];
+}
+
+- (void)accountPickerConfirmationScreenViewControllerOpenAccountList:
+    (AccountPickerConfirmationScreenViewController*)viewController {
+  [_delegate
+      accountPickerConfirmationScreenCoordinatorOpenAccountPickerSelectionScreen:
+          self];
+}
+
+- (void)accountPickerConfirmationScreenViewController:
+            (AccountPickerConfirmationScreenViewController*)viewController
+                                      setAskEveryTime:(BOOL)askEveryTime {
+  _askEveryTime = askEveryTime;
+}
+
+- (void)
+    accountPickerConfirmationScreenViewControllerContinueWithSelectedIdentity:
+        (AccountPickerConfirmationScreenViewController*)viewController {
+  [_delegate accountPickerConfirmationScreenCoordinatorSubmit:self];
+}
+
+- (void)accountPickerConfirmationScreenViewControllerAddAccountAndSignin:
+    (AccountPickerConfirmationScreenViewController*)viewController {
+  [_delegate accountPickerConfirmationScreenCoordinatorOpenAddAccount:self];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator_delegate.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator_delegate.h
new file mode 100644
index 0000000..3c53d5b2c
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_coordinator_delegate.h
@@ -0,0 +1,37 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_DELEGATE_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_DELEGATE_H_
+
+#import <Foundation/Foundation.h>
+
+@class AccountPickerConfirmationScreenCoordinator;
+
+@protocol AccountPickerConfirmationScreenCoordinatorDelegate <NSObject>
+
+// Called when the last identity has been removed (by another app).
+- (void)accountPickerConfirmationScreenCoordinatorAllIdentityRemoved:
+    (AccountPickerConfirmationScreenCoordinator*)coordinator;
+
+// Called when the user wants to skip the consistency promo.
+- (void)accountPickerConfirmationScreenCoordinatorCancel:
+    (AccountPickerConfirmationScreenCoordinator*)coordinator;
+
+// Called when the user wants to choose a different identity.
+- (void)
+    accountPickerConfirmationScreenCoordinatorOpenAccountPickerSelectionScreen:
+        (AccountPickerConfirmationScreenCoordinator*)coordinator;
+
+// Called when the user wants to sign-in with the default identity.
+- (void)accountPickerConfirmationScreenCoordinatorSubmit:
+    (AccountPickerConfirmationScreenCoordinator*)coordinator;
+
+// Called when the user wants to sign in without an existing account.
+- (void)accountPickerConfirmationScreenCoordinatorOpenAddAccount:
+    (AccountPickerConfirmationScreenCoordinator*)coordinator;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_COORDINATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.h
new file mode 100644
index 0000000..87658f37
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.h
@@ -0,0 +1,49 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_MEDIATOR_H_
+
+#import <Foundation/Foundation.h>
+
+@class AccountPickerConfiguration;
+@class AccountPickerConfirmationScreenMediator;
+@protocol AccountPickerConfirmationScreenConsumer;
+class ChromeAccountManagerService;
+@protocol SystemIdentity;
+
+// Delegate for AccountPickerConfirmationScreenMediator.
+@protocol AccountPickerConfirmationScreenMediatorDelegate <NSObject>
+
+// Called when all identities are removed.
+- (void)accountPickerConfirmationScreenMediatorNoIdentities:
+    (AccountPickerConfirmationScreenMediator*)mediator;
+
+@end
+
+// Mediator for AccountPickerConfirmationScreenCoordinator.
+@interface AccountPickerConfirmationScreenMediator : NSObject
+
+// The designated initializer.
+- (instancetype)initWithAccountManagerService:
+                    (ChromeAccountManagerService*)accountManagerService
+                                configuration:
+                                    (AccountPickerConfiguration*)configuration
+    NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+@property(nonatomic, weak) id<AccountPickerConfirmationScreenMediatorDelegate>
+    delegate;
+@property(nonatomic, strong) id<AccountPickerConfirmationScreenConsumer>
+    consumer;
+// Identity presented to the user.
+@property(nonatomic, strong) id<SystemIdentity> selectedIdentity;
+
+// Disconnect the mediator.
+- (void)disconnect;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm
new file mode 100644
index 0000000..29c7c87
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm
@@ -0,0 +1,128 @@
+// 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/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_mediator.h"
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/shared/public/features/features.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
+#import "ios/chrome/browser/signin/system_identity.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_configuration.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_consumer.h"
+
+@interface AccountPickerConfirmationScreenMediator () <
+    ChromeAccountManagerServiceObserver> {
+}
+
+@end
+
+@implementation AccountPickerConfirmationScreenMediator {
+  // Account manager service with observer.
+  ChromeAccountManagerService* _accountManagerService;
+  std::unique_ptr<ChromeAccountManagerServiceObserverBridge>
+      _accountManagerServiceObserver;
+  // Account picker configuration.
+  __strong AccountPickerConfiguration* _configuration;
+  // Avatar of selected identity.
+  __strong UIImage* _avatar;
+}
+
+- (instancetype)initWithAccountManagerService:
+                    (ChromeAccountManagerService*)accountManagerService
+                                configuration:
+                                    (AccountPickerConfiguration*)configuration {
+  if (self = [super init]) {
+    DCHECK(accountManagerService);
+    _accountManagerService = accountManagerService;
+    _accountManagerServiceObserver =
+        std::make_unique<ChromeAccountManagerServiceObserverBridge>(
+            self, _accountManagerService);
+    _configuration = configuration;
+  }
+  return self;
+}
+
+- (void)dealloc {
+  DCHECK(!_accountManagerService);
+}
+
+- (void)disconnect {
+  _accountManagerService = nullptr;
+  _accountManagerServiceObserver.reset();
+}
+
+#pragma mark - Properties
+
+- (void)setConsumer:(id<AccountPickerConfirmationScreenConsumer>)consumer {
+  _consumer = consumer;
+  [self selectSelectedIdentity];
+}
+
+- (void)setSelectedIdentity:(id<SystemIdentity>)identity {
+  if (!IsConsistencyNewAccountInterfaceEnabled()) {
+    DCHECK(identity);
+  }
+  if ([_selectedIdentity isEqual:identity]) {
+    return;
+  }
+  _selectedIdentity = identity;
+  [self updateSelectedIdentityUI];
+}
+
+#pragma mark - Private
+
+// Updates the default identity, or hide the default identity if there isn't
+// one present on the device.
+- (void)selectSelectedIdentity {
+  if (!_accountManagerService) {
+    return;
+  }
+
+  id<SystemIdentity> identity = _accountManagerService->GetDefaultIdentity();
+
+  if (!IsConsistencyNewAccountInterfaceEnabled() && !identity) {
+    [_delegate accountPickerConfirmationScreenMediatorNoIdentities:self];
+    return;
+  }
+
+  // Here, default identity may be nil.
+  _selectedIdentity = identity;
+}
+
+// Updates the view controller using the default identity, or hide the default
+// identity button if no identity is present on device.
+- (void)updateSelectedIdentityUI {
+  if (!IsConsistencyNewAccountInterfaceEnabled()) {
+    DCHECK(_selectedIdentity);
+  }
+
+  if (!_selectedIdentity) {
+    [_consumer hideDefaultAccount];
+    return;
+  }
+
+  id<SystemIdentity> selectedIdentity = _selectedIdentity;
+  UIImage* avatar = _accountManagerService->GetIdentityAvatarWithIdentity(
+      selectedIdentity, IdentityAvatarSize::TableViewIcon);
+  [_consumer showDefaultAccountWithFullName:selectedIdentity.userFullName
+                                  givenName:selectedIdentity.userGivenName
+                                      email:selectedIdentity.userEmail
+                                     avatar:avatar];
+}
+
+#pragma mark - ChromeAccountManagerServiceObserver
+
+- (void)identityListChanged {
+  [self selectSelectedIdentity];
+}
+
+- (void)identityUpdated:(id<SystemIdentity>)identity {
+  if ([_selectedIdentity isEqual:identity]) {
+    [self updateSelectedIdentityUI];
+  }
+}
+
+@end
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.h b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.h
new file mode 100644
index 0000000..eac6789
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.h
@@ -0,0 +1,58 @@
+// 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 IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_consumer.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_screen/account_picker_screen_view_controller.h"
+
+@class AccountPickerConfiguration;
+@class AccountPickerConfirmationScreenViewController;
+@protocol AccountPickerLayoutDelegate;
+
+// Delegate protocol for AccountPickerConfirmationScreenViewController.
+@protocol AccountPickerConfirmationScreenActionDelegate <NSObject>
+
+// Called when the user taps on the Cancel button.
+- (void)accountPickerConfirmationScreenViewControllerCancel:
+    (AccountPickerConfirmationScreenViewController*)viewController;
+// Called when the user taps on the identity chooser button.
+- (void)accountPickerConfirmationScreenViewControllerOpenAccountList:
+    (AccountPickerConfirmationScreenViewController*)viewController;
+// Called when the user toggles the "Ask me every time"
+// switch.
+- (void)accountPickerConfirmationScreenViewController:
+            (AccountPickerConfirmationScreenViewController*)viewController
+                                      setAskEveryTime:(BOOL)askEveryTime;
+// Called when the user taps on the submit button.
+- (void)
+    accountPickerConfirmationScreenViewControllerContinueWithSelectedIdentity:
+        (AccountPickerConfirmationScreenViewController*)viewController;
+
+@end
+
+// View controller for AccountPickerConfirmationScreenCoordinator.
+@interface AccountPickerConfirmationScreenViewController
+    : UIViewController <AccountPickerScreenViewController,
+                        AccountPickerConfirmationScreenConsumer>
+
+- (instancetype)initWithConfiguration:
+    (AccountPickerConfiguration*)configuration;
+
+// Delegate for all the user actions.
+@property(nonatomic, weak) id<AccountPickerConfirmationScreenActionDelegate>
+    actionDelegate;
+@property(nonatomic, weak) id<AccountPickerLayoutDelegate> layoutDelegate;
+
+// Starts the spinner and disables buttons.
+- (void)startSpinner;
+// Stops the spinner and enables buttons.
+- (void)stopSpinner;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_ACCOUNT_PICKER_ACCOUNT_PICKER_CONFIRMATION_ACCOUNT_PICKER_CONFIRMATION_SCREEN_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm
new file mode 100644
index 0000000..3e3539c
--- /dev/null
+++ b/ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm
@@ -0,0 +1,417 @@
+// 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/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_view_controller.h"
+
+#import "base/notreached.h"
+#import "base/strings/sys_string_conversions.h"
+#import "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_configuration.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_confirmation/account_picker_confirmation_screen_constants.h"
+#import "ios/chrome/browser/ui/account_picker/account_picker_layout_delegate.h"
+#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h"
+#import "ios/chrome/browser/ui/authentication/views/identity_view.h"
+#import "ios/chrome/common/button_configuration_util.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/common/ui/util/button_util.h"
+#import "ios/chrome/common/ui/util/constraints_ui_util.h"
+#import "ios/chrome/common/ui/util/pointer_interaction_util.h"
+#import "ios/chrome/grit/ios_chromium_strings.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+// Margins for `_contentView` (top, bottom, leading and trailing).
+constexpr CGFloat kContentMargin = 16.;
+// Space between elements in `_contentView`.
+constexpr CGFloat kContentSpacing = 16.;
+// Extra top padding between the navigation bar of the scroll view and the
+// top edge of the scroll view.
+constexpr CGFloat kExtraNavBarTopPadding = 3.;
+// Vertical insets of primary button.
+constexpr CGFloat kPrimaryButtonVerticalInsets = 15.5;
+
+// Returns the width and height of a single pixel in point.
+CGFloat GetPixelLength() {
+  return 1.0 / [UIScreen mainScreen].scale;
+}
+
+}  // namespace
+
+@implementation AccountPickerConfirmationScreenViewController {
+  // View that contains all UI elements for the view controller. This view is
+  // the only subview of -[AccountPickerConfirmationScreenViewController view].
+  __strong UIStackView* _contentView;
+  // Button to present the default identity.
+  __strong IdentityButtonControl* _identityButtonControl;
+  // "Grouped" section containing the identity button and the switch.
+  // If there is no switch, then this is equal to `identityButtonControl`.
+  __strong UIView* _groupedIdentityButtonSection;
+  // Button to
+  // 1. confirm the default identity and sign-in when an account is available,
+  // or
+  // 2. add an account when no account is available on the device.
+  __strong UIButton* _primaryButton;
+  // Title for `_primaryButton` when it needs to show the text "Continue
+  // as…". This property is needed to hide the title the activity indicator is
+  // shown.
+  __strong NSString* _submitString;
+  // Activity indicator on top of `_primaryButton`.
+  __strong UIActivityIndicatorView* _activityIndicatorView;
+  // Switch to let the user decide whether they want to choose an account every
+  // time. Only shown if `_showAskEveryTimeSwitch` is YES.
+  __strong UISwitch* _askEveryTimeSwitch;
+  // The account picker configuration.
+  __strong AccountPickerConfiguration* _configuration;
+}
+
+- (instancetype)initWithConfiguration:
+    (AccountPickerConfiguration*)configuration {
+  self = [super init];
+  if (self) {
+    _configuration = configuration;
+  }
+  return self;
+}
+
+- (void)startSpinner {
+  // Add spinner.
+  DCHECK(!_activityIndicatorView);
+  _activityIndicatorView = [[UIActivityIndicatorView alloc] init];
+  _activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO;
+  _activityIndicatorView.color = [UIColor colorNamed:kSolidButtonTextColor];
+  [_primaryButton addSubview:_activityIndicatorView];
+  AddSameCenterConstraints(_activityIndicatorView, _primaryButton);
+  [_activityIndicatorView startAnimating];
+  // Disable buttons.
+  _identityButtonControl.enabled = NO;
+  _primaryButton.enabled = NO;
+  [_primaryButton setTitle:@"" forState:UIControlStateNormal];
+}
+
+- (void)stopSpinner {
+  // Remove spinner.
+  DCHECK(_activityIndicatorView);
+  [_activityIndicatorView removeFromSuperview];
+  _activityIndicatorView = nil;
+  // Show the IdentityButtonControl, since it may be hidden.
+  _identityButtonControl.hidden = NO;
+  // Enable buttons.
+  _identityButtonControl.enabled = YES;
+  _primaryButton.enabled = YES;
+  DCHECK(_submitString);
+  [_primaryButton setTitle:_submitString forState:UIControlStateNormal];
+}
+
+#pragma mark - UIViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+  _identityButtonControl.backgroundColor =
+      [UIColor colorNamed:kGroupedSecondaryBackgroundColor];
+}
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  // Set the navigation title in the left bar button item to have left
+  // alignment.
+  UILabel* titleLabel = [[UILabel alloc] init];
+  titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
+  titleLabel.text = _configuration.titleText;
+  titleLabel.textAlignment = NSTextAlignmentLeft;
+  titleLabel.adjustsFontSizeToFitWidth = YES;
+  titleLabel.minimumScaleFactor = 0.1;
+
+  UIButton* cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
+  [cancelButton setTitle:l10n_util::GetNSString(IDS_CANCEL)
+                forState:UIControlStateNormal];
+  cancelButton.titleLabel.font =
+      [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
+  [cancelButton addTarget:self
+                   action:@selector(cancelButtonAction:)
+         forControlEvents:UIControlEventTouchUpInside];
+  cancelButton.accessibilityIdentifier =
+      kAccountPickerCancelButtonAccessibilityIdentifier;
+  // Put titleLabel and cancelButton each in a wrapper UIView so we can adjust
+  // their top padding.
+  UIView* titleLabelWrapper = [[UIView alloc] init];
+  UIView* cancelButtonWrapper = [[UIView alloc] init];
+  [titleLabelWrapper addSubview:titleLabel];
+  [cancelButtonWrapper addSubview:cancelButton];
+  titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
+  cancelButton.translatesAutoresizingMaskIntoConstraints = NO;
+
+  // Fix the positions of titleLabel and cancelButton relative to their
+  // wrappers.
+  [NSLayoutConstraint activateConstraints:@[
+    [titleLabel.topAnchor constraintEqualToAnchor:titleLabelWrapper.topAnchor
+                                         constant:kExtraNavBarTopPadding],
+    [titleLabel.bottomAnchor
+        constraintEqualToAnchor:titleLabelWrapper.bottomAnchor],
+    [titleLabel.leadingAnchor
+        constraintEqualToAnchor:titleLabelWrapper.leadingAnchor],
+    [titleLabel.trailingAnchor
+        constraintEqualToAnchor:titleLabelWrapper.trailingAnchor],
+    [cancelButton.topAnchor
+        constraintEqualToAnchor:cancelButtonWrapper.topAnchor
+                       constant:kExtraNavBarTopPadding],
+    [cancelButton.bottomAnchor
+        constraintEqualToAnchor:cancelButtonWrapper.bottomAnchor],
+    [cancelButton.leadingAnchor
+        constraintEqualToAnchor:cancelButtonWrapper.leadingAnchor],
+    [cancelButton.trailingAnchor
+        constraintEqualToAnchor:cancelButtonWrapper.trailingAnchor]
+  ]];
+
+  // Add the wrappers to the navigation bar.
+  UIBarButtonItem* leftItem =
+      [[UIBarButtonItem alloc] initWithCustomView:titleLabelWrapper];
+  UIBarButtonItem* rightItem =
+      [[UIBarButtonItem alloc] initWithCustomView:cancelButtonWrapper];
+  self.navigationItem.leftBarButtonItem = leftItem;
+  self.navigationItem.rightBarButtonItem = rightItem;
+
+  // Replace the controller view by the scroll view.
+  UIScrollView* scrollView = [[UIScrollView alloc] init];
+  scrollView.translatesAutoresizingMaskIntoConstraints = NO;
+  [self.view addSubview:scrollView];
+  [NSLayoutConstraint activateConstraints:@[
+    [scrollView.topAnchor
+        constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor],
+    [scrollView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
+    [scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
+    [scrollView.trailingAnchor
+        constraintEqualToAnchor:self.view.trailingAnchor],
+  ]];
+
+  // Create content view.
+  _contentView = [[UIStackView alloc] init];
+  _contentView.axis = UILayoutConstraintAxisVertical;
+  _contentView.distribution = UIStackViewDistributionEqualSpacing;
+  _contentView.alignment = UIStackViewAlignmentCenter;
+  _contentView.spacing = kContentSpacing;
+  _contentView.translatesAutoresizingMaskIntoConstraints = NO;
+  [scrollView addSubview:_contentView];
+  UILayoutGuide* contentLayoutGuide = scrollView.contentLayoutGuide;
+  UILayoutGuide* frameLayoutGuide = scrollView.safeAreaLayoutGuide;
+  [NSLayoutConstraint activateConstraints:@[
+    [contentLayoutGuide.topAnchor constraintEqualToAnchor:_contentView.topAnchor
+                                                 constant:-kContentMargin],
+    [contentLayoutGuide.bottomAnchor
+        constraintEqualToAnchor:_contentView.bottomAnchor
+                       constant:kContentMargin],
+    [frameLayoutGuide.leadingAnchor
+        constraintEqualToAnchor:_contentView.leadingAnchor
+                       constant:-kContentMargin],
+    [frameLayoutGuide.trailingAnchor
+        constraintEqualToAnchor:_contentView.trailingAnchor
+                       constant:kContentMargin],
+  ]];
+
+  // Add the label.
+  NSString* bodyText = _configuration.bodyText;
+  if (bodyText) {
+    UILabel* label = [[UILabel alloc] init];
+    label.text = bodyText;
+    label.textColor = [UIColor colorNamed:kGrey700Color];
+    label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
+    label.numberOfLines = 0;
+    [_contentView addArrangedSubview:label];
+    [label.widthAnchor constraintEqualToAnchor:_contentView.widthAnchor]
+        .active = YES;
+  }
+
+  // Add IdentityButtonControl for the default identity.
+  _identityButtonControl =
+      [[IdentityButtonControl alloc] initWithFrame:CGRectZero];
+  _identityButtonControl.arrowDirection = IdentityButtonControlArrowRight;
+  _identityButtonControl.identityViewStyle = IdentityViewStyleConsistency;
+  [_identityButtonControl addTarget:self
+                             action:@selector(identityButtonControlAction:
+                                                                 forEvent:)
+                   forControlEvents:UIControlEventTouchUpInside];
+
+  UIView* groupedIdentityButtonSection = _identityButtonControl;
+  if (_configuration.askEveryTimeSwitchLabelText != nil) {
+    _identityButtonControl.layer.cornerRadius = 0;
+    UIStackView* identityStackView = [[UIStackView alloc] init];
+    identityStackView.axis = UILayoutConstraintAxisVertical;
+    identityStackView.translatesAutoresizingMaskIntoConstraints = NO;
+    identityStackView.backgroundColor = _identityButtonControl.backgroundColor;
+    identityStackView.clipsToBounds = YES;
+
+    UIView* separator = [[UIView alloc] init];
+    separator.backgroundColor = [UIColor colorNamed:kSeparatorColor];
+    separator.translatesAutoresizingMaskIntoConstraints = NO;
+
+    UIStackView* switchWithLabel = [[UIStackView alloc] init];
+    switchWithLabel.axis = UILayoutConstraintAxisHorizontal;
+    switchWithLabel.translatesAutoresizingMaskIntoConstraints = NO;
+    switchWithLabel.alignment = UIStackViewAlignmentCenter;
+
+    UILabel* askEveryTimeLabel = [[UILabel alloc] init];
+    askEveryTimeLabel.text = _configuration.askEveryTimeSwitchLabelText;
+    askEveryTimeLabel.textColor = [UIColor colorNamed:kTextSecondaryColor];
+    askEveryTimeLabel.font =
+        [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
+    _askEveryTimeSwitch = [[UISwitch alloc] init];
+    [_askEveryTimeSwitch addTarget:self
+                            action:@selector(askEveryTimeSwitchAction:)
+                  forControlEvents:UIControlEventValueChanged];
+    _askEveryTimeSwitch.on = YES;
+    [switchWithLabel addArrangedSubview:askEveryTimeLabel];
+    [switchWithLabel addArrangedSubview:_askEveryTimeSwitch];
+
+    UIView* switchWithLabelContainer = [[UIView alloc] init];
+    switchWithLabelContainer.translatesAutoresizingMaskIntoConstraints = NO;
+    [switchWithLabelContainer addSubview:switchWithLabel];
+    AddSameConstraintsWithInsets(switchWithLabel, switchWithLabelContainer,
+                                 NSDirectionalEdgeInsetsMake(5., 16., 5., 16.));
+
+    [identityStackView addArrangedSubview:_identityButtonControl];
+    [identityStackView addArrangedSubview:separator];
+    [identityStackView addArrangedSubview:switchWithLabelContainer];
+
+    [NSLayoutConstraint activateConstraints:@[
+      // Identity button constraints
+      [_identityButtonControl.widthAnchor
+          constraintEqualToAnchor:identityStackView.widthAnchor],
+      // Separator constraints
+      [separator.leadingAnchor
+          constraintEqualToAnchor:identityStackView.leadingAnchor
+                         constant:16.],
+      [separator.trailingAnchor
+          constraintEqualToAnchor:identityStackView.trailingAnchor],
+      [separator.heightAnchor constraintEqualToConstant:GetPixelLength()],
+      // Switch with label constraints
+      [switchWithLabelContainer.widthAnchor
+          constraintEqualToAnchor:identityStackView.widthAnchor],
+      [switchWithLabelContainer.heightAnchor
+          constraintGreaterThanOrEqualToConstant:58.]
+    ]];
+
+    groupedIdentityButtonSection = identityStackView;
+  }
+
+  _groupedIdentityButtonSection = groupedIdentityButtonSection;
+  [_contentView addArrangedSubview:_groupedIdentityButtonSection];
+  [NSLayoutConstraint activateConstraints:@[
+    [_groupedIdentityButtonSection.widthAnchor
+        constraintEqualToAnchor:_contentView.widthAnchor],
+  ]];
+
+  // Add the primary button (the "Continue as"/"Sign in" button).
+  _primaryButton = PrimaryActionButton(/* pointer_interaction_enabled */ YES);
+  SetContentEdgeInsets(_primaryButton,
+                       UIEdgeInsetsMake(kPrimaryButtonVerticalInsets, 0,
+                                        kPrimaryButtonVerticalInsets, 0));
+  _primaryButton.accessibilityIdentifier =
+      kAccountPickerPrimaryButtonAccessibilityIdentifier;
+  _primaryButton.translatesAutoresizingMaskIntoConstraints = NO;
+  [_primaryButton addTarget:self
+                     action:@selector(primaryButtonAction:)
+           forControlEvents:UIControlEventTouchUpInside];
+
+  [_contentView addArrangedSubview:_primaryButton];
+
+  [NSLayoutConstraint activateConstraints:@[
+    [_primaryButton.widthAnchor
+        constraintEqualToAnchor:_contentView.widthAnchor]
+  ]];
+  // Adjust the identity button control rounded corners to the same value than
+  // the "continue as" button.
+  _groupedIdentityButtonSection.layer.cornerRadius =
+      _primaryButton.layer.cornerRadius;
+
+  // Ensure that keyboard is hidden.
+  UIResponder* firstResponder = GetFirstResponder();
+  [firstResponder resignFirstResponder];
+}
+
+#pragma mark - UI actions
+
+- (void)cancelButtonAction:(id)sender {
+  [_actionDelegate accountPickerConfirmationScreenViewControllerCancel:self];
+}
+
+- (void)identityButtonControlAction:(id)sender forEvent:(UIEvent*)event {
+  [_actionDelegate
+      accountPickerConfirmationScreenViewControllerOpenAccountList:self];
+}
+
+- (void)askEveryTimeSwitchAction:(id)sender {
+  [_actionDelegate
+      accountPickerConfirmationScreenViewController:self
+                                    setAskEveryTime:_askEveryTimeSwitch.on];
+}
+
+- (void)primaryButtonAction:
+    (AccountPickerConfirmationScreenViewController*)viewController {
+  [_actionDelegate
+      accountPickerConfirmationScreenViewControllerContinueWithSelectedIdentity:
+          self];
+}
+
+#pragma mark - AccountPickerScreenViewController
+
+- (CGFloat)layoutFittingHeightForWidth:(CGFloat)width {
+  CGFloat contentViewWidth = width - self.view.safeAreaInsets.left -
+                             self.view.safeAreaInsets.right -
+                             kContentMargin * 2;
+  CGSize size = CGSizeMake(contentViewWidth, 0);
+  size = [_contentView
+        systemLayoutSizeFittingSize:size
+      withHorizontalFittingPriority:UILayoutPriorityRequired
+            verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
+  CGFloat safeAreaInsetsHeight = 0;
+  switch (_layoutDelegate.displayStyle) {
+    case kAccountPickerSheetDisplayStyleBottom:
+      safeAreaInsetsHeight =
+          self.navigationController.view.window.safeAreaInsets.bottom;
+      break;
+    case kAccountPickerSheetDisplayStyleCentered:
+      break;
+  }
+  // Safe area insets needs to be based on the window since the `self.view`
+  // might not be part of the window hierarchy when the animation is configured.
+  return self.navigationController.navigationBar.frame.size.height +
+         kContentMargin + size.height + kContentMargin + safeAreaInsetsHeight;
+}
+
+#pragma mark - AccountPickerConfirmationScreenConsumer
+
+- (void)showDefaultAccountWithFullName:(NSString*)fullName
+                             givenName:(NSString*)givenName
+                                 email:(NSString*)email
+                                avatar:(UIImage*)avatar {
+  if (!self.viewLoaded) {
+    // Load the view.
+    [self view];
+  }
+  _submitString = _configuration.submitButtonTitle;
+
+  [_identityButtonControl setIdentityName:fullName email:email];
+  [_identityButtonControl setIdentityAvatar:avatar];
+
+  // If spinner is active, delay UI updates until stopSpinner() is called.
+  if (!_activityIndicatorView) {
+    [_primaryButton setTitle:_submitString forState:UIControlStateNormal];
+    _identityButtonControl.hidden = NO;
+  }
+}
+
+- (void)hideDefaultAccount {
+  if (!self.viewLoaded) {
+    [self view];
+  }
+
+  // Hide the IdentityButtonControl, and update the primary button to serve as
+  // a "Sign in…" button.
+  _groupedIdentityButtonSection.hidden = YES;
+  [_primaryButton setTitle:_configuration.submitButtonTitle
+                  forState:UIControlStateNormal];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_drag_handler.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_drag_handler.swift
index 5eff109..b971dff 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_drag_handler.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_drag_handler.swift
@@ -61,6 +61,15 @@
     return DestinationListDropDelegate(handler: self)
   }
 
+  /// Returns a new item provider for the drag interaction.
+  func newItemProvider(forDestination destination: OverflowMenuDestination) -> NSItemProvider {
+    let itemProvider = DidEndItemProvider(object: destination.name as NSString)
+    itemProvider.didEnd = { [weak self] in
+      self?.endDrag()
+    }
+    return itemProvider
+  }
+
   /// Performs a drop into a list. Should be passed to `List`'s `.onInsert`
   /// method.
   func performListDrop(index: Int, providers: [NSItemProvider]) {
@@ -145,3 +154,12 @@
     }
   }
 }
+
+/// A custom item provider class that calls the provided `didEnd` callback when
+/// the drag ends.
+class DidEndItemProvider: NSItemProvider {
+  var didEnd: (() -> Void)?
+  deinit {
+    didEnd?()
+  }
+}
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift
index b89d4d1b..475ceb8 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift
@@ -50,25 +50,26 @@
   }
 
   var body: some View {
-    Button(
-      action: {
-        guard !isEditing else {
-          return
+    button
+      .accessibilityIdentifier(action.accessibilityIdentifier)
+      .disabled(!action.enabled || action.enterpriseDisabled)
+      .if(!isEditing) { view in
+        view.contextMenu {
+          ForEach(action.longPressItems) { item in
+            Section {
+              Button {
+                item.handler()
+              } label: {
+                Label(item.title, systemImage: item.symbolName)
+              }
+            }
+          }
         }
-        metricsHandler?.popupMenuTookAction()
-        action.handler()
-      },
-      label: {
-        rowContent
-          .contentShape(Rectangle())
       }
-    )
-    .accessibilityIdentifier(action.accessibilityIdentifier)
-    .disabled(!action.enabled || action.enterpriseDisabled)
-    .if(!action.useSystemRowColoring) { view in
-      view.accentColor(.textPrimary)
-    }
-    .listRowSeparatorTint(.overflowMenuSeparator)
+      .if(!action.useSystemRowColoring) { view in
+        view.accentColor(.textPrimary)
+      }
+      .listRowSeparatorTint(.overflowMenuSeparator)
   }
 
   @ViewBuilder
@@ -103,6 +104,26 @@
     }
   }
 
+  // The button view, which is replaced by just a plain view when this is in
+  // edit mode.
+  @ViewBuilder
+  var button: some View {
+    if isEditing {
+      rowContent
+    } else {
+      Button(
+        action: {
+          metricsHandler?.popupMenuTookAction()
+          action.handler()
+        },
+        label: {
+          rowContent
+            .contentShape(Rectangle())
+        }
+      )
+    }
+  }
+
   private var name: some View {
     Text(action.name).lineLimit(1)
   }
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
index 45ff864..c94dae2 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
@@ -134,41 +134,42 @@
             // spacing before the first item.
             Spacer().frame(width: Constants.iconInitialSpace - spacing.iconSpacing)
             ForEach(destinations) { destination in
-              OverflowMenuDestinationView(
+              let destinationView = OverflowMenuDestinationView(
                 destination: destination, layoutParameters: layoutParameters,
                 highlighted: uiConfiguration.highlightDestination == destination.destination,
                 metricsHandler: metricsHandler
               )
-              .id(destination.destination)
-              .ifLet(dragHandler) { view, dragHandler in
-                view
-                  .onDrag {
-                    dragHandler.startDrag(from: destination)
-                    return NSItemProvider(object: destination.name as NSString)
-                  } preview: {
-                    OverflowMenuDestinationView(
-                      destination: destination, layoutParameters: layoutParameters,
-                      highlighted: uiConfiguration.highlightDestination == destination.destination,
-                      metricsHandler: nil)
-                  }
-                  .onDrop(
-                    of: [.text],
-                    delegate: dragHandler.newDropDelegate(
-                      forDestination: destination))
-              }
-              .overlay(alignment: .editButton) {
-                if editMode?.wrappedValue.isEditing == true && destination.canBeHidden {
-                  DestinationEditButton(destination: destination)
-                    .alignmentGuide(HorizontalAlignment.editButton) {
-                      $0[HorizontalAlignment.center]
+              let destinationBeingDragged =
+                dragHandler?.dragOnDestinations ?? false
+                && dragHandler?.currentDrag?.item == destination
+              destinationView
+                .id(destination.destination)
+                .ifLet(dragHandler) { view, dragHandler in
+                  view
+                    .opacity(destinationBeingDragged ? 0.01 : 1)
+                    .onDrag {
+                      dragHandler.startDrag(from: destination)
+                      return dragHandler.newItemProvider(forDestination: destination)
                     }
-                    .alignmentGuide(VerticalAlignment.editButton) { $0[VerticalAlignment.center] }
+                    .onDrop(
+                      of: [.text],
+                      delegate: dragHandler.newDropDelegate(
+                        forDestination: destination))
                 }
-              }
-              .matchedGeometryEffect(
-                id: MenuCustomizationAnimationID.from(destination), in: namespace
-              )
-
+                .overlay(alignment: .editButton) {
+                  if !destinationBeingDragged && editMode?.wrappedValue.isEditing == true
+                    && destination.canBeHidden
+                  {
+                    DestinationEditButton(destination: destination)
+                      .alignmentGuide(HorizontalAlignment.editButton) {
+                        $0[HorizontalAlignment.center]
+                      }
+                      .alignmentGuide(VerticalAlignment.editButton) { $0[VerticalAlignment.center] }
+                  }
+                }
+                .matchedGeometryEffect(
+                  id: MenuCustomizationAnimationID.from(destination), in: namespace
+                )
             }
           }.alignmentGuide(.bottom) { $0[.bottom] + Constants.bottomMargin }
 
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
index 83bb0a3..80a4bbd 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
@@ -20,6 +20,22 @@
   }
 }
 
+/// `PreferenceKey` holding the frame of the icon in the destination view.
+struct IconFramePreferenceKey: PreferenceKey {
+  static var defaultValue: CGRect = .null
+  static func reduce(value: inout CGRect, nextValue: () -> CGRect) {
+    value = CGRectUnion(value, nextValue())
+  }
+}
+
+/// `PreferenceKey` holding the frame of the text in the destination view.
+struct TextFramePreferenceKey: PreferenceKey {
+  static var defaultValue: CGRect = .null
+  static func reduce(value: inout CGRect, nextValue: () -> CGRect) {
+    value = CGRectUnion(value, nextValue())
+  }
+}
+
 /// A view displaying a single destination.
 @available(iOS 15, *)
 struct OverflowMenuDestinationView: View {
@@ -34,6 +50,18 @@
     case horizontal(itemWidth: CGFloat)
   }
 
+  /// Shape consisting of a path around the icon and text.
+  struct IconShape: Shape {
+    let iconFrame: CGRect
+    let textFrame: CGRect
+
+    func path(in rect: CGRect) -> Path {
+      var path = Path(roundedRect: iconFrame, cornerRadius: Dimensions.cornerRadius)
+      path.addRect(textFrame)
+      return path
+    }
+  }
+
   enum AccessibilityIdentifier {
     /// The addition to the `accessibilityIdentfier` for this element if it
     /// has an error badge.
@@ -83,6 +111,8 @@
     static let newLabelBadgeWidth: CGFloat = 20
   }
 
+  static let viewNamespace = "destinationView"
+
   /// The destination for this view.
   var destination: OverflowMenuDestination
 
@@ -95,10 +125,31 @@
 
   @State private var isPressed = false
 
+  @State private var iconFrame: CGRect = .zero
+  @State private var textFrame: CGRect = .zero
+
   weak var metricsHandler: PopupMenuMetricsHandler?
 
   var body: some View {
     button
+      .coordinateSpace(name: Self.viewNamespace)
+      .contentShape(
+        [.contextMenuPreview, .dragPreview],
+        IconShape(iconFrame: iconFrame, textFrame: textFrame)
+      )
+      .if(editMode?.wrappedValue.isEditing != true) { view in
+        view.contextMenu {
+          ForEach(destination.longPressItems) { item in
+            Section {
+              Button {
+                item.handler()
+              } label: {
+                Label(item.title, systemImage: item.symbolName)
+              }
+            }
+          }
+        }
+      }
       .accessibilityIdentifier(accessibilityIdentifier)
       .accessibilityLabel(Text(accessibilityLabel))
       .if(highlighted) { view in
@@ -106,6 +157,12 @@
           key: OverflowMenuDestinationList.HighlightedDestinationBounds.self, value: .bounds
         ) { $0 }
       }
+      .onPreferenceChange(IconFramePreferenceKey.self) { newFrame in
+        iconFrame = newFrame
+      }
+      .onPreferenceChange(TextFramePreferenceKey.self) { newFrame in
+        textFrame = newFrame
+      }
   }
 
   // The button view, which is replaced by just a plain view when this is in
@@ -186,6 +243,12 @@
     let image = (destination.systemSymbol ? Image(systemName: symbolName) : Image(symbolName))
       .renderingMode(.template)
     return iconBuilder(interiorPadding: interiorPadding, image: image)
+      .overlay {
+        GeometryReader { geometry in
+          Color.clear.preference(
+            key: IconFramePreferenceKey.self, value: geometry.frame(in: .named(Self.viewNamespace)))
+        }
+      }
   }
 
   var circleBadge: some View {
@@ -263,6 +326,12 @@
       .padding([.leading, .trailing], textSpacing)
       .multilineTextAlignment(.center)
       .lineLimit(maximumLines)
+      .overlay {
+        GeometryReader { geometry in
+          Color.clear.preference(
+            key: TextFramePreferenceKey.self, value: geometry.frame(in: .named(Self.viewNamespace)))
+        }
+      }
   }
 
   var accessibilityLabel: String {
@@ -295,5 +364,4 @@
       return itemWidth
     }
   }
-
 }
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_item.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_item.swift
index 5974a0fa..6033b50 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_item.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_item.swift
@@ -33,6 +33,8 @@
   /// Whether the item is shown or hidden in the menu overall.
   @Published public var shown = true
 
+  @Published public var longPressItems: [OverflowMenuLongPressItem] = []
+
   public init(
     name: String,
     symbolName: String?,
@@ -52,7 +54,18 @@
     self.displayNewLabelIcon = displayNewLabelIcon
     self.handler = handler
   }
+}
 
+/// Represents the data necessary to add a long press context menu to an item.
+@objcMembers public class OverflowMenuLongPressItem: NSObject, ObservableObject {
+  @Published public var title: String
+  @Published public var symbolName: String
+  @Published public var handler: () -> Void
+  public init(title: String, symbolName: String, handler: @escaping () -> Void) {
+    self.title = title
+    self.symbolName = symbolName
+    self.handler = handler
+  }
 }
 
 // MARK: - Identifiable
@@ -62,3 +75,9 @@
     return name
   }
 }
+
+extension OverflowMenuLongPressItem: Identifiable {
+  public var id: String {
+    return title
+  }
+}
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
index 366b3f1..a640956 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
@@ -108,42 +108,6 @@
 
 typedef void (^Handler)(void);
 
-OverflowMenuAction* CreateOverflowMenuActionWithString(
-    NSString* name,
-    overflow_menu::ActionType actionType,
-    NSString* symbolName,
-    bool systemSymbol,
-    bool monochromeSymbol,
-    NSString* accessibilityID,
-    Handler handler) {
-  OverflowMenuAction* action =
-      [[OverflowMenuAction alloc] initWithName:name
-                                    symbolName:symbolName
-                                  systemSymbol:systemSymbol
-                              monochromeSymbol:monochromeSymbol
-                       accessibilityIdentifier:accessibilityID
-                            enterpriseDisabled:NO
-                           displayNewLabelIcon:NO
-                                       handler:handler];
-  action.actionType = static_cast<NSInteger>(actionType);
-  return action;
-}
-
-OverflowMenuAction* CreateOverflowMenuAction(
-    int nameID,
-    overflow_menu::ActionType actionType,
-    NSString* symbolName,
-    bool systemSymbol,
-    bool monochromeSymbol,
-    NSString* accessibilityID,
-    Handler handler) {
-  NSString* name = l10n_util::GetNSString(nameID);
-
-  return CreateOverflowMenuActionWithString(name, actionType, symbolName,
-                                            systemSymbol, monochromeSymbol,
-                                            accessibilityID, handler);
-}
-
 OverflowMenuFooter* CreateOverflowMenuManagedFooter(
     int nameID,
     int linkID,
@@ -523,41 +487,61 @@
 
   [self logTranslateAvailability];
 
-  self.reloadAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_RELOAD, overflow_menu::ActionType::Reload,
-      kArrowClockWiseSymbol, /*systemSymbol=*/NO,
-      /*monochromeSymbol=*/NO, kToolsMenuReload, ^{
-        [weakSelf reload];
-      });
+  self.reloadAction =
+      [self createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_RELOAD
+                                    actionType:overflow_menu::ActionType::Reload
+                                    symbolName:kArrowClockWiseSymbol
+                                  systemSymbol:NO
+                              monochromeSymbol:NO
+                               accessibilityID:kToolsMenuReload
+                                       handler:^{
+                                         [weakSelf reload];
+                                       }];
 
-  self.stopLoadAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_STOP, overflow_menu::ActionType::Reload, kXMarkSymbol,
-      /*systemSymbol=*/YES,
-      /*monochromeSymbol=*/NO, kToolsMenuStop, ^{
-        [weakSelf stopLoading];
-      });
+  self.stopLoadAction =
+      [self createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_STOP
+                                    actionType:overflow_menu::ActionType::Reload
+                                    symbolName:kXMarkSymbol
+                                  systemSymbol:YES
+                              monochromeSymbol:NO
+                               accessibilityID:kToolsMenuStop
+                                       handler:^{
+                                         [weakSelf stopLoading];
+                                       }];
 
-  self.openTabAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_NEW_TAB, overflow_menu::ActionType::NewTab,
-      kNewTabCircleActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuNewTabId, ^{
-        [weakSelf openTab];
-      });
+  self.openTabAction =
+      [self createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_NEW_TAB
+                                    actionType:overflow_menu::ActionType::NewTab
+                                    symbolName:kNewTabCircleActionSymbol
+                                  systemSymbol:YES
+                              monochromeSymbol:NO
+                               accessibilityID:kToolsMenuNewTabId
+                                       handler:^{
+                                         [weakSelf openTab];
+                                       }];
 
-  self.openIncognitoTabAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB,
-      overflow_menu::ActionType::NewIncognitoTab, kIncognitoSymbol,
-      /*systemSymbol=*/NO, /*monochromeSymbol=*/NO, kToolsMenuNewIncognitoTabId,
-      ^{
-        [weakSelf openIncognitoTab];
-      });
+  self.openIncognitoTabAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB
+                              actionType:overflow_menu::ActionType::
+                                             NewIncognitoTab
+                              symbolName:kIncognitoSymbol
+                            systemSymbol:NO
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuNewIncognitoTabId
+                                 handler:^{
+                                   [weakSelf openIncognitoTab];
+                                 }];
 
-  self.openNewWindowAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_NEW_WINDOW, overflow_menu::ActionType::NewWindow,
-      kNewWindowActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuNewWindowId, ^{
-        [weakSelf openNewWindow];
-      });
+  self.openNewWindowAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_NEW_WINDOW
+                              actionType:overflow_menu::ActionType::NewWindow
+                              symbolName:kNewWindowActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuNewWindowId
+                                 handler:^{
+                                   [weakSelf openNewWindow];
+                                 }];
 
   self.clearBrowsingDataAction = [self newClearBrowsingDataAction];
 
@@ -570,12 +554,16 @@
 
   self.addBookmarkAction = [self newAddBookmarkAction];
 
-  self.editBookmarkAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_EDIT_BOOKMARK, overflow_menu::ActionType::Bookmark,
-      kEditActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuEditBookmark, ^{
-        [weakSelf addOrEditBookmark];
-      });
+  self.editBookmarkAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_EDIT_BOOKMARK
+                              actionType:overflow_menu::ActionType::Bookmark
+                              symbolName:kEditActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuEditBookmark
+                                 handler:^{
+                                   [weakSelf addOrEditBookmark];
+                                 }];
 
   self.readLaterAction = [self newReadLaterAction];
 
@@ -583,46 +571,65 @@
 
   self.requestDesktopAction = [self newRequestDesktopAction];
 
-  self.requestMobileAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE,
-      overflow_menu::ActionType::DesktopSite, kIPhoneSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/YES, kToolsMenuRequestMobileId,
-      ^{
-        [weakSelf requestMobileSite];
-      });
+  self.requestMobileAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE
+                              actionType:overflow_menu::ActionType::DesktopSite
+                              symbolName:kIPhoneSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:YES
+                         accessibilityID:kToolsMenuRequestMobileId
+                                 handler:^{
+                                   [weakSelf requestMobileSite];
+                                 }];
 
   self.findInPageAction = [self newFindInPageAction];
 
   self.textZoomAction = [self newTextZoomAction];
 
-  self.reportIssueAction = CreateOverflowMenuAction(
-      IDS_IOS_OPTIONS_REPORT_AN_ISSUE, overflow_menu::ActionType::ReportAnIssue,
-      kWarningSymbol, /*systemSymbol=*/YES,
-      /*monochromeSymbol=*/NO, kToolsMenuReportAnIssueId, ^{
-        [weakSelf reportAnIssue];
-      });
+  self.reportIssueAction =
+      [self createOverflowMenuActionWithNameID:IDS_IOS_OPTIONS_REPORT_AN_ISSUE
+                                    actionType:overflow_menu::ActionType::
+                                                   ReportAnIssue
+                                    symbolName:kWarningSymbol
+                                  systemSymbol:YES
+                              monochromeSymbol:NO
+                               accessibilityID:kToolsMenuReportAnIssueId
+                                       handler:^{
+                                         [weakSelf reportAnIssue];
+                                       }];
 
-  self.helpAction = CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_HELP_MOBILE, overflow_menu::ActionType::Help,
-      kHelpSymbol, /*systemSymbol=*/YES,
-      /*monochromeSymbol=*/NO, kToolsMenuHelpId, ^{
-        [weakSelf openHelp];
-      });
+  self.helpAction =
+      [self createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_HELP_MOBILE
+                                    actionType:overflow_menu::ActionType::Help
+                                    symbolName:kHelpSymbol
+                                  systemSymbol:YES
+                              monochromeSymbol:NO
+                               accessibilityID:kToolsMenuHelpId
+                                       handler:^{
+                                         [weakSelf openHelp];
+                                       }];
 
-  self.shareChromeAction = CreateOverflowMenuAction(
-      IDS_IOS_OVERFLOW_MENU_SHARE_CHROME,
-      overflow_menu::ActionType::ShareChrome, kShareSymbol,
-      /*systemSymbol=*/YES,
-      /*monochromeSymbol=*/NO, kToolsMenuShareChromeId, ^{
-        [weakSelf shareChromeApp];
-      });
+  self.shareChromeAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_OVERFLOW_MENU_SHARE_CHROME
+                              actionType:overflow_menu::ActionType::ShareChrome
+                              symbolName:kShareSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuShareChromeId
+                                 handler:^{
+                                   [weakSelf shareChromeApp];
+                                 }];
 
-  self.editActionsAction = CreateOverflowMenuAction(
-      IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS,
-      overflow_menu::ActionType::EditActions, nil, /*systemSymbol=*/NO,
-      /*monochromeSymbol=*/NO, kToolsMenuEditActionsId, ^{
-        [weakSelf beginActionEdit];
-      });
+  self.editActionsAction = [self
+      createOverflowMenuActionWithNameID:IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS
+                              actionType:overflow_menu::ActionType::EditActions
+                              symbolName:nil
+                            systemSymbol:NO
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuEditActionsId
+                                 handler:^{
+                                   [weakSelf beginCustomization];
+                                 }];
   self.editActionsAction.useSystemRowColoring = YES;
 
   // The app actions vary based on page state, so they are set in
@@ -663,85 +670,116 @@
 }
 
 - (OverflowMenuAction*)newFollowAction {
-  return CreateOverflowMenuActionWithString(
-      l10n_util::GetNSStringF(IDS_IOS_TOOLS_MENU_FOLLOW, u""),
-      overflow_menu::ActionType::Follow, kPlusSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuFollow,
-      ^{
-      });
+  return
+      [self createOverflowMenuActionWithName:l10n_util::GetNSStringF(
+                                                 IDS_IOS_TOOLS_MENU_FOLLOW, u"")
+                                  actionType:overflow_menu::ActionType::Follow
+                                  symbolName:kPlusSymbol
+                                systemSymbol:YES
+                            monochromeSymbol:NO
+                             accessibilityID:kToolsMenuFollow
+                                     handler:^{
+                                     }];
 }
 
 - (OverflowMenuAction*)newAddBookmarkAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(IDS_IOS_TOOLS_MENU_ADD_TO_BOOKMARKS,
-                                  overflow_menu::ActionType::Bookmark,
-                                  kAddBookmarkActionSymbol,
-                                  /*systemSymbol=*/YES, /*monochromeSymbol=*/NO,
-                                  kToolsMenuAddToBookmarks, ^{
-                                    [weakSelf addOrEditBookmark];
-                                  });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_ADD_TO_BOOKMARKS
+                              actionType:overflow_menu::ActionType::Bookmark
+                              symbolName:kAddBookmarkActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuAddToBookmarks
+                                 handler:^{
+                                   [weakSelf addOrEditBookmark];
+                                 }];
 }
 
 - (OverflowMenuAction*)newReadLaterAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(
-      IDS_IOS_CONTENT_CONTEXT_ADDTOREADINGLIST,
-      overflow_menu::ActionType::ReadingList, kReadLaterActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuReadLater, ^{
-        [weakSelf addToReadingList];
-      });
+  return [self
+      createOverflowMenuActionWithNameID:
+          IDS_IOS_CONTENT_CONTEXT_ADDTOREADINGLIST
+                              actionType:overflow_menu::ActionType::ReadingList
+                              symbolName:kReadLaterActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuReadLater
+                                 handler:^{
+                                   [weakSelf addToReadingList];
+                                 }];
 }
 
 - (OverflowMenuAction*)newClearBrowsingDataAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(IDS_IOS_TOOLS_MENU_CLEAR_BROWSING_DATA,
-                                  overflow_menu::ActionType::ClearBrowsingData,
-                                  kTrashSymbol,
-                                  /*systemSymbol=*/YES, /*monochromeSymbol=*/NO,
-                                  kToolsMenuClearBrowsingData, ^{
-                                    [weakSelf openClearBrowsingData];
-                                  });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_CLEAR_BROWSING_DATA
+                              actionType:overflow_menu::ActionType::
+                                             ClearBrowsingData
+                              symbolName:kTrashSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuClearBrowsingData
+                                 handler:^{
+                                   [weakSelf openClearBrowsingData];
+                                 }];
 }
 
 - (OverflowMenuAction*)newTranslateAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_TRANSLATE, overflow_menu::ActionType::Translate,
-      kTranslateSymbol,
-      /*systemSymbol=*/NO, /*monochromeSymbol=*/NO, kToolsMenuTranslateId, ^{
-        [weakSelf translatePage];
-      });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_TRANSLATE
+                              actionType:overflow_menu::ActionType::Translate
+                              symbolName:kTranslateSymbol
+                            systemSymbol:NO
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuTranslateId
+                                 handler:^{
+                                   [weakSelf translatePage];
+                                 }];
 }
 
 - (OverflowMenuAction*)newRequestDesktopAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE,
-      overflow_menu::ActionType::DesktopSite, kDesktopSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/YES,
-      kToolsMenuRequestDesktopId, ^{
-        [weakSelf requestDesktopSite];
-      });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE
+                              actionType:overflow_menu::ActionType::DesktopSite
+                              symbolName:kDesktopSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:YES
+                         accessibilityID:kToolsMenuRequestDesktopId
+                                 handler:^{
+                                   [weakSelf requestDesktopSite];
+                                 }];
 }
 
 - (OverflowMenuAction*)newFindInPageAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_FIND_IN_PAGE, overflow_menu::ActionType::FindInPage,
-      kFindInPageActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuFindInPageId, ^{
-        [weakSelf openFindInPage];
-      });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_FIND_IN_PAGE
+                              actionType:overflow_menu::ActionType::FindInPage
+                              symbolName:kFindInPageActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuFindInPageId
+                                 handler:^{
+                                   [weakSelf openFindInPage];
+                                 }];
 }
 
 - (OverflowMenuAction*)newTextZoomAction {
   __weak __typeof(self) weakSelf = self;
-  return CreateOverflowMenuAction(
-      IDS_IOS_TOOLS_MENU_TEXT_ZOOM, overflow_menu::ActionType::TextZoom,
-      kZoomTextActionSymbol,
-      /*systemSymbol=*/YES, /*monochromeSymbol=*/NO, kToolsMenuTextZoom, ^{
-        [weakSelf openTextZoom];
-      });
+  return [self
+      createOverflowMenuActionWithNameID:IDS_IOS_TOOLS_MENU_TEXT_ZOOM
+                              actionType:overflow_menu::ActionType::TextZoom
+                              symbolName:kZoomTextActionSymbol
+                            systemSymbol:YES
+                        monochromeSymbol:NO
+                         accessibilityID:kToolsMenuTextZoom
+                                 handler:^{
+                                   [weakSelf openTextZoom];
+                                 }];
 }
 
 - (OverflowMenuDestination*)newBookmarksDestination {
@@ -920,9 +958,77 @@
 
   result.destination = static_cast<NSInteger>(destination);
 
+  result.longPressItems = @[
+    [[OverflowMenuLongPressItem alloc]
+        initWithTitle:l10n_util::GetNSString(IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS)
+           symbolName:@"pencil"
+              handler:^{
+                [weakSelf beginCustomization];
+              }],
+  ];
+
   return result;
 }
 
+// Creates an OverflowMenuAction with the given name to be displayed.
+- (OverflowMenuAction*)
+    createOverflowMenuActionWithName:(NSString*)name
+                          actionType:(overflow_menu::ActionType)actionType
+                          symbolName:(NSString*)symbolName
+                        systemSymbol:(BOOL)systemSymbol
+                    monochromeSymbol:(BOOL)monochromeSymbol
+                     accessibilityID:(NSString*)accessibilityID
+                             handler:(Handler)handler {
+  OverflowMenuAction* action =
+      [[OverflowMenuAction alloc] initWithName:name
+                                    symbolName:symbolName
+                                  systemSymbol:systemSymbol
+                              monochromeSymbol:monochromeSymbol
+                       accessibilityIdentifier:accessibilityID
+                            enterpriseDisabled:NO
+                           displayNewLabelIcon:NO
+                                       handler:handler];
+  action.actionType = static_cast<NSInteger>(actionType);
+
+  __weak __typeof(self) weakSelf = self;
+  ActionRanking reorderableActions = [self basePageActions];
+  // If this action is not reorderable, then don't add any longpress items.
+  if (std::find(reorderableActions.begin(), reorderableActions.end(),
+                actionType) != reorderableActions.end()) {
+    action.longPressItems = @[
+      [[OverflowMenuLongPressItem alloc]
+          initWithTitle:l10n_util::GetNSString(
+                            IDS_IOS_OVERFLOW_MENU_EDIT_ACTIONS)
+             symbolName:@"pencil"
+                handler:^{
+                  [weakSelf beginCustomization];
+                }],
+    ];
+  }
+  return action;
+}
+
+// Creates an OverflowMenuAction with the given nameID as a localized string ID
+// to be displayed.
+- (OverflowMenuAction*)
+    createOverflowMenuActionWithNameID:(int)nameID
+                            actionType:(overflow_menu::ActionType)actionType
+                            symbolName:(NSString*)symbolName
+                          systemSymbol:(BOOL)systemSymbol
+                      monochromeSymbol:(BOOL)monochromeSymbol
+                       accessibilityID:(NSString*)accessibilityID
+                               handler:(Handler)handler {
+  NSString* name = l10n_util::GetNSString(nameID);
+
+  return [self createOverflowMenuActionWithName:name
+                                     actionType:actionType
+                                     symbolName:symbolName
+                                   systemSymbol:systemSymbol
+                               monochromeSymbol:monochromeSymbol
+                                accessibilityID:accessibilityID
+                                        handler:handler];
+}
+
 // Creates an OverflowMenuDestination for the Spotlight debugger.
 - (OverflowMenuDestination*)destinationForSpotlightDebugger:(Handler)handler {
   OverflowMenuDestination* result =
@@ -1759,8 +1865,8 @@
 }
 
 // Begins the action edit flow.
-- (void)beginActionEdit {
-  [self.dispatcher showActionCustomization];
+- (void)beginCustomization {
+  [self.dispatcher showMenuCustomization];
 }
 
 #pragma mark - Destinations Handlers
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_model.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_model.swift
index f0b89dd6..479dd62 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_model.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_model.swift
@@ -23,6 +23,11 @@
   /// the provided data.
   @Published var customization: CustomizationModel?
 
+  /// Whether or not customization is currently in progress.
+  public var isCustomizationActive: Bool {
+    return customization != nil
+  }
+
   public init(
     destinations: [OverflowMenuDestination],
     actionGroups: [OverflowMenuActionGroup]
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
index f4ea6b2..13e3bcaf 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
@@ -516,7 +516,7 @@
 
 #pragma mark - OverflowMenuCustomizationCommands
 
-- (void)showActionCustomization {
+- (void)showMenuCustomization {
   [_overflowMenuModel
       startCustomizationWithActions:_overflowMenuOrderer
                                         .actionCustomizationModel
@@ -527,7 +527,7 @@
       isCustomizationScreen:YES];
 }
 
-- (void)hideActionCustomization {
+- (void)hideMenuCustomization {
   [self setupSheetForMenu:self.baseViewController.presentedViewController
       isCustomizationScreen:NO];
 
@@ -540,14 +540,14 @@
   [_overflowMenuOrderer commitActionsUpdate];
   [_overflowMenuOrderer commitDestinationsUpdate];
 
-  [self hideActionCustomization];
+  [self hideMenuCustomization];
 }
 
 - (void)cancelWasTapped {
   [_overflowMenuOrderer cancelActionsUpdate];
   [_overflowMenuOrderer cancelDestinationsUpdate];
 
-  [self hideActionCustomization];
+  [self hideMenuCustomization];
 }
 
 #pragma mark - ContainedPresenterDelegate
@@ -579,6 +579,11 @@
   [self dismissPopupMenuAnimated:NO];
 }
 
+- (BOOL)presentationControllerShouldDismiss:
+    (UIPresentationController*)presentationController {
+  return _overflowMenuModel.isCustomizationActive ? NO : YES;
+}
+
 #pragma mark - UISheetPresentationControllerDelegate
 
 - (void)sheetPresentationControllerDidChangeSelectedDetentIdentifier:
diff --git a/ios/chrome/browser/ui/settings/password/password_sharing/password_sharing_egtest.mm b/ios/chrome/browser/ui/settings/password/password_sharing/password_sharing_egtest.mm
index 717a67ae..2193787 100644
--- a/ios/chrome/browser/ui/settings/password/password_sharing/password_sharing_egtest.mm
+++ b/ios/chrome/browser/ui/settings/password/password_sharing/password_sharing_egtest.mm
@@ -135,7 +135,8 @@
       assertWithMatcher:grey_notNil()];
 }
 
-- (void)testFetchingRecipientsNoFamilyStatus {
+// TODO(crbug.com/1475783): Test crashes in multiple builders.
+- (void)DISABLED_testFetchingRecipientsNoFamilyStatus {
   // Override family status with `FetchFamilyMembersRequestStatus::kNoFamily`.
   AppLaunchConfiguration config = [self appConfigurationForTestCase];
   config.additional_args.push_back(std::string("-") +
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm
index a641317..4b9d783 100644
--- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm
@@ -71,7 +71,7 @@
         ensureAppLaunchedWithFeaturesEnabled:{}
                                     disabled:
                                         {feature_engagement::
-                                             kIPHiOSHistoryOnOverflowMenuFeature}
+                                             kIPHiOSTabGridToolbarItemFeature}
                               relaunchPolicy:ForceRelaunchByCleanShutdown];
   }
 
@@ -132,7 +132,7 @@
         ensureAppLaunchedWithFeaturesEnabled:{}
                                     disabled:
                                         {feature_engagement::
-                                             kIPHiOSHistoryOnOverflowMenuFeature}
+                                             kIPHiOSTabGridToolbarItemFeature}
                               relaunchPolicy:ForceRelaunchByCleanShutdown];
   }
 
diff --git a/ios_internal b/ios_internal
index 395eebb..90b6ca5 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit 395eebb2cf8df3529abc75b898367d14de84978b
+Subproject commit 90b6ca5bc5942ca1b25e4504339f80716d2dadbe
diff --git a/net/base/features.cc b/net/base/features.cc
index 8df44a4..b221b6d 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -287,6 +287,10 @@
              "TpcdSupportSettings",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kTpcdMetadataGrants,
+             "TpcdMetadataGrants",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kAlpsParsing, "AlpsParsing", base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kAlpsClientHintParsing,
diff --git a/net/base/features.h b/net/base/features.h
index b3c6068..09c9748 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -330,6 +330,10 @@
 // Feature to enable consideration of 3PCD Support settings.
 NET_EXPORT BASE_DECLARE_FEATURE(kTpcdSupportSettings);
 
+// Whether to enable the use of 3PC based on 3PCD metadata grants delivered via
+// component updater.
+NET_EXPORT BASE_DECLARE_FEATURE(kTpcdMetadataGrants);
+
 // Whether ALPS parsing is on for any type of frame.
 NET_EXPORT BASE_DECLARE_FEATURE(kAlpsParsing);
 
diff --git a/net/cookies/cookie_setting_override.h b/net/cookies/cookie_setting_override.h
index efd218a..9dbc1269 100644
--- a/net/cookies/cookie_setting_override.h
+++ b/net/cookies/cookie_setting_override.h
@@ -14,7 +14,6 @@
 // together. The notion of no overrides is conveyable via an empty set.
 enum class CookieSettingOverride {
   kMinValue = 0,
-
   // When specified, third-party cookies may be allowed based on existence of
   // TopLevelStorageAccess grants.
   kTopLevelStorageAccessGrantEligible = kMinValue,
@@ -25,7 +24,9 @@
   // When present, 3PCD support settings (ContentSettingsType::TPCD_SUPPORT)
   // will be respected.
   k3pcdSupport = 2,
-  kMaxValue = k3pcdSupport,
+  // When present, 3PCD metadata grants content settings will be respected.
+  k3pcdMetadataGrantEligible = 3,
+  kMaxValue = k3pcdMetadataGrantEligible,
 };
 
 using CookieSettingOverrides = base::EnumSet<CookieSettingOverride,
diff --git a/net/cookies/cookie_util.h b/net/cookies/cookie_util.h
index d187c47..1ea0666 100644
--- a/net/cookies/cookie_util.h
+++ b/net/cookies/cookie_util.h
@@ -46,7 +46,8 @@
   OBSOLETE_ACCESS_ALLOWED_FORCED = 3 /*(DEPRECATED)*/,
   ACCESS_ALLOWED_TOP_LEVEL_STORAGE_ACCESS_GRANT = 4,
   ACCESS_ALLOWED_3PCD = 5,
-  kMaxValue = ACCESS_ALLOWED_3PCD,
+  ACCESS_ALLOWED_3PCD_METADATA_GRANT = 6,
+  kMaxValue = ACCESS_ALLOWED_3PCD_METADATA_GRANT,
 };
 // This enum must match the numbering for BreakageIndicatorType in
 // histograms/enums.xml. Do not reorder or remove items, only add new items
diff --git a/services/device/public/cpp/geolocation/BUILD.gn b/services/device/public/cpp/geolocation/BUILD.gn
index ef1e79a..e31fa58 100644
--- a/services/device/public/cpp/geolocation/BUILD.gn
+++ b/services/device/public/cpp/geolocation/BUILD.gn
@@ -37,11 +37,10 @@
   }
 
   public_deps = [
+    ":buildflags",
     "//base",
     "//services/device/public/mojom",
     "//services/device/public/mojom:geolocation_internals",
     "//third_party/abseil-cpp:absl",
   ]
-
-  deps = [ ":buildflags" ]
 }
diff --git a/services/device/public/cpp/geolocation/geolocation_manager.h b/services/device/public/cpp/geolocation/geolocation_manager.h
index 206bb34..a9be30e2 100644
--- a/services/device/public/cpp/geolocation/geolocation_manager.h
+++ b/services/device/public/cpp/geolocation/geolocation_manager.h
@@ -35,6 +35,10 @@
   // Sets the global instance of the Geolocation Manager.
   static void SetInstance(std::unique_ptr<GeolocationManager> manager);
 
+  GeolocationManager(const GeolocationManager&) = delete;
+  GeolocationManager& operator=(const GeolocationManager&) = delete;
+  virtual ~GeolocationManager();
+
   void TrackGeolocationAttempted();
   void TrackGeolocationRelinquished();
   void RequestSystemPermission();
@@ -45,6 +49,7 @@
   // operation systems for which we don't support system-level geolocation. A
   // separate class (as opposed to nullptr) makes sure no unsupported calls are
   // made in such context.
+
 };  // class GeolocationManager
 
 #else
@@ -70,9 +75,6 @@
 
   explicit GeolocationManager(
       std::unique_ptr<SystemGeolocationSource> system_geolocation_source);
-  GeolocationManager(const GeolocationManager&) = delete;
-  GeolocationManager& operator=(const GeolocationManager&) = delete;
-  virtual ~GeolocationManager();
 
   // Synchronously retrieves the current system permission status.
   LocationSystemPermissionStatus GetSystemPermission() const;
diff --git a/services/device/public/cpp/test/fake_geolocation_manager.h b/services/device/public/cpp/test/fake_geolocation_manager.h
index 400368e..1b592f38 100644
--- a/services/device/public/cpp/test/fake_geolocation_manager.h
+++ b/services/device/public/cpp/test/fake_geolocation_manager.h
@@ -15,6 +15,7 @@
   ~FakeGeolocationManager() override = default;
 
   void SetSystemPermission(LocationSystemPermissionStatus status);
+
 #if BUILDFLAG(IS_APPLE)
   bool watching_position();
   void FakePositionUpdated(device::mojom::GeopositionResultPtr result);
diff --git a/services/metrics/ukm_api.md b/services/metrics/ukm_api.md
index b737ae8..9038625d 100644
--- a/services/metrics/ukm_api.md
+++ b/services/metrics/ukm_api.md
@@ -273,7 +273,7 @@
 
 To avoid having UKM report becoming unbounded in size, an upper limit is placed on the number of events recorded for each event type. Events that are recorded too frequently may be subject to downsampling (see [go/ukm-downsampling](http://go/ukm-downsampling)). As a rule of thumb, it is recommended that most entries be recorded at most once per 100 page loads on average to limit data volume.
 
-For data quality purposes, if you have the option to record an event from either the browser process or a renderer process, prefer the former. Because renderer processes are not trusted, events recorded in them are more complex to attribute to the corresponding the browser-side navigations using the `DocumentCreated` event (see [go/ukm-readable-guide](http://go/ukm-readable-guide#processing-events-attached-to-blink-document-sources)). Joining using the `DocumentCreated` method also has limitations, such as partial availability of the event due to downsampling, and query performance impacted by the additional join operation.
+For data quality purposes, if you have the option to record an event from either the browser process or a renderer process, prefer the former. Because renderer processes are not trusted, events recorded in them are more complex to attribute to the corresponding browser-side navigations using the `DocumentCreated` event (see [go/ukm-readable-guide](http://go/ukm-readable-guide#processing-events-attached-to-blink-document-sources)). Joining using the `DocumentCreated` method also has limitations, such as partial availability of the event due to downsampling, and query performance impacted by the additional join operation.
 
 ### Singular UKM Events
 
diff --git a/services/network/cookie_manager.cc b/services/network/cookie_manager.cc
index 2558b3e1..6c804ec 100644
--- a/services/network/cookie_manager.cc
+++ b/services/network/cookie_manager.cc
@@ -334,6 +334,12 @@
   cookie_settings_.set_content_settings_for_3pcd(settings);
 }
 
+void CookieManager::SetContentSettingsFor3pcdMetadataGrants(
+    const ContentSettingsForOneType& settings) {
+  OnSettingsWillChange();
+  cookie_settings_.set_content_settings_for_3pcd_metadata_grants(settings);
+}
+
 void CookieManager::SetStorageAccessGrantSettings(
     const ContentSettingsForOneType& settings,
     SetStorageAccessGrantSettingsCallback callback) {
diff --git a/services/network/cookie_manager.h b/services/network/cookie_manager.h
index 160653f..37125f65 100644
--- a/services/network/cookie_manager.h
+++ b/services/network/cookie_manager.h
@@ -109,6 +109,8 @@
       const ContentSettingsForOneType& settings) override;
   void SetContentSettingsFor3pcd(
       const ContentSettingsForOneType& settings) override;
+  void SetContentSettingsFor3pcdMetadataGrants(
+      const ContentSettingsForOneType& settings) override;
   void SetStorageAccessGrantSettings(
       const ContentSettingsForOneType& settings,
       SetStorageAccessGrantSettingsCallback callback) override;
diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc
index 23c2e35..22e1245 100644
--- a/services/network/cookie_settings.cc
+++ b/services/network/cookie_settings.cc
@@ -308,6 +308,8 @@
       return settings_for_legacy_cookie_access_;
     case ContentSettingsType::TPCD_SUPPORT:
       return settings_for_3pcd_;
+    case ContentSettingsType::TPCD_METADATA_GRANTS:
+      return settings_for_3pcd_metadata_grants_;
     default:
       // Only implements types that are actually used by CookieSettings since
       // settings need to be copied to the network service.
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h
index 0610db6..d7b840f 100644
--- a/services/network/cookie_settings.h
+++ b/services/network/cookie_settings.h
@@ -102,6 +102,11 @@
     settings_for_3pcd_ = settings;
   }
 
+  void set_content_settings_for_3pcd_metadata_grants(
+      const ContentSettingsForOneType& settings) {
+    settings_for_3pcd_metadata_grants_ = settings;
+  }
+
   void set_storage_access_grants(const ContentSettingsForOneType& settings) {
     storage_access_grants_ = settings;
   }
@@ -227,7 +232,14 @@
   std::set<std::string> matching_scheme_cookies_allowed_schemes_;
   std::set<std::string> third_party_cookies_allowed_schemes_;
   ContentSettingsForOneType settings_for_legacy_cookie_access_;
+  // Used to represent content settings for 3PC accesses granted via 3PC
+  // deprecation trial. This type will only be populated when
+  // `net::features::kTpcdSupportSettings` is enabled.
   ContentSettingsForOneType settings_for_3pcd_;
+  // Used to represent content settings for 3PC accesses granted via the
+  // component updater service. This type will only be populated when
+  // `net::features::kTpcdMetadataGrants` is enabled.
+  ContentSettingsForOneType settings_for_3pcd_metadata_grants_;
   // Used to represent storage access grants provided by the StorageAccessAPI.
   // Will only be populated when the StorageAccessAPI feature is enabled
   // https://crbug.com/989663.
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom
index 92a7cfd..3e2e9595 100644
--- a/services/network/public/mojom/cookie_manager.mojom
+++ b/services/network/public/mojom/cookie_manager.mojom
@@ -52,6 +52,11 @@
   array<content_settings.mojom.ContentSettingPatternSource>
       settings_for_3pcd;
 
+  // Content settings for 3PCD Metadata grants which are set via component
+  // updater installer.
+  array<content_settings.mojom.ContentSettingPatternSource>
+      settings_for_3pcd_metadata_grants;
+
   // Content settings for which storage access grants have been set using
   // the Storage Access API.
   array<content_settings.mojom.ContentSettingPatternSource>
@@ -493,6 +498,11 @@
   SetContentSettingsFor3pcd(
       array<content_settings.mojom.ContentSettingPatternSource> settings);
 
+  // Sets content settings for which an entry exist within the 3PCD mitigations
+  // metadata delivered through component updater.
+  SetContentSettingsFor3pcdMetadataGrants(
+    array<content_settings.mojom.ContentSettingPatternSource> settings);
+
   // Sets content settings for which storage access grants exist. Will ack
   // the caller with a callback when settings have been updated.
   SetStorageAccessGrantSettings(
diff --git a/services/network/test/test_cookie_manager.h b/services/network/test/test_cookie_manager.h
index df46e842..f75300e 100644
--- a/services/network/test/test_cookie_manager.h
+++ b/services/network/test/test_cookie_manager.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/functional/callback_forward.h"
+#include "components/content_settings/core/common/content_settings.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 
@@ -62,6 +63,8 @@
       const std::vector<::ContentSettingPatternSource>& settings) override {}
   void SetContentSettingsFor3pcd(
       const std::vector<::ContentSettingPatternSource>& settings) override {}
+  void SetContentSettingsFor3pcdMetadataGrants(
+      const std::vector<::ContentSettingPatternSource>& settings) override {}
   void SetStorageAccessGrantSettings(
       const std::vector<::ContentSettingPatternSource>& settings,
       SetStorageAccessGrantSettingsCallback callback) override {}
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 295d734..f440bdc16 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -7979,9 +7979,10 @@
             ],
             "experiments": [
                 {
-                    "name": "Newtab_Tabgrid",
+                    "name": "Newtab_Tabgrid_History",
                     "enable_features": [
                         "IPHForSafariSwitcher",
+                        "IPH_iOSHistoryOnOverflowMenuFeature",
                         "IPH_iOSNewTabToolbarItemFeature",
                         "IPH_iOSTabGridToolbarItemFeature"
                     ]
@@ -7989,21 +7990,6 @@
             ]
         }
     ],
-    "IOSIPHForSafariSwitcherHistoryOnly": [
-        {
-            "platforms": [
-                "ios"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "IPH_iOSHistoryOnOverflowMenuFeature"
-                    ]
-                }
-            ]
-        }
-    ],
     "IOSInactiveTabs": [
         {
             "platforms": [
@@ -15711,24 +15697,6 @@
             ]
         }
     ],
-    "UnoPhase2": [
-        {
-            "platforms": [
-                "ios"
-            ],
-            "experiments": [
-                {
-                    "name": "EnabledUno",
-                    "enable_features": [
-                        "FeedBottomSyncStringRemoval",
-                        "ReplaceSyncPromosWithSignInPromos",
-                        "SyncEnableContactInfoDataTypeForCustomPassphraseUsers",
-                        "SyncEnableContactInfoDataTypeInTransportMode"
-                    ]
-                }
-            ]
-        }
-    ],
     "UploadOfficeToCloud": [
         {
             "platforms": [
diff --git a/third_party/.gitignore b/third_party/.gitignore
index ab50288..628eed67 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -273,6 +273,7 @@
 /soda-mac64
 /soda-win32
 /soda-win64
+/speedometer/v3.0
 /speex
 /sqlite/src
 /sqlite4java/lib/
diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn
index 0b730afa..8bd2c0c0 100644
--- a/third_party/blink/public/common/BUILD.gn
+++ b/third_party/blink/public/common/BUILD.gn
@@ -152,6 +152,7 @@
     "css/navigation_controls.h",
     "css/page_orientation.h",
     "css/page_size_type.h",
+    "css/scripting.h",
     "custom_handlers/protocol_handler_utils.h",
     "device_memory/approximated_device_memory.h",
     "dom_storage/session_storage_namespace_id.h",
diff --git a/third_party/blink/public/common/css/scripting.h b/third_party/blink/public/common/css/scripting.h
new file mode 100644
index 0000000..b200bed
--- /dev/null
+++ b/third_party/blink/public/common/css/scripting.h
@@ -0,0 +1,24 @@
+// 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 THIRD_PARTY_BLINK_PUBLIC_COMMON_CSS_SCRIPTING_H_
+#define THIRD_PARTY_BLINK_PUBLIC_COMMON_CSS_SCRIPTING_H_
+
+namespace blink {
+
+enum class Scripting {
+  // Scripting is not supported or not enabled.
+  kNone,
+  // Scripting is supported and enabled, but only for initial page load
+  // We will never match this value as it is intended for non-browser user
+  // agents, but it is part of the spec so we should still parse it.
+  // See https://github.com/w3c/csswg-drafts/issues/8621
+  kInitialOnly,
+  // Scripting is supported and enabled.
+  kEnabled,
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_CSS_SCRIPTING_H_
diff --git a/third_party/blink/public/common/privacy_budget/identifiable_surface.h b/third_party/blink/public/common/privacy_budget/identifiable_surface.h
index ec14668..bf11ea79 100644
--- a/third_party/blink/public/common/privacy_budget/identifiable_surface.h
+++ b/third_party/blink/public/common/privacy_budget/identifiable_surface.h
@@ -354,8 +354,9 @@
     kAspectRatioNormalized = 25,
     kPrefersReducedTransparency = 26,
     kInvertedColors = 27,
+    kScripting = 28,
     // We can use enum values up to and including 63, see static_assert below.
-    kMax = kInvertedColors
+    kMax = kScripting
   };
   static_assert(static_cast<int>(MediaFeatureName::kMax) < 64,
                 "MediaFeatureName only allows values < 64 since we use it in "
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 527c6de..1dd49ba 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -1002,14 +1002,61 @@
     properties
       # address field name, for example GIVEN_NAME.
       string name
-      # address field name, for example Jon Doe.
+      # address field value, for example Jon Doe.
       string value
 
+  # A list of address fields.
+  type AddressFields extends object
+    properties
+      array of AddressField fields
+
   type Address extends object
     properties
-      # fields and values defining a test address.
+      # fields and values defining an address.
       array of AddressField fields
 
+  # Defines how an address can be displayed like in chrome://settings/addresses. 
+  # Address UI is a two dimensional array, each inner array is an "address information line", and when rendered in a UI surface should be displayed as such.
+  # The following address UI for instance:
+  # [[{name: "GIVE_NAME", value: "Jon"}, {name: "FAMILY_NAME", value: "Doe"}], [{name: "CITY", value: "Munich"}, {name: "ZIP", value: "81456"}]]
+  # should allow the receiver to render:
+  # Jon Doe
+  # Munich 81456
+  type AddressUI extends object
+    properties
+      # A two dimension array containing the repesentation of values from an address profile.
+      array of AddressFields addressFields
+
+  # Specified whether a filled field was done so by using the html autocomplete attribute or autofill heuristics.
+  type FillingStrategy extends string
+    enum
+      autocompleteAttribute
+      autofillInferred
+
+  type FilledField extends object
+    properties
+      # The type of the field, e.g text, password etc.
+      string htmlType
+      # the html id
+      string id
+      # the html name
+      string name
+      # the field value
+      string value
+      # The actual field type, e.g FAMILY_NAME
+      string autofillType
+      # The filling strategy
+      FillingStrategy fillingStrategy
+
+  # Emitted when an address form is filled.
+  event addressFormFilled
+    parameters
+      # Information about the fields that were filled
+      array of FilledField filledFields
+      # An UI representation of the address used to fill the form. 
+      # Consists of a 2D array where each child represents an address/profile line.
+      AddressUI addressUi
+
   # Trigger autofill on a form identified by the fieldId.
   # If the field and related form cannot be autofilled, returns an error.
   command trigger
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index 665b3a5..f9567d5b 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -933,6 +933,16 @@
   virtual void SetResourceCacheRemote(
       CrossVariantMojoRemote<mojom::ResourceCacheInterfaceBase> remote) = 0;
 
+  // Used to block and resume parsing of the current document in the frame.
+  virtual void BlockParserForTesting() {}
+  virtual void ResumeParserForTesting() {}
+
+  // Processes all pending input in the widget associated with this frame.
+  // This is an asynchronous operation since it processes the compositor queue
+  // as well. The passed closure is invoked when queues of both threads have
+  // been processed.
+  virtual void FlushInputForTesting(base::OnceClosure) {}
+
  protected:
   explicit WebLocalFrame(mojom::TreeScopeType scope,
                          const LocalFrameToken& frame_token)
diff --git a/third_party/blink/renderer/core/css/build.gni b/third_party/blink/renderer/core/css/build.gni
index 695d7646..c2fff50 100644
--- a/third_party/blink/renderer/core/css/build.gni
+++ b/third_party/blink/renderer/core/css/build.gni
@@ -57,7 +57,7 @@
   "container_query_scroll_snapshot.h",
   "container_selector.cc",
   "container_selector.h",
-  "container_stuck.h",
+  "container_state.h",
   "style_containment_scope.cc",
   "style_containment_scope.h",
   "style_containment_scope_tree.cc",
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator.cc b/third_party/blink/renderer/core/css/container_query_evaluator.cc
index 29d3f344..bc6865ceee 100644
--- a/third_party/blink/renderer/core/css/container_query_evaluator.cc
+++ b/third_party/blink/renderer/core/css/container_query_evaluator.cc
@@ -138,8 +138,8 @@
   const ContainerSelector& selector = query.Selector();
   bool selects_size = selector.SelectsSizeContainers();
   bool selects_style = selector.SelectsStyleContainers();
-  bool selects_sticky = selector.SelectsStickyContainers();
-  if (!selects_size && !selects_style && !selects_sticky) {
+  bool selects_state = selector.SelectsStateContainers();
+  if (!selects_size && !selects_style && !selects_state) {
     return false;
   }
 
@@ -149,8 +149,8 @@
   if (selects_style) {
     match_result.SetDependsOnStyleContainerQueries();
   }
-  if (selects_sticky) {
-    match_result.SetDependsOnStickyContainerQueries();
+  if (selects_state) {
+    match_result.SetDependsOnStateContainerQueries();
   }
 
   Element* starting_element =
@@ -250,9 +250,9 @@
   if (!depends_on_style_) {
     depends_on_style_ = query.Selector().SelectsStyleContainers();
   }
-  if (!depends_on_sticky_) {
-    depends_on_sticky_ = query.Selector().SelectsStickyContainers();
-    if (depends_on_sticky_ && !snapshot_) {
+  if (!depends_on_state_) {
+    depends_on_state_ = query.Selector().SelectsStateContainers();
+    if (depends_on_state_ && !snapshot_) {
       CHECK(media_query_evaluator_);
       Element* container_element =
           media_query_evaluator_->GetMediaValues().ContainerElement();
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator.h b/third_party/blink/renderer/core/css/container_query_evaluator.h
index 01099de..da6a1d2 100644
--- a/third_party/blink/renderer/core/css/container_query_evaluator.h
+++ b/third_party/blink/renderer/core/css/container_query_evaluator.h
@@ -7,7 +7,7 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/container_selector.h"
-#include "third_party/blink/renderer/core/css/container_stuck.h"
+#include "third_party/blink/renderer/core/css/container_state.h"
 #include "third_party/blink/renderer/core/css/media_query_evaluator.h"
 #include "third_party/blink/renderer/core/css/media_query_exp.h"
 #include "third_party/blink/renderer/core/css/style_recalc_change.h"
@@ -156,7 +156,7 @@
   bool referenced_by_unit_ = false;
   bool font_dirty_ = false;
   bool depends_on_style_ = false;
-  bool depends_on_sticky_ = false;
+  bool depends_on_state_ = false;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
index 966407f..26002c1 100644
--- a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
+++ b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
@@ -821,6 +821,50 @@
       sticky_size);
 }
 
+TEST_F(ContainerQueryEvaluatorTest, FindSnapContainer) {
+  SetBodyInnerHTML(R"HTML(
+    <div style="container-type: sticky snap">
+      <div style="container-name:outer;container-type: snap">
+        <div style="container-name:outer">
+          <div style="container-type: snap">
+            <div>
+              <div></div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  )HTML");
+
+  UpdateAllLifecyclePhasesForTest();
+
+  Element* sticky_snap = GetDocument().body()->firstElementChild();
+  Element* outer_snap = sticky_snap->firstElementChild();
+  Element* outer = outer_snap->firstElementChild();
+  Element* inner_snap = outer->firstElementChild();
+  Element* inner = inner_snap->firstElementChild();
+
+  EXPECT_EQ(ContainerQueryEvaluator::FindContainer(
+                inner,
+                ParseContainer("state(snapped: inline) and style(--foo: bar)")
+                    ->Selector(),
+                &GetDocument()),
+            inner_snap);
+  EXPECT_EQ(
+      ContainerQueryEvaluator::FindContainer(
+          inner,
+          ParseContainer("outer state(snapped: block) and style(--foo: bar)")
+              ->Selector(),
+          &GetDocument()),
+      outer_snap);
+  EXPECT_EQ(ContainerQueryEvaluator::FindContainer(
+                inner,
+                ParseContainer("state((snapped: none) and (stuck: bottom))")
+                    ->Selector(),
+                &GetDocument()),
+            sticky_snap);
+}
+
 TEST_F(ContainerQueryEvaluatorTest, ScopedCaching) {
   GetDocument()
       .documentElement()
diff --git a/third_party/blink/renderer/core/css/container_query_scroll_snapshot.h b/third_party/blink/renderer/core/css/container_query_scroll_snapshot.h
index 7c51d1d..2915935 100644
--- a/third_party/blink/renderer/core/css/container_query_scroll_snapshot.h
+++ b/third_party/blink/renderer/core/css/container_query_scroll_snapshot.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_QUERY_SCROLL_SNAPSHOT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_QUERY_SCROLL_SNAPSHOT_H_
 
-#include "third_party/blink/renderer/core/css/container_stuck.h"
+#include "third_party/blink/renderer/core/css/container_state.h"
 #include "third_party/blink/renderer/core/scroll/scroll_snapshot_client.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 
diff --git a/third_party/blink/renderer/core/css/container_selector.cc b/third_party/blink/renderer/core/css/container_selector.cc
index e088717d..243845d 100644
--- a/third_party/blink/renderer/core/css/container_selector.cc
+++ b/third_party/blink/renderer/core/css/container_selector.cc
@@ -29,9 +29,12 @@
   if (feature_flags & MediaQueryExpNode::kFeatureStyle) {
     has_style_query_ = true;
   }
-  if (feature_flags & MediaQueryExpNode::kFeatureState) {
+  if (feature_flags & MediaQueryExpNode::kFeatureSticky) {
     has_sticky_query_ = true;
   }
+  if (feature_flags & MediaQueryExpNode::kFeatureSnap) {
+    has_snap_query_ = true;
+  }
   if (feature_flags & MediaQueryExpNode::kFeatureUnknown) {
     has_unknown_feature_ = true;
   }
@@ -61,6 +64,9 @@
   if (has_sticky_query_) {
     type |= kContainerTypeSticky;
   }
+  if (has_snap_query_) {
+    type |= kContainerTypeSnap;
+  }
   return type;
 }
 
diff --git a/third_party/blink/renderer/core/css/container_selector.h b/third_party/blink/renderer/core/css/container_selector.h
index 108b9067..b86dfe3 100644
--- a/third_party/blink/renderer/core/css/container_selector.h
+++ b/third_party/blink/renderer/core/css/container_selector.h
@@ -46,7 +46,8 @@
     return (name_ == o.name_) && (physical_axes_ == o.physical_axes_) &&
            (logical_axes_ == o.logical_axes_) &&
            (has_style_query_ == o.has_style_query_) &&
-           (has_sticky_query_ == o.has_sticky_query_);
+           (has_sticky_query_ == o.has_sticky_query_) &&
+           (has_snap_query_ == o.has_snap_query_);
   }
   bool operator!=(const ContainerSelector& o) const { return !(*this == o); }
 
@@ -65,6 +66,10 @@
 
   bool SelectsStyleContainers() const { return has_style_query_; }
   bool SelectsStickyContainers() const { return has_sticky_query_; }
+  bool SelectsSnapContainers() const { return has_snap_query_; }
+  bool SelectsStateContainers() const {
+    return SelectsStickyContainers() || SelectsSnapContainers();
+  }
   bool HasUnknownFeature() const { return has_unknown_feature_; }
 
   PhysicalAxes GetPhysicalAxes() const { return physical_axes_; }
@@ -76,6 +81,7 @@
   LogicalAxes logical_axes_{kLogicalAxisNone};
   bool has_style_query_{false};
   bool has_sticky_query_{false};
+  bool has_snap_query_{false};
   bool has_unknown_feature_{false};
 };
 
diff --git a/third_party/blink/renderer/core/css/container_stuck.h b/third_party/blink/renderer/core/css/container_state.h
similarity index 65%
rename from third_party/blink/renderer/core/css/container_stuck.h
rename to third_party/blink/renderer/core/css/container_state.h
index b534262..11000bf7 100644
--- a/third_party/blink/renderer/core/css/container_stuck.h
+++ b/third_party/blink/renderer/core/css/container_state.h
@@ -2,8 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STUCK_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STUCK_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STATE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STATE_H_
+
+namespace blink {
 
 // Enum classes that represents whether a sticky positioned element is stuck to
 // a scroll container edge for a given axis. Used for evaluating stuck state
@@ -36,4 +38,16 @@
   }
 }
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STUCK_H_
+// Flags that represent whether a scroll-snapped query container is snapped to
+// its scroll container in a given direction.
+enum class ContainerSnapped {
+  kNone = 0,
+  kBlock = 1 << 0,
+  kInline = 1 << 1,
+};
+
+using ContainerSnappedFlags = unsigned;
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CONTAINER_STATE_H_
diff --git a/third_party/blink/renderer/core/css/css_container_values.h b/third_party/blink/renderer/core/css/css_container_values.h
index 0a4ceac..d6d22da 100644
--- a/third_party/blink/renderer/core/css/css_container_values.h
+++ b/third_party/blink/renderer/core/css/css_container_values.h
@@ -56,6 +56,7 @@
   }
   ContainerStuckLogical StuckInline() const override;
   ContainerStuckLogical StuckBlock() const override;
+  ContainerSnappedFlags SnappedFlags() const override { return snapped_; }
 
  private:
   // The current computed style for the container.
@@ -70,6 +71,11 @@
   ContainerStuckPhysical stuck_horizontal_ = ContainerStuckPhysical::kNo;
   // Whether a sticky container is vertically stuck and against which edge.
   ContainerStuckPhysical stuck_vertical_ = ContainerStuckPhysical::kNo;
+  // Union of flags for whether a scroll-snapped container is snapped in block
+  // or inline directions.
+  // TODO(crbug.com/1475231): Need to update this from the scroll snapshot.
+  ContainerSnappedFlags snapped_ =
+      static_cast<ContainerSnappedFlags>(ContainerSnapped::kNone);
   // Container font sizes for resolving relative lengths.
   CSSToLengthConversionData::FontSizes font_sizes_;
   // LineHeightSize of the container element.
diff --git a/third_party/blink/renderer/core/css/css_value_keywords.json5 b/third_party/blink/renderer/core/css/css_value_keywords.json5
index 323bab5..c05cd1d 100644
--- a/third_party/blink/renderer/core/css/css_value_keywords.json5
+++ b/third_party/blink/renderer/core/css/css_value_keywords.json5
@@ -1727,5 +1727,10 @@
     // size,
     "snap",
     // sticky,
+
+    // (scripting:) media feature
+    "enabled",
+    "initial-only",
+    // none
   ],
 }
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.cc b/third_party/blink/renderer/core/css/element_rule_collector.cc
index 1b72d5b..ae3cd3a 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.cc
+++ b/third_party/blink/renderer/core/css/element_rule_collector.cc
@@ -588,7 +588,7 @@
           result_.SetDependsOnStyleContainerQueries();
         }
         if (selects_sticky) {
-          result_.SetDependsOnStickyContainerQueries();
+          result_.SetDependsOnStateContainerQueries();
         }
       }
     }
diff --git a/third_party/blink/renderer/core/css/media_feature_names.json5 b/third_party/blink/renderer/core/css/media_feature_names.json5
index f1b2ae6..a04412784 100644
--- a/third_party/blink/renderer/core/css/media_feature_names.json5
+++ b/third_party/blink/renderer/core/css/media_feature_names.json5
@@ -71,7 +71,9 @@
     "device-posture",
     "horizontal-viewport-segments",
     "vertical-viewport-segments",
+    "snapped",
     "stuck",
     "inverted-colors",
+    "scripting",
   ],
 }
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc
index 6cb72d1..6b40dd2 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -32,6 +32,7 @@
 #include "services/device/public/mojom/device_posture_provider.mojom-blink.h"
 #include "third_party/blink/public/common/css/forced_colors.h"
 #include "third_party/blink/public/common/css/navigation_controls.h"
+#include "third_party/blink/public/common/css/scripting.h"
 #include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
 #include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
 #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
@@ -1459,8 +1460,7 @@
                                   MediaQueryOperator op,
                                   const MediaValues& media_values) {
   if (!value.IsValid()) {
-    return media_values.StuckHorizontal() != ContainerStuckPhysical::kNo ||
-           media_values.StuckVertical() != ContainerStuckPhysical::kNo;
+    return media_values.Stuck();
   }
 
   switch (value.Id()) {
@@ -1489,6 +1489,25 @@
   }
 }
 
+static bool SnappedMediaFeatureEval(const MediaQueryExpValue& value,
+                                    MediaQueryOperator op,
+                                    const MediaValues& media_values) {
+  if (!value.IsValid()) {
+    return media_values.Snapped();
+  }
+  switch (value.Id()) {
+    case CSSValueID::kNone:
+      return media_values.Snapped();
+    case CSSValueID::kBlock:
+      return media_values.SnappedBlock();
+    case CSSValueID::kInline:
+      return media_values.SnappedInline();
+    default:
+      NOTREACHED();
+      return false;
+  }
+}
+
 static bool InvertedColorsMediaFeatureEval(const MediaQueryExpValue& value,
                                            MediaQueryOperator,
                                            const MediaValues& media_values) {
@@ -1507,6 +1526,34 @@
   return (value.Id() == CSSValueID::kNone) != media_values.InvertedColors();
 }
 
+static bool ScriptingMediaFeatureEval(const MediaQueryExpValue& value,
+                                      MediaQueryOperator,
+                                      const MediaValues& media_values) {
+  MaybeRecordMediaFeatureValue(
+      media_values, IdentifiableSurface::MediaFeatureName::kScripting,
+      media_values.GetScripting());
+
+  if (!value.IsValid()) {
+    return media_values.GetScripting() == Scripting::kEnabled;
+  }
+
+  if (!value.IsId()) {
+    return false;
+  }
+
+  switch (value.Id()) {
+    case CSSValueID::kNone:
+      return media_values.GetScripting() == Scripting::kNone;
+    case CSSValueID::kInitialOnly:
+      return media_values.GetScripting() == Scripting::kInitialOnly;
+    case CSSValueID::kEnabled:
+      return media_values.GetScripting() == Scripting::kEnabled;
+    default:
+      NOTREACHED();
+      return false;
+  }
+}
+
 static MediaQueryOperator ReverseOperator(MediaQueryOperator op) {
   switch (op) {
     case MediaQueryOperator::kNone:
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
index 3ae53dbe..a655db3 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
@@ -443,6 +443,30 @@
     {nullptr, false}  // Do not remove the terminator line.
 };
 
+MediaQueryEvaluatorTestCase g_scripting_none_cases[] = {
+    {"(scripting)", false},
+    {"(scripting: none)", true},
+    {"(scripting: initial-only)", false},
+    {"(scripting: enabled)", false},
+    {nullptr, false}  // Do not remove the terminator line.
+};
+
+MediaQueryEvaluatorTestCase g_scripting_initial_only_cases[] = {
+    {"(scripting)", false},
+    {"(scripting: none)", false},
+    {"(scripting: initial-only)", true},
+    {"(scripting: enabled)", false},
+    {nullptr, false}  // Do not remove the terminator line.
+};
+
+MediaQueryEvaluatorTestCase g_scripting_enabled_cases[] = {
+    {"(scripting)", true},
+    {"(scripting: none)", false},
+    {"(scripting: initial-only)", false},
+    {"(scripting: enabled)", true},
+    {nullptr, false}  // Do not remove the terminator line.
+};
+
 void TestMQEvaluator(MediaQueryEvaluatorTestCase* test_cases,
                      const MediaQueryEvaluator& media_query_evaluator,
                      CSSParserMode mode) {
@@ -872,6 +896,34 @@
   }
 }
 
+TEST(MediaQueryEvaluatorTest, CachedScripting) {
+  MediaValuesCached::MediaValuesCachedData data;
+
+  // scripting - none
+  {
+    data.scripting = Scripting::kNone;
+    MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data);
+    MediaQueryEvaluator media_query_evaluator(media_values);
+    TestMQEvaluator(g_scripting_none_cases, media_query_evaluator);
+  }
+
+  // scripting - initial-only
+  {
+    data.scripting = Scripting::kInitialOnly;
+    MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data);
+    MediaQueryEvaluator media_query_evaluator(media_values);
+    TestMQEvaluator(g_scripting_initial_only_cases, media_query_evaluator);
+  }
+
+  // scripting - enabled
+  {
+    data.scripting = Scripting::kEnabled;
+    MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data);
+    MediaQueryEvaluator media_query_evaluator(media_values);
+    TestMQEvaluator(g_scripting_enabled_cases, media_query_evaluator);
+  }
+}
+
 TEST(MediaQueryEvaluatorTest, RangedValues) {
   MediaValuesCached::MediaValuesCachedData data;
   data.viewport_width = 500;
@@ -1612,4 +1664,31 @@
   EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false));
 }
 
+TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
+       MediaFeatureIdentifiableSurfaceScripting) {
+  GetDocument().body()->setInnerHTML(R"HTML(
+    <style>
+      @media (scripting: enabled) {
+        div { color: green }
+      }
+    </style>
+    <div id="green"></div>
+    <span></span>
+  )HTML");
+
+  UpdateAllLifecyclePhases();
+  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
+      static_cast<int>(IdentifiableSurface::MediaFeatureName::kScripting)));
+  EXPECT_EQ(collector()->entries().size(), 1u);
+
+  auto& entry = collector()->entries().front();
+  EXPECT_EQ(entry.metrics.size(), 1u);
+  EXPECT_EQ(entry.metrics.begin()->surface,
+            IdentifiableSurface::FromTypeAndToken(
+                IdentifiableSurface::Type::kMediaFeature,
+                IdentifiableToken(
+                    IdentifiableSurface::MediaFeatureName::kScripting)));
+  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(Scripting::kNone));
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/media_query_exp.cc b/third_party/blink/renderer/core/css/media_query_exp.cc
index 179f26e..2052e63 100644
--- a/third_party/blink/renderer/core/css/media_query_exp.cc
+++ b/third_party/blink/renderer/core/css/media_query_exp.cc
@@ -34,6 +34,7 @@
 #include "third_party/blink/renderer/core/css/css_math_function_value.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
+#include "third_party/blink/renderer/core/css/media_feature_names.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_context.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_impl.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
@@ -181,6 +182,25 @@
           return false;
       }
     }
+
+    if (RuntimeEnabledFeatures::ScriptingMediaFeatureEnabled() &&
+        media_feature == media_feature_names::kScriptingMediaFeature) {
+      return ident == CSSValueID::kEnabled ||
+             ident == CSSValueID::kInitialOnly || ident == CSSValueID::kNone;
+    }
+  }
+
+  if (RuntimeEnabledFeatures::CSSSnapContainerQueriesEnabled()) {
+    if (media_feature == media_feature_names::kSnappedMediaFeature) {
+      switch (ident) {
+        case CSSValueID::kNone:
+        case CSSValueID::kBlock:
+        case CSSValueID::kInline:
+          return true;
+        default:
+          return false;
+      }
+    }
   }
 
   return false;
@@ -786,22 +806,24 @@
 
 MediaQueryExpNode::FeatureFlags MediaQueryFeatureExpNode::CollectFeatureFlags()
     const {
-  FeatureFlags flags = 0;
-
-  if (exp_.IsWidthDependent()) {
-    flags |= kFeatureWidth;
+  if (exp_.MediaFeature() == media_feature_names::kStuckMediaFeature) {
+    return kFeatureSticky;
+  } else if (exp_.MediaFeature() == media_feature_names::kSnappedMediaFeature) {
+    return kFeatureSnap;
+  } else if (exp_.IsInlineSizeDependent()) {
+    return kFeatureInlineSize;
+  } else if (exp_.IsBlockSizeDependent()) {
+    return kFeatureBlockSize;
+  } else {
+    FeatureFlags flags = 0;
+    if (exp_.IsWidthDependent()) {
+      flags |= kFeatureWidth;
+    }
+    if (exp_.IsHeightDependent()) {
+      flags |= kFeatureHeight;
+    }
+    return flags;
   }
-  if (exp_.IsHeightDependent()) {
-    flags |= kFeatureHeight;
-  }
-  if (exp_.IsInlineSizeDependent()) {
-    flags |= kFeatureInlineSize;
-  }
-  if (exp_.IsBlockSizeDependent()) {
-    flags |= kFeatureBlockSize;
-  }
-
-  return flags;
 }
 
 void MediaQueryFeatureExpNode::Trace(Visitor* visitor) const {
@@ -843,9 +865,6 @@
   if (name_ == AtomicString("style")) {
     flags |= kFeatureStyle;
   }
-  if (name_ == AtomicString("state")) {
-    flags |= kFeatureState;
-  }
   return flags;
 }
 
diff --git a/third_party/blink/renderer/core/css/media_query_exp.h b/third_party/blink/renderer/core/css/media_query_exp.h
index 4404c9a..f8c1702 100644
--- a/third_party/blink/renderer/core/css/media_query_exp.h
+++ b/third_party/blink/renderer/core/css/media_query_exp.h
@@ -316,7 +316,8 @@
     kFeatureInlineSize = 1 << 4,
     kFeatureBlockSize = 1 << 5,
     kFeatureStyle = 1 << 6,
-    kFeatureState = 1 << 7,
+    kFeatureSticky = 1 << 7,
+    kFeatureSnap = 1 << 8,
   };
 
   using FeatureFlags = unsigned;
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc
index 2b6bc0e..71e212d 100644
--- a/third_party/blink/renderer/core/css/media_values.cc
+++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/css/media_values.h"
 
+#include "third_party/blink/public/common/css/scripting.h"
 #include "third_party/blink/public/platform/web_theme_engine.h"
 #include "third_party/blink/renderer/core/css/css_resolution_units.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
@@ -16,10 +17,12 @@
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
+#include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h"
+#include "third_party/blink/renderer/core/media_type_names.h"
 #include "third_party/blink/renderer/core/page/chrome_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/platform/graphics/color_space_gamut.h"
@@ -458,6 +461,17 @@
   return frame->GetDevicePosture();
 }
 
+Scripting MediaValues::CalculateScripting(LocalFrame* frame) {
+  DCHECK(frame);
+  DCHECK(frame->GetDocument());
+  if (!frame->GetDocument()->GetExecutionContext()->CanExecuteScripts(
+          kNotAboutToExecuteScript)) {
+    return Scripting::kNone;
+  }
+
+  return Scripting::kEnabled;
+}
+
 bool MediaValues::ComputeLengthImpl(double value,
                                     CSSPrimitiveValue::UnitType type,
                                     double& result) const {
diff --git a/third_party/blink/renderer/core/css/media_values.h b/third_party/blink/renderer/core/css/media_values.h
index 07622f8..b616715 100644
--- a/third_party/blink/renderer/core/css/media_values.h
+++ b/third_party/blink/renderer/core/css/media_values.h
@@ -12,7 +12,7 @@
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
 #include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink-forward.h"
 #include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/css/container_stuck.h"
+#include "third_party/blink/renderer/core/css/container_state.h"
 #include "third_party/blink/renderer/core/css/css_length_resolver.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -30,6 +30,7 @@
 enum class ColorSpaceGamut;
 enum class ForcedColors;
 enum class NavigationControls;
+enum class Scripting;
 
 mojom::blink::PreferredColorScheme CSSValueIDToPreferredColorScheme(
     CSSValueID id);
@@ -111,11 +112,32 @@
   virtual ContainerStuckLogical StuckBlock() const {
     return ContainerStuckLogical::kNo;
   }
+  // For boolean context evaluation.
+  bool Stuck() const {
+    return StuckHorizontal() != ContainerStuckPhysical::kNo ||
+           StuckVertical() != ContainerStuckPhysical::kNo;
+  }
+  // For evaluating state(snapped: block/inline)
+  bool SnappedBlock() const {
+    return SnappedFlags() &
+           static_cast<ContainerSnappedFlags>(ContainerSnapped::kBlock);
+  }
+  bool SnappedInline() const {
+    return SnappedFlags() &
+           static_cast<ContainerSnappedFlags>(ContainerSnapped::kInline);
+  }
+  bool Snapped() const { return SnappedBlock() || SnappedInline(); }
   // Returns the container element used to retrieve base style and parent style
   // when computing the computed value of a style() container query.
   virtual Element* ContainerElement() const { return nullptr; }
 
+  virtual Scripting GetScripting() const = 0;
+
  protected:
+  virtual ContainerSnappedFlags SnappedFlags() const {
+    return static_cast<ContainerSnappedFlags>(ContainerSnapped::kNone);
+  }
+
   static double CalculateViewportWidth(LocalFrame*);
   static double CalculateViewportHeight(LocalFrame*);
   static double CalculateSmallViewportWidth(LocalFrame*);
@@ -161,6 +183,7 @@
   static int CalculateVerticalViewportSegments(LocalFrame*);
   static device::mojom::blink::DevicePostureType CalculateDevicePosture(
       LocalFrame*);
+  static Scripting CalculateScripting(LocalFrame*);
 
   bool ComputeLengthImpl(double value,
                          CSSPrimitiveValue::UnitType,
diff --git a/third_party/blink/renderer/core/css/media_values_cached.cc b/third_party/blink/renderer/core/css/media_values_cached.cc
index 9aefeb33..1f1e2d6 100644
--- a/third_party/blink/renderer/core/css/media_values_cached.cc
+++ b/third_party/blink/renderer/core/css/media_values_cached.cc
@@ -84,6 +84,7 @@
         MediaValues::CalculateVerticalViewportSegments(frame);
     device_posture = MediaValues::CalculateDevicePosture(frame);
     inverted_colors = MediaValues::CalculateInvertedColors(frame);
+    scripting = MediaValues::CalculateScripting(frame);
   }
 }
 
@@ -331,4 +332,8 @@
   return data_.device_posture;
 }
 
+Scripting MediaValuesCached::GetScripting() const {
+  return data_.scripting;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/media_values_cached.h b/third_party/blink/renderer/core/css/media_values_cached.h
index 321aeda..d1258ee 100644
--- a/third_party/blink/renderer/core/css/media_values_cached.h
+++ b/third_party/blink/renderer/core/css/media_values_cached.h
@@ -8,6 +8,7 @@
 #include "services/device/public/mojom/device_posture_provider.mojom-blink.h"
 #include "third_party/blink/public/common/css/forced_colors.h"
 #include "third_party/blink/public/common/css/navigation_controls.h"
+#include "third_party/blink/public/common/css/scripting.h"
 #include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-blink.h"
 #include "third_party/blink/public/mojom/css/preferred_contrast.mojom-blink.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-blink.h"
@@ -78,6 +79,7 @@
     int vertical_viewport_segments = 0;
     device::mojom::blink::DevicePostureType device_posture =
         device::mojom::blink::DevicePostureType::kContinuous;
+    Scripting scripting = Scripting::kNone;
 
     MediaValuesCachedData();
     explicit MediaValuesCachedData(Document&);
@@ -118,6 +120,7 @@
       data.vertical_viewport_segments = vertical_viewport_segments;
       data.device_posture = device_posture;
       data.inverted_colors = inverted_colors;
+      data.scripting = scripting;
       return data;
     }
   };
@@ -158,6 +161,7 @@
   int GetHorizontalViewportSegments() const override;
   int GetVerticalViewportSegments() const override;
   device::mojom::blink::DevicePostureType GetDevicePosture() const override;
+  Scripting GetScripting() const override;
 
   void OverrideViewportDimensions(double width, double height);
 
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.cc b/third_party/blink/renderer/core/css/media_values_dynamic.cc
index db8a24e..d39b2a6 100644
--- a/third_party/blink/renderer/core/css/media_values_dynamic.cc
+++ b/third_party/blink/renderer/core/css/media_values_dynamic.cc
@@ -6,6 +6,7 @@
 
 #include "third_party/blink/public/common/css/forced_colors.h"
 #include "third_party/blink/public/common/css/navigation_controls.h"
+#include "third_party/blink/public/common/css/scripting.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/css/css_resolution_units.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
@@ -270,6 +271,10 @@
   return CalculateDevicePosture(frame_);
 }
 
+Scripting MediaValuesDynamic::GetScripting() const {
+  return CalculateScripting(frame_);
+}
+
 Document* MediaValuesDynamic::GetDocument() const {
   return frame_->GetDocument();
 }
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.h b/third_party/blink/renderer/core/css/media_values_dynamic.h
index e452f3cc..f3f3f9d 100644
--- a/third_party/blink/renderer/core/css/media_values_dynamic.h
+++ b/third_party/blink/renderer/core/css/media_values_dynamic.h
@@ -51,6 +51,7 @@
   int GetHorizontalViewportSegments() const override;
   int GetVerticalViewportSegments() const override;
   device::mojom::blink::DevicePostureType GetDevicePosture() const override;
+  Scripting GetScripting() const override;
   Document* GetDocument() const override;
   bool HasValues() const override;
 
diff --git a/third_party/blink/renderer/core/css/parser/container_query_parser.cc b/third_party/blink/renderer/core/css/parser/container_query_parser.cc
index dbb87058..13202187 100644
--- a/third_party/blink/renderer/core/css/parser/container_query_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/container_query_parser.cc
@@ -109,7 +109,10 @@
 
  public:
   bool IsAllowed(const String& feature) const override {
-    return feature == media_feature_names::kStuckMediaFeature;
+    return (RuntimeEnabledFeatures::CSSStickyContainerQueriesEnabled() &&
+            feature == media_feature_names::kStuckMediaFeature) ||
+           (RuntimeEnabledFeatures::CSSSnapContainerQueriesEnabled() &&
+            feature == media_feature_names::kSnappedMediaFeature);
   }
   bool IsAllowedWithoutValue(const String& feature,
                              const ExecutionContext*) const override {
@@ -189,10 +192,12 @@
       context_.Count(WebFeature::kCSSStyleContainerQuery);
       return MediaQueryExpNode::Function(query, AtomicString("style"));
     }
-  } else if (RuntimeEnabledFeatures::CSSStickyContainerQueriesEnabled() &&
+  } else if ((RuntimeEnabledFeatures::CSSStickyContainerQueriesEnabled() ||
+              RuntimeEnabledFeatures::CSSSnapContainerQueriesEnabled()) &&
              range.Peek().GetType() == kFunctionToken &&
              range.Peek().FunctionId() == CSSValueID::kState) {
-    // state(stuck: [top | left | right | bottom | inset-* ] )
+    // state(stuck: [ none | top | left | right | bottom | inset-* ] )
+    // state(snapped: [ none | block | inline ] )
     CSSParserTokenRange block = range.ConsumeBlock();
     block.ConsumeWhitespace();
     range.ConsumeWhitespace();
diff --git a/third_party/blink/renderer/core/css/parser/media_query_parser.cc b/third_party/blink/renderer/core/css/parser/media_query_parser.cc
index 7d2cc20..9fe9e9c0 100644
--- a/third_party/blink/renderer/core/css/parser/media_query_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/media_query_parser.cc
@@ -37,6 +37,7 @@
         feature == media_feature_names::kMinBlockSizeMediaFeature ||
         feature == media_feature_names::kMaxBlockSizeMediaFeature ||
         feature == media_feature_names::kStuckMediaFeature ||
+        feature == media_feature_names::kSnappedMediaFeature ||
         CSSVariableParser::IsValidVariableName(feature)) {
       return false;
     }
@@ -102,7 +103,9 @@
            (feature == media_feature_names::kInvertedColorsMediaFeature &&
             RuntimeEnabledFeatures::InvertedColorsEnabled()) ||
            (CSSVariableParser::IsValidVariableName(feature) &&
-            RuntimeEnabledFeatures::CSSStyleQueriesBooleanEnabled());
+            RuntimeEnabledFeatures::CSSStyleQueriesBooleanEnabled()) ||
+           (feature == media_feature_names::kScriptingMediaFeature &&
+            RuntimeEnabledFeatures::ScriptingMediaFeatureEnabled());
   }
 
   bool IsCaseSensitive(const String& feature) const override { return false; }
diff --git a/third_party/blink/renderer/core/css/resolver/match_result.h b/third_party/blink/renderer/core/css/resolver/match_result.h
index 0dd9215..cb8b392a6 100644
--- a/third_party/blink/renderer/core/css/resolver/match_result.h
+++ b/third_party/blink/renderer/core/css/resolver/match_result.h
@@ -124,11 +124,11 @@
   bool DependsOnStyleContainerQueries() const {
     return depends_on_style_container_queries_;
   }
-  void SetDependsOnStickyContainerQueries() {
-    depends_on_sticky_container_queries_ = true;
+  void SetDependsOnStateContainerQueries() {
+    depends_on_state_container_queries_ = true;
   }
-  bool DependsOnStickyContainerQueries() const {
-    return depends_on_sticky_container_queries_;
+  bool DependsOnStateContainerQueries() const {
+    return depends_on_state_container_queries_;
   }
   void SetFirstLineDependsOnSizeContainerQueries() {
     first_line_depends_on_size_container_queries_ = true;
@@ -216,7 +216,7 @@
   bool is_cacheable_{true};
   bool depends_on_size_container_queries_{false};
   bool depends_on_style_container_queries_{false};
-  bool depends_on_sticky_container_queries_{false};
+  bool depends_on_state_container_queries_{false};
   bool first_line_depends_on_size_container_queries_{false};
   bool depends_on_static_viewport_units_{false};
   bool depends_on_dynamic_viewport_units_{false};
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index dfbe152..d20e4863 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1448,8 +1448,8 @@
   if (match_result.DependsOnStyleContainerQueries()) {
     state.StyleBuilder().SetDependsOnStyleContainerQueries(true);
   }
-  if (match_result.DependsOnStickyContainerQueries()) {
-    state.StyleBuilder().SetDependsOnStickyContainerQueries(true);
+  if (match_result.DependsOnStateContainerQueries()) {
+    state.StyleBuilder().SetDependsOnStateContainerQueries(true);
   }
   if (match_result.FirstLineDependsOnSizeContainerQueries()) {
     state.StyleBuilder().SetFirstLineDependsOnSizeContainerQueries(true);
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc
index 81b6fca..0c53f79d 100644
--- a/third_party/blink/renderer/core/css/style_engine_test.cc
+++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -3246,6 +3246,73 @@
             true);
 }
 
+TEST_F(StyleEngineTest, PrintScriptingEnabled) {
+  GetDocument().body()->setInnerHTML(R"HTML(
+      <style>
+        @media (scripting) {
+          body { color: green; }
+        }
+        @media (scripting: none) {
+          body { color: red; }
+        }
+      </style>
+    )HTML");
+  GetFrame().GetSettings()->SetScriptEnabled(true);
+  UpdateAllLifecyclePhases();
+  Element* body = GetDocument().body();
+
+  EXPECT_EQ(true,
+            GetDocument().GetExecutionContext()->CanExecuteScripts(
+                ReasonForCallingCanExecuteScripts::kNotAboutToExecuteScript));
+
+  EXPECT_EQ(
+      Color::FromRGB(0, 128, 0),
+      body->GetComputedStyle()->VisitedDependentColor(GetCSSPropertyColor()));
+
+  gfx::SizeF page_size(400, 400);
+  GetDocument().GetFrame()->StartPrinting(page_size, 1);
+  EXPECT_EQ(
+      Color::FromRGB(0, 128, 0),
+      body->GetComputedStyle()->VisitedDependentColor(GetCSSPropertyColor()));
+
+  GetDocument().GetFrame()->EndPrinting();
+}
+
+TEST_F(StyleEngineTest, MediaQueriesChangeScripting) {
+  GetDocument().body()->setInnerHTML(R"HTML(
+        <style>
+          @media (scripting) {
+            body { color: green; }
+          }
+          @media (scripting: none) {
+            body { color: red; }
+          }
+        </style>
+      )HTML");
+  GetFrame().GetSettings()->SetScriptEnabled(true);
+  UpdateAllLifecyclePhases();
+  Element* body = GetDocument().body();
+
+  EXPECT_EQ(true,
+            GetDocument().GetExecutionContext()->CanExecuteScripts(
+                ReasonForCallingCanExecuteScripts::kNotAboutToExecuteScript));
+
+  EXPECT_EQ(
+      Color::FromRGB(0, 128, 0),
+      body->GetComputedStyle()->VisitedDependentColor(GetCSSPropertyColor()));
+
+  GetFrame().GetSettings()->SetScriptEnabled(false);
+  UpdateAllLifecyclePhases();
+
+  EXPECT_EQ(false,
+            GetDocument().GetExecutionContext()->CanExecuteScripts(
+                ReasonForCallingCanExecuteScripts::kNotAboutToExecuteScript));
+
+  EXPECT_EQ(
+      Color::FromRGB(255, 0, 0),
+      body->GetComputedStyle()->VisitedDependentColor(GetCSSPropertyColor()));
+}
+
 TEST_F(StyleEngineTest, AtPropertyUseCount) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
diff --git a/third_party/blink/renderer/core/css/style_recalc_change.cc b/third_party/blink/renderer/core/css/style_recalc_change.cc
index 58abdad..6e0c9e9 100644
--- a/third_party/blink/renderer/core/css/style_recalc_change.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_change.cc
@@ -41,8 +41,8 @@
           old_style->DependsOnSizeContainerQueries()) ||
          (RecalcStyleContainerQueryDependent() &&
           old_style->DependsOnStyleContainerQueries()) ||
-         (RecalcStickyContainerQueryDependent() &&
-          old_style->DependsOnStickyContainerQueries());
+         (RecalcStateContainerQueryDependent() &&
+          old_style->DependsOnStateContainerQueries());
 }
 
 bool StyleRecalcChange::ShouldRecalcStyleFor(const Node& node) const {
diff --git a/third_party/blink/renderer/core/css/style_recalc_change.h b/third_party/blink/renderer/core/css/style_recalc_change.h
index 9653fd6..7e144c7 100644
--- a/third_party/blink/renderer/core/css/style_recalc_change.h
+++ b/third_party/blink/renderer/core/css/style_recalc_change.h
@@ -36,12 +36,12 @@
     // Recalc size container query dependent elements within this container,
     // and also in nested containers.
     kRecalcStyleContainerDescendants = 1 << 3,
-    // Recalc sticky container query dependent elements within this container,
+    // Recalc state container query dependent elements within this container,
     // but not in nested containers.
-    kRecalcStickyContainer = 1 << 4,
-    // Recalc sticky container query dependent elements within this container,
+    kRecalcStateContainer = 1 << 4,
+    // Recalc state container query dependent elements within this container,
     // and also in nested containers.
-    kRecalcDescendantStickyContainers = 1 << 5,
+    kRecalcDescendantStateContainers = 1 << 5,
     // If set, need to reattach layout tree.
     kReattach = 1 << 6,
     // If set, will prevent style recalc for the node passed to
@@ -61,12 +61,12 @@
   static const Flags kRecalcStyleContainerFlags =
       kRecalcStyleContainerChildren | kRecalcStyleContainerDescendants;
 
-  static const Flags kRecalcStickyContainerFlags =
-      kRecalcStickyContainer | kRecalcDescendantStickyContainers;
+  static const Flags kRecalcStateContainerFlags =
+      kRecalcStateContainer | kRecalcDescendantStateContainers;
 
   static const Flags kRecalcContainerFlags = kRecalcSizeContainerFlags |
                                              kRecalcStyleContainerFlags |
-                                             kRecalcStickyContainerFlags;
+                                             kRecalcStateContainerFlags;
 
  public:
   enum Propagate {
@@ -131,12 +131,12 @@
     return {propagate_,
             static_cast<Flags>(flags_ | kRecalcStyleContainerDescendants)};
   }
-  StyleRecalcChange ForceRecalcStickyContainer() const {
-    return {propagate_, static_cast<Flags>(flags_ | kRecalcStickyContainer)};
+  StyleRecalcChange ForceRecalcStateContainer() const {
+    return {propagate_, static_cast<Flags>(flags_ | kRecalcStateContainer)};
   }
-  StyleRecalcChange ForceRecalcDescendantStickyContainers() const {
+  StyleRecalcChange ForceRecalcDescendantStateContainers() const {
     return {propagate_,
-            static_cast<Flags>(flags_ | kRecalcDescendantStickyContainers)};
+            static_cast<Flags>(flags_ | kRecalcDescendantStateContainers)};
   }
   StyleRecalcChange SuppressRecalc() const {
     return {propagate_, static_cast<Flags>(flags_ | kSuppressRecalc)};
@@ -200,8 +200,8 @@
   bool RecalcStyleContainerQueryDependent() const {
     return flags_ & kRecalcStyleContainerFlags;
   }
-  bool RecalcStickyContainerQueryDependent() const {
-    return flags_ & kRecalcStickyContainerFlags;
+  bool RecalcStateContainerQueryDependent() const {
+    return flags_ & kRecalcStateContainerFlags;
   }
   bool RecalcContainerQueryDependent() const {
     return flags_ & kRecalcContainerFlags;
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index f812fac..72dfc24 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3769,11 +3769,11 @@
             case ContainerQueryEvaluator::Change::kNone:
               break;
             case ContainerQueryEvaluator::Change::kNearestContainer:
-              child_change = child_change.ForceRecalcStickyContainer();
+              child_change = child_change.ForceRecalcStateContainer();
               break;
             case ContainerQueryEvaluator::Change::kDescendantContainers:
               child_change =
-                  child_change.ForceRecalcDescendantStickyContainers();
+                  child_change.ForceRecalcDescendantStateContainers();
               break;
           }
         }
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5
index 6ea330a7..be82f998 100644
--- a/third_party/blink/renderer/core/frame/settings.json5
+++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -556,6 +556,7 @@
     {
       name: "scriptEnabled",
       initial: false,
+      invalidate: ["MediaQuery"],
     },
 
     {
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
index 0e02b4a8..5a79aaf 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -3792,6 +3792,11 @@
   widget_base_->widget_input_handler_manager()->DidNavigate();
 }
 
+void WebFrameWidgetImpl::FlushInputForTesting(base::OnceClosure done_callback) {
+  widget_base_->widget_input_handler_manager()->FlushEventQueuesForTesting(
+      std::move(done_callback));
+}
+
 void WebFrameWidgetImpl::SetMouseCapture(bool capture) {
   if (mojom::blink::WidgetInputHandlerHost* host =
           widget_base_->widget_input_handler_manager()
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
index 6cec57a..d9a05d1c 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -595,6 +595,10 @@
   // Called when the main frame navigates.
   void DidNavigate();
 
+  // Ensures all queued input in the widget has been processed and the queues
+  // emptied.
+  void FlushInputForTesting(base::OnceClosure done_callback);
+
   // Called when the widget should get targeting input.
   void SetMouseCapture(bool capture);
 
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 95ac953..11bcf866 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -3276,6 +3276,27 @@
   GetFrame()->SetResourceCacheRemote(std::move(remote));
 }
 
+void WebLocalFrameImpl::BlockParserForTesting() {
+  // Avoid blocking for MHTML tests since MHTML archives are loaded
+  // synchronously during commit. WebFrameTestProxy only has a chance to act at
+  // DidCommit after that's happened.
+  if (GetFrame()->Loader().GetDocumentLoader()->Archive()) {
+    return;
+  }
+  GetFrame()->Loader().GetDocumentLoader()->BlockParser();
+}
+
+void WebLocalFrameImpl::ResumeParserForTesting() {
+  if (GetFrame()->Loader().GetDocumentLoader()->Archive()) {
+    return;
+  }
+  GetFrame()->Loader().GetDocumentLoader()->ResumeParser();
+}
+
+void WebLocalFrameImpl::FlushInputForTesting(base::OnceClosure done_callback) {
+  frame_widget_->FlushInputForTesting(std::move(done_callback));
+}
+
 void WebLocalFrameImpl::SetTargetToCurrentHistoryItem(const WebString& target) {
   current_history_item_->SetTarget(target);
 }
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index d90e5885..26cea96 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -369,6 +369,9 @@
   void SetResourceCacheRemote(
       CrossVariantMojoRemote<mojom::blink::ResourceCacheInterfaceBase> remote)
       override;
+  void BlockParserForTesting() override;
+  void ResumeParserForTesting() override;
+  void FlushInputForTesting(base::OnceClosure done_callback) override;
 
   // WebNavigationControl overrides:
   bool DispatchBeforeUnloadEvent(bool) override;
diff --git a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
index ab288a9..611be86 100644
--- a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
+++ b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
@@ -39,6 +39,7 @@
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "ui/gfx/geometry/point_f.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/vector2d_conversions.h"
@@ -584,11 +585,11 @@
   bool finished = false;
   scroll_animator->UserScroll(
       ui::ScrollGranularity::kScrollByLine, ScrollOffset(10, 0),
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   EXPECT_FALSE(finished);
   EXPECT_EQ(scroll_animator->run_state_,
             ScrollAnimatorCompositorCoordinator::RunState::
@@ -659,11 +660,11 @@
   bool finished = false;
   scroll_animator->UserScroll(
       ui::ScrollGranularity::kScrollByLine, ScrollOffset(100, 0),
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   EXPECT_FALSE(finished);
   EXPECT_TRUE(scroll_animator->HasRunningAnimation());
   EXPECT_EQ(100, scroll_animator->DesiredTargetOffset().x());
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area_test.cc b/third_party/blink/renderer/core/scroll/scrollable_area_test.cc
index 09a20be..0eb2c0b 100644
--- a/third_party/blink/renderer/core/scroll/scrollable_area_test.cc
+++ b/third_party/blink/renderer/core/scroll/scrollable_area_test.cc
@@ -20,6 +20,7 @@
 #include "third_party/blink/renderer/platform/testing/paint_test_configurations.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
 
@@ -246,11 +247,11 @@
   scrollable_area->SetScrollOffset(
       ScrollOffset(0, 10000), mojom::blink::ScrollType::kProgrammatic,
       mojom::blink::ScrollBehavior::kSmooth,
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   EXPECT_EQ(0.0, scrollable_area->GetScrollAnimator().CurrentOffset().y());
   EXPECT_FALSE(finished);
   scrollable_area->CancelProgrammaticScrollAnimation();
@@ -270,11 +271,11 @@
   scrollable_area->SetScrollOffset(
       ScrollOffset(0, 10000), mojom::blink::ScrollType::kProgrammatic,
       mojom::blink::ScrollBehavior::kInstant,
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   EXPECT_EQ(100, scrollable_area->GetScrollAnimator().CurrentOffset().y());
   EXPECT_TRUE(finished);
 }
@@ -291,11 +292,11 @@
   scrollable_area->SetScrollOffset(
       ScrollOffset(0, 9), mojom::blink::ScrollType::kProgrammatic,
       mojom::blink::ScrollBehavior::kSmooth,
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   EXPECT_EQ(0.0, scrollable_area->GetScrollAnimator().CurrentOffset().y());
   EXPECT_FALSE(finished);
   scrollable_area->UpdateCompositorScrollAnimations();
@@ -319,11 +320,11 @@
   scrollable_area->SetScrollOffset(
       ScrollOffset(0, 50), mojom::blink::ScrollType::kProgrammatic,
       mojom::blink::ScrollBehavior::kSmooth,
-      ScrollableArea::ScrollCallback(base::BindOnce(
+      ScrollableArea::ScrollCallback(WTF::BindOnce(
           [](bool* finished, ScrollableArea::ScrollCompletionMode) {
             *finished = true;
           },
-          &finished)));
+          WTF::Unretained(&finished))));
   scrollable_area->SetScrollOffset(ScrollOffset(0, 0),
                                    mojom::blink::ScrollType::kProgrammatic,
                                    mojom::blink::ScrollBehavior::kSmooth);
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index bdd7dcd..84fba7a4 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -1729,8 +1729,7 @@
 
   bool DependsOnContainerQueries() const {
     return DependsOnSizeContainerQueries() ||
-           DependsOnStyleContainerQueries() ||
-           DependsOnStickyContainerQueries();
+           DependsOnStyleContainerQueries() || DependsOnStateContainerQueries();
   }
 
   static bool IsContentVisibilityVisible(
diff --git a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
index 4b69237..010cf76 100644
--- a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
+++ b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
@@ -1106,7 +1106,7 @@
       default_value: "false",
     },
     {
-      name: "DependsOnStickyContainerQueries",
+      name: "DependsOnStateContainerQueries",
       field_template: "primitive",
       type_name: "bool",
       field_group: "*",
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
index a48e8e3..227489d 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
@@ -26,166 +26,6 @@
 namespace {
 static constexpr size_t kMaxNumDependencies = 8;
 
-V8RTCDecodeTargetIndication
-V8RTCDecodeTargetIndicationFromDecodeTargetIndication(
-    webrtc::DecodeTargetIndication decode_target_indication) {
-  switch (decode_target_indication) {
-    case webrtc::DecodeTargetIndication::kNotPresent:
-      return V8RTCDecodeTargetIndication(
-          V8RTCDecodeTargetIndication::Enum::kNotPresent);
-    case webrtc::DecodeTargetIndication::kDiscardable:
-      return V8RTCDecodeTargetIndication(
-          V8RTCDecodeTargetIndication::Enum::kDiscardable);
-    case webrtc::DecodeTargetIndication::kSwitch:
-      return V8RTCDecodeTargetIndication(
-          V8RTCDecodeTargetIndication::Enum::kSwitch);
-    case webrtc::DecodeTargetIndication::kRequired:
-      return V8RTCDecodeTargetIndication(
-          V8RTCDecodeTargetIndication::Enum::kRequired);
-    default:
-      NOTREACHED();
-  }
-}
-
-webrtc::DecodeTargetIndication
-DecodeTargetIndicationFromV8RTCDecodeTargetIndication(
-    V8RTCDecodeTargetIndication decode_target_indication) {
-  switch (decode_target_indication.AsEnum()) {
-    case V8RTCDecodeTargetIndication::Enum::kNotPresent:
-      return webrtc::DecodeTargetIndication::kNotPresent;
-    case V8RTCDecodeTargetIndication::Enum::kDiscardable:
-      return webrtc::DecodeTargetIndication::kDiscardable;
-    case V8RTCDecodeTargetIndication::Enum::kSwitch:
-      return webrtc::DecodeTargetIndication::kSwitch;
-    case V8RTCDecodeTargetIndication::Enum::kRequired:
-      return webrtc::DecodeTargetIndication::kRequired;
-    default:
-      NOTREACHED();
-  }
-}
-
-String RTCVideoCodecTypeFromVideoCodecType(
-    webrtc::VideoCodecType video_codec_type) {
-  switch (video_codec_type) {
-    case webrtc::VideoCodecType::kVideoCodecVP8:
-      return "vp8";
-    case webrtc::VideoCodecType::kVideoCodecVP9:
-      return "vp9";
-    case webrtc::VideoCodecType::kVideoCodecH264:
-      return "h264";
-    case webrtc::VideoCodecType::kVideoCodecAV1:
-      return "av1";
-    default:
-      return "";
-  }
-}
-
-webrtc::VideoCodecType VideoCodecTypeFromRTCVideoCodecType(
-    const String& video_codec_type) {
-  if (video_codec_type == "vp8") {
-    return webrtc::VideoCodecType::kVideoCodecVP8;
-  } else if (video_codec_type == "vp9") {
-    return webrtc::VideoCodecType::kVideoCodecVP9;
-  } else if (video_codec_type == "h264") {
-    return webrtc::VideoCodecType::kVideoCodecH264;
-  } else if (video_codec_type == "av1") {
-    return webrtc::VideoCodecType::kVideoCodecAV1;
-  } else {
-    NOTREACHED();
-    return webrtc::VideoCodecType::kVideoCodecGeneric;
-  }
-}
-
-String RTCEncodedVideoFrameTypeFromVideoFrameType(
-    webrtc::VideoFrameType video_frame_type) {
-  switch (video_frame_type) {
-    case webrtc::VideoFrameType::kEmptyFrame:
-      return "empty";
-    case webrtc::VideoFrameType::kVideoFrameKey:
-      return "key";
-    case webrtc::VideoFrameType::kVideoFrameDelta:
-      return "delta";
-    default:
-      NOTREACHED();
-      return "";
-  }
-}
-
-webrtc::VideoFrameType VideoFrameTypeFromRTCEncodedVideoFrameType(
-    const String& video_frame_type) {
-  if (video_frame_type == "empty") {
-    return webrtc::VideoFrameType::kEmptyFrame;
-  } else if (video_frame_type == "key") {
-    return webrtc::VideoFrameType::kVideoFrameKey;
-  } else if (video_frame_type == "delta") {
-    return webrtc::VideoFrameType::kVideoFrameDelta;
-  } else {
-    NOTREACHED();
-    return webrtc::VideoFrameType::kEmptyFrame;
-  }
-}
-
-bool IsAllowedCodecSpecificsVP8Change(
-    const RTCCodecSpecificsVP8* original_vp8_specifics,
-    const RTCCodecSpecificsVP8* vp8_specifics) {
-  if ((original_vp8_specifics == nullptr) != (vp8_specifics == nullptr)) {
-    return false;
-  }
-  return vp8_specifics->beginningOfPartition() ==
-             original_vp8_specifics->beginningOfPartition() &&
-         vp8_specifics->keyIdx() == original_vp8_specifics->keyIdx() &&
-         vp8_specifics->layerSync() == original_vp8_specifics->layerSync() &&
-         vp8_specifics->nonReference() ==
-             original_vp8_specifics->nonReference() &&
-         vp8_specifics->partitionId() ==
-             original_vp8_specifics->partitionId() &&
-         vp8_specifics->pictureId() == original_vp8_specifics->pictureId() &&
-         vp8_specifics->temporalIdx() ==
-             original_vp8_specifics->temporalIdx() &&
-         vp8_specifics->tl0PicIdx() == original_vp8_specifics->tl0PicIdx();
-}
-
-void SetCodecSpecificsVP8(webrtc::VideoFrameMetadata& webrtc_metadata,
-                          const RTCEncodedVideoFrameMetadata* original_metadata,
-                          const RTCEncodedVideoFrameMetadata* metadata,
-                          ExceptionState& exception_state) {
-  RTCCodecSpecificsVP8* vp8_specifics = metadata->codecSpecifics();
-  if (!vp8_specifics->hasNonReference() || !vp8_specifics->hasPictureId() ||
-      !vp8_specifics->hasTl0PicIdx() || !vp8_specifics->hasTemporalIdx() ||
-      !vp8_specifics->hasLayerSync() || !vp8_specifics->hasKeyIdx() ||
-      !vp8_specifics->hasPartitionId() ||
-      !vp8_specifics->hasBeginningOfPartition()) {
-    exception_state.ThrowDOMException(
-        DOMExceptionCode::kInvalidModificationError,
-        "Member(s) missing in RTCCodecSpecificsVP8.");
-    return;
-  }
-  RTCCodecSpecificsVP8* original_vp8_specifics =
-      original_metadata->hasCodecSpecifics()
-          ? original_metadata->codecSpecifics()
-          : nullptr;
-  if (!IsAllowedCodecSpecificsVP8Change(original_vp8_specifics,
-                                        vp8_specifics) &&
-      !base::FeatureList::IsEnabled(
-          kAllowRTCEncodedVideoFrameSetMetadataAllFields)) {
-    exception_state.ThrowDOMException(
-        DOMExceptionCode::kInvalidModificationError,
-        "Invalid modification of RTCCodecSpecificsVP8.");
-    return;
-  }
-  webrtc::RTPVideoHeaderVP8 webrtc_vp8_specifics;
-  webrtc_vp8_specifics.nonReference = vp8_specifics->nonReference();
-  webrtc_vp8_specifics.pictureId = vp8_specifics->pictureId();
-  webrtc_vp8_specifics.tl0PicIdx = vp8_specifics->tl0PicIdx();
-  webrtc_vp8_specifics.temporalIdx = vp8_specifics->temporalIdx();
-  webrtc_vp8_specifics.layerSync = vp8_specifics->layerSync();
-  webrtc_vp8_specifics.keyIdx = vp8_specifics->keyIdx();
-  webrtc_vp8_specifics.partitionId = vp8_specifics->partitionId();
-  webrtc_vp8_specifics.beginningOfPartition =
-      vp8_specifics->beginningOfPartition();
-  webrtc_metadata.SetRTPVideoHeaderCodecSpecifics(webrtc_vp8_specifics);
-}
-
 bool IsAllowedSetMetadataChange(
     const RTCEncodedVideoFrameMetadata* original_metadata,
     const RTCEncodedVideoFrameMetadata* metadata) {
@@ -212,20 +52,6 @@
             : false))) {
     return false;
   }
-
-  // These fields should be same for both the new and old metadata if the
-  // RTCEncodedVideoFrameAdditionalMetadata flag is enabled.
-  // TODO(crbug.com/1464855) : Add comparison for decodeTargetIndications and
-  // codecSpecifics.
-  if (RuntimeEnabledFeatures::RTCEncodedVideoFrameAdditionalMetadataEnabled() &&
-      (metadata->isLastFrameInPicture() !=
-           original_metadata->isLastFrameInPicture() ||
-       metadata->simulcastIdx() != original_metadata->simulcastIdx() ||
-       metadata->codec() != original_metadata->codec() ||
-       metadata->frameType() != original_metadata->frameType())) {
-    return false;
-  }
-
   return true;
 }
 
@@ -237,17 +63,6 @@
     return false;
   }
 
-  // These fields should have value only if the
-  // RTCEncodedVideoFrameAdditionalMetadata flag is enabled.
-  if (RuntimeEnabledFeatures::RTCEncodedVideoFrameAdditionalMetadataEnabled() &&
-      (!metadata->hasDecodeTargetIndications() ||
-       !metadata->hasIsLastFrameInPicture() || !metadata->hasSimulcastIdx() ||
-       !metadata->hasCodec() || !metadata->hasCodecSpecifics() ||
-       !metadata->hasFrameType())) {
-    error_message = "Member(s) missing in RTCEncodedVideoFrameMetadata.";
-    return false;
-  }
-
   // This might happen if the dependency descriptor is not set.
   if (!metadata->hasFrameId() && metadata->hasDependencies()) {
     error_message =
@@ -329,6 +144,11 @@
   }
 
   metadata->setSynchronizationSource(webrtc_metadata->GetSsrc());
+  Vector<uint32_t> csrcs;
+  for (uint32_t csrc : webrtc_metadata->GetCsrcs()) {
+    csrcs.push_back(csrc);
+  }
+  metadata->setContributingSources(csrcs);
 
   if (webrtc_metadata->GetFrameId()) {
     metadata->setFrameId(*webrtc_metadata->GetFrameId());
@@ -343,62 +163,7 @@
   metadata->setHeight(webrtc_metadata->GetHeight());
   metadata->setSpatialIndex(webrtc_metadata->GetSpatialIndex());
   metadata->setTemporalIndex(webrtc_metadata->GetTemporalIndex());
-  if (RuntimeEnabledFeatures::RTCEncodedVideoFrameAdditionalMetadataEnabled()) {
-    Vector<V8RTCDecodeTargetIndication> decode_target_indications;
-    for (const auto& decode_target_indication :
-         webrtc_metadata->GetDecodeTargetIndications()) {
-      decode_target_indications.push_back(
-          V8RTCDecodeTargetIndicationFromDecodeTargetIndication(
-              decode_target_indication));
-    }
-    metadata->setDecodeTargetIndications(decode_target_indications);
-    metadata->setIsLastFrameInPicture(
-        webrtc_metadata->GetIsLastFrameInPicture());
-    metadata->setSimulcastIdx(webrtc_metadata->GetSimulcastIdx());
-    String codec =
-        RTCVideoCodecTypeFromVideoCodecType(webrtc_metadata->GetCodec());
-    if (!codec.empty()) {
-      metadata->setCodec(codec);
-    } else {
-      LOG(ERROR) << "Unrecognized RTCVideoCodecType "
-                 << webrtc_metadata->GetCodec();
-    }
-    switch (webrtc_metadata->GetCodec()) {
-      case webrtc::VideoCodecType::kVideoCodecVP8: {
-        const webrtc::RTPVideoHeaderVP8& webrtc_vp8_specifics =
-            absl::get<webrtc::RTPVideoHeaderVP8>(
-                webrtc_metadata->GetRTPVideoHeaderCodecSpecifics());
-        RTCCodecSpecificsVP8* vp8_specifics = RTCCodecSpecificsVP8::Create();
-        vp8_specifics->setNonReference(webrtc_vp8_specifics.nonReference);
-        vp8_specifics->setPictureId(webrtc_vp8_specifics.pictureId);
-        vp8_specifics->setTl0PicIdx(webrtc_vp8_specifics.tl0PicIdx);
-        vp8_specifics->setTemporalIdx(webrtc_vp8_specifics.temporalIdx);
-        vp8_specifics->setLayerSync(webrtc_vp8_specifics.layerSync);
-        vp8_specifics->setKeyIdx(webrtc_vp8_specifics.keyIdx);
-        vp8_specifics->setPartitionId(webrtc_vp8_specifics.partitionId);
-        vp8_specifics->setBeginningOfPartition(
-            webrtc_vp8_specifics.beginningOfPartition);
-        metadata->setCodecSpecifics(vp8_specifics);
-        break;
-      }
-      case webrtc::VideoCodecType::kVideoCodecAV1:
-        break;
-      default:
-        // TODO(https://crbug.com/webrtc/14709): Support more codecs.
-        LOG(ERROR) << "Unsupported RTCCodecSpecifics "
-                   << webrtc_metadata->GetCodec();
-        break;
-    }
 
-    metadata->setFrameType(RTCEncodedVideoFrameTypeFromVideoFrameType(
-        webrtc_metadata->GetFrameType()));
-
-    Vector<uint32_t> csrcs;
-    for (uint32_t csrc : webrtc_metadata->GetCsrcs()) {
-      csrcs.push_back(csrc);
-    }
-    metadata->setContributingSources(csrcs);
-  }
   return metadata;
 }
 
@@ -458,39 +223,6 @@
   webrtc_metadata.SetHeight(metadata->height());
   webrtc_metadata.SetSpatialIndex(metadata->spatialIndex());
   webrtc_metadata.SetTemporalIndex(metadata->temporalIndex());
-
-  if (RuntimeEnabledFeatures::RTCEncodedVideoFrameAdditionalMetadataEnabled()) {
-    std::vector<webrtc::DecodeTargetIndication> decode_target_indications;
-    for (const auto& decode_target_indication :
-         metadata->decodeTargetIndications()) {
-      decode_target_indications.push_back(
-          DecodeTargetIndicationFromV8RTCDecodeTargetIndication(
-              decode_target_indication));
-    }
-    webrtc_metadata.SetDecodeTargetIndications(decode_target_indications);
-    webrtc_metadata.SetIsLastFrameInPicture(metadata->isLastFrameInPicture());
-    webrtc_metadata.SetSimulcastIdx(metadata->simulcastIdx());
-    webrtc::VideoCodecType codec =
-        VideoCodecTypeFromRTCVideoCodecType(metadata->codec());
-    webrtc_metadata.SetFrameType(
-        VideoFrameTypeFromRTCEncodedVideoFrameType(metadata->frameType()));
-    webrtc_metadata.SetCodec(codec);
-    switch (codec) {
-      case webrtc::VideoCodecType::kVideoCodecVP8: {
-        SetCodecSpecificsVP8(webrtc_metadata, original_metadata, metadata,
-                             exception_state);
-        if (exception_state.HadException()) {
-          return;
-        }
-        break;
-      }
-      default:
-        // Using a codec which doesn't support exposing & modifying
-        // codec-specific info, so just leave the original intact and continue.
-        break;
-    }
-  }
-
   webrtc_metadata.SetSsrc(metadata->synchronizationSource());
 
   if (metadata->hasContributingSources()) {
@@ -500,6 +232,7 @@
     }
     webrtc_metadata.SetCsrcs(csrcs);
   }
+
   delegate_->SetMetadata(webrtc_metadata);
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_metadata.idl b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_metadata.idl
index bc72893..7da4249 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_metadata.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_metadata.idl
@@ -27,18 +27,6 @@
     unsigned short height;
     long spatialIndex;
     long temporalIndex;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    sequence<RTCDecodeTargetIndication> decodeTargetIndications;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    boolean isLastFrameInPicture;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    unsigned short simulcastIdx;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    RTCVideoCodecType codec;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    RTCCodecSpecifics codecSpecifics;
-    [RuntimeEnabled=RTCEncodedVideoFrameAdditionalMetadata]
-    RTCEncodedVideoFrameType frameType;
 
     // RTP related metadata
     unsigned long synchronizationSource;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_test.cc
index 06f3a62..dcc70eb 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_test.cc
@@ -35,6 +35,7 @@
   webrtc_metadata.SetSimulcastIdx(5);
   webrtc_metadata.SetFrameType(webrtc::VideoFrameType::kVideoFrameKey);
   webrtc_metadata.SetCodec(webrtc::VideoCodecType::kVideoCodecVP9);
+  webrtc_metadata.SetFrameId(1);
   webrtc::RTPVideoHeaderVP9 webrtc_vp9_specifics;
   webrtc_vp9_specifics.InitRTPVideoHeaderVP9();
   webrtc_vp9_specifics.inter_pic_predicted = true;
@@ -106,28 +107,8 @@
   EXPECT_EQ(600, retrieved_metadata->height());
   EXPECT_EQ(3, retrieved_metadata->spatialIndex());
   EXPECT_EQ(4, retrieved_metadata->temporalIndex());
-  ASSERT_EQ(1u, retrieved_metadata->decodeTargetIndications().size());
-  EXPECT_EQ(V8RTCDecodeTargetIndication::Enum::kRequired,
-            retrieved_metadata->decodeTargetIndications()[0]);
-  EXPECT_EQ(true, retrieved_metadata->isLastFrameInPicture());
-  EXPECT_EQ(5, retrieved_metadata->simulcastIdx());
-  EXPECT_EQ(V8RTCVideoCodecType::Enum::kVp8, retrieved_metadata->codec());
-  EXPECT_EQ(V8RTCEncodedVideoFrameType::Enum::kKey,
-            retrieved_metadata->frameType());
   ASSERT_EQ(1u, retrieved_metadata->contributingSources().size());
   EXPECT_EQ(6u, retrieved_metadata->contributingSources()[0]);
-
-  RTCCodecSpecificsVP8* retrieved_vp8_specifics =
-      retrieved_metadata->codecSpecifics();
-
-  EXPECT_EQ(true, retrieved_vp8_specifics->nonReference());
-  EXPECT_EQ(8, retrieved_vp8_specifics->pictureId());
-  EXPECT_EQ(9, retrieved_vp8_specifics->tl0PicIdx());
-  EXPECT_EQ(10, retrieved_vp8_specifics->temporalIdx());
-  EXPECT_EQ(true, retrieved_vp8_specifics->layerSync());
-  EXPECT_EQ(11, retrieved_vp8_specifics->keyIdx());
-  EXPECT_EQ(12, retrieved_vp8_specifics->partitionId());
-  EXPECT_EQ(true, retrieved_vp8_specifics->beginningOfPartition());
 }
 
 TEST_F(RTCEncodedVideoFrameTest, ClosedFramesFailToClone) {
@@ -156,17 +137,17 @@
   webrtc::VideoFrameMetadata webrtc_metadata = MockVP9Metadata(frame.get());
 
   webrtc::VideoFrameMetadata actual_metadata;
-  EXPECT_CALL(*frame, SetMetadata(_)).Times(0);
+  EXPECT_CALL(*frame, SetMetadata(_)).WillOnce(SaveArg<0>(&actual_metadata));
 
   RTCEncodedVideoFrame encoded_frame(std::move(frame));
   DummyExceptionStateForTesting exception_state;
 
-  // Expect that a getMetadata call from the encoded frame will fail because
-  // getCodecSpecifics is not yet implemented for vp9.
   encoded_frame.setMetadata(encoded_frame.getMetadata(), exception_state);
-  EXPECT_TRUE(exception_state.HadException());
-  EXPECT_EQ(exception_state.Message(),
-            "Member(s) missing in RTCEncodedVideoFrameMetadata.");
+  EXPECT_FALSE(exception_state.HadException()) << exception_state.Message();
+
+  EXPECT_EQ(actual_metadata.GetFrameId(), webrtc_metadata.GetFrameId());
+  EXPECT_EQ(actual_metadata.GetRTPVideoHeaderCodecSpecifics(),
+            webrtc_metadata.GetRTPVideoHeaderCodecSpecifics());
 }
 
 TEST_F(RTCEncodedVideoFrameTest, SetMetadataMissingFieldsFails) {
@@ -204,21 +185,6 @@
   new_metadata->setSynchronizationSource(10);
   new_metadata->setContributingSources({11, 12, 13});
   new_metadata->setPayloadType(14);
-  new_metadata->setDecodeTargetIndications({});
-  new_metadata->setIsLastFrameInPicture(true);
-  new_metadata->setSimulcastIdx(15);
-  new_metadata->setCodec("vp8");
-  RTCCodecSpecificsVP8* webrtc_vp8_specifics = RTCCodecSpecificsVP8::Create();
-  webrtc_vp8_specifics->setNonReference(true);
-  webrtc_vp8_specifics->setPictureId(8);
-  webrtc_vp8_specifics->setTl0PicIdx(9);
-  webrtc_vp8_specifics->setTemporalIdx(10);
-  webrtc_vp8_specifics->setLayerSync(true);
-  webrtc_vp8_specifics->setKeyIdx(11);
-  webrtc_vp8_specifics->setPartitionId(12);
-  webrtc_vp8_specifics->setBeginningOfPartition(true);
-  new_metadata->setCodecSpecifics(webrtc_vp8_specifics);
-  new_metadata->setFrameType("key");
   return new_metadata;
 }
 
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc b/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc
index cd8b0b1..0da2e70 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc
@@ -230,8 +230,8 @@
   if (!callback_exception_.IsEmpty()) {
     start_transaction_request_->Reject(callback_exception_);
   } else if (end_transaction_result->is_error()) {
-    start_transaction_request_->Reject(
-        SmartCardError::Create(end_transaction_result->get_error()));
+    SmartCardError::Reject(start_transaction_request_,
+                           end_transaction_result->get_error());
   } else {
     start_transaction_request_->Resolve();
   }
@@ -385,17 +385,18 @@
     return ScriptPromise();
   }
 
-  if (data.IsDetached() || data.IsNull()) {
-    exception_state.ThrowTypeError("Invalid data.");
-    return ScriptPromise();
-  }
-
   auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(
       script_state, exception_state.GetContext());
   SetOperationInProgress(resolver);
 
   Vector<uint8_t> data_vector;
-  data_vector.Append(data.Bytes(), static_cast<wtf_size_t>(data.ByteLength()));
+
+  // Note that there are control codes which require no input data.
+  // Thus sending an empty data vector is fine.
+  if (!data.IsDetached() && !data.IsNull() && data.ByteLength() > 0u) {
+    data_vector.Append(data.Bytes(),
+                       static_cast<wtf_size_t>(data.ByteLength()));
+  }
 
   connection_->Control(
       control_code, data_vector,
@@ -573,8 +574,7 @@
   ClearOperationInProgress(resolver);
 
   if (result->is_error()) {
-    auto* error = SmartCardError::Create(result->get_error());
-    resolver->Reject(error);
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
@@ -590,7 +590,7 @@
   ClearOperationInProgress(resolver);
 
   if (result->is_error()) {
-    resolver->Reject(SmartCardError::Create(result->get_error()));
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
@@ -603,8 +603,7 @@
   ClearOperationInProgress(resolver);
 
   if (result->is_error()) {
-    auto* error = SmartCardError::Create(result->get_error());
-    resolver->Reject(error);
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
@@ -619,7 +618,7 @@
   ClearOperationInProgress(resolver);
 
   if (result->is_error()) {
-    resolver->Reject(SmartCardError::Create(result->get_error()));
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
@@ -629,9 +628,8 @@
       ToV8ConnectionState(mojo_status->state, mojo_status->protocol);
 
   if (!connection_state.has_value()) {
-    auto* error = SmartCardError::Create(
-        device::mojom::blink::SmartCardError::kInternalError);
-    resolver->Reject(error);
+    SmartCardError::Reject(
+        resolver, device::mojom::blink::SmartCardError::kInternalError);
     return;
   }
 
@@ -665,7 +663,7 @@
             device::mojom::blink::SmartCardError::kCancelled) {
       RejectWithAbortionReason(resolver, signal);
     } else {
-      resolver->Reject(SmartCardError::Create(result->get_error()));
+      SmartCardError::Reject(resolver, result->get_error());
     }
     return;
   }
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_context.cc b/third_party/blink/renderer/modules/smart_card/smart_card_context.cc
index 890011e..f13b170 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_context.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_context.cc
@@ -306,8 +306,7 @@
       return;
     }
 
-    auto* error = SmartCardError::Create(mojom_error);
-    resolver->Reject(error);
+    SmartCardError::Reject(resolver, mojom_error);
     return;
   }
 
@@ -331,7 +330,7 @@
             device::mojom::blink::SmartCardError::kCancelled) {
       RejectWithAbortionReason(resolver, signal);
     } else {
-      resolver->Reject(SmartCardError::Create(result->get_error()));
+      SmartCardError::Reject(resolver, result->get_error());
     }
     return;
   }
@@ -352,8 +351,7 @@
   ClearOperationInProgress(resolver);
 
   if (result->is_error()) {
-    auto* error = SmartCardError::Create(result->get_error());
-    resolver->Reject(error);
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
index f465e8c..1bc120b 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/smart_card/smart_card_error.h"
-#include "base/notreached.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_smart_card_error_options.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -18,130 +18,165 @@
 }
 
 // static
-DOMException* SmartCardError::Create(
-    device::mojom::blink::SmartCardError mojom_error) {
+void SmartCardError::Reject(ScriptPromiseResolver* resolver,
+                            device::mojom::blink::SmartCardError mojom_error) {
   switch (mojom_error) {
     // SmartCardError:
     // The response code messages are mostly from
     // https://learn.microsoft.com/en-us/windows/win32/secauthn/authentication-return-values,
     // which are also used by PCSC lite.
     case device::mojom::blink::SmartCardError::kNoService:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "No smart card service available in the system.",
-          V8SmartCardResponseCode::Enum::kNoService);
+          V8SmartCardResponseCode::Enum::kNoService));
+      break;
     case device::mojom::blink::SmartCardError::kNoSmartcard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The operation requires a smart card, but no smart card is "
           "currently in the device.",
-          V8SmartCardResponseCode::Enum::kNoSmartcard);
+          V8SmartCardResponseCode::Enum::kNoSmartcard));
+      break;
     case device::mojom::blink::SmartCardError::kNotReady:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The reader or smart card is not ready to accept commands.",
-          V8SmartCardResponseCode::Enum::kNotReady);
+          V8SmartCardResponseCode::Enum::kNotReady));
+      break;
     case device::mojom::blink::SmartCardError::kNotTransacted:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "An attempt was made to end a non-existent transaction.",
-          V8SmartCardResponseCode::Enum::kNotTransacted);
+          V8SmartCardResponseCode::Enum::kNotTransacted));
+      break;
     case device::mojom::blink::SmartCardError::kProtoMismatch:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The requested protocols are incompatible with the protocol "
           "currently in use with the smart card.",
-          V8SmartCardResponseCode::Enum::kProtoMismatch);
+          V8SmartCardResponseCode::Enum::kProtoMismatch));
+      break;
     case device::mojom::blink::SmartCardError::kReaderUnavailable:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The specified reader is not currently available for use.",
-          V8SmartCardResponseCode::Enum::kReaderUnavailable);
+          V8SmartCardResponseCode::Enum::kReaderUnavailable));
+      break;
     case device::mojom::blink::SmartCardError::kRemovedCard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The smart card has been removed, so further communication is not "
           "possible.",
-          V8SmartCardResponseCode::Enum::kRemovedCard);
+          V8SmartCardResponseCode::Enum::kRemovedCard));
+      break;
     case device::mojom::blink::SmartCardError::kResetCard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The smart card has been reset, so any shared state information "
           "is invalid.",
-          V8SmartCardResponseCode::Enum::kResetCard);
+          V8SmartCardResponseCode::Enum::kResetCard));
+      break;
     case device::mojom::blink::SmartCardError::kServerTooBusy:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The smart card resource manager is too busy to complete this "
           "operation.",
-          V8SmartCardResponseCode::Enum::kServerTooBusy);
+          V8SmartCardResponseCode::Enum::kServerTooBusy));
+      break;
     case device::mojom::blink::SmartCardError::kSharingViolation:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The smart card cannot be accessed because of other connections "
           "outstanding.",
-          V8SmartCardResponseCode::Enum::kSharingViolation);
+          V8SmartCardResponseCode::Enum::kSharingViolation));
+      break;
     case device::mojom::blink::SmartCardError::kSystemCancelled:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The action was cancelled by the system, presumably to log off or "
           "shut down.",
-          V8SmartCardResponseCode::Enum::kSystemCancelled);
+          V8SmartCardResponseCode::Enum::kSystemCancelled));
+      break;
     case device::mojom::blink::SmartCardError::kUnknownReader:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The specified reader name is not recognized.",
-          V8SmartCardResponseCode::Enum::kUnknownReader);
+          V8SmartCardResponseCode::Enum::kUnknownReader));
+      break;
     case device::mojom::blink::SmartCardError::kUnpoweredCard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "Power has been removed from the smart card, so that further "
           "communication is not possible.",
-          V8SmartCardResponseCode::Enum::kUnpoweredCard);
+          V8SmartCardResponseCode::Enum::kUnpoweredCard));
+      break;
     case device::mojom::blink::SmartCardError::kUnresponsiveCard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The smart card is not responding to a reset.",
-          V8SmartCardResponseCode::Enum::kUnresponsiveCard);
+          V8SmartCardResponseCode::Enum::kUnresponsiveCard));
+      break;
     case device::mojom::blink::SmartCardError::kUnsupportedCard:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "The reader cannot communicate with the card, due to ATR string "
           "configuration conflicts.",
-          V8SmartCardResponseCode::Enum::kUnsupportedCard);
+          V8SmartCardResponseCode::Enum::kUnsupportedCard));
+      break;
     case device::mojom::blink::SmartCardError::kUnsupportedFeature:
-      return MakeGarbageCollected<SmartCardError>(
+      resolver->Reject(MakeGarbageCollected<SmartCardError>(
           "This smart card does not support the requested feature.",
-          V8SmartCardResponseCode::Enum::kUnsupportedFeature);
+          V8SmartCardResponseCode::Enum::kUnsupportedFeature));
+      break;
+
+    // TypeError:
+    // This is not only triggered by bad PC/SC API usage (e.g., passing a null
+    // context), which would be a browser implementation bug. It can also be
+    // returned by the reader driver or card on input that, from a pure PC/SC
+    // API perspective, is perfectly valid.
+    case device::mojom::blink::SmartCardError::kInvalidParameter:
+      resolver->RejectWithTypeError(
+          "One or more of the supplied parameters could not be properly "
+          "interpreted.");
+      break;
 
     // DOMException:
     // "InvalidStateError"
     case device::mojom::blink::SmartCardError::kInvalidHandle:
-      return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kInvalidStateError, "Connection is invalid.");
+      resolver->RejectWithDOMException(DOMExceptionCode::kInvalidStateError,
+                                       "Connection is invalid.");
+      break;
     case device::mojom::blink::SmartCardError::kServiceStopped:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kInvalidStateError,
           "The smart card resource manager has shut down.");
+      break;
     // "AbortError"
     case device::mojom::blink::SmartCardError::kShutdown:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kAbortError,
           "The operation has been aborted to allow the server application to "
           "exit.");
+      break;
     // "UnknownError"
     case device::mojom::blink::SmartCardError::kCommError:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kUnknownError,
           "An internal communications error has been detected.");
+      break;
     case device::mojom::blink::SmartCardError::kInternalError:
-      return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kUnknownError,
-          "An internal consistency check failed.");
+      resolver->RejectWithDOMException(DOMExceptionCode::kUnknownError,
+                                       "An internal consistency check failed.");
+      break;
     case device::mojom::blink::SmartCardError::kNoMemory:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kUnknownError,
           "Not enough memory available to complete this command.");
+      break;
     case device::mojom::blink::SmartCardError::kUnexpected:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kUnknownError,
           "An unexpected card error has occurred.");
+      break;
     case device::mojom::blink::SmartCardError::kUnknownError:
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kUnknownError,
           "An internal error has been detected, but the source is unknown.");
+      break;
     case device::mojom::blink::SmartCardError::kUnknown:
       // NB: kUnknownError is an actual PC/SC error code returned from the
       // platform's PC/SC stack. kUnknown means that PC/SC returned an error
       // code not yet represented in our enum and therefore is unknown to us.
       LOG(WARNING) << "An unmapped PC/SC error has occurred.";
-      return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kUnknownError, "An unknown error has occurred.");
+      resolver->RejectWithDOMException(DOMExceptionCode::kUnknownError,
+                                       "An unknown error has occurred.");
+      break;
     // Handled internally but listed here for completeness.
     // Also, technically nothing stops the PC/SC stack from spilling those
     // unexpectedly (eg, in unrelated requests).
@@ -153,12 +188,12 @@
     // Again, technically nothing stops the PC/SC stack from spilling those
     // unexpectedly.
     case device::mojom::blink::SmartCardError::kInsufficientBuffer:
-    case device::mojom::blink::SmartCardError::kInvalidParameter:
     case device::mojom::blink::SmartCardError::kInvalidValue:
       LOG(WARNING) << "An unexpected PC/SC error has occurred: " << mojom_error;
-      return MakeGarbageCollected<DOMException>(
+      resolver->RejectWithDOMException(
           DOMExceptionCode::kUnknownError,
           "An unexpected card error has occurred.");
+      break;
   }
 }
 
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.h b/third_party/blink/renderer/modules/smart_card/smart_card_error.h
index ef919f3c..bef451b 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_error.h
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.h
@@ -12,6 +12,7 @@
 
 namespace blink {
 
+class ScriptPromiseResolver;
 class SmartCardErrorOptions;
 
 // https://w3c.github.io/webtransport/#web-transport-error-interface
@@ -22,9 +23,10 @@
   // Constructor exposed to script. Called by the V8 bindings.
   static SmartCardError* Create(String message, const SmartCardErrorOptions*);
 
-  // Depending on the particular mojo error, creates either a
-  // SmartCardError or a plain DOMException.
-  static DOMException* Create(device::mojom::blink::SmartCardError mojom_error);
+  // Depending on the particular mojo error, rejects with a
+  // SmartCardError, a DOMException or a simple exception.
+  static void Reject(ScriptPromiseResolver* resolver,
+                     device::mojom::blink::SmartCardError mojom_error);
 
   SmartCardError(String message, V8SmartCardResponseCode::Enum);
   SmartCardError(String message, V8SmartCardResponseCode);
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
index 168c7521..dab0d75 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
@@ -118,8 +118,7 @@
   create_context_promises_.erase(resolver);
 
   if (result->is_error()) {
-    auto* error = SmartCardError::Create(result->get_error());
-    resolver->Reject(error);
+    SmartCardError::Reject(resolver, result->get_error());
     return;
   }
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h
index 7e5277c..2dd70a1 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h
@@ -375,10 +375,6 @@
                  absl::optional<mojom::blink::WebFeature> count_orb_block_as);
 
   void InitializeRevalidation(ResourceRequest&, Resource*);
-  // When |security_origin| of the ResourceLoaderOptions is not a nullptr, it'll
-  // be used instead of the associated FetchContext's SecurityOrigin.
-  scoped_refptr<const SecurityOrigin> GetSourceOrigin(
-      const ResourceLoaderOptions&) const;
   void AddToMemoryCacheIfNeeded(const FetchParameters&, Resource*);
   Resource* CreateResourceForLoading(const FetchParameters&,
                                      const ResourceFactory&);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 839a52a..898a6d2 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -3194,6 +3194,10 @@
       base_feature: "none",
     },
     {
+      name: "ScriptingMediaFeature",
+      status: "experimental",
+    },
+    {
       name: "ScrollableAreaNoSnapping",
       status: "stable",
     },
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
index 376a9fb0..dec3ef0e 100644
--- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
+++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
@@ -1606,6 +1606,14 @@
   input_handler_->UpdateBrowserControlsState(constraints, current, animate);
 }
 
+void InputHandlerProxy::FlushQueuedEventsForTesting() {
+  // The queue is blocked while there's a ScrollBegin hit test in progress.
+  CHECK(!scroll_begin_main_thread_hit_test_reasons_);
+
+  DispatchQueuedInputEvents(/*frame_aligned=*/true);
+  CHECK(compositor_event_queue_->empty());
+}
+
 void InputHandlerProxy::HandleOverscroll(
     const gfx::PointF& causal_event_viewport_point,
     const cc::InputHandlerScrollResult& scroll_result) {
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h
index 0481672..8fd4989 100644
--- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h
+++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h
@@ -249,6 +249,9 @@
     return currently_active_gesture_device_.value();
   }
 
+  // Immediately dispatches all queued events.
+  void FlushQueuedEventsForTesting();
+
  private:
   friend class test::TestInputHandlerProxy;
   friend class test::InputHandlerProxyTest;
diff --git a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
index 91dedab..a35baac 100644
--- a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
+++ b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
@@ -583,6 +583,11 @@
   raf_fallback_timer_.reset();
 }
 
+bool MainThreadEventQueue::IsEmptyForTesting() {
+  base::AutoLock lock(shared_state_lock_);
+  return shared_state_.events_.empty();
+}
+
 void MainThreadEventQueue::DispatchRafAlignedInput(base::TimeTicks frame_time) {
   if (raf_fallback_timer_)
     raf_fallback_timer_->Stop();
diff --git a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.h b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.h
index 14cc72a..623d0187 100644
--- a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.h
+++ b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.h
@@ -143,6 +143,9 @@
                mojom::blink::InputEventResultState::kSetNonBlockingDueToFling;
   }
 
+  // Acquires a lock but use is restricted to tests.
+  bool IsEmptyForTesting();
+
  protected:
   friend class base::RefCountedThreadSafe<MainThreadEventQueue>;
   virtual ~MainThreadEventQueue();
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
index 94f6e723..70c044d 100644
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
@@ -1170,4 +1170,38 @@
                                                    animate);
 }
 
+void WidgetInputHandlerManager::FlushCompositorQueueForTesting() {
+  CHECK(InputThreadTaskRunner()->BelongsToCurrentThread());
+  if (!input_handler_proxy_) {
+    return;
+  }
+  input_handler_proxy_->FlushQueuedEventsForTesting();
+}
+
+void WidgetInputHandlerManager::FlushMainThreadQueueForTesting(
+    base::OnceClosure done) {
+  CHECK(main_thread_task_runner_->BelongsToCurrentThread());
+  input_event_queue()->DispatchRafAlignedInput(base::TimeTicks::Now());
+  CHECK(input_event_queue()->IsEmptyForTesting());
+  std::move(done).Run();
+}
+
+void WidgetInputHandlerManager::FlushEventQueuesForTesting(
+    base::OnceClosure done_callback) {
+  CHECK(main_thread_task_runner_->BelongsToCurrentThread());
+
+  auto flush_compositor_queue = base::BindOnce(
+      &WidgetInputHandlerManager::FlushCompositorQueueForTesting, this);
+
+  auto flush_main_queue =
+      base::BindOnce(&WidgetInputHandlerManager::FlushMainThreadQueueForTesting,
+                     this, std::move(done_callback));
+
+  // Flush the compositor queue first since dispatching compositor events may
+  // bounce them back into the main thread event queue.
+  InputThreadTaskRunner()->PostTaskAndReply(FROM_HERE,
+                                            std::move(flush_compositor_queue),
+                                            std::move(flush_main_queue));
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
index 60ca31f..9eca4f59 100644
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
@@ -190,6 +190,11 @@
     return main_thread_task_runner_.get();
   }
 
+  // Immediately dispatches all queued events in both the main and compositor
+  // queues such that the queues are emptied. Invokes the passed closure when
+  // both main and compositor thread queues have been processed.
+  void FlushEventQueuesForTesting(base::OnceClosure done_callback);
+
  protected:
   friend class base::RefCountedThreadSafe<WidgetInputHandlerManager>;
   ~WidgetInputHandlerManager() override;
@@ -290,6 +295,10 @@
 
   void RecordMetricsForDroppedEventsBeforePaint(const base::TimeTicks&);
 
+  // Helpers for FlushEventQueuesForTesting.
+  void FlushCompositorQueueForTesting();
+  void FlushMainThreadQueueForTesting(base::OnceClosure done);
+
   // Only valid to be called on the main thread.
   base::WeakPtr<WidgetBase> widget_;
   base::WeakPtr<mojom::blink::FrameWidgetInputHandler>
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a1c0e17..e877708 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1581,6 +1581,7 @@
 crbug.com/1377648 external/wpt/css/selectors/media/media-playback-state.html [ Timeout ]
 crbug.com/1383480 external/wpt/css/selectors/invalidation/media-pseudo-classes-in-has.html [ Timeout ]
 crbug.com/1383480 external/wpt/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html [ Skip Timeout ]
+crbug.com/1475378 external/wpt/css/css-color/currentcolor-004.html [ Failure ]
 
 # ====== Style team owned tests to here ======
 
@@ -2712,7 +2713,6 @@
 crbug.com/626703 external/wpt/css/css-fonts/parsing/font-variant-invalid.html [ Crash ]
 
 # ====== New tests from wpt-importer added here ======
-crbug.com/626703 external/wpt/css/css-color/currentcolor-004.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-masking/mask-svg-content/mask-with-filter.svg [ Failure ]
 crbug.com/626703 external/wpt/css/css-fonts/font-synthesis-position-001.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-fonts/font-variant-position-04.html [ Failure ]
@@ -2943,8 +2943,6 @@
 crbug.com/626703 [ Win11 ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/default-enabled-features-allow-self.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] virtual/prefetch/external/wpt/speculation-rules/prefetch/out-of-document-rule-set.https.html?include=StatusCode199 [ Timeout ]
 crbug.com/626703 [ Mac12 ] virtual/prefetch/external/wpt/speculation-rules/prefetch/out-of-document-rule-set.https.html?include=StatusCode199 [ Timeout ]
-crbug.com/626703 external/wpt/css/mediaqueries/scripting-print-noscript.html [ Failure ]
-crbug.com/626703 external/wpt/css/mediaqueries/scripting-print-script.html [ Failure ]
 crbug.com/626703 external/wpt/css/selectors/selectors-4/lang-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/selectors/selectors-4/lang-003.html [ Failure ]
 crbug.com/626703 external/wpt/css/selectors/selectors-4/lang-004.html [ Failure ]
@@ -2957,10 +2955,6 @@
 crbug.com/626703 external/wpt/css/selectors/selectors-4/lang-015.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-color/system-color-hightlights-vs-getSelection-001.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/mediacapture-record/MediaRecorder-mimetype.html [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html [ Timeout ]
-crbug.com/626703 [ Mac ] external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html [ Timeout ]
-# `win-rel` fails but `win*-blink-rel` passes on this test.
-crbug.com/626703 [ Win ] external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html [ Failure ]
 crbug.com/626703 external/wpt/svg/text/reftests/opacity.svg [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/pre-wrap-align-center-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/pre-wrap-align-center-002.html [ Failure ]
@@ -5743,8 +5737,6 @@
 
 crbug.com/1459038 [ Linux ] external/wpt/webmidi/idlharness.https.window.html [ Failure ]
 
-crbug.com/1446799 external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html [ Failure Pass ]
-
 # These tests are optional and not reliably supported in Chrome.
 crbug.com/1370307 [ Release Win ] external/wpt/encoding-detection/ar-ISO-8859-6-late.tentative.html [ Failure Pass ]
 crbug.com/1370307 external/wpt/encoding-detection/ar-windows-1256-late.tentative.html [ Failure Pass ]
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 1b9514d..daa6e66 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
@@ -279540,11 +279540,11 @@
   "support": {
    ".cache": {
     "gitignore2.json": [
-     "bad48fc63ed3458c504047dfe9c2007313836530",
+     "bc3ce95f291f3d195ab38dbda4077e09c21dabd1",
      []
     ],
     "mtime.json": [
-     "f2dded7fbfff13f848826b7d296ce0a50dbf5c0b",
+     "4741053b0732931aa7e2bee45ea236d936d2c55a",
      []
     ]
    },
@@ -287616,7 +287616,7 @@
        []
       ],
       "background-applies-to-001.xht.ini": [
-       "8bdb7fa43aa67a6a7f7403c8551e949d89146aad",
+       "7e14eacbf70a178de3cdc01c06416dd835c54528",
        []
       ],
       "background-applies-to-005.xht.ini": [
@@ -287628,7 +287628,7 @@
        []
       ],
       "background-applies-to-007.xht.ini": [
-       "de89fe41e5809495157804c40cd7c98e31ee4764",
+       "0ec6da68ac83979401392c4083bfbef0490c788c",
        []
       ],
       "background-applies-to-012.xht.ini": [
@@ -287679,6 +287679,10 @@
        "d1b34714ca3b9c467cebfc7fb0602e6570ccb425",
        []
       ],
+      "background-bg-pos-208.xht.ini": [
+       "f8928ace0fea1926761736ec01b34818e4941a79",
+       []
+      ],
       "background-body-001-ref.xht": [
        "15890b0f5ef7e10ecfe2fb26b1631dede40a354c",
        []
@@ -287971,6 +287975,14 @@
        "97ab0b2a04cf27c6bddfd9267c6da2f516001736",
        []
       ],
+      "background-color-070.xht.ini": [
+       "ea67b4c84771f96b4b494dfa2e7f7ab85bf79089",
+       []
+      ],
+      "background-color-072.xht.ini": [
+       "58a923bf8d9270bcf57b2bb381d46e3ab607a389",
+       []
+      ],
       "background-color-073-ref.xht": [
        "3c4b5c2af038c7e9596cf7b58fa188163613e431",
        []
@@ -288099,6 +288111,10 @@
        "ab06e09153cbacc57f1cfbaeec1f82db25c50ab6",
        []
       ],
+      "background-color-117.xht.ini": [
+       "6b39e66d4c1e6ee9608aa0de4c0a91ceb864a745",
+       []
+      ],
       "background-color-121.xht.ini": [
        "467982972781c13f9f284f7f77ceb5463c616621",
        []
@@ -288216,7 +288232,7 @@
        []
       ],
       "background-color-applies-to-003.xht.ini": [
-       "b527f574cb4a9734934c4a27da5361a3ab64e360",
+       "e53edbb0ab82a78a741ba70f7e9f09b8ea07b716",
        []
       ],
       "background-color-applies-to-004.xht.ini": [
@@ -288244,7 +288260,7 @@
        []
       ],
       "background-image-applies-to-012.xht.ini": [
-       "b7ae63ca897f27934e36437b105c93f952d4d164",
+       "43d6f695f083cf67d8378616993b6bceb54563a8",
        []
       ],
       "background-image-cover-002-ref.xht": [
@@ -288315,6 +288331,10 @@
        "4b5bb7bd023bf195f0fb542a38262662c7048847",
        []
       ],
+      "background-position-053.xht.ini": [
+       "791a5d440f34cfecc78f1aca82236bfa4f537922",
+       []
+      ],
       "background-position-089.xht.ini": [
        "3237f6e4c963f0388c14b2843cb52b2c1716cb96",
        []
@@ -289456,7 +289476,7 @@
        []
       ],
       "border-bottom-color-018.xht.ini": [
-       "08dfedb0f3c45ac407afeb59b8df55e4afdf077f",
+       "0e86a3b31a06e04a4bc740d5ce638517226cec31",
        []
       ],
       "border-bottom-color-019-ref.xht": [
@@ -290208,7 +290228,7 @@
        []
       ],
       "border-left-width-applies-to-004.xht.ini": [
-       "f84fff93a7931a9512f313df26f3789f81bcdbf0",
+       "0ffd88257bd67a967d0599ee8ea7398b2d3abc43",
        []
       ],
       "border-left-width-applies-to-012.xht.ini": [
@@ -290728,7 +290748,7 @@
        []
       ],
       "border-right-width-applies-to-003.xht.ini": [
-       "5428ba5634d30bef6f5c63d9272cea0e7118e014",
+       "f0639cf43c1ed0dffec346933d736795a5a0bdeb",
        []
       ],
       "border-right-width-applies-to-005.xht.ini": [
@@ -290755,6 +290775,10 @@
        "8d7fa80154231ec8f1601821402cf9ac7b57a7de",
        []
       ],
+      "border-shorthands-001.xht.ini": [
+       "9811077cef0ab666efbcb54521fb19cf9ae03d76",
+       []
+      ],
       "border-shorthands-002.xht.ini": [
        "f4841c5d8e8290bec4219ce8da53da9b7ad2a5ae",
        []
@@ -290796,7 +290820,7 @@
        []
       ],
       "border-top-018.xht.ini": [
-       "31e0aa5784d858985d271a2d90552448605f001c",
+       "be8f2474e5662d349394fea899a33ca15f9b924f",
        []
       ],
       "border-top-color-003.xht.ini": [
@@ -290832,7 +290856,7 @@
        []
       ],
       "border-top-color-046.xht.ini": [
-       "d50efd4cb72d666305d6cbbffbf5963a5b4a7cb9",
+       "a05d1be877af63227d1935c574725a02e03fd52d",
        []
       ],
       "border-top-color-051.xht.ini": [
@@ -290872,7 +290896,7 @@
        []
       ],
       "border-top-color-080.xht.ini": [
-       "97fd554293549c39a1569ec10751ef45c64694cb",
+       "426ce921931b77e0cae16da59a9bb98514f6aa4c",
        []
       ],
       "border-top-color-083.xht.ini": [
@@ -292147,6 +292171,10 @@
        "68139cdbe2d7c998b6d948f5ecca0ed7ce367694",
        []
       ],
+      "intrinsic-size-float-and-line.html.ini": [
+       "4920edaffce386804512eefb9f9046b94dcd3ad9",
+       []
+      ],
       "negative-block-margin-pushing-float-out-of-block-formatting-context-ref.html": [
        "09a0ed094f8eb82f9fa25c4f09bb3f8a1f79c4c9",
        []
@@ -292178,6 +292206,10 @@
       "overhanging-float-paint-order-ref.html": [
        "608e009ff5c361192238b455876ef7d4bdd84f7d",
        []
+      ],
+      "zero-width-floats.html.ini": [
+       "47631b5f3147b0ef2d8e4d76abf89c8199d7feaf",
+       []
       ]
      },
      "floats-clear": {
@@ -292618,7 +292650,7 @@
        []
       ],
       "floats-028.xht.ini": [
-       "9019775fd8b8d3f8e82ed496753c3ea4514d26af",
+       "26b9813fde8d364aa580412d97d8345ac5dc4077",
        []
       ],
       "floats-029-ref.xht": [
@@ -292665,6 +292697,10 @@
        "787b26cf25afcd55b9480b1bff224cf8fa3c7854",
        []
       ],
+      "floats-101.xht.ini": [
+       "3a37ec8dd32710fa5417b14b1a4a4c59ed5e2c3e",
+       []
+      ],
       "floats-111-ref.xht": [
        "ef2233f428d2e92ef1ed4b18cb5ca6aebc70ff3f",
        []
@@ -292889,6 +292925,10 @@
        "1a782b0ad9fd5c46adec552c33743ab5713f2308",
        []
       ],
+      "margin-collapse-157.xht.ini": [
+       "4c6e018b9530c745460c50ead1f610629b017802",
+       []
+      ],
       "margin-collapse-158-ref.xht": [
        "4608e118e190ea070df90ea360dad1c9622b9d3b",
        []
@@ -293692,7 +293732,7 @@
        []
       ],
       "block-formatting-context-height-002.xht.ini": [
-       "01aa1c65eaec0a993e5ee722e867c66c249135ce",
+       "c2bb17b8386307c4f325773c02da5e3ba003cfc1",
        []
       ],
       "block-formatting-context-height-003-ref.xht": [
@@ -293732,7 +293772,7 @@
        []
       ],
       "block-formatting-contexts-006.xht.ini": [
-       "5c983c562bb8f41b52326b82e0eec4333739eefa",
+       "8a5bb6778bba0a3dc377b7bba1b3bc2542772344",
        []
       ],
       "block-formatting-contexts-007.xht.ini": [
@@ -294170,7 +294210,7 @@
        []
       ],
       "height-applies-to-004.xht.ini": [
-       "1667eca711bb94153918ecfff223df9b99b609da",
+       "d4074f5353ff11c31b24c9a8af555b4381ebb9f0",
        []
       ],
       "height-applies-to-012.xht.ini": [
@@ -294346,7 +294386,7 @@
        []
       ],
       "inline-replaced-width-006.xht.ini": [
-       "307a2e6f65473de5ef3dc9756d899b1b9aa49fe7",
+       "85a070d1cb81955e20950c0fd6864b75133d4aac",
        []
       ],
       "inline-replaced-width-008.xht.ini": [
@@ -294478,7 +294518,7 @@
        []
       ],
       "max-height-034.xht.ini": [
-       "99987303b1a0cb6b18f46ac4c585ce783841a328",
+       "bfc7b452478e301f7c8933bf77d0ff063440c41a",
        []
       ],
       "max-height-036-ref.xht": [
@@ -294730,7 +294770,11 @@
        []
       ],
       "min-width-applies-to-009.xht.ini": [
-       "abf65aaac4303dabe3bb2d14a1814fd2f2d3be33",
+       "ad7e900a66987586e7507623c645af2c8732ae40",
+       []
+      ],
+      "min-width-applies-to-013.xht.ini": [
+       "88ec550420e43b45ebd5b80b28f6e1b96f57b27d",
        []
       ],
       "min-width-applies-to-015.xht.ini": [
@@ -295052,7 +295096,7 @@
        []
       ],
       "width-applies-to-002.xht.ini": [
-       "4ad5c799e35f8a61acce5dcfdf2cef4d64017688",
+       "70ab00069600aa512192a1a1421f5561ffe91f1f",
        []
       ],
       "width-applies-to-009.xht.ini": [
@@ -295110,7 +295154,7 @@
        []
       ],
       "absolute-non-replaced-height-006.xht.ini": [
-       "c28f777082f60733e5e3c4014804819201e9e281",
+       "e65955f79d29bec009eafdc860fcf0a1ea61d289",
        []
       ],
       "absolute-non-replaced-height-007-ref.xht": [
@@ -295141,6 +295185,10 @@
        "261c6049a6dd40a7d8a6b41c5005dc4fcb08685e",
        []
       ],
+      "absolute-non-replaced-height-011.xht.ini": [
+       "5f22e61802fb8d64d763c2b2ad43a73c710cd6da",
+       []
+      ],
       "absolute-non-replaced-height-012.xht.ini": [
        "9140d0f6d7353775bedf8d89816d868c0ad96af4",
        []
@@ -295194,7 +295242,7 @@
        []
       ],
       "absolute-non-replaced-max-height-010.xht.ini": [
-       "02809007bedf6593228cfd6906060a3fe4c3d4b5",
+       "361f344f18ee1f58f1addc3144abd3f4d0c63f9e",
        []
       ],
       "absolute-non-replaced-max-height-011.xht.ini": [
@@ -296045,6 +296093,14 @@
        "6063e398d5f09c58c805fd219b9ab107c7539513",
        []
       ],
+      "left-109.xht.ini": [
+       "7060447459333265b840f61daf27f86cb62d6b59",
+       []
+      ],
+      "left-110.xht.ini": [
+       "8300c634411fa4b872079dc6e1a376d268fd736a",
+       []
+      ],
       "left-113-ref.xht": [
        "279160a0803a022a1af36b96d6718357d94701c5",
        []
@@ -296740,7 +296796,7 @@
        []
       ],
       "top-103.xht.ini": [
-       "f34c122604b85f2a500990cdd1d97247a5b09a53",
+       "ee373b4ec81390c2ee2359fd6001f2f05d81b044",
        []
       ],
       "top-104.xht.ini": [
@@ -298300,7 +298356,7 @@
        []
       ],
       "table-cell-001.xht.ini": [
-       "1b9023e517843b850764634f288ab8236d03bc8e",
+       "0f9567cef06e4da7222b3df70a5d2f8d982f29fb",
        []
       ],
       "table-height-algorithm-008b.xht.ini": [
@@ -299343,6 +299399,10 @@
        "9b1bc070d21f0ab81252871fdf08658ca84d4709",
        []
       ],
+      "white-space-processing-014.xht.ini": [
+       "a50046204485eaa234459d597229b271a1788798",
+       []
+      ],
       "white-space-processing-015-ref.xht": [
        "d31a52d448e8fcea8da476a8f9e1b8d84cec9ab0",
        []
@@ -300131,7 +300191,7 @@
       []
      ],
      "baseline-of-scrollable-2.html.ini": [
-      "16b2ca3f340ffe3d81d6796422feec94f5f7e7c6",
+      "3d92d3db37ceff5f322f0826a1a75835509599e2",
       []
      ],
      "baseline-rules": {
@@ -301965,7 +302025,7 @@
       []
      ],
      "border-image-space-001.html.ini": [
-      "350b28cea04efcbaae9382342ebd5a7638fd2dfc",
+      "1ca8fc95c34d1561f954b171b4c19ba6500c807e",
       []
      ],
      "border-image-width-007.xht.ini": [
@@ -302150,7 +302210,7 @@
        []
       ],
       "slice-block-fragmentation-003.html.ini": [
-       "43a6034e7354c89893b9cd95a6f85fc12b7dba55",
+       "527b8435c2a1d516e55f8c08f16a4ba313918509",
        []
       ],
       "slice-inline-fragmentation-001-ref.html": [
@@ -304244,6 +304304,10 @@
       "be5e1b0e7c2d5c0d4d85d161d83cd3a12c485a32",
       []
      ],
+     "fieldset-002.html.ini": [
+      "c0cf2133a3242de135857a60e28991f913658c85",
+      []
+     ],
      "fieldset-003-ref.html": [
       "e8b323dff222aba6d70ee3c51b3e42996fc5ab89",
       []
@@ -304774,7 +304838,7 @@
        []
       ],
       "single-line-row-flex-fragmentation-029.html.ini": [
-       "ce7d04f8b42b18322020037e98f2dca225da4544",
+       "f67f03c3f36b0ffac3775496914f456510754bea",
        []
       ],
       "single-line-row-flex-fragmentation-032.html.ini": [
@@ -304834,6 +304898,10 @@
       "9e117c49c2bab5b8b2fbad4fcfc2eef13b5b8ab6",
       []
      ],
+     "float-in-self-collapsing-block-000.html.ini": [
+      "6ef5b1a0cb99991451e3bc0c0780c8808ca42e0d",
+      []
+     ],
      "float-in-self-collapsing-block-001.html.ini": [
       "8727e6d6f7a77dc4b60fc770434e113eb05335dd",
       []
@@ -305046,6 +305114,10 @@
       "7aebdbefa2fabe9e360dbe349611dfe727b686bf",
       []
      ],
+     "monolithic-overflow-001.tentative.html.ini": [
+      "8877df8fc4b4e80bcb3c45be801f5392576c0d99",
+      []
+     ],
      "monolithic-overflow-003.tentative.html.ini": [
       "d441d9c37f03cc6a310b90eb792d46ff06e69352",
       []
@@ -305186,6 +305258,10 @@
       "1362402b90536aa2f25a1e67782537f72752565e",
       []
      ],
+     "out-of-flow-in-multicolumn-066.html.ini": [
+      "94d37fdd9743f80247efbbdcdec388ff6cfb3c74",
+      []
+     ],
      "out-of-flow-in-multicolumn-070.html.ini": [
       "fccd75cf64ce2ba67cd6e25fa21d76c8bb2ee0aa",
       []
@@ -305653,6 +305729,10 @@
        "5bb48724dfb0c7f541d7a78d4ba2ba12f80d3ee0",
        []
       ],
+      "table-cell-expansion-001.html.ini": [
+       "59e716bb6d4759a7ccbf6ec4df8721c328908263",
+       []
+      ],
       "table-cell-expansion-005.html.ini": [
        "6b7dcba13180bb685d81ba281cce2ee9af511b6a",
        []
@@ -306016,6 +306096,10 @@
       "7128a5d3481d5cdffc8a0b4cf22ead57c5dd7d24",
       []
      ],
+     "revert-layer-004.html.ini": [
+      "2be680ef36be69b91c8b527fc974681dd821f87c",
+      []
+     ],
      "revert-layer-015-ref.html": [
       "661016619c0c46c113dedc57aa890f62b35e137c",
       []
@@ -306431,7 +306515,7 @@
       []
      ],
      "lch-006.html.ini": [
-      "24414578fea267cdd454f9cbc68c16f8fbcc6b95",
+      "dda796af0cbd7784cd7b68ee4c80575dd90a0fb8",
       []
      ],
      "lch-007-ref.html": [
@@ -306604,6 +306688,10 @@
       "cdf7c73d3e9835b525c286aa02643d0b858c919b",
       []
      ],
+     "predefined-005.html.ini": [
+      "1888a77146daea50c1ef38e67a06494d6c2bd4db",
+      []
+     ],
      "predefined-011.html.ini": [
       "88229e30a94979db7b0710dad6f782c7c413bf90",
       []
@@ -306636,10 +306724,18 @@
       "da95008fcf417e4ad5841c32b2b58a7359b310c3",
       []
      ],
+     "rec2020-003.html.ini": [
+      "a7e1a2dd5ce7345aa34872307aef3c73121c7ef3",
+      []
+     ],
      "rec2020-004-ref.html": [
       "68068041f9f81ac54c8b90ffd6e8cc4a787992b1",
       []
      ],
+     "rec2020-004.html.ini": [
+      "65604857b5bb70f6a87b99776e63745369e151d7",
+      []
+     ],
      "reference": {
       "system-color-hightlights-vs-getSelection-001-ref.html": [
        "c5d48b4c9f02794779f641bda31c65cafe82620b",
@@ -306654,6 +306750,10 @@
       "5a61370a5301ad518867f2f01cc85537cbc2ee33",
       []
      ],
+     "rgba-001.html.ini": [
+      "3a5a994c7d6a07513c86cfa37c8d3b6c91c1d47a",
+      []
+     ],
      "rgba-003.html.ini": [
       "e6e14f52125637b303ca15734bf93a7b32db0a38",
       []
@@ -306868,10 +306968,18 @@
       "7d1f1bf2786074794f9069ea14080cd2d6731ded",
       []
      ],
+     "t424-hsl-clip-outside-gamut-b.xht.ini": [
+      "07b25f55e846d28fcb184e9c41d881a0c1cb4fed",
+      []
+     ],
      "t424-hsl-h-rotating-b-ref.html": [
       "60585ea91ae15a1e04b48af9ebb008d1926fbb17",
       []
      ],
+     "t424-hsl-h-rotating-b.xht.ini": [
+      "f654e5207ed19053b847b589f7f1f681acb86bdf",
+      []
+     ],
      "t424-hsl-parsing-f-ref.html": [
       "5d99a1a64e38a83ae1048054aebd7d9a8efd2e21",
       []
@@ -307048,6 +307156,10 @@
       "0237a810eb9df12c418cffa5eb39563e4cd3f555",
       []
      ],
+     "xyz-001.html.ini": [
+      "4c11b4f00949de2f2d0c82d1b29ad02d4da3ee9f",
+      []
+     ],
      "xyz-003-ref.html": [
       "029a256995609c51449aa487c145ded419c2aca6",
       []
@@ -307598,6 +307710,10 @@
       "a4ac2f92effeb04a1670cdf10f499f0374e0dc23",
       []
      ],
+     "contain-paint-016.html.ini": [
+      "2f61643a8de0b6a1a5f7d3c68cd5afbc1662eeca",
+      []
+     ],
      "contain-paint-017.html.ini": [
       "8debe69c21a470cdf2649c26a67562cdbd8a8059",
       []
@@ -308160,7 +308276,7 @@
        []
       ],
       "content-visibility-025.html.ini": [
-       "96453b6e3f954651b90f8675e1caecaae144e1c2",
+       "387def4e4108ab2badf7d09c97046b4d830782b4",
        []
       ],
       "content-visibility-027-ref.html": [
@@ -308176,7 +308292,7 @@
        []
       ],
       "content-visibility-033.sub.https.html.ini": [
-       "03bfeafd3a2ff2708f5b4bfb4b37be981789caff",
+       "577fb09ef31e188824afc0c5a6c17812e4663262",
        []
       ],
       "content-visibility-034-ref.html": [
@@ -310078,7 +310194,7 @@
        []
       ],
       "css3-counter-styles-066.html.ini": [
-       "dfd69214595310bdbc7b0ab7f846d1902f9593fd",
+       "f5ea52b67763814ca7f8379b4211d06876c26d68",
        []
       ]
      },
@@ -311185,7 +311301,7 @@
       []
      ],
      "align-content_center.html.ini": [
-      "2cc16bb83e2516ccd21c0bb9ec8140d4a6e2e170",
+      "3be65318dbfd0e2fe9800ce29e68333c9e5e21cd",
       []
      ],
      "align-content_flex-start.html.ini": [
@@ -311351,7 +311467,7 @@
       []
      ],
      "css-flexbox-row.html.ini": [
-      "8d6de9d208c0c9240fb835931c359eb121921e0c",
+      "2489ca56618cff7982eb551803f29b19d328c665",
       []
      ],
      "css-flexbox-test1-ref.html": [
@@ -312904,6 +313020,10 @@
       "db1252f5f93c4b2f409a084c32d4e88123738925",
       []
      ],
+     "flexbox_flex-0-1-0-unitless.html.ini": [
+      "50fd65b66d9c9b6cabd2e2ec9a742234a2f2b171",
+      []
+     ],
      "flexbox_flex-0-1-N-ref.html": [
       "fcaba286a4b3c5d7f96f970ff2c996450a426ad7",
       []
@@ -313764,6 +313884,10 @@
       "9e329cc0a4401365cafebf36e738651989f8817f",
       []
      ],
+     "gap-007-rtl.html.ini": [
+      "2f65786f0f6d7bd08395cd52d4917b55ed44c065",
+      []
+     ],
      "gap-008-ltr-ref.html": [
       "40031a4f3ab487060160da4e7e52bf399a169a85",
       []
@@ -313948,7 +314072,7 @@
        []
       ],
       "row-wrap-002.tentative.html.ini": [
-       "e7a499b14f18ac03a41cb3886c697766dbea4498",
+       "76df9ad67a422c5a41b32e5164c49098f4af51b4",
        []
       ]
      },
@@ -315662,6 +315786,10 @@
       "abd1dc17476fd9a1697c6b98f2058aff90c253fa",
       []
      ],
+     "font-variant-01.html.ini": [
+      "a3a849435b97d0b0ca46807a2f2cd460091dc1dc",
+      []
+     ],
      "font-variant-02-ref.html": [
       "137d6e5dc9156ca0a5de40227aa4fde5c09843c8",
       []
@@ -315886,6 +316014,10 @@
       "85f9e8f90811bd940970366158346267fa0c752b",
       []
      ],
+     "font-variant-east-asian-03.html.ini": [
+      "87a2e0d84406d5614f859ea6ff000a9b35065ad7",
+      []
+     ],
      "font-variant-east-asian-04-ref.html": [
       "663985c7541865a78c6f67bf0f14d7dc33e58862",
       []
@@ -316302,6 +316434,10 @@
       "math-script-level-font-size-clamping-001.tentative-ref.html": [
        "cb5326ad7196577ccd02131e11a5dc99067cb4e7",
        []
+      ],
+      "math-script-level-font-size-clamping-001.tentative.html.ini": [
+       "8e8bb16548639aa5aca2fcbad5ff06103d67a9cb",
+       []
       ]
      },
      "metrics-override-normal-keyword-ref.html": [
@@ -316661,7 +316797,7 @@
       []
      ],
      "standard-font-family-7.html.ini": [
-      "9d1af9ac42229496388da28f8e68c5b5800057eb",
+      "3bf2a2b01546da51fef1681093b375cc984648b6",
       []
      ],
      "standard-font-family-8-notref.html": [
@@ -324075,6 +324211,10 @@
        "6507f669b3dc559f95538c14b6c0fdf02f04d9f8",
        []
       ],
+      "grid-content-distribution-with-collapsed-tracks-002.html.ini": [
+       "ee009126f3d96a19b31b06128cecd4652cbd9a50",
+       []
+      ],
       "grid-content-distribution-with-collapsed-tracks-003.html.ini": [
        "a63a2341e862e2b8ae3a2ec111d6f68506e2a16c",
        []
@@ -324103,6 +324243,10 @@
        "c0e6ef656de862c881d7689f8627fc3e42e8c2e2",
        []
       ],
+      "grid-content-distribution-with-collapsed-tracks-018.html.ini": [
+       "79fc9b57217b5b1bd66e6901510191442b713c54",
+       []
+      ],
       "grid-content-distribution-with-collapsed-tracks-019.html.ini": [
        "cda2ef3aac1b593158afab0aa467f81b804840dc",
        []
@@ -324922,7 +325066,11 @@
      ],
      "grid-items": {
       "anonymous-grid-item-001.html.ini": [
-       "970b2b9775edde720811ee4d6f78833e0716f95a",
+       "dbaeb38291cb6d93dba9809196604d673cd4003d",
+       []
+      ],
+      "aspect-ratio-001.html.ini": [
+       "5e85ca9f36edaecca8c8f1205fd9b24e741df692",
        []
       ],
       "aspect-ratio-003.html.ini": [
@@ -325309,6 +325457,10 @@
        "a51134751616fdb1eede6a1774c3edd6571ddc28",
        []
       ],
+      "grid-display-grid-001.html.ini": [
+       "24d9f7318efb98c8a96c153433ba9df2744ae625",
+       []
+      ],
       "grid-first-letter-001.html.ini": [
        "8f79a5019929f21a92a9b2752cb2068d38c5c074",
        []
@@ -325338,7 +325490,7 @@
        []
       ],
       "grid-inline-float-001.html.ini": [
-       "fffe13b002cc3e7c9e8c500955d34c9245a69083",
+       "e47b91b71318fefb6864f9c5f2e0f3d1fd5e9dbd",
        []
       ],
       "grid-inline-multicol-001.html.ini": [
@@ -326865,7 +327017,7 @@
       []
      ],
      "gradients-with-transparent.html.ini": [
-      "defe7a9e2f48f42846650ca8bf872a928f6f4d42",
+      "5c88f9aecd2b3bdc48c646c0966850b5f4faec9d",
       []
      ],
      "idlharness-expected.txt": [
@@ -329054,7 +329206,7 @@
        []
       ],
       "invalid-fragment.https.html.ini": [
-       "36ae62caaa58a0292d498a0a7b17bd461889c294",
+       "43b55cc8a73465448592afd0e12ad29a60c2ac22",
        []
       ]
      },
@@ -329630,6 +329782,10 @@
       "b026bab7c4ee7532f453f12b386baedae4917622",
       []
      ],
+     "list-style-type-decimal-vertical-rl.html.ini": [
+      "ee2714d3ea8ee0e693c159a3f83f2d083999fd9c",
+      []
+     ],
      "list-style-type-string-001-ref.html": [
       "0d1b1362873483fa1b900e2da3efe603648f791e",
       []
@@ -332612,6 +332768,10 @@
       "523adfd2f314ea00023962dcb17d966223812cae",
       []
      ],
+     "multicol-span-all-fieldset-002.html.ini": [
+      "02d544d978959f56a2e2ec0db338271bd0e10780",
+      []
+     ],
      "multicol-span-all-fieldset-003-ref.html": [
       "bf0d6c5b69b58ebfba05175a1ccf72993239fce8",
       []
@@ -334075,7 +334235,7 @@
       []
      ],
      "webkit-line-clamp-032.html.ini": [
-      "6cf33d4917b72b34a55ea1b82e9dc583dc2776a0",
+      "1ca2b38be8d3b8653b35f3c4d5218c2bf49b120c",
       []
      ],
      "webkit-line-clamp-036.html.ini": [
@@ -334900,6 +335060,10 @@
         "908f43a002877096bd57e335e5ac773261cb37ff",
         []
        ],
+       "vlr-ltr-ltr-in-multicol.html.ini": [
+        "acd163a2463e5466fd1612db3ad98b5644790f34",
+        []
+       ],
        "vrl-in-multicol-ref.html": [
         "0e22219eabdbb3cdd6e748834080da412c5e69a3",
         []
@@ -335020,6 +335184,10 @@
       "8ce94963c42afdc5a932d329c66879c5b8be64f5",
       []
      ],
+     "position-absolute-replaced-no-intrinsic-size.tentative.html.ini": [
+      "f5f0eed382e4c675d335df622ad09fe930818439",
+      []
+     ],
      "position-absolute-replaced-with-display-table.html.ini": [
       "857d63ac5b283b7130b023f4d44a0f7e0bcc1c94",
       []
@@ -335892,6 +336060,10 @@
       "200d92cc590880be73f63d9e6e00594471700d46",
       []
      ],
+     "active-selection-011.html.ini": [
+      "f0ff6f77ec14ba1cf7baeb94b38021f72bc22656",
+      []
+     ],
      "active-selection-014.html.ini": [
       "eff0f6889eaf803ee0949a524d69b86a2df450fe",
       []
@@ -337768,7 +337940,7 @@
      ],
      "input": {
       "keyboard.html.ini": [
-       "d3a1a4ae73061031d826b8d9b8705212d7fedc5f",
+       "afc69bcc04303eb9f5aec70ae4be0277f1b47a58",
        []
       ],
       "mouse-wheel.html.ini": [
@@ -339339,6 +339511,10 @@
        "d87b3bf1ebdf9c6b71df59ab38871b5e02ee8f62",
        []
       ],
+      "shape-outside-004.html.ini": [
+       "0e7a2d54f24f05c4ca98e05819bae9d890df9164",
+       []
+      ],
       "shape-outside-005.html.ini": [
        "e08e34d4d5cb9acb8859f8cd604c31092534f460",
        []
@@ -339615,6 +339791,10 @@
        "4a1c06a8d812d07c4e513d4ad7eb59a33ec571aa",
        []
       ],
+      "block-aspect-ratio-008.html.ini": [
+       "b2046e595ff4a40b9e75cdb1f81cb9ff1dc3a342",
+       []
+      ],
       "block-aspect-ratio-009.html.ini": [
        "c6867df7988fe50c3e6355137e2613cf21a650e1",
        []
@@ -339804,7 +339984,7 @@
        []
       ],
       "intrinsic-size-001.html.ini": [
-       "b8c67475f30378dac9c6b47df67228b4fde2698b",
+       "072204fc11bd125da3e51cfe277ec6b278b2e425",
        []
       ],
       "intrinsic-size-002.html.ini": [
@@ -340479,7 +340659,7 @@
       []
      ],
      "intrinsic-percent-replaced-dynamic-008.html.ini": [
-      "23cd7ee0c98b3f8feeea70e334b5d252cec54756",
+      "35377de69943de32e72c050bdbd03e00142e0f58",
       []
      ],
      "intrinsic-percent-replaced-dynamic-009.html.ini": [
@@ -341693,6 +341873,10 @@
       ]
      },
      "bidi": {
+      "bidi-lines-001.html.ini": [
+       "55724ddef7cebef54e96773ea25a7689d7fcfaaa",
+       []
+      ],
       "bidi-lines-002.html.ini": [
        "6a5b59fbeabb8475ad7befbc62206cdad0103a20",
        []
@@ -343924,7 +344108,7 @@
        []
       ],
       "segment-break-transformation-rules-044.html.ini": [
-       "8bedd7a8bbbe3c97da9bffdbbe9d7e1f6ac9151f",
+       "1437f2a0fe45d1356cd087116b828c293881c03b",
        []
       ],
       "segment-break-transformation-rules-045-ref.html": [
@@ -344893,6 +345077,10 @@
        "b5fb5b972a98af13517f7c638ca44335eb11e733",
        []
       ],
+      "text-align-justify-006.html.ini": [
+       "0043c9f5c508d0524881e68ddea528fa01c8aa55",
+       []
+      ],
       "text-align-justify-last-default.html.ini": [
        "d132124c2ef689f1b2c9c91297cd534b3d8c495a",
        []
@@ -345732,7 +345920,7 @@
        []
       ],
       "text-transform-capitalize-011.html.ini": [
-       "a82b55033be16efeb34459bd3c5dcb28e619ec86",
+       "ff366a27872fb368dd50dbced65c563c93af3dea",
        []
       ],
       "text-transform-capitalize-014.html.ini": [
@@ -345816,7 +346004,7 @@
        []
       ],
       "text-transform-full-size-kana-006.html.ini": [
-       "d2593716785c442f3442f64ecc438ab376741b22",
+       "9cec6934164c098e0369b68010f76181404fbe8e",
        []
       ],
       "text-transform-fullwidth-002-ref.xht": [
@@ -346353,6 +346541,10 @@
        "9af241fcc18ea1dced71e77866c6c437547d2c7e",
        []
       ],
+      "pre-wrap-008.html.ini": [
+       "cec2c17b5109710bbf6e96e3b97501bfd97795bf",
+       []
+      ],
       "pre-wrap-012.html.ini": [
        "ad5a035d5f924da74a355d417b2a435755ff6d73",
        []
@@ -347065,6 +347257,14 @@
        "0e1bbd4ccaca465b3289266c38408944e50ae269",
        []
       ],
+      "trailing-other-space-separators-break-spaces-001.html.ini": [
+       "be2e64430adfeac21ad4ccc64742b3bc8d3da9c3",
+       []
+      ],
+      "trailing-other-space-separators-break-spaces-004.html.ini": [
+       "5ebefaacfa45255294d2f4682fa70b9e94200fac",
+       []
+      ],
       "trailing-space-and-text-alignment-002.html.ini": [
        "50cacb125e01a4d249fbcae1425d0996930f5906",
        []
@@ -347090,7 +347290,7 @@
        []
       ],
       "white-space-applies-to-text-001.html.ini": [
-       "6ad967b82bfad18fb74be8a48a230ab3e6eb43f7",
+       "e5bab12356cd169999661cbceb23f67ce3a3a5ed",
        []
       ],
       "white-space-collapse-002.html.ini": [
@@ -349703,6 +349903,10 @@
         []
        ]
       },
+      "svg-matrix-002.html.ini": [
+       "9487021cfff02a81a19904eef96ab2c37f31b8de",
+       []
+      ],
       "svg-matrix-003.html.ini": [
        "ebeb5f1f7a17559d5a7877dd0bf3324bd436e55e",
        []
@@ -349719,10 +349923,18 @@
        "155adf45153716c103b4a5ed926211481b553317",
        []
       ],
+      "svg-matrix-011.html.ini": [
+       "7def9fecea2a58a0688ea7f2fd4c122d1326ff9d",
+       []
+      ],
       "svg-matrix-013.html.ini": [
        "b2e8b893bfd1ce4b25e3407611566e224e946ed1",
        []
       ],
+      "svg-matrix-014.html.ini": [
+       "b31addf7c03e3e6a3b049c8c110c7ca53ebb3d50",
+       []
+      ],
       "svg-matrix-015.html.ini": [
        "e130a65328e147eee1730638e072d06262eb5ba9",
        []
@@ -349792,7 +350004,7 @@
        []
       ],
       "svg-matrix-067.html.ini": [
-       "42951e8902f4149691330b3513b1c7d383c6d4e4",
+       "17b32104c6cc5f2fe1c73b30c5e8b77c48865e58",
        []
       ],
       "svg-matrix-068.html.ini": [
@@ -350338,6 +350550,10 @@
       "svg-skewy-011.html.ini": [
        "f29481f97bca6201d122473fd90081c3b54ebcbb",
        []
+      ],
+      "svg-skewy-with-units.html.ini": [
+       "72710eb022d8017a40e9e10952a62837d2ab9252",
+       []
       ]
      },
      "subpixel-perspective-backface-hidden-ref.html": [
@@ -350566,6 +350782,10 @@
       "861e7b8f453432d6e5a6a15e3d5189441b0f8ecd",
       []
      ],
+     "transform-abspos-006.html.ini": [
+      "bc9f552c6e1695e75a36f3122d36a6d7a97b29d6",
+      []
+     ],
      "transform-abspos-ref.html": [
       "f4aa147c981cec6085231281bd2fa732c0b3a60c",
       []
@@ -351511,7 +351731,7 @@
       []
      ],
      "transform3d-scale-003.html.ini": [
-      "3113339f605b174fc9a6b8ff807b9c68c38f3009",
+      "74219adc0727300639a074a6785fdf4ca537d26a",
       []
      ],
      "transform3d-scale-004.html.ini": [
@@ -353208,7 +353428,7 @@
        []
       ],
       "kind-of-widget-fallback-button-background-size-001.html.ini": [
-       "1f472a1d0984d776f4738c854de9b9f0b62d9dc3",
+       "a3b828d453fa99e74f45f4557aac185b7ad8117c",
        []
       ],
       "kind-of-widget-fallback-button-border-block-end-color-001.html.ini": [
@@ -353220,7 +353440,7 @@
        []
       ],
       "kind-of-widget-fallback-button-border-block-end-width-001.html.ini": [
-       "b078fe024d2c71df1dbfaf40a3e492c9ec38be9c",
+       "ffadc25f65f64b30c840891a3b3d9034d3bf45fe",
        []
       ],
       "kind-of-widget-fallback-button-border-block-start-color-001.html.ini": [
@@ -353240,7 +353460,7 @@
        []
       ],
       "kind-of-widget-fallback-button-border-bottom-left-radius-001.html.ini": [
-       "19824cd875c8cca68f0485ca8abff4a451e18c6b",
+       "279c0144bf18d82f3cf819ebc03c813c688b5cee",
        []
       ],
       "kind-of-widget-fallback-button-border-bottom-right-radius-001.html.ini": [
@@ -353256,7 +353476,7 @@
        []
       ],
       "kind-of-widget-fallback-button-border-end-start-radius-001.html.ini": [
-       "c5cf46c446bcec652d868efb5e74ba5b910bc33b",
+       "ceb4bdd5dac5821d8a69ccccd217685b862de739",
        []
       ],
       "kind-of-widget-fallback-button-border-image-outset-001.html.ini": [
@@ -353268,7 +353488,7 @@
        []
       ],
       "kind-of-widget-fallback-button-border-image-slice-001.html.ini": [
-       "d38b3c2921eac847d600c347c1f00029a0520dd3",
+       "7a0d07162bddbe1d122d55d0902706656172fb19",
        []
       ],
       "kind-of-widget-fallback-button-border-image-source-001.html.ini": [
@@ -353291,6 +353511,10 @@
        "a69098d6b22fcfe9dabbb0f61759b4223c264425",
        []
       ],
+      "kind-of-widget-fallback-button-border-inline-start-width-001.html.ini": [
+       "b1cea80e0f21f3e88315c1e145ade40e73496f98",
+       []
+      ],
       "kind-of-widget-fallback-button-border-left-color-001.html.ini": [
        "f7396275ce20d1a7fea4668395a260aecabe14ea",
        []
@@ -353411,6 +353635,10 @@
        "795ca976371b89fd021359a386742ef7d5da6133",
        []
       ],
+      "kind-of-widget-fallback-color-input-border-block-start-style-001.html.ini": [
+       "5843d8f05637459a841a046793f347a927a354a7",
+       []
+      ],
       "kind-of-widget-fallback-color-input-border-block-start-width-001.html.ini": [
        "cc9334f8b771c9c8df22b699e1eaf4531450fb82",
        []
@@ -353452,7 +353680,7 @@
        []
       ],
       "kind-of-widget-fallback-color-input-border-image-width-001.html.ini": [
-       "a9dfbfd40453f35ff423b6c702d0b830a92a9eff",
+       "de9d40548b72c4740bf79e34bcf79772ed8002cb",
        []
       ],
       "kind-of-widget-fallback-color-input-border-inline-end-color-001.html.ini": [
@@ -353575,6 +353803,10 @@
        "481e759a345b431ca4c940ad56d1c321014f0a84",
        []
       ],
+      "kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html.ini": [
+       "952b075d595ef9517ba0c5d4099f56c6dccbde19",
+       []
+      ],
       "kind-of-widget-fallback-input-button-border-bottom-right-radius-001.html.ini": [
        "e5b77da1c33818fa44c66ab82df4e33de34e6513",
        []
@@ -353619,6 +353851,10 @@
        "929277b17d7b3b3f4c40ffc6f17a64558a01b884",
        []
       ],
+      "kind-of-widget-fallback-input-button-border-inline-end-style-001.html.ini": [
+       "30bec5ac814622cb14efef51489173cafa2cc0f8",
+       []
+      ],
       "kind-of-widget-fallback-input-button-border-inline-end-width-001.html.ini": [
        "0d2bf0ece96238a422f0387b18deebdbc2da5d7f",
        []
@@ -353652,7 +353888,7 @@
        []
       ],
       "kind-of-widget-fallback-input-button-border-right-style-001.html.ini": [
-       "205bd2de33b162f5bf9b33c365f5ced343c3c863",
+       "3699085676ef779d1fcd00656e5e1e38205520fc",
        []
       ],
       "kind-of-widget-fallback-input-button-border-start-end-radius-001.html.ini": [
@@ -353664,7 +353900,7 @@
        []
       ],
       "kind-of-widget-fallback-input-button-border-top-color-001.html.ini": [
-       "17f90078fb80b1e33835fcd3334d69847d8b4128",
+       "abd90345dde29c27306d29e3432225174a1eddd6",
        []
       ],
       "kind-of-widget-fallback-input-button-border-top-left-radius-001.html.ini": [
@@ -353712,7 +353948,7 @@
        []
       ],
       "kind-of-widget-fallback-input-reset-border-block-end-style-001.html.ini": [
-       "ef3ca1bcab256fa76fc959f9498bc021525636b4",
+       "d8d0077986dd03717b8c0e17867fe8452f12249f",
        []
       ],
       "kind-of-widget-fallback-input-reset-border-block-end-width-001.html.ini": [
@@ -353808,7 +354044,7 @@
        []
       ],
       "kind-of-widget-fallback-input-reset-border-left-width-001.html.ini": [
-       "ff0b29ab59ae563df455bfe5da93a89014a3f08f",
+       "61b667c009190a3ee00a8ede993bd9fb65bd88b7",
        []
       ],
       "kind-of-widget-fallback-input-reset-border-right-color-001.html.ini": [
@@ -353880,7 +354116,7 @@
        []
       ],
       "kind-of-widget-fallback-input-search-border-block-end-style-001.html.ini": [
-       "bc2f1f21e83d4ef1372d1aabd48b63c7889a346a",
+       "e02f4983e9d71e5b2a8b1dde3cfe73b97fef88cb",
        []
       ],
       "kind-of-widget-fallback-input-search-border-block-end-width-001.html.ini": [
@@ -354056,7 +354292,7 @@
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-block-end-width-001.html.ini": [
-       "70f270ddefa8727508ccb562e4209103d26176b3",
+       "010490ba104c0d98f7d5b2b43f8af70f94bed321",
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-block-start-color-001.html.ini": [
@@ -354100,7 +354336,7 @@
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-image-outset-001.html.ini": [
-       "2cf2aa660160acc3d979a245bf1cf326ab7abcf1",
+       "a1b96e143c4cdac638f6468c6160984787fe452b",
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-image-repeat-001.html.ini": [
@@ -354148,11 +354384,11 @@
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-left-width-001.html.ini": [
-       "0d018de02db46ef85b5515a0f25fefe73375e67c",
+       "e5e43c0dd1669fa89225e55581759dc79d049df8",
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-right-color-001.html.ini": [
-       "7b33a89cc9b7f57129c906718255c8bb10661e67",
+       "f073c821f807b08163847c0da624f88a21bd8a0e",
        []
       ],
       "kind-of-widget-fallback-input-search-text-border-right-style-001.html.ini": [
@@ -354192,7 +354428,7 @@
        []
       ],
       "kind-of-widget-fallback-input-submit-background-attachment-001.html.ini": [
-       "298500b6b3c883e017ce68c53e193b2bf547ba59",
+       "47bdefd7ef06e0f44723bf6970b40f9b315ccf73",
        []
       ],
       "kind-of-widget-fallback-input-submit-background-clip-001.html.ini": [
@@ -354252,7 +354488,7 @@
        []
       ],
       "kind-of-widget-fallback-input-submit-border-bottom-style-001.html.ini": [
-       "05c50a97b32eb1645b8a3f11d03a98fca3efd069",
+       "888bda099a702e56f9f0ae13ac9cbece0ffa4b2e",
        []
       ],
       "kind-of-widget-fallback-input-submit-border-bottom-width-001.html.ini": [
@@ -354276,7 +354512,7 @@
        []
       ],
       "kind-of-widget-fallback-input-submit-border-image-slice-001.html.ini": [
-       "086df70b5364a068ab63ade24c4de6cad15dab34",
+       "d829dabe7e622282e749334848f8b887ae99e60d",
        []
       ],
       "kind-of-widget-fallback-input-submit-border-image-source-001.html.ini": [
@@ -354300,7 +354536,7 @@
        []
       ],
       "kind-of-widget-fallback-input-submit-border-inline-start-color-001.html.ini": [
-       "ae8a90eb7ca0dee3a43f804031250e7c8ab65cc3",
+       "14fc2f2b16d85470aacb0a2948d858ff7edfba91",
        []
       ],
       "kind-of-widget-fallback-input-submit-border-inline-start-style-001.html.ini": [
@@ -354520,7 +354756,7 @@
        []
       ],
       "kind-of-widget-fallback-input-text-border-top-left-radius-001.html.ini": [
-       "9916c48e0e4a60a7ff447d366fc874dc8d470308",
+       "f2ae6d782b2f20d66154e20472e9106645cf2f6f",
        []
       ],
       "kind-of-widget-fallback-input-text-border-top-right-radius-001.html.ini": [
@@ -354740,7 +354976,7 @@
        []
       ],
       "kind-of-widget-fallback-textarea-background-clip-001.html.ini": [
-       "f3ec7cbfe8dc21e888721e6d996827ba9d85a2c8",
+       "c50fb15e0d80a547e775f6e343720e04d9f63b96",
        []
       ],
       "kind-of-widget-fallback-textarea-background-image-001.html.ini": [
@@ -354748,7 +354984,7 @@
        []
       ],
       "kind-of-widget-fallback-textarea-background-origin-001.html.ini": [
-       "58f3d886d61a9cf84134481f11802ad38574c6e4",
+       "a0cfe1db09c9396e789f2ef8cb9deac9e975839d",
        []
       ],
       "kind-of-widget-fallback-textarea-background-position-001.html.ini": [
@@ -354768,7 +355004,7 @@
        []
       ],
       "kind-of-widget-fallback-textarea-border-block-end-width-001.html.ini": [
-       "265889dcb60e43e22219f2ef4a1b1dfec2055cae",
+       "b74280efe60a78c86e03c7e692bc0c6b93399c9e",
        []
       ],
       "kind-of-widget-fallback-textarea-border-block-start-color-001.html.ini": [
@@ -354796,7 +355032,7 @@
        []
       ],
       "kind-of-widget-fallback-textarea-border-bottom-style-001.html.ini": [
-       "d87f567b3b52527e549f6857a423c9bdc832d8fd",
+       "d3ee58a033443fa677cdac4ca2f8c0108ef323ab",
        []
       ],
       "kind-of-widget-fallback-textarea-border-bottom-width-001.html.ini": [
@@ -354812,7 +355048,7 @@
        []
       ],
       "kind-of-widget-fallback-textarea-border-image-outset-001.html.ini": [
-       "31493b6218e7b7ff744aecd7d7d671d9458a04df",
+       "ba791f49146477332fee489ce33f304a7c897469",
        []
       ],
       "kind-of-widget-fallback-textarea-border-image-repeat-001.html.ini": [
@@ -354860,11 +355096,11 @@
        []
       ],
       "kind-of-widget-fallback-textarea-border-left-style-001.html.ini": [
-       "a7589a2da476849bde95d9e5917c77bf9b731d69",
+       "e59b7c711e7c21a18208d7cc0098aaf3dda399b3",
        []
       ],
       "kind-of-widget-fallback-textarea-border-left-width-001.html.ini": [
-       "ca41888f413451f228d2fbcf9a99f7bc10c47b75",
+       "fb44367e5633244de2672e0a125f51d2efa8ac66",
        []
       ],
       "kind-of-widget-fallback-textarea-border-right-color-001.html.ini": [
@@ -356487,7 +356723,7 @@
       []
      ],
      "calc-min-height-block-1.html.ini": [
-      "74527934122d27814a8764c87e30492163717b66",
+      "f8262c4359347bf5426f0d7d2bb18a424791c0fd",
       []
      ],
      "calc-min-height.html.ini": [
@@ -358018,6 +358254,10 @@
       "24fab86d34003f68f37b2e98b79f0f1c7e3d220e",
       []
      ],
+     "will-change-stacking-context-clip-path-1.html.ini": [
+      "054cbbdfd663a2d072947e343992f08a7012e059",
+      []
+     ],
      "will-change-stacking-context-height-1.html.ini": [
       "3ac82d21b0da2ed510f41c48cced68bb68beac53",
       []
@@ -358320,6 +358560,10 @@
       "cfa2efec497e1cf35a7fef913a95e3cb5680d5ea",
       []
      ],
+     "abs-pos-non-replaced-vrl-150.xht.ini": [
+      "45910d5767f61a53e2de061deb7d2f77cbb22097",
+      []
+     ],
      "abs-pos-non-replaced-vrl-154.xht.ini": [
       "30f6e3769280f549cf0e8bf95143364d5949b015",
       []
@@ -358348,6 +358592,10 @@
       "60b0511a6616a006175a993b2fcac9454edea6ac",
       []
      ],
+     "abs-pos-non-replaced-vrl-192.xht.ini": [
+      "85a1d6ebca1fb784d5c1959e03dac4f8c886de64",
+      []
+     ],
      "abs-pos-non-replaced-vrl-202.xht.ini": [
       "b8ebd25efa1b862923acb7b58cb3f99739a8aa14",
       []
@@ -358524,6 +358772,10 @@
       "4fcb4f057fcd2001d35971ad66a4e13bb5300189",
       []
      ],
+     "bidi-override-012.html.ini": [
+      "950533f06a0ec59b98163f7d39ec4fabdc88278f",
+      []
+     ],
      "bidi-plaintext-001.html.ini": [
       "c62a2915fbdeb0c958bc5c33f82e2e4504325ea6",
       []
@@ -358612,6 +358864,10 @@
       "763bec577cb15b56aa42b55bfda9d6382bae354e",
       []
      ],
+     "block-flow-direction-vrl-026.xht.ini": [
+      "db1bb0814f29dd1e889d68dd6b7318c7fae7c4c2",
+      []
+     ],
      "block-override-002.html.ini": [
       "c8c97ac7719d38c40541fe6f1829b3a8fc93d601",
       []
@@ -359046,6 +359302,10 @@
       "bff5b4aa7eb009b2f10b545bd7e32c133be70039",
       []
      ],
+     "horizontal-rule-vrl-004.xht.ini": [
+      "356c2f822fc5c1c17832e3fb2fc9d4e075a48bd6",
+      []
+     ],
      "img-intrinsic-size-contribution-002.html.ini": [
       "bb04419b6b75eaa1462f0dbdd5fd771e4b21bc29",
       []
@@ -359419,7 +359679,7 @@
       []
      ],
      "percent-margin-vlr-007.xht.ini": [
-      "cabbcf089fed3c9152fd2533bbd2fecdd6404c8e",
+      "06dcbf61b1eafae5b1b2a02730edaf5f0b77a1c7",
       []
      ],
      "percent-margin-vrl-002.xht.ini": [
@@ -361290,6 +361550,10 @@
       "ce406436eed5b59dcf40958cbe8c927601659b04",
       []
      ],
+     "table-progression-vrl-002.html.ini": [
+      "ddbbd28695990416256f1475db9765db3e58718d",
+      []
+     ],
      "table-progression-vrl-003.html.ini": [
       "057fcb2dfcfc326d8e5ce3e3ababbbd5631d3859",
       []
@@ -363221,7 +363485,7 @@
       []
      ],
      "css-filters-animation-sepia.html.ini": [
-      "3a6c6bb575258aaf5b3ae19cfff2883b47b4aea4",
+      "cd84f605194aa71a851f7c166eb8f1df960740af",
       []
      ],
      "drop-shadow-clipped-001.html.ini": [
@@ -363972,6 +364236,10 @@
        []
       ]
      },
+     "svg-feimage-001.html.ini": [
+      "10ace1d618549c2200189fe57eedb30f520fe329",
+      []
+     ],
      "svg-feoffset-001.html.ini": [
       "b8aa56fe6abacce7bbf0320a053b6798a89b2461",
       []
@@ -364539,7 +364807,7 @@
       []
      ],
      "offset-path-shape-rect-002.html.ini": [
-      "9a199c0b978a93f57f9a37e8896d43dbb9648cdf",
+      "c4d62e114dd432c0be426cb7f30a3255d08711f4",
       []
      ],
      "offset-path-shape-rect-003-ref.html": [
@@ -365142,6 +365410,10 @@
       "64fb0904651a94e5de9e39fd682a5455ddef454e",
       []
      ],
+     "dir-style-02b.html.ini": [
+      "d55f31d74d2e67754479221402eb1753893a9e61",
+      []
+     ],
      "dir-style-03-ref.html": [
       "8c2a60745a87a29c17ce9d5464aa5a0bf6a56ebe",
       []
@@ -365681,7 +365953,7 @@
       []
      ],
      "nth-last-child-of-nesting.html.ini": [
-      "df4895bf239384daa434a291cd6636f74e55ea00",
+      "948d89f8ad8f57e96137655b974773ed5f33487a",
       []
      ],
      "nth-last-child-of-style-sharing-1-ref.html": [
@@ -365869,6 +366141,10 @@
        "b21736c6ec875e5a52428f1b2ea174a6a75d3895",
        []
       ],
+      "css3-modsel-175c.xml.ini": [
+       "e7c78f4fe5756baa0ac68eceb36d5c96eb6a00b6",
+       []
+      ],
       "css3-modsel-179.xml.ini": [
        "badbf9fb585dc62712ac3defb6b23b1ceb1ff84b",
        []
@@ -369945,6 +370221,10 @@
      "d64e642ce72c20b21a6f2966ec9a4f9ca5951f4a",
      []
     ],
+    "observe-svg-image.html.ini": [
+     "9f9adbb2504834f03208166e6255d8cd6fd47f8c",
+     []
+    ],
     "observe-text.html.ini": [
      "3288b8eba003825d52a34e67035ffff9447b342a",
      []
@@ -369953,6 +370233,10 @@
      "b146cbc875e21a63fa1fad7e320d0e056191954f",
      []
     ],
+    "rectangular-image.html.ini": [
+     "a09ff8220bb4e5906f366a6b259f59fde544b694",
+     []
+    ],
     "redirects-tao-star.html.ini": [
      "46f01d42ea3db248c2502c6140f7460ee1589c66",
      []
@@ -373152,7 +373436,7 @@
        []
       ],
       "scheme-blob.sub.any.js.ini": [
-       "db53cee6c654b9e039416e3eb44a5cef2cbf3777",
+       "9fe8e5e98a069598fc2bddfe1b3909b5a3acd2e7",
        []
       ],
       "scheme-blob.sub.any.worker-expected.txt": [
@@ -382830,22 +383114,6 @@
        ]
       },
       "text": {
-       "2d.text.draw.baseline.hanging-expected.txt": [
-        "77c808753698d96427e9dc4f901b775cfde58ecf",
-        []
-       ],
-       "2d.text.draw.baseline.hanging.html.ini": [
-        "4b933de9c99d2a37e9a55620fd4e497b4bcb386d",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic-expected.txt": [
-        "6ab15d63f9c02a1fae79703a9f491ec9937e112f",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic.html.ini": [
-        "b099ac007cab7beb5bff1707d62768c8d77b1ecb",
-        []
-       ],
        "2d.text.draw.fill.basic.png": [
         "70d7b046cb226cfcb2bfeebe3477d3b580d8270a",
         []
@@ -382906,10 +383174,6 @@
         "af9c736aea7f9b20f4fd09522a8aa2dd25a11ef1",
         []
        ],
-       "2d.text.measure.baselines-expected.txt": [
-        "fb1758f8793dc1b179dae4ff48a5be96710410c5",
-        []
-       ],
        "2d.text.measure.baselines.html.ini": [
         "b9ed0e903b22e680d97a28a4a9b386d748ec6f23",
         []
@@ -383436,38 +383700,6 @@
        ]
       },
       "text": {
-       "2d.text.draw.baseline.hanging-expected.txt": [
-        "3994e422ffde7a9137fa1c72fdb5f837c41de0bf",
-        []
-       ],
-       "2d.text.draw.baseline.hanging.html.ini": [
-        "40e0d4e86311b1a04cbd332496fedc67510f01c2",
-        []
-       ],
-       "2d.text.draw.baseline.hanging.worker-expected.txt": [
-        "dcc1552403b4ca0663f787e5cc22e2e70926fc28",
-        []
-       ],
-       "2d.text.draw.baseline.hanging.worker.js.ini": [
-        "8d788bcb686f5f97acd63c8f23065206467d3e5a",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic-expected.txt": [
-        "88ea146f86d5e262d660fa57305c5c2eea1729cc",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic.html.ini": [
-        "e47bad1da66cd1b2ec236672055aea6365b07307",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic.worker-expected.txt": [
-        "dcc1552403b4ca0663f787e5cc22e2e70926fc28",
-        []
-       ],
-       "2d.text.draw.baseline.ideographic.worker.js.ini": [
-        "7cd81bd2b29001bdaef2c35f2cea0de02d95a4bf",
-        []
-       ],
        "2d.text.draw.fill.basic.png": [
         "70d7b046cb226cfcb2bfeebe3477d3b580d8270a",
         []
@@ -383544,18 +383776,10 @@
         "4033c3ff76e62c368e3b5d4b8c0efdf21a2be242",
         []
        ],
-       "2d.text.measure.baselines-expected.txt": [
-        "fb1758f8793dc1b179dae4ff48a5be96710410c5",
-        []
-       ],
        "2d.text.measure.baselines.html.ini": [
         "a61e2c6dc20ce76fddb218cbfce12a241a5f3a54",
         []
        ],
-       "2d.text.measure.baselines.worker-expected.txt": [
-        "fb1758f8793dc1b179dae4ff48a5be96710410c5",
-        []
-       ],
        "2d.text.measure.baselines.worker.js.ini": [
         "c27da4d96f009e20b8909af290a301100a71a03a",
         []
@@ -385208,6 +385432,14 @@
         "142c407d10ddc21eefa546e8e7e81823e01ed5ce",
         []
        ],
+       "dir-assorted.window-expected.txt": [
+        "1e523a77beda53cd19b7480c99468392bbeeb9b7",
+        []
+       ],
+       "dir-assorted.window.js.ini": [
+        "2332d38b0df867d94e96a027d673773b00b0640d",
+        []
+       ],
        "dir-slots-directionality.tentative-expected.txt": [
         "73de097c9abd85cf24c816733c1d49bc15d25023",
         []
@@ -385609,7 +385841,7 @@
         []
        ],
        "dir-isolation-004a.html.ini": [
-        "c73d974ec6b86ae00c5a2748edddbf4be564372e",
+        "6b9e845eb7ec40e13ee1f2797c75fe2e72ac61c8",
         []
        ],
        "dir-isolation-004b.html.ini": [
@@ -385813,7 +386045,7 @@
       []
      ],
      "idlharness.https_exclude=(Document_Window_HTML._)-expected.txt": [
-      "ad1f5d2eac1f5897b1382a0abacb9f334ab15fc7",
+      "b39df7327bfb7567c27df8bb53b1dadc85ce7285",
       []
      ],
      "idlharness.https_include=(Document_Window)-expected.txt": [
@@ -385825,7 +386057,7 @@
       []
      ],
      "idlharness.worker-expected.txt": [
-      "8ea520aeae80ed1a61d357dcea4ea5517fee6959",
+      "9c1ff6aab2e5ffcb3913fc413ab071f8c69f6a62",
       []
      ],
      "idlharness.worker.js.ini": [
@@ -388989,7 +389221,7 @@
         []
        ],
        "contenteditable-overflow-height.html.ini": [
-        "6c4c6512f8fd819cbc824326bae578fb7ef2a921",
+        "af4a23f98d5d3f876691abb3805b599c82d02fca",
         []
        ],
        "contenteditable-with-empty-block-ref.html": [
@@ -390981,7 +391213,7 @@
         []
        ],
        "option-with-br.html.ini": [
-        "3eecb68035f77b8e7fcc72cb1669048a9617dfb5",
+        "1f5efed037cc628a1074ed5007e2fc68544b74f1",
         []
        ],
        "select-multiple-covered-by-abspos-ref.html": [
@@ -391297,7 +391529,7 @@
         []
        ],
        "option-label-and-text.html.ini": [
-        "d5a17df8978b5b9b598eb11c474d7cdfffbbc154",
+        "38a6d29a12787887c0f16dd1d49ae4945e2d6373",
         []
        ],
        "option-label-ref.html": [
@@ -392889,7 +393121,7 @@
         []
        ],
        "sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini": [
-        "cb1de3a3168be6fac5052cfb4eda3bba261ed219",
+        "6b38ca4849da6a3aa161e78954cf4ef6b65c0815",
         []
        ],
        "sandbox-top-navigation-child.tentative.sub.window.js.ini": [
@@ -394582,6 +394814,10 @@
         "40b72cf5ef7c4b11d677d334778726042b33e11f",
         []
        ],
+       "top-layer-containing-block.html.ini": [
+        "25d45d95035509064e608676087a778c18667976",
+        []
+       ],
        "top-layer-display-none-ref.html": [
         "1880668cc3b9eecb819b897a6ee579e800640e5b",
         []
@@ -394698,6 +394934,14 @@
        }
       },
       "links-created-by-a-and-area-elements": {
+       "non-special-url-getter-setter.window-expected.txt": [
+        "a018b60a9b5a9e7dd27ef36b9579be940f40edb0",
+        []
+       ],
+       "non-special-url-getter-setter.window.js.ini": [
+        "919f2a9d4d45f90c051845915cf4ab56bd0c2cd4",
+        []
+       ],
        "support": {
         "noopener-popup.html": [
          "2057dbf0beab37916a44d57c5ea234f1ac5810b5",
@@ -397193,7 +397437,7 @@
         []
        ],
        "bdi-neutral-number.html.ini": [
-        "b062022ec49562ca9a680b1ce84a20eb00bec2a4",
+        "8661aca1c4a9d077ce9151de4d782ff6194f52a8",
         []
        ],
        "bdi-neutral-separate-ref.html": [
@@ -400722,11 +400966,11 @@
        []
       ],
       "multiTouchPoints.html.ini": [
-       "e8064d6d9c6cff619bd966227fd068aae32f4ff4",
+       "cea16c2a33436534a5e00b8ffad2a361a859b153",
        []
       ],
       "multiTouchPointsReleaseFirstPoint.html.ini": [
-       "3c7e4ebac085dd06b175418f238160615dbeab73",
+       "62b42a24c6c8fa10c850277b7d6bda15bc63493c",
        []
       ],
       "multiTouchPointsSimultaneousMove.html.ini": [
@@ -400902,7 +401146,7 @@
      []
     ],
     "input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini": [
-     "9fb6201cd72cf1ca30ae3eab5f1b906796db4638",
+     "490878ed8dd8edb6c2b1de59fa15369398e75926",
      []
     ],
     "input-events-get-target-ranges-deleting-range-across-editing-host-boundaries.tentative-expected.txt": [
@@ -402489,6 +402733,10 @@
      "b98bdee5961ddf03a561e5fb0bb95abfb9103048",
      []
     ],
+    "image-removed-before-load.html.ini": [
+     "b8621cbf3afaa3e41aff78d5f8da4dee576c2ff9",
+     []
+    ],
     "image-src-change.html.ini": [
      "67ce6e9692504f0b655e74766af8fc9a1b91969f",
      []
@@ -402955,7 +403203,7 @@
       []
      ],
      "loaf-iframe-popup.html.ini": [
-      "bc47911ef1a222884460aefd2f7dcd66268c5ea0",
+      "0d9f2e01d78c73c4b0bf228bd9742b0cbf34981f",
       []
      ],
      "loaf-visibility.html.ini": [
@@ -403209,6 +403457,10 @@
        "fe2f4fa7b1899e5d1114e3a89b14dc96843ef070",
        []
       ],
+      "frac-color-002.html.ini": [
+       "03e5eb329efe5c47b02a2ee30161e4f41cd7f6e4",
+       []
+      ],
       "frac-created-dynamically-2-ref.html": [
        "d389906112f5028b28b0f1e89c54c12e833238a5",
        []
@@ -403622,7 +403874,7 @@
        []
       ],
       "operator-dictionary-arabic-001.html.ini": [
-       "bc4b5befe18924dd2a7ef4bf441d1b71a5549f1d",
+       "2c3e5fde386923966ee2da155161dacc3c0a7514",
        []
       ],
       "operator-dictionary-arabic-002-ref.html": [
@@ -403658,7 +403910,7 @@
        []
       ],
       "dynamic-radical-paint-invalidation-001.html.ini": [
-       "c75514ca5f66d2c4d4e35cdeaa9c9f194e1376a0",
+       "42d277de6573a024dc5476fc965ac508e56ea2c0",
        []
       ],
       "empty-msqrt-ref.html": [
@@ -407283,7 +407535,7 @@
     ],
     "fcp-only": {
      "fcp-document-opacity-image.html.ini": [
-      "6a13eef9813694c5c1b3f09f8c7dbea997a09ce0",
+      "62c15a8ec16ecec66f648e997b15c67f74ee1150",
       []
      ],
      "fcp-document-opacity-text.html.ini": [
@@ -408633,7 +408885,7 @@
       []
      ],
      "pointerevent_mouseevent_key_pressed.html.ini": [
-      "7cd03061b23fba600800774b9c17ffb9970b4a61",
+      "0ba25d87fdaf297c5c50ad83f65d01a16b3955fb",
       []
      ],
      "pointerevent_touch-action_two-finger_interaction.html.ini": [
@@ -410444,7 +410696,7 @@
      ],
      "svg": {
       "external-stylesheet.html.ini": [
-       "11ae41455ff58186d02eb4013a541ecc8dc1d5dc",
+       "9c0708fdc0559187b9d0555e46132cd1451fbc81",
        []
       ],
       "inline-style-with-differentorigin-base-tag.tentative.html.ini": [
@@ -411596,7 +411848,7 @@
      []
     ],
     "content-type-parsing.html.ini": [
-     "be6d7867963720307f77ded0e193e0ebe8dac40e",
+     "7806773855e0caf124ccdde4d6e1817abb5900e2",
      []
     ],
     "frameset-timing.html": [
@@ -412969,6 +413221,10 @@
       []
      ]
     },
+    "scroll-to-text-fragment-security.sub.html.ini": [
+     "0eae9e4a1bcce562e272020952ad527369218d38",
+     []
+    ],
     "scroll-to-text-fragment-target.html": [
      "b2be85132cb8f2f2c14c82bf1854c3130f375c96",
      []
@@ -416647,7 +416903,7 @@
       []
      ],
      "focus-navigation-with-delegatesFocus.html.ini": [
-      "c7c0948320fa97f8b91dc361dacf2129001e8061",
+      "65cfe17129134552a42cea469d894b2efe1e387c",
       []
      ],
      "focus-navigation.html.ini": [
@@ -422498,7 +422754,7 @@
      []
     ],
     "urlsearchparams-delete.any-expected.txt": [
-     "b8d900c0da06fa1264392a07d8b36dda0d242ad4",
+     "3a12d469bf22b793e2835320a452867e8f96acec",
      []
     ],
     "urlsearchparams-delete.any.js.ini": [
@@ -422506,7 +422762,7 @@
      []
     ],
     "urlsearchparams-delete.any.worker-expected.txt": [
-     "b8d900c0da06fa1264392a07d8b36dda0d242ad4",
+     "3a12d469bf22b793e2835320a452867e8f96acec",
      []
     ],
     "urlsearchparams-size.any.js.ini": [
@@ -424125,7 +424381,7 @@
       ]
      },
      "reuse-web-bundle-resource.https.tentative.html.ini": [
-      "c43d33dc5ec1c9daab4a5f77ee453eb89a638991",
+      "551306e412bf82c2bfa8673eb21201da441f3734",
       []
      ]
     }
@@ -424890,7 +425146,7 @@
      []
     ],
     "full-cycle-test.https.any.js.ini": [
-     "510922e3b26e89143407aef112d9c96d72ded9ea",
+     "36fb34679d8af7ca22a6e9c665a0bdb97767ad62",
      []
     ],
     "h264.annexb": [
@@ -424934,7 +425190,7 @@
      []
     ],
     "reconfiguring-encoder.https.any.js.ini": [
-     "27b2436f84c230f08a340302721d72267ccfd6e9",
+     "9d1ecd288c2bcfa37ddf420376ccf34b8f605e44",
      []
     ],
     "serialization.crossAgentCluster.serviceworker.js": [
@@ -424966,7 +425222,7 @@
      []
     ],
     "temporal-svc-encoding.https.any.js.ini": [
-     "d217851c95cc627f17fd89a788b55463051d9025",
+     "8f786b70f26f26a5b4815678d7d9f5f89dca63eb",
      []
     ],
     "utils.js": [
@@ -424998,7 +425254,7 @@
      []
     ],
     "video-encoder-h264.https.any.js.ini": [
-     "092c9fc4faedab79299046c0a38bf71d9f4dba18",
+     "70036c5c80e72dfe481ceaa6a2ca5945c64eef16",
      []
     ],
     "video-encoder-utils.js": [
@@ -470768,8 +471024,15 @@
        {}
       ]
      ],
+     "anchor-name-004.html": [
+      "ebe96df74016c95df5335e195b71b6b7c2827947",
+      [
+       null,
+       {}
+      ]
+     ],
      "anchor-name-basics.html": [
-      "1d88b9413770b8a55de7f890bc1e85212f2eb0c9",
+      "9523ee87725ae40922727f5d9933c66a16d27be5",
       [
        null,
        {}
@@ -485228,6 +485491,13 @@
        ]
       ]
      },
+     "balance-grid-001.html": [
+      "5c81b56b4a5e2173e0605e349a4904cd5950c5a5",
+      [
+       null,
+       {}
+      ]
+     ],
      "filter-with-abspos.html": [
       "763bf1fc5a13ba86f440155aa0373357bf7782cb",
       [
@@ -504121,6 +504391,20 @@
        {}
       ]
      ],
+     "display-mode.html": [
+      "e6633de856c5f438e47ebe1d05b1593753948fbf",
+      [
+       null,
+       {}
+      ]
+     ],
+     "display-mode.tentative.html": [
+      "0762d065c339e0c962692ca07e4575e631f7fa3c",
+      [
+       null,
+       {}
+      ]
+     ],
      "dynamic-range.html": [
       "75b3015b8e76298767c19dfbaf775a53c8d9b706",
       [
@@ -580072,6 +580356,13 @@
          {}
         ]
        ],
+       "dir-assorted.window.js": [
+        "64f99724a95ca12bc9e8c99060d507dd78be3744",
+        [
+         "html/dom/elements/global-attributes/dir-assorted.window.html",
+         {}
+        ]
+       ],
        "dir-auto-div-append-child.html": [
         "e69f64b3a9abdf3dd4e8184897f1c2ad01b9f314",
         [
@@ -592768,6 +593059,27 @@
          {}
         ]
        ],
+       "non-parsable-url-getter-setter.window.js": [
+        "587f9b9c46359b46740f1a9c22c40b8530d1b5b7",
+        [
+         "html/semantics/links/links-created-by-a-and-area-elements/non-parsable-url-getter-setter.window.html",
+         {}
+        ]
+       ],
+       "non-special-opaque-path-url-getter-setter.window.js": [
+        "9549c6e2a6f639b54108dad2b5f3f6c414c5ca06",
+        [
+         "html/semantics/links/links-created-by-a-and-area-elements/non-special-opaque-path-url-getter-setter.window.html",
+         {}
+        ]
+       ],
+       "non-special-url-getter-setter.window.js": [
+        "de528a2f973d137b8dba715e669cd49e31b529da",
+        [
+         "html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.html",
+         {}
+        ]
+       ],
        "target_blank_implicit_noopener.html": [
         "73eebaff70f09bb98a3b7dd6b59f9357a3ab0668",
         [
@@ -611475,7 +611787,7 @@
      ]
     ],
     "MediaStreamTrack-MediaElement-disabled-video-is-black.https.html": [
-     "f920eccdf2bcdfd330b86ce92565afe8c611d557",
+     "9215f931f0ce7d3c22ad006901595b1f8a58ebc7",
      [
       null,
       {
@@ -639376,7 +639688,7 @@
        {}
       ]
      ],
-     "scroll-timeline-shorthand.tentative.html": [
+     "scroll-timeline-shorthand.html": [
       "0c8a47ae20d1894a05ed5b615d1cc7d74ebe881f",
       [
        null,
@@ -639537,8 +639849,8 @@
        {}
       ]
      ],
-     "view-timeline-shorthand.tentative.html": [
-      "e5bf8822932177d621ba80ef42cc2b24ae8bc8ae",
+     "view-timeline-shorthand.html": [
+      "c14c1c880678102ab031a480d28f0fabc2bf9ed6",
       [
        null,
        {}
@@ -662397,7 +662709,7 @@
      ]
     ],
     "urlsearchparams-delete.any.js": [
-     "f9c623b90b175d8811ed7ce3a6bc5e569a730ad7",
+     "c597142c51d5bf3cdea286cf7a6e191d4e3be828",
      [
       "url/urlsearchparams-delete.any.html",
       {}
@@ -662441,7 +662753,7 @@
      ]
     ],
     "urlsearchparams-has.any.js": [
-     "54cbf286db4a3d21fb764a1c93b7a16d34c47486",
+     "2133a5da2f8b91cbb070436f74be9a2b84f32699",
      [
       "url/urlsearchparams-has.any.html",
       {}
@@ -681116,15 +681428,6 @@
       }
      ]
     ],
-    "codec-specific-metadata.https.html": [
-     "bef61b39f3090fc88472abf60d7604a19fc96ffa",
-     [
-      null,
-      {
-       "testdriver": true
-      }
-     ]
-    ],
     "idlharness.https.window.js": [
      "2c6ef19ca82a56c799b97b5eb9af3edb900a40b5",
      [
@@ -681233,7 +681536,7 @@
      ]
     ],
     "set-metadata.https.html": [
-     "712971a62619236641c69445fd1aa99745813e5b",
+     "037fefcab3bd442de97d945c8c7539b2105e80d5",
      [
       null,
       {
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-001.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-001.xht.ini
index 8bdb7fa4..7e14eac 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-001.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-001.xht.ini
@@ -1,3 +1,4 @@
 [background-applies-to-001.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-007.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-007.xht.ini
index de89fe4..0ec6da6 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-007.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-applies-to-007.xht.ini
@@ -1,3 +1,4 @@
 [background-applies-to-007.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-bg-pos-208.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-bg-pos-208.xht.ini
new file mode 100644
index 0000000..f8928ac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-bg-pos-208.xht.ini
@@ -0,0 +1,3 @@
+[background-bg-pos-208.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-070.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-070.xht.ini
new file mode 100644
index 0000000..ea67b4c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-070.xht.ini
@@ -0,0 +1,3 @@
+[background-color-070.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-072.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-072.xht.ini
new file mode 100644
index 0000000..58a923b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-072.xht.ini
@@ -0,0 +1,4 @@
+[background-color-072.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-117.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-117.xht.ini
new file mode 100644
index 0000000..6b39e66
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-117.xht.ini
@@ -0,0 +1,3 @@
+[background-color-117.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-applies-to-003.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-applies-to-003.xht.ini
index b527f574..e53edbb 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-applies-to-003.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-color-applies-to-003.xht.ini
@@ -1,3 +1,4 @@
 [background-color-applies-to-003.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-image-applies-to-012.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-image-applies-to-012.xht.ini
index b7ae63c..43d6f69 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-image-applies-to-012.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-image-applies-to-012.xht.ini
@@ -1,3 +1,4 @@
 [background-image-applies-to-012.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-position-053.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-position-053.xht.ini
new file mode 100644
index 0000000..791a5d4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/backgrounds/background-position-053.xht.ini
@@ -0,0 +1,3 @@
+[background-position-053.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-bottom-color-018.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-bottom-color-018.xht.ini
index 08dfedb..0e86a3b 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-bottom-color-018.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-bottom-color-018.xht.ini
@@ -1,3 +1,4 @@
 [border-bottom-color-018.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-left-width-applies-to-004.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-left-width-applies-to-004.xht.ini
index f84fff9..0ffd882 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-left-width-applies-to-004.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-left-width-applies-to-004.xht.ini
@@ -1,3 +1,4 @@
 [border-left-width-applies-to-004.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-right-width-applies-to-003.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-right-width-applies-to-003.xht.ini
index 5428ba56..f0639cf 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-right-width-applies-to-003.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-right-width-applies-to-003.xht.ini
@@ -1,3 +1,4 @@
 [border-right-width-applies-to-003.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-shorthands-001.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-shorthands-001.xht.ini
new file mode 100644
index 0000000..9811077
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-shorthands-001.xht.ini
@@ -0,0 +1,3 @@
+[border-shorthands-001.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-018.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-018.xht.ini
index 31e0aa5..be8f247 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-018.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-018.xht.ini
@@ -1,3 +1,4 @@
 [border-top-018.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-color-046.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-color-046.xht.ini
index d50efd4c..a05d1be 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-color-046.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-top-color-046.xht.ini
@@ -1,3 +1,4 @@
 [border-top-color-046.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-028.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-028.xht.ini
index 9019775..26b9813f 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-028.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-028.xht.ini
@@ -1,4 +1,5 @@
 [floats-028.xht]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-101.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-101.xht.ini
new file mode 100644
index 0000000..3a37ec8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/floats-101.xht.ini
@@ -0,0 +1,3 @@
+[floats-101.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/margin-collapse-157.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/margin-collapse-157.xht.ini
new file mode 100644
index 0000000..4c6e018
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/margin-collapse-157.xht.ini
@@ -0,0 +1,3 @@
+[margin-collapse-157.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht.ini
index 01aa1c6..c2bb17b 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht.ini
@@ -1,3 +1,4 @@
 [block-formatting-context-height-002.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/height-applies-to-004.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/height-applies-to-004.xht.ini
index 1667eca..d4074f53 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/height-applies-to-004.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/height-applies-to-004.xht.ini
@@ -1,3 +1,4 @@
 [height-applies-to-004.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini
index 307a2e6f..85a070d 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini
@@ -1,3 +1,4 @@
 [inline-replaced-width-006.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/max-height-034.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/max-height-034.xht.ini
index 9998730..bfc7b452 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/max-height-034.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/max-height-034.xht.ini
@@ -1,3 +1,4 @@
 [max-height-034.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-009.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-009.xht.ini
index abf65aaa..ad7e900a 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-009.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-009.xht.ini
@@ -1,3 +1,4 @@
 [min-width-applies-to-009.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-013.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-013.xht.ini
new file mode 100644
index 0000000..88ec5504
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/min-width-applies-to-013.xht.ini
@@ -0,0 +1,3 @@
+[min-width-applies-to-013.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/width-applies-to-002.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/width-applies-to-002.xht.ini
index 4ad5c79..70ab000 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/width-applies-to-002.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/normal-flow/width-applies-to-002.xht.ini
@@ -1,3 +1,4 @@
 [width-applies-to-002.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht.ini
index c28f777..e65955f 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht.ini
@@ -1,3 +1,4 @@
 [absolute-non-replaced-height-006.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-011.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-011.xht.ini
new file mode 100644
index 0000000..5f22e61
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-011.xht.ini
@@ -0,0 +1,3 @@
+[absolute-non-replaced-height-011.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht.ini
index 0280900..361f344f 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht.ini
@@ -1,3 +1,4 @@
 [absolute-non-replaced-max-height-010.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-109.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-109.xht.ini
new file mode 100644
index 0000000..7060447
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-109.xht.ini
@@ -0,0 +1,3 @@
+[left-109.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-110.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-110.xht.ini
new file mode 100644
index 0000000..8300c63
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/left-110.xht.ini
@@ -0,0 +1,3 @@
+[left-110.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/top-103.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/top-103.xht.ini
index f34c122..ee373b4 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/top-103.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/top-103.xht.ini
@@ -1,3 +1,4 @@
 [top-103.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/tables/table-cell-001.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/tables/table-cell-001.xht.ini
index 1b9023e5..0f9567ce 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/tables/table-cell-001.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/tables/table-cell-001.xht.ini
@@ -1,3 +1,4 @@
 [table-cell-001.xht]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/text/white-space-processing-014.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/text/white-space-processing-014.xht.ini
new file mode 100644
index 0000000..a500462
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/text/white-space-processing-014.xht.ini
@@ -0,0 +1,3 @@
+[white-space-processing-014.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-align/baseline-of-scrollable-2.html.ini b/third_party/blink/web_tests/external/wpt/css/css-align/baseline-of-scrollable-2.html.ini
index 16b2ca3f..3d92d3d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-align/baseline-of-scrollable-2.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-align/baseline-of-scrollable-2.html.ini
@@ -1,3 +1,4 @@
 [baseline-of-scrollable-2.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-space-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-space-001.html.ini
index 350b28ce..1ca8fc9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-space-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-space-001.html.ini
@@ -1,3 +1,4 @@
 [border-image-space-001.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/box-shadow/slice-block-fragmentation-003.html.ini b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/box-shadow/slice-block-fragmentation-003.html.ini
index 43a6034..527b8435 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/box-shadow/slice-block-fragmentation-003.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/box-shadow/slice-block-fragmentation-003.html.ini
@@ -1,4 +1,5 @@
 [slice-block-fragmentation-003.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/fieldset-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/fieldset-002.html.ini
new file mode 100644
index 0000000..c0cf2133
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/fieldset-002.html.ini
@@ -0,0 +1,3 @@
+[fieldset-002.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/single-line-row-flex-fragmentation-029.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/single-line-row-flex-fragmentation-029.html.ini
index ce7d04f..f67f03c3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/single-line-row-flex-fragmentation-029.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/single-line-row-flex-fragmentation-029.html.ini
@@ -1,3 +1,4 @@
 [single-line-row-flex-fragmentation-029.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/float-in-self-collapsing-block-000.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/float-in-self-collapsing-block-000.html.ini
new file mode 100644
index 0000000..6ef5b1a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/float-in-self-collapsing-block-000.html.ini
@@ -0,0 +1,3 @@
+[float-in-self-collapsing-block-000.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-overflow-001.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-overflow-001.tentative.html.ini
new file mode 100644
index 0000000..8877df8f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-overflow-001.tentative.html.ini
@@ -0,0 +1,3 @@
+[monolithic-overflow-001.tentative.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-066.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-066.html.ini
new file mode 100644
index 0000000..94d37fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-066.html.ini
@@ -0,0 +1,3 @@
+[out-of-flow-in-multicolumn-066.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/table/table-cell-expansion-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-break/table/table-cell-expansion-001.html.ini
new file mode 100644
index 0000000..59e716b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/table/table-cell-expansion-001.html.ini
@@ -0,0 +1,3 @@
+[table-cell-expansion-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-layer-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-layer-004.html.ini
new file mode 100644
index 0000000..2be680ef36
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-layer-004.html.ini
@@ -0,0 +1,3 @@
+[revert-layer-004.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/lch-006.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/lch-006.html.ini
index 24414578..dda796af 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/lch-006.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/lch-006.html.ini
@@ -1,3 +1,4 @@
 [lch-006.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function.html b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function.html
index c1ca4749..bb5d90fa 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function.html
@@ -11,6 +11,7 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/computed-testcommon.js"></script>
+<script src="/css/support/color-testcommon.js"></script>
 </head>
 <body>
 <div id="target"></div>
@@ -27,404 +28,404 @@
     }
 
     // hsl()
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.33 0.36 0.24)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`);
-    test_computed_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `color(srgb 0.240625 0.2875 0.2125)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `color(srgb 0.240625 0.2875 0.2125)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `color(srgb 0.4375 0.415625 0.2625)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `color(srgb 0.4375 0.415625 0.2625)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `color(srgb 0.4375 0.415625 0.2625 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.33 0.36 0.24)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `color(srgb 0.240625 0.2875 0.2125)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `color(srgb 0.240625 0.2875 0.2125)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `color(srgb 0.4375 0.415625 0.2625)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `color(srgb 0.4375 0.415625 0.2625)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `color(srgb 0.4375 0.415625 0.2625 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28)`);
 
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.372222 0.411111 0.255556 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.42346 0.402889 0.258893 / 0.85)`);
-    test_computed_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.35)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.52 0.4 0.28 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.372222 0.411111 0.255556 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.42346 0.402889 0.258893 / 0.85)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.52 0.4 0.28 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in hsl, transparent, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, transparent 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.9)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / 0), hsl(30deg 30% 40%))`, `color(srgb 0.46 0.52 0.28 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / 0) 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.436 0.28 / 0.9)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, transparent, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, transparent 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.9)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / 0), hsl(30deg 30% 40%))`, `color(srgb 0.46 0.52 0.28 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / 0) 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.436 0.28 / 0.9)`);
 
-    test_computed_value(`color`, `color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
 
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
-    test_computed_value(`color`, `color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
 
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
-    test_computed_value(`color`, `color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
+    fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
 
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
-    test_computed_value(`color`, `color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
+    fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
 
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
-    test_computed_value(`color`, `color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`);
+    fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`);
 
-    test_computed_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color(srgb none none none)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color(srgb 0.88 0.8 0.72)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color(srgb 0.32 0.48 0.32)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, `color(srgb 0.66 0.72 0.48)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, `color(srgb 0.44 0.48 0.32)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, `color(srgb 0.68 0.6 0.52)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color(srgb none none none)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color(srgb 0.88 0.8 0.72)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color(srgb 0.32 0.48 0.32)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, `color(srgb 0.66 0.72 0.48)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, `color(srgb 0.44 0.48 0.32)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, `color(srgb 0.68 0.6 0.52)`);
 
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, `color(srgb 0.56 0.56 0.24)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, `color(srgb 0.56 0.56 0.24 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, `color(srgb 0.56 0.56 0.24 / none)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, `color(srgb 0.56 0.56 0.24)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, `color(srgb 0.56 0.56 0.24 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, `color(srgb 0.56 0.56 0.24 / none)`);
 
     // hwb()
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`);
-    test_computed_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `color(srgb 0.375 0.75 0.15)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `color(srgb 0.375 0.75 0.15)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `color(srgb 0.65 0.6 0.25)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `color(srgb 0.65 0.6 0.25)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `color(srgb 0.65 0.6 0.25 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `color(srgb 0.375 0.75 0.15)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `color(srgb 0.375 0.75 0.15)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `color(srgb 0.65 0.6 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `color(srgb 0.65 0.6 0.25)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `color(srgb 0.65 0.6 0.25 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`);
 
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.558333 0.666667 0.233333 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `color(srgb 0.373026 0.757895 0.142105 / 0.95)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `color(srgb 0.3825 0.72 0.18 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.35)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.6 0.45 0.3 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.558333 0.666667 0.233333 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `color(srgb 0.373026 0.757895 0.142105 / 0.95)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `color(srgb 0.3825 0.72 0.18 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.6 0.45 0.3 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in hwb, transparent, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hwb, transparent 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.9)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / 0), hwb(30deg 30% 40%))`, `color(srgb 0.525 0.6 0.3 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / 0) 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.495 0.3 / 0.9)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, transparent, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, transparent 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.9)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / 0), hwb(30deg 30% 40%))`, `color(srgb 0.525 0.6 0.3 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / 0) 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.495 0.3 / 0.9)`);
 
-    test_computed_value(`color`, `color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
 
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
-    test_computed_value(`color`, `color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
 
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
-    test_computed_value(`color`, `color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
+    fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
 
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
-    test_computed_value(`color`, `color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
+    fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
 
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
-    test_computed_value(`color`, `color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`);
+    fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`);
 
-    test_computed_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color(srgb none none none)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color(srgb 0.1 0.8 0.1)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, `color(srgb 0.5 0.6 0.2)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, `color(srgb 0.65 0.8 0.2)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, `color(srgb 0.7 0.4 0.1)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, `color(srgb 0.575 0.7 0.2 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, `color(srgb 0.575 0.7 0.2 / none)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color(srgb none none none)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color(srgb 0.1 0.8 0.1)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, `color(srgb 0.5 0.6 0.2)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, `color(srgb 0.65 0.8 0.2)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, `color(srgb 0.7 0.4 0.1)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, `color(srgb 0.575 0.7 0.2 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, `color(srgb 0.575 0.7 0.2 / none)`);
 
     // lch()
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))`, `lch(30 40 50)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))`, `lch(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))`, `lch(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))`, `lch(20 30 40)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)`, `lch(20 30 40)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)`, `lch(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)`, `lch(40 50 60)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)`, `lch(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))`, `lch(50 60 70)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))`, `lch(30 40 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))`, `lch(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))`, `lch(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))`, `lch(20 30 40)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)`, `lch(20 30 40)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)`, `lch(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)`, `lch(40 50 60)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)`, `lch(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))`, `lch(50 60 70)`);
 
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(36.666664 46.666664 50 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))`, `lch(26 36 40 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)`, `lch(26 36 40 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)`, `lch(44.285713 54.285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)`, `lch(44.285713 54.285717 60 / 0.7)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)`, `lch(44.285713 54.285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))`, `lch(50 60 70 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(36.666664 46.666664 50 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))`, `lch(26 36 40 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)`, `lch(26 36 40 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)`, `lch(44.285713 54.285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)`, `lch(44.285713 54.285717 60 / 0.7)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)`, `lch(44.285713 54.285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))`, `lch(50 60 70 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in lch, transparent, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 30deg / 0.5)`));
-    test_computed_value(`color`, `color-mix(in lch, transparent 10%, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 30deg / 0.9)`));
-    test_computed_value(`color`, `color-mix(in lch, lch(0.1 0.2 120deg / 0), lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 75deg / 0.5)`));
-    test_computed_value(`color`, `color-mix(in lch, lch(0.1 0.2 120deg / 0) 10%, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 39deg / 0.9)`));
+    fuzzy_test_computed_color(`color-mix(in lch, transparent, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 30deg / 0.5)`));
+    fuzzy_test_computed_color(`color-mix(in lch, transparent 10%, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 30deg / 0.9)`));
+    fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 120deg / 0), lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 75deg / 0.5)`));
+    fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 120deg / 0) 10%, lch(0.3 0.4 30deg))`, canonicalize(`lch(0.3 0.4 39deg / 0.9)`));
 
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
-    test_computed_value(`color`, `color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`);
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`);
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`);
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`);
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`);
-    test_computed_value(`color`, `color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`);
 
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`);
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`);
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`);
-    test_computed_value(`color`, `color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`);
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`);
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
-    test_computed_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`);
 
-    test_computed_value(`color`, `color-mix(in lch, lch(none none none), lch(none none none))`, `lch(none none none)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(none none none), lch(50 60 70deg))`, `lch(50 60 70)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(none none none))`, `lch(10 20 30)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 none), lch(50 60 70deg))`, `lch(30 40 70)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 none))`, `lch(30 40 30)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))`, `lch(50 20 50)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))`, `lch(30 40 50)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))`, `lch(30 40 50 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))`, `lch(30 40 50 / none)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(none none none), lch(none none none))`, `lch(none none none)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(none none none), lch(50 60 70deg))`, `lch(50 60 70)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(none none none))`, `lch(10 20 30)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 none), lch(50 60 70deg))`, `lch(30 40 70)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 none))`, `lch(30 40 30)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))`, `lch(50 20 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))`, `lch(30 40 50)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))`, `lch(30 40 50 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))`, `lch(30 40 50 / none)`);
 
     // oklch()
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`);
-    test_computed_value(`color`, `color-mix(in oklch, 25% oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), 25% oklch(0.5 0.6 70deg))`, `oklch(0.2 0.3 40)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg) 25%)`, `oklch(0.2 0.3 40)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg) 75%)`, `oklch(0.4 0.5 60)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 30%, oklch(0.5 0.6 70deg) 90%)`, `oklch(0.4 0.5 60)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 12.5%, oklch(0.5 0.6 70deg) 37.5%)`, `oklch(0.4 0.5 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 0%, oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, 25% oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), 25% oklch(0.5 0.6 70deg))`, `oklch(0.2 0.3 40)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg) 25%)`, `oklch(0.2 0.3 40)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg) 75%)`, `oklch(0.4 0.5 60)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 30%, oklch(0.5 0.6 70deg) 90%)`, `oklch(0.4 0.5 60)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 12.5%, oklch(0.5 0.6 70deg) 37.5%)`, `oklch(0.4 0.5 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 0%, oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`);
 
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.36666664 0.46666664 50 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklch, 25% oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), 25% oklch(0.5 0.6 70deg / .8))`, `oklch(0.26 0.36 40 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8) 25%)`, `oklch(0.26 0.36 40 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8) 75%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 30%, oklch(0.5 0.6 70deg / .8) 90%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 12.5%, oklch(0.5 0.6 70deg / .8) 37.5%)`, `oklch(0.44285713 0.54285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 0%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.5 0.6 70 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.36666664 0.46666664 50 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, 25% oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), 25% oklch(0.5 0.6 70deg / .8))`, `oklch(0.26 0.36 40 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8) 25%)`, `oklch(0.26 0.36 40 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8) 75%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 30%, oklch(0.5 0.6 70deg / .8) 90%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 12.5%, oklch(0.5 0.6 70deg / .8) 37.5%)`, `oklch(0.44285713 0.54285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 0%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.5 0.6 70 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in oklch, transparent, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 30deg / 0.5)`));
-    test_computed_value(`color`, `color-mix(in oklch, transparent 10%, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 30deg / 0.9)`));
-    test_computed_value(`color`, `color-mix(in oklch, oklch(10 20 120deg / 0), oklch(30 40 30deg))`, canonicalize(`oklch(30 40 75deg / 0.5)`));
-    test_computed_value(`color`, `color-mix(in oklch, oklch(10 20 120deg / 0) 10%, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 39deg / 0.9)`));
+    fuzzy_test_computed_color(`color-mix(in oklch, transparent, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 30deg / 0.5)`));
+    fuzzy_test_computed_color(`color-mix(in oklch, transparent 10%, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 30deg / 0.9)`));
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(10 20 120deg / 0), oklch(30 40 30deg))`, canonicalize(`oklch(30 40 75deg / 0.5)`));
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(10 20 120deg / 0) 10%, oklch(30 40 30deg))`, canonicalize(`oklch(30 40 39deg / 0.9)`));
 
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
-    test_computed_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`);
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`);
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`);
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`);
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`);
-    test_computed_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`);
 
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`);
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`);
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`);
-    test_computed_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`);
 
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`);
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`);
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
-    test_computed_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`);
+    fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`);
 
-    test_computed_value(`color`, `color-mix(in oklch, oklch(none none none), oklch(none none none))`, `oklch(none none none)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(none none none), oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(none none none))`, `oklch(0.1 0.2 30)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 70)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 none))`, `oklch(0.3 0.4 30)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))`, `oklch(0.5 0.2 50)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / 0.5))`, `oklch(0.3 0.4 50 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / none))`, `oklch(0.3 0.4 50 / none)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(none none none), oklch(none none none))`, `oklch(none none none)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(none none none), oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(none none none))`, `oklch(0.1 0.2 30)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 70)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 none))`, `oklch(0.3 0.4 30)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))`, `oklch(0.5 0.2 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / 0.5))`, `oklch(0.3 0.4 50 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / none))`, `oklch(0.3 0.4 50 / none)`);
 
     // lab()
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 70))`, `lab(30 40 50)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`, `lab(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))`, `lab(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))`, `lab(20 30 40)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)`, `lab(20 30 40)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)`, `lab(40 50 60)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)`, `lab(40 50 60)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)`, `lab(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))`, `lab(50 60 70)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 70))`, `lab(30 40 50)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`, `lab(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))`, `lab(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))`, `lab(20 30 40)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)`, `lab(20 30 40)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)`, `lab(40 50 60)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)`, `lab(40 50 60)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)`, `lab(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))`, `lab(50 60 70)`);
 
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(36.666664 46.666664 56.666664 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))`, `lab(26 36 46 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)`, `lab(26 36 46 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)`, `lab(44.285713 54.285717 64.28571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))`, `lab(50 60 70 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(36.666664 46.666664 56.666664 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))`, `lab(26 36 46 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)`, `lab(26 36 46 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)`, `lab(44.285713 54.285717 64.28571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))`, `lab(50 60 70 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in lab, transparent, lab(30 40 50))`, 'lab(30 40 50 / 0.5)');
-    test_computed_value(`color`, `color-mix(in lab, transparent 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)');
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / 0), lab(30 40 50))`, 'lab(30 40 50 / 0.5)');
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / 0) 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)');
+    fuzzy_test_computed_color(`color-mix(in lab, transparent, lab(30 40 50))`, 'lab(30 40 50 / 0.5)');
+    fuzzy_test_computed_color(`color-mix(in lab, transparent 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)');
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 0), lab(30 40 50))`, 'lab(30 40 50 / 0.5)');
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 0) 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)');
 
-    test_computed_value(`color`, `color-mix(in lab, lab(none none none), lab(none none none))`, `lab(none none none)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(none none none), lab(50 60 70))`, `lab(50 60 70)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30), lab(none none none))`, `lab(10 20 30)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 none), lab(50 60 70))`, `lab(30 40 70)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 none))`, `lab(30 40 30)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(none 20 30), lab(50 none 70))`, `lab(50 20 50)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))`, `lab(30 40 50)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))`, `lab(30 40 50 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))`, `lab(30 40 50 / none)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(none none none), lab(none none none))`, `lab(none none none)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(none none none), lab(50 60 70))`, `lab(50 60 70)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(none none none))`, `lab(10 20 30)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 none), lab(50 60 70))`, `lab(30 40 70)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 none))`, `lab(30 40 30)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(none 20 30), lab(50 none 70))`, `lab(50 20 50)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))`, `lab(30 40 50)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))`, `lab(30 40 50 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))`, `lab(30 40 50 / none)`);
 
     // oklab()
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
-    test_computed_value(`color`, `color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `oklab(0.2 0.3 0.4)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `oklab(0.2 0.3 0.4)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `oklab(0.4 0.5 0.6)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `oklab(0.4 0.5 0.6)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `oklab(0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `oklab(0.2 0.3 0.4)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `oklab(0.2 0.3 0.4)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `oklab(0.4 0.5 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `oklab(0.4 0.5 0.6)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `oklab(0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
 
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.36666664 0.46666664 0.56666664 / 0.6)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `oklab(0.26 0.36 0.46 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `oklab(0.26 0.36 0.46 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); // Scale down > 100% sum.
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.5 0.6 0.7 / 0.8)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.36666664 0.46666664 0.56666664 / 0.6)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `oklab(0.26 0.36 0.46 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `oklab(0.26 0.36 0.46 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); // Scale down > 100% sum.
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.5 0.6 0.7 / 0.8)`);
 
-    test_computed_value(`color`, `color-mix(in oklab, transparent, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
-    test_computed_value(`color`, `color-mix(in oklab, transparent 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
+    fuzzy_test_computed_color(`color-mix(in oklab, transparent, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
+    fuzzy_test_computed_color(`color-mix(in oklab, transparent 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
 
-    test_computed_value(`color`, `color-mix(in oklab, oklab(none none none), oklab(none none none))`, `oklab(none none none)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`, `oklab(0.1 0.2 0.3)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.7)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `oklab(0.3 0.4 0.3)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `oklab(0.5 0.2 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `oklab(0.3 0.4 0.5 / 0.5)`);
-    test_computed_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `oklab(0.3 0.4 0.5 / none)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(none none none))`, `oklab(none none none)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`, `oklab(0.1 0.2 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.7)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `oklab(0.3 0.4 0.3)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `oklab(0.5 0.2 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `oklab(0.3 0.4 0.5 / 0.5)`);
+    fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `oklab(0.3 0.4 0.5 / none)`);
 
 
     for (const colorSpace of [ "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) {
         const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;
 
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), 25% color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`); // Scale down > 100% sum.
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color(${resultColorSpace} 0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), 25% color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`); // Scale down > 100% sum.
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color(${resultColorSpace} 0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
 
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.3461539 0.4461539 0.5461539 / 0.65)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), 25% color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); // Scale down > 100% sum.
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.5 0.6 0.7 / 0.8)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.3461539 0.4461539 0.5461539 / 0.65)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), 25% color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); // Scale down > 100% sum.
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.5 0.6 0.7 / 0.8)`);
 
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, transparent, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, transparent 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0), color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0) 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, transparent, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, transparent 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0), color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0) 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`);
 
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color(${resultColorSpace} 3 4.5 6)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color(${resultColorSpace} -3 -4.5 -6)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color(${resultColorSpace} 0 0 0 / 0)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color(${resultColorSpace} 3 4.5 6)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color(${resultColorSpace} -3 -4.5 -6)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color(${resultColorSpace} 0 0 0 / 0)`);
 
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color(${resultColorSpace} none none none)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color(${resultColorSpace} 0.1 0.2 0.3)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.7)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color(${resultColorSpace} 0.3 0.4 0.3)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color(${resultColorSpace} 0.5 0.2 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
-        test_computed_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color(${resultColorSpace} 0.3 0.4 0.5 / none)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color(${resultColorSpace} none none none)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color(${resultColorSpace} 0.1 0.2 0.3)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.7)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color(${resultColorSpace} 0.3 0.4 0.3)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color(${resultColorSpace} 0.5 0.2 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
+        fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color(${resultColorSpace} 0.3 0.4 0.5 / none)`);
     }
 </script>
 </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
index d57796d..60e4785 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
@@ -900,13 +900,13 @@
 PASS Property color value 'rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))'
 FAIL Property color value 'lch(from var(--color) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 46.277943 +/- 0.0001, expected 46.277943 but got 46.2725
 PASS Property color value 'rgb(from indianred 255 g b)'
-FAIL Property color value 'hsl(from var(--accent) calc(h + 180deg) s l)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 178 +/- 1, expected 178 but got 0
+FAIL Property color value 'hsl(from var(--accent) calc(h + 180deg) s l)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 178 +/- 0.0001, expected 178 but got 0
 FAIL Property color value 'lab(from var(--mycolor) l a b / 100%)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
 FAIL Property color value 'lab(from var(--mycolor) l a b / calc(alpha * 0.8))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
 FAIL Property color value 'lab(from var(--mycolor) l a b / calc(alpha - 20%))' assert_array_approx_equals: Numeric parameters are approximately equal. lengths differ, expected 4 got 3
 FAIL Property color value 'lab(from var(--mycolor) l 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
 FAIL Property color value 'lch(from peru calc(l * 0.8) c h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 49.80138 +/- 0.0001, expected 49.80138 but got 49.7972
-FAIL Property color value 'LCH(from var(--accent) l c calc(h + 180deg))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 65.49473 +/- 1, expected 65.49473 but got 0
+FAIL Property color value 'LCH(from var(--accent) l c calc(h + 180deg))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 65.49473 +/- 0.0001, expected 65.49473 but got 0
 FAIL Property color value 'lch(from var(--mycolor) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
 FAIL Property color value 'var(--mygray)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
 FAIL Property color value 'lch(from var(--mygray) l 30 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 62.746
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color.html b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color.html
index d945911..6dadf3c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-relative-color.html
@@ -10,6 +10,7 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/computed-testcommon.js"></script>
+<script src="/css/support/color-testcommon.js"></script>
 <style>
     html {
         --bg-color: blue;
@@ -26,691 +27,691 @@
     // rgb(from ...)
 
   // Testing no modifications.
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b / alpha)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `rgba(102, 153, 102, 0.5)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / alpha)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `rgb(from rgb(from rebeccapurple r g b) r g b)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rgb(from rebeccapurple r g b) r g b)`, `rgb(102, 51, 153)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `rgb(from rebeccapurple 0 0 0)`, `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple 0 0 0 / 0)`, `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple 0 g b / alpha)`, `rgb(0, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r 0 b / alpha)`, `rgb(102, 0, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g 0 / alpha)`, `rgb(102, 51, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b / 0)`, `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `rgba(0, 102, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `rgba(51, 0, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `rgba(51, 102, 0, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `rgba(51, 102, 153, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 0 0 0)`, `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 0 0 0 / 0)`, `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 0 g b / alpha)`, `rgb(0, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 0 b / alpha)`, `rgb(102, 0, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g 0 / alpha)`, `rgb(102, 51, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / 0)`, `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `rgba(0, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `rgba(51, 0, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `rgba(51, 102, 0, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `rgba(51, 102, 153, 0)`);
 
   // Testing replacement with a number.
-  test_computed_value(`color`, `rgb(from rebeccapurple 25 g b / alpha)`, `rgb(25, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r 25 b / alpha)`, `rgb(102, 25, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g 25 / alpha)`, `rgb(102, 51, 25)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b / .25)`, `rgba(102, 51, 153, 0.25)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `rgba(25, 102, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `rgba(51, 25, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `rgba(51, 102, 25, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `rgba(51, 102, 153, 0.2)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 25 g b / alpha)`, `rgb(25, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 25 b / alpha)`, `rgb(102, 25, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g 25 / alpha)`, `rgb(102, 51, 25)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / .25)`, `rgba(102, 51, 153, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `rgba(25, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `rgba(51, 25, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `rgba(51, 102, 25, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `rgba(51, 102, 153, 0.2)`);
 
   // Testing replacement with a percentage.
-  test_computed_value(`color`, `rgb(from rebeccapurple 20% g b / alpha)`, `rgb(51, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r 20% b / alpha)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g 20% / alpha)`, `rgb(102, 51, 51)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b / 20%)`, `rgba(102, 51, 153, 0.2)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `rgba(51, 51, 153, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `rgba(51, 102, 51, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `rgba(51, 102, 153, 0.2)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 20% g b / alpha)`, `rgb(51, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 20% b / alpha)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g 20% / alpha)`, `rgb(102, 51, 51)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / 20%)`, `rgba(102, 51, 153, 0.2)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `rgba(51, 51, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `rgba(51, 102, 51, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `rgba(51, 102, 153, 0.2)`);
 
   // Testing replacement with a number for r, g, b but percent for alpha.
-  test_computed_value(`color`, `rgb(from rebeccapurple 25 g b / 25%)`, `rgba(25, 51, 153, 0.25)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r 25 b / 25%)`, `rgba(102, 25, 153, 0.25)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g 25 / 25%)`, `rgba(102, 51, 25, 0.25)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `rgba(25, 102, 153, 0.25)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `rgba(51, 25, 153, 0.25)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `rgba(51, 102, 25, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 25 g b / 25%)`, `rgba(25, 51, 153, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 25 b / 25%)`, `rgba(102, 25, 153, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g 25 / 25%)`, `rgba(102, 51, 25, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `rgba(25, 102, 153, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `rgba(51, 25, 153, 0.25)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `rgba(51, 102, 25, 0.25)`);
 
   // Testing permutation.
-  test_computed_value(`color`, `rgb(from rebeccapurple g b r)`, `rgb(51, 153, 102)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple b alpha r / g)`, `rgba(153, 255, 102, 0.2)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r r r / r)`, `rgba(102, 102, 102, 0.4)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple alpha alpha alpha / alpha)`, `rgb(255, 255, 255)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `rgb(102, 153, 51)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `rgba(153, 204, 51, 0.4)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `rgba(51, 51, 51, 0.2)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `rgba(204, 204, 204, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple g b r)`, `rgb(51, 153, 102)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple b alpha r / g)`, `rgba(153, 255, 102, 0.2)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r r r / r)`, `rgba(102, 102, 102, 0.4)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple alpha alpha alpha / alpha)`, `rgb(255, 255, 255)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `rgb(102, 153, 51)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `rgba(153, 204, 51, 0.4)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `rgba(51, 51, 51, 0.2)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `rgba(204, 204, 204, 0.8)`);
 
   // Testing mixes of number and percentage. (These would not be allowed in the non-relative syntax).
-  test_computed_value(`color`, `rgb(from rebeccapurple r 20% 10)`, `rgb(102, 51, 10)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r 10 20%)`, `rgb(102, 10, 51)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple 0% 10 10)`, `rgb(0, 10, 10)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `rgba(51, 51, 10, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `rgba(51, 10, 51, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `rgba(0, 10, 10, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 20% 10)`, `rgb(102, 51, 10)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r 10 20%)`, `rgb(102, 10, 51)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple 0% 10 10)`, `rgb(0, 10, 10)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `rgba(51, 51, 10, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `rgba(51, 10, 51, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `rgba(0, 10, 10, 0.8)`);
 
       // r    g    b
       // 102  51   153
       // 40%  20%  60%)
   // Testing with calc().
-  test_computed_value(`color`, `rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r calc(g * 2) 10)`, `rgb(102, 102, 10)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple b calc(r * .5) 10)`, `rgb(153, 51, 10)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `rgb(102, 51, 10)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `rgb(102, 51, 10)`);
-  test_computed_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(g * 2) 10)`, `rgb(102, 102, 10)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple b calc(r * .5) 10)`, `rgb(153, 51, 10)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `rgb(102, 51, 10)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `rgb(102, 51, 10)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `rgb(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g none)`,                               `rgb(102, 51, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g none / alpha)`,                       `rgb(102, 51, 0)`);
-  test_computed_value(`color`, `rgb(from rebeccapurple r g b / none)`,                           `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`,              `rgba(51, 102, 0, 0.8)`);
-  test_computed_value(`color`, `rgb(from rgb(20% 40% 60% / 80%) r g b / none)`,                  `rgba(51, 102, 153, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g none)`,                               `rgb(102, 51, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g none / alpha)`,                       `rgb(102, 51, 0)`);
+  fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / none)`,                           `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`,              `rgba(51, 102, 0, 0.8)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / 80%) r g b / none)`,                  `rgba(51, 102, 153, 0)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `rgb(from rgb(none none none) r g b)`,                            `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rgb(none none none / none) r g b / alpha)`,             `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `rgb(from rgb(20% none 60%) r g b)`,                              `rgb(51, 0, 153)`);
-  test_computed_value(`color`, `rgb(from rgb(20% 40% 60% / none) r g b / alpha)`,                `rgba(51, 102, 153, 0)`);
+  fuzzy_test_computed_color(`rgb(from rgb(none none none) r g b)`,                            `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rgb(none none none / none) r g b / alpha)`,             `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20% none 60%) r g b)`,                              `rgb(51, 0, 153)`);
+  fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / none) r g b / alpha)`,                `rgba(51, 102, 153, 0)`);
 
 
   // hsl(from ...)
 
   // Testing no modifications.
-  test_computed_value(`color`, `hsl(from rebeccapurple h s l)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s l / alpha)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `rgba(51, 102, 153, 0.8)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `rgba(102, 153, 102, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s l)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / alpha)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `hsl(from hsl(from rebeccapurple h s l) h s l)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hsl(from hsl(from rebeccapurple h s l) h s l)`, `rgb(102, 51, 153)`);
 
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `hsl(from rebeccapurple 0 0% 0%)`, `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 0deg 0% 0%)`, `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 0 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 0 s l / alpha)`, `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 0deg s l / alpha)`, `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h 0% l / alpha)`, `rgb(102, 102, 102)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s 0% / alpha)`, `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s l / 0)`, `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `rgba(102, 102, 102, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `rgba(0, 0, 0, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `rgba(51, 102, 153, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0 0% 0%)`, `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg 0% 0%)`, `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0 s l / alpha)`, `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg s l / alpha)`, `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h 0% l / alpha)`, `rgb(102, 102, 102)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s 0% / alpha)`, `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / 0)`, `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `rgba(102, 102, 102, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `rgba(0, 0, 0, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `rgba(51, 102, 153, 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `hsl(from rebeccapurple 25 s l / alpha)`, `rgb(153, 94, 51)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple 25deg s l / alpha)`, `rgb(153, 94, 51)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h 20% l / alpha)`, `rgb(102, 82, 122)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s 20% / alpha)`, `rgb(51, 25, 77)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s l / .25)`, `rgba(102, 51, 153, 0.25)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `rgba(82, 102, 122, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `rgba(25, 51, 77, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `rgba(51, 102, 153, 0.2)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 25 s l / alpha)`, `rgb(153, 94, 51)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple 25deg s l / alpha)`, `rgb(153, 94, 51)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h 20% l / alpha)`, `rgb(102, 82, 122)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s 20% / alpha)`, `rgb(51, 25, 77)`, 1 /* epsilon */);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / .25)`, `rgba(102, 51, 153, 0.25)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `rgba(82, 102, 122, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `rgba(25, 51, 77, 0.8)`, 1 /* epsilon */);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `rgba(51, 102, 153, 0.2)`);
 
   // Testing valid permutation (types match).
-  test_computed_value(`color`, `hsl(from rebeccapurple h l s)`, `rgb(128, 77, 179)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h alpha l / s)`, `rgba(102, 0, 204, 0.5)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h l l / l)`, `rgba(102, 61, 143, 0.4)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h alpha alpha / alpha)`, `rgb(255, 255, 255)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `rgba(77, 128, 179, 0.8)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `rgba(20, 102, 184, 0.5)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `rgba(61, 102, 143, 0.4)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(163, 204, 245, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h l s)`, `rgb(128, 77, 179)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h alpha l / s)`, `rgba(102, 0, 204, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h l l / l)`, `rgba(102, 61, 143, 0.4)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h alpha alpha / alpha)`, `rgb(255, 255, 255)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `rgba(77, 128, 179, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `rgba(20, 102, 184, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `rgba(61, 102, 143, 0.4)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(163, 204, 245, 0.8)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `hsl(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s none)`,                               `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s none / alpha)`,                       `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple h s l / none)`,                           `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `hsl(from rebeccapurple none s l / alpha)`,                       `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`,            `rgba(0, 0, 0, 0.5)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s l / none)`,                `rgba(102, 153, 102, 0)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`,            `rgba(153, 102, 102, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s none)`,                               `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s none / alpha)`,                       `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / none)`,                           `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`hsl(from rebeccapurple none s l / alpha)`,                       `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`,            `rgba(0, 0, 0, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / none)`,                `rgba(102, 153, 102, 0)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`,            `rgba(153, 102, 102, 0.5)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `hsl(from hsl(none none none) h s l)`,                            `rgb(0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from hsl(none none none / none) h s l / alpha)`,             `rgba(0, 0, 0, 0)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg none 50% / .5) h s l)`,                      `rgba(128, 128, 128, 0.5)`);
-  test_computed_value(`color`, `hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`,             `rgba(102, 153, 102, 0)`);
-  test_computed_value(`color`, `hsl(from hsl(none 20% 50% / .5) h s l / alpha)`,                 `rgba(153, 102, 102, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from hsl(none none none) h s l)`,                            `rgb(0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from hsl(none none none / none) h s l / alpha)`,             `rgba(0, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg none 50% / .5) h s l)`,                      `rgba(128, 128, 128, 0.5)`);
+  fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`,             `rgba(102, 153, 102, 0)`);
+  fuzzy_test_computed_color(`hsl(from hsl(none 20% 50% / .5) h s l / alpha)`,                 `rgba(153, 102, 102, 0.5)`);
 
   // hwb(from ...)
 
   // Testing no modifications.
-  test_computed_value(`color`, `hwb(from rebeccapurple h w b)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w b / alpha)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-  test_computed_value(`color`, `hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `rgba(102, 153, 102, 0.5)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w b)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / alpha)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `hwb(from hwb(from rebeccapurple h w b) h w b)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hwb(from hwb(from rebeccapurple h w b) h w b)`, `rgb(102, 51, 153)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `hwb(from rebeccapurple 0 0% 0%)`, `rgb(255, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 0deg 0% 0%)`, `rgb(255, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 0 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 0 w b / alpha)`, `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 0deg w b / alpha)`, `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h 0% b / alpha)`, `rgb(77, 0, 153)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w 0% / alpha)`, `rgb(153, 51, 255)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w b / 0)`, `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `rgba(0, 77, 153, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `rgba(51, 153, 255, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `rgba(51, 102, 153, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0 0% 0%)`, `rgb(255, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg 0% 0%)`, `rgb(255, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0 w b / alpha)`, `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg w b / alpha)`, `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h 0% b / alpha)`, `rgb(77, 0, 153)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w 0% / alpha)`, `rgb(153, 51, 255)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / 0)`, `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `rgba(0, 77, 153, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `rgba(51, 153, 255, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `rgba(51, 102, 153, 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `hwb(from rebeccapurple 25 w b / alpha)`, `rgb(153, 94, 51)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple 25deg w b / alpha)`, `rgb(153, 94, 51)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h 20% b / alpha)`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w 20% / alpha)`, `rgb(128, 51, 204)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w b / .2)`, `rgba(102, 51, 153, 0.2)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `rgba(51, 128, 204, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `rgba(51, 102, 153, 0.2)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 25 w b / alpha)`, `rgb(153, 94, 51)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple 25deg w b / alpha)`, `rgb(153, 94, 51)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h 20% b / alpha)`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w 20% / alpha)`, `rgb(128, 51, 204)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / .2)`, `rgba(102, 51, 153, 0.2)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `rgba(51, 128, 204, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `rgba(51, 102, 153, 0.2)`);
 
   // Testing valid permutation (types match).
-  test_computed_value(`color`, `hwb(from rebeccapurple h b w)`, `rgb(153, 102, 204)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h alpha w / b)`, `rgba(213, 213, 213, 0.4)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w w / w)`, `rgba(128, 51, 204, 0.2)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h alpha alpha / alpha)`, `rgb(128, 128, 128)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `rgba(102, 153, 204, 0.8)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `rgba(204, 204, 204, 0.4)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `rgba(51, 128, 204, 0.2)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(128, 128, 128, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h b w)`, `rgb(153, 102, 204)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h alpha w / b)`, `rgba(213, 213, 213, 0.4)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w w / w)`, `rgba(128, 51, 204, 0.2)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h alpha alpha / alpha)`, `rgb(128, 128, 128)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `rgba(102, 153, 204, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `rgba(204, 204, 204, 0.4)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `rgba(51, 128, 204, 0.2)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(128, 128, 128, 0.8)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `rgb(102, 51, 153)`);
-  test_computed_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `rgb(102, 51, 153)`);
+  fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `hwb(from rebeccapurple none none none)`,                         `rgb(255, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple none none none / none)`,                  `rgba(255, 0, 0, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w none)`,                               `rgb(153, 51, 255)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w none / alpha)`,                       `rgb(153, 51, 255)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple h w b / none)`,                           `rgba(102, 51, 153, 0)`);
-  test_computed_value(`color`, `hwb(from rebeccapurple none w b / alpha)`,                       `rgb(153, 51, 51)`);
-  test_computed_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`,            `rgba(51, 255, 51, 0.5)`);
-  test_computed_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) h w b / none)`,                `rgba(51, 128, 51, 0)`);
-  test_computed_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`,            `rgba(128, 51, 51, 0.5)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple none none none)`,                         `rgb(255, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple none none none / none)`,                  `rgba(255, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w none)`,                               `rgb(153, 51, 255)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w none / alpha)`,                       `rgb(153, 51, 255)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / none)`,                           `rgba(102, 51, 153, 0)`);
+  fuzzy_test_computed_color(`hwb(from rebeccapurple none w b / alpha)`,                       `rgb(153, 51, 51)`);
+  fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`,            `rgba(51, 255, 51, 0.5)`);
+  fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) h w b / none)`,                `rgba(51, 128, 51, 0)`);
+  fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`,            `rgba(128, 51, 51, 0.5)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `hwb(from hwb(none none none) h w b)`,                            `rgb(255, 0, 0)`);
-  test_computed_value(`color`, `hwb(from hwb(none none none / none) h w b / alpha)`,             `rgba(255, 0, 0, 0)`);
-  test_computed_value(`color`, `hwb(from hwb(120deg none 50% / .5) h w b)`,                      `rgba(0, 128, 0, 0.5)`);
-  test_computed_value(`color`, `hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`,             `rgba(51, 128, 51, 0)`);
-  test_computed_value(`color`, `hwb(from hwb(none 20% 50% / .5) h w b / alpha)`,                 `rgba(128, 51, 51, 0.5)`);
+  fuzzy_test_computed_color(`hwb(from hwb(none none none) h w b)`,                            `rgb(255, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from hwb(none none none / none) h w b / alpha)`,             `rgba(255, 0, 0, 0)`);
+  fuzzy_test_computed_color(`hwb(from hwb(120deg none 50% / .5) h w b)`,                      `rgba(0, 128, 0, 0.5)`);
+  fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`,             `rgba(51, 128, 51, 0)`);
+  fuzzy_test_computed_color(`hwb(from hwb(none 20% 50% / .5) h w b / alpha)`,                 `rgba(128, 51, 51, 0.5)`);
 
   // lab()
 
   // Testing no modifications.
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(200 300 400)`);
-  test_computed_value(`color`, `lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(200 300 400)`);
+  fuzzy_test_computed_color(`lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`);
 
   // Testing non-lab origin to see conversion.
-  test_computed_value(`color`, `lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`);
+  fuzzy_test_computed_color(`lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`);
-  test_computed_value(`color`, `lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(200 300 400)`);
-  test_computed_value(`color`, `lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`);
+  fuzzy_test_computed_color(`lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(200 300 400)`);
+  fuzzy_test_computed_color(`lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`);
 
   // Testing valid permutation (types match).
-  test_computed_value(`color`, `lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `lab(from lab(25 20 50) none none none)`, `lab(none none none)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) none none none)`, `lab(none none none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `lab(from lab(none none none) l a b)`, `lab(0 0 0)`);
-  test_computed_value(`color`, `lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`);
-  test_computed_value(`color`, `lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`);
-  test_computed_value(`color`, `lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(none none none) l a b)`, `lab(0 0 0)`);
+  fuzzy_test_computed_color(`lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`);
+  fuzzy_test_computed_color(`lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`);
 
   // oklab()
 
   // Testing no modifications.
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`);
-  test_computed_value(`color`, `oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`);
 
   // Testing non-oklab origin to see conversion.
-  test_computed_value(`color`, `oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`);
+  fuzzy_test_computed_color(`oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
-  test_computed_value(`color`, `oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`);
 
   // Testing valid permutation (types match).
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`);
-  test_computed_value(`color`, `oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`);
-  test_computed_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`);
+  fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`);
 
   // lch()
 
   // Testing no modifications.
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(200 300 40)`);
-  test_computed_value(`color`, `lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(200 300 40)`);
+  fuzzy_test_computed_color(`lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`);
 
   // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space).
-  test_computed_value(`color`, `lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`);
-  test_computed_value(`color`, `lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`);
+  fuzzy_test_computed_color(`lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`);
+  fuzzy_test_computed_color(`lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(200 300 40)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(200 300 40)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`);
 
   // Testing valid permutation (types match).
   // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>.
-  test_computed_value(`color`, `lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`);
-  test_computed_value(`color`, `lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`);
+  fuzzy_test_computed_color(`lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) none none none)`,                                   `lch(none none none)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) none none none / none)`,                            `lch(none none none / none)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c none)`,                                         `lch(0.7 45 none)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c none / alpha)`,                                 `lch(0.7 45 none)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30) l c h / none)`,                                     `lch(0.7 45 30 / none)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c none / alpha)`,                           `lch(0.7 45 none / 0.4)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / none)`,                               `lch(0.7 45 30 / none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) none none none)`,                                   `lch(none none none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) none none none / none)`,                            `lch(none none none / none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c none)`,                                         `lch(0.7 45 none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c none / alpha)`,                                 `lch(0.7 45 none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / none)`,                                     `lch(0.7 45 30 / none)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c none / alpha)`,                           `lch(0.7 45 none / 0.4)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / none)`,                               `lch(0.7 45 30 / none)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `lch(from lch(none none none) l c h)`,                                       `lch(0 0 0)`);
-  test_computed_value(`color`, `lch(from lch(none none none / none) l c h / alpha)`,                        `lch(0 0 0 / 0)`);
-  test_computed_value(`color`, `lch(from lch(0.7 none 30) l c h)`,                                          `lch(0.7 0 30)`);
-  test_computed_value(`color`, `lch(from lch(0.7 45 30 / none) l c h / alpha)`,                             `lch(0.7 45 30 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(none none none) l c h)`,                                       `lch(0 0 0)`);
+  fuzzy_test_computed_color(`lch(from lch(none none none / none) l c h / alpha)`,                        `lch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 none 30) l c h)`,                                          `lch(0.7 0 30)`);
+  fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / none) l c h / alpha)`,                             `lch(0.7 45 30 / 0)`);
 
   // oklch()
 
   // Testing no modifications.
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`);
-  test_computed_value(`color`, `oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`);
+  fuzzy_test_computed_color(`oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`);
 
   // Test nesting relative colors.
-  test_computed_value(`color`, `oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`);
 
   // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space).
-  test_computed_value(`color`, `oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`);
+  fuzzy_test_computed_color(`oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`);
   // TODO: redo conversion with oklab(0.7 0.45 0.3)
-  test_computed_value(`color`, `oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`);
+  fuzzy_test_computed_color(`oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`);
 
   // Testing replacement with 0.
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
 
   // Testing replacement with a constant.
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 25 / alpha)`, `oklch(0.7 0.45 25)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 25 / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(1 3 40)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 25 / alpha)`, `oklch(0.7 0.45 25)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25 / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(1 3 40)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`);
 
   // Testing valid permutation (types match).
   // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>.
-  test_computed_value(`color`, `oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`);
-  test_computed_value(`color`, `oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`);
+  fuzzy_test_computed_color(`oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`);
 
   // Testing with calc().
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`);
 
   // Testing with 'none'.
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) none none none)`,                                   `oklch(none none none)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) none none none / none)`,                            `oklch(none none none / none)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c none)`,                                         `oklch(0.7 0.45 none)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c none / alpha)`,                                 `oklch(0.7 0.45 none)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / none)`,                                     `oklch(0.7 0.45 30 / none)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`,                           `oklch(0.7 0.45 none / 0.4)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`,                               `oklch(0.7 0.45 30 / none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) none none none)`,                                   `oklch(none none none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) none none none / none)`,                            `oklch(none none none / none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c none)`,                                         `oklch(0.7 0.45 none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c none / alpha)`,                                 `oklch(0.7 0.45 none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / none)`,                                     `oklch(0.7 0.45 30 / none)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`,                           `oklch(0.7 0.45 none / 0.4)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`,                               `oklch(0.7 0.45 30 / none)`);
   // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-  test_computed_value(`color`, `oklch(from oklch(none none none) l c h)`,                                       `oklch(0 0 0)`);
-  test_computed_value(`color`, `oklch(from oklch(none none none / none) l c h / alpha)`,                        `oklch(0 0 0 / 0)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 none 30) l c h)`,                                          `oklch(0.7 0 30)`);
-  test_computed_value(`color`, `oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`,                             `oklch(0.7 0.45 30 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(none none none) l c h)`,                                       `oklch(0 0 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(none none none / none) l c h / alpha)`,                        `oklch(0 0 0 / 0)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 none 30) l c h)`,                                          `oklch(0.7 0 30)`);
+  fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`,                             `oklch(0.7 0.45 30 / 0)`);
 
   for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) {
       // Testing no modifications.
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 0.7 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 0.7 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`,                `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 0.7 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 0.7 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`,                `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
 
       // Test nesting relative colors.
-      test_computed_value(`color`, `color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`,   `color(${colorSpace} 0.7 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`,   `color(${colorSpace} 0.7 0.5 0.3)`);
 
       // Testing replacement with 0.
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`,                              `color(${colorSpace} 0 0 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`,                          `color(${colorSpace} 0 0 0 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`,                      `color(${colorSpace} 0 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`,                      `color(${colorSpace} 0.7 0 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`,                      `color(${colorSpace} 0.7 0.5 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`,                          `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`,                `color(${colorSpace} 0 0.5 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`,                `color(${colorSpace} 0.7 0 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`,                `color(${colorSpace} 0.7 0.5 0 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`,                    `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`,                              `color(${colorSpace} 0 0 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`,                          `color(${colorSpace} 0 0 0 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`,                      `color(${colorSpace} 0 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`,                      `color(${colorSpace} 0.7 0 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`,                      `color(${colorSpace} 0.7 0.5 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`,                          `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`,                `color(${colorSpace} 0 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`,                `color(${colorSpace} 0.7 0 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`,                `color(${colorSpace} 0.7 0.5 0 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`,                    `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
 
       // Testing replacement with a constant.
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`,                              `color(${colorSpace} 2 3 4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`,                          `color(${colorSpace} 2 3 4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`,                           `color(${colorSpace} -2 -3 -4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`,                      `color(${colorSpace} -2 -3 -4 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`,                     `color(${colorSpace} 2 3 4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`,              `color(${colorSpace} 2 3 4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`,                  `color(${colorSpace} -2 -3 -4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`,          `color(${colorSpace} -2 -3 -4 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`,                              `color(${colorSpace} 2 3 4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`,                          `color(${colorSpace} 2 3 4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`,                           `color(${colorSpace} -2 -3 -4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`,                      `color(${colorSpace} -2 -3 -4 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`,                     `color(${colorSpace} 2 3 4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`,              `color(${colorSpace} 2 3 4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`,                  `color(${colorSpace} -2 -3 -4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`,          `color(${colorSpace} -2 -3 -4 / 0)`);
 
       // Testing valid permutation (types match).
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`,                              `color(${colorSpace} 0.5 0.3 0.7)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`,                      `color(${colorSpace} 0.3 1 0.7 / 0.5)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`,                          `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`,          `color(${colorSpace} 1 1 1)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`,                        `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`,                `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`,                    `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`,    `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`,                              `color(${colorSpace} 0.5 0.3 0.7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`,                      `color(${colorSpace} 0.3 1 0.7 / 0.5)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`,                          `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`,          `color(${colorSpace} 1 1 1)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`,                        `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`,                `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`,                    `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`,    `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`);
 
       // Testing out of gamut components.
-      test_computed_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 1.7 1.5 1.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 1.7 1.5 1.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`,                       `color(${colorSpace} 1.7 1.5 1.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 1.7 1.5 1.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`,                           `color(${colorSpace} -0.7 -0.5 -0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`,                   `color(${colorSpace} -0.7 -0.5 -0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`,                    `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 1.7 1.5 1.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 1.7 1.5 1.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`,                       `color(${colorSpace} 1.7 1.5 1.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 1.7 1.5 1.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`,                           `color(${colorSpace} -0.7 -0.5 -0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`,                   `color(${colorSpace} -0.7 -0.5 -0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`,                    `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
 
       // Testing with calc().
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`,                        `color(${colorSpace} 0.7 0.5 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`,    `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`,                        `color(${colorSpace} 0.7 0.5 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`,    `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
 
       // Testing with 'none'.
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`,                     `color(${colorSpace} none none none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`,              `color(${colorSpace} none none none / none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`,                           `color(${colorSpace} 0.7 0.5 none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`,                   `color(${colorSpace} 0.7 0.5 none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`,                       `color(${colorSpace} 0.7 0.5 0.3 / none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`,             `color(${colorSpace} 0.7 0.5 none / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`,                 `color(${colorSpace} 0.7 0.5 0.3 / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`,                     `color(${colorSpace} none none none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`,              `color(${colorSpace} none none none / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`,                           `color(${colorSpace} 0.7 0.5 none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`,                   `color(${colorSpace} 0.7 0.5 none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`,                       `color(${colorSpace} 0.7 0.5 0.3 / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`,             `color(${colorSpace} 0.7 0.5 none / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`,                 `color(${colorSpace} 0.7 0.5 0.3 / none)`);
       // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-      test_computed_value(`color`, `color(from color(${colorSpace} none none none) ${colorSpace} r g b)`,                           `color(${colorSpace} 0 0 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} 0 0 0 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`,                             `color(${colorSpace} 0.7 0 0.3)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} none none none) ${colorSpace} r g b)`,                           `color(${colorSpace} 0 0 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} 0 0 0 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`,                             `color(${colorSpace} 0.7 0 0.3)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
   }
 
   for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
       const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;
 
       // Testing no modifications.
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`,                              `color(${resultColorSpace} 7 -20.5 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`,                      `color(${resultColorSpace} 7 -20.5 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`,                `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`,                              `color(${resultColorSpace} 7 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`,                      `color(${resultColorSpace} 7 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`,                `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
 
       // Test nesting relative colors.
-      test_computed_value(`color`, `color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`,        `color(${resultColorSpace} 7 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`,        `color(${resultColorSpace} 7 -20.5 100)`);
 
       // Testing replacement with 0.
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`,                              `color(${resultColorSpace} 0 0 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`,                          `color(${resultColorSpace} 0 0 0 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`,                      `color(${resultColorSpace} 0 -20.5 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`,                      `color(${resultColorSpace} 7 0 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`,                      `color(${resultColorSpace} 7 -20.5 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`,                          `color(${resultColorSpace} 7 -20.5 100 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`,                `color(${resultColorSpace} 0 -20.5 100 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`,                `color(${resultColorSpace} 7 0 100 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`,                `color(${resultColorSpace} 7 -20.5 0 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`,                    `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`,                              `color(${resultColorSpace} 0 0 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`,                          `color(${resultColorSpace} 0 0 0 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`,                      `color(${resultColorSpace} 0 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`,                      `color(${resultColorSpace} 7 0 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`,                      `color(${resultColorSpace} 7 -20.5 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`,                          `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`,                `color(${resultColorSpace} 0 -20.5 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`,                `color(${resultColorSpace} 7 0 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`,                `color(${resultColorSpace} 7 -20.5 0 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`,                    `color(${resultColorSpace} 7 -20.5 100 / 0)`);
 
       // Testing replacement with a constant.
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`,                    `color(${resultColorSpace} 0.2 -20.5 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`,                    `color(${resultColorSpace} 7 0.2 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`,                    `color(${resultColorSpace} 7 -20.5 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`,              `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`,              `color(${resultColorSpace} 7 0.2 100 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`,              `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`,                  `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`,                    `color(${resultColorSpace} 0.2 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`,                    `color(${resultColorSpace} 7 0.2 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`,                    `color(${resultColorSpace} 7 -20.5 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`,              `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`,              `color(${resultColorSpace} 7 0.2 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`,              `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`,                  `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
 
       // Testing valid permutation (types match).
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`,                              `color(${resultColorSpace} -20.5 100 7)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`,                          `color(${resultColorSpace} 7 7 7)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`,                        `color(${resultColorSpace} -20.5 100 7 / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`,                    `color(${resultColorSpace} 7 7 7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`,                              `color(${resultColorSpace} -20.5 100 7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`,                          `color(${resultColorSpace} 7 7 7)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`,                        `color(${resultColorSpace} -20.5 100 7 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`,                    `color(${resultColorSpace} 7 7 7)`);
 
       // Testing with calc().
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`,                        `color(${resultColorSpace} 7 -20.5 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`,    `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`,                        `color(${resultColorSpace} 7 -20.5 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`,    `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
 
       // Testing with 'none'.
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`,                     `color(${resultColorSpace} none none none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`,              `color(${resultColorSpace} none none none / none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`,                           `color(${resultColorSpace} 7 -20.5 none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`,                   `color(${resultColorSpace} 7 -20.5 none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`,                       `color(${resultColorSpace} 7 -20.5 100 / none)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`,             `color(${resultColorSpace} 7 -20.5 none / 0.4)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`,                 `color(${resultColorSpace} 7 -20.5 100 / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`,                     `color(${resultColorSpace} none none none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`,              `color(${resultColorSpace} none none none / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`,                           `color(${resultColorSpace} 7 -20.5 none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`,                   `color(${resultColorSpace} 7 -20.5 none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`,                       `color(${resultColorSpace} 7 -20.5 100 / none)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`,             `color(${resultColorSpace} 7 -20.5 none / 0.4)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`,                 `color(${resultColorSpace} 7 -20.5 100 / none)`);
       // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-      test_computed_value(`color`, `color(from color(${colorSpace} none none none) ${colorSpace} x y z)`,                           `color(${resultColorSpace} 0 0 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`,            `color(${resultColorSpace} 0 0 0 / 0)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`,                               `color(${resultColorSpace} 7 0 100)`);
-      test_computed_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`,               `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} none none none) ${colorSpace} x y z)`,                           `color(${resultColorSpace} 0 0 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`,            `color(${resultColorSpace} 0 0 0 / 0)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`,                               `color(${resultColorSpace} 7 0 100)`);
+      fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`,               `color(${resultColorSpace} 7 -20.5 100 / 0)`);
   }
 
     // Spec Examples
 
     // Example 11.
-    test_computed_value(`color`, `rgb(from var(--bg-color) r g b / 80%)`, `rgba(0, 0, 255, 0.8)`);
+    fuzzy_test_computed_color(`rgb(from var(--bg-color) r g b / 80%)`, `rgba(0, 0, 255, 0.8)`);
 
     // Example 12.
-    test_computed_value(`color`, `lch(from var(--color) calc(l / 2) c h)`, `lch(23.138971 67.989716 134.39125)`);
+    fuzzy_test_computed_color(`lch(from var(--color) calc(l / 2) c h)`, `lch(23.138971 67.989716 134.39125)`);
 
     // Example 13.
-    test_computed_value(`color`, `rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`, `rgb(76, 76, 76)`)
-    test_computed_value(`color`, `lch(from var(--color) l 0 h)`, `lch(46.277943 0 134.39125)`)
+    fuzzy_test_computed_color(`rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`, `rgb(76, 76, 76)`)
+    fuzzy_test_computed_color(`lch(from var(--color) l 0 h)`, `lch(46.277943 0 134.39125)`)
 
     // Example 14.
-    test_computed_value(`color`, `rgb(from indianred 255 g b)`, `rgb(255, 92, 92)`);
+    fuzzy_test_computed_color(`rgb(from indianred 255 g b)`, `rgb(255, 92, 92)`);
 
     // Example 15.
-    test_computed_value(`color`, `hsl(from var(--accent) calc(h + 180deg) s l)`, `rgb(178, 32, 40)`);
+    fuzzy_test_computed_color(`hsl(from var(--accent) calc(h + 180deg) s l)`, `rgb(178, 32, 40)`);
 
     // Example 16.
-    test_computed_value(`color`, `lab(from var(--mycolor) l a b / 100%)`, `lab(62.751923 52.45802 -34.117283)`);
-    test_computed_value(`color`, `lab(from var(--mycolor) l a b / calc(alpha * 0.8))`, `lab(62.751923 52.45802 -34.117283 / 0.8)`);
-    test_computed_value(`color`, `lab(from var(--mycolor) l a b / calc(alpha - 20%))`, `lab(62.751923 52.45802 -34.117283 / 0.8)`);
+    fuzzy_test_computed_color(`lab(from var(--mycolor) l a b / 100%)`, `lab(62.751923 52.45802 -34.117283)`);
+    fuzzy_test_computed_color(`lab(from var(--mycolor) l a b / calc(alpha * 0.8))`, `lab(62.751923 52.45802 -34.117283 / 0.8)`);
+    fuzzy_test_computed_color(`lab(from var(--mycolor) l a b / calc(alpha - 20%))`, `lab(62.751923 52.45802 -34.117283 / 0.8)`);
 
     // Example 17.
-    test_computed_value(`color`, `lab(from var(--mycolor) l 0 0)`, `lab(62.751923 0 0)`);
+    fuzzy_test_computed_color(`lab(from var(--mycolor) l 0 0)`, `lab(62.751923 0 0)`);
 
     // Example 18.
-    test_computed_value(`color`, `lch(from peru calc(l * 0.8) c h)`, `lch(49.80138 54.003296 63.680317)`);
+    fuzzy_test_computed_color(`lch(from peru calc(l * 0.8) c h)`, `lch(49.80138 54.003296 63.680317)`);
 
     // Example 19.
-    test_computed_value(`color`, `LCH(from var(--accent) l c calc(h + 180deg))`, `lch(65.49473 39.446903 10.114471)`);
+    fuzzy_test_computed_color(`LCH(from var(--accent) l c calc(h + 180deg))`, `lch(65.49473 39.446903 10.114471)`);
 
     // Example 20.
-    test_computed_value(`color`, `lch(from var(--mycolor) l 0 h)`, `lch(62.751923 0 326.96112)`);
-    test_computed_value(`color`, `var(--mygray)`, `lch(62.751923 0 326.96112)`);
-    test_computed_value(`color`, `lch(from var(--mygray) l 30 h)`, `lch(62.751923 30 326.96112)`);
+    fuzzy_test_computed_color(`lch(from var(--mycolor) l 0 h)`, `lch(62.751923 0 326.96112)`);
+    fuzzy_test_computed_color(`var(--mygray)`, `lch(62.751923 0 326.96112)`);
+    fuzzy_test_computed_color(`lch(from var(--mygray) l 30 h)`, `lch(62.751923 30 326.96112)`);
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-mix-out-of-gamut.html b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-mix-out-of-gamut.html
index 1803397..d3e8a356 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-mix-out-of-gamut.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-mix-out-of-gamut.html
@@ -12,29 +12,30 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/computed-testcommon.js"></script>
+<script src="/css/support/color-testcommon.js"></script>
 </head>
 <body>
 <div id="target"></div>
 <script>
-    test_computed_value(`color`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`);
-    test_computed_value(`color`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`);
-    test_computed_value(`color`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`);
-    test_computed_value(`color`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`);
-    test_computed_value(`color`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`);
-    test_computed_value(`color`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`);
-    test_computed_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`);
-    test_computed_value(`color`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358734 1.38664)`);
-    test_computed_value(`color`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.076536 -0.045825 0.0937443)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358734 1.38664)`);
+    fuzzy_test_computed_color(`color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.076536 -0.045825 0.0937443)`);
 
-    test_computed_value(`color`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`);
-    test_computed_value(`color`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`);
-    test_computed_value(`color`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`);
-    test_computed_value(`color`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`);
-    test_computed_value(`color`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`);
-    test_computed_value(`color`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`);
-    test_computed_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`);
-    test_computed_value(`color`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358736 1.38664)`);
-    test_computed_value(`color`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0765361 -0.045825 0.0937443)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358736 1.38664)`);
+    fuzzy_test_computed_color(`color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0765361 -0.045825 0.0937443)`);
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color-expected.txt
index c2204b5..42ce55a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 910 tests; 902 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 910 tests; 904 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS e.style['color'] = "rgb(from rebeccapurple r g b)" should set the property value
 PASS e.style['color'] = "rgb(from rebeccapurple r g b / alpha)" should set the property value
 PASS e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)" should set the property value
@@ -41,7 +41,7 @@
 PASS e.style['color'] = "rgb(from rebeccapurple b alpha r / g)" should set the property value
 PASS e.style['color'] = "rgb(from rebeccapurple r r r / r)" should set the property value
 PASS e.style['color'] = "rgb(from rebeccapurple alpha alpha alpha / alpha)" should set the property value
-FAIL e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) g b r)" should set the property value assert_equals: serialization should be canonical expected "rgb(102, 153, 51)" but got "rgba(102, 153, 51, 0.8)"
+FAIL e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) g b r)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. lengths differ, expected 3 got 4
 PASS e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)" should set the property value
 PASS e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)" should set the property value
 PASS e.style['color'] = "rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)" should set the property value
@@ -90,12 +90,12 @@
 PASS e.style['color'] = "hsl(from rebeccapurple 25 s l / alpha)" should set the property value
 PASS e.style['color'] = "hsl(from rebeccapurple 25deg s l / alpha)" should set the property value
 PASS e.style['color'] = "hsl(from rebeccapurple h 20% l / alpha)" should set the property value
-FAIL e.style['color'] = "hsl(from rebeccapurple h s 20% / alpha)" should set the property value assert_equals: serialization should be canonical expected "rgb(51, 25, 77)" but got "rgb(51, 26, 77)"
+FAIL e.style['color'] = "hsl(from rebeccapurple h s 20% / alpha)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. property 1, expected 25 +/- 0.0001, expected 25 but got 26
 PASS e.style['color'] = "hsl(from rebeccapurple h s l / .25)" should set the property value
 PASS e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)" should set the property value
 PASS e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)" should set the property value
 PASS e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)" should set the property value
-FAIL e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)" should set the property value assert_equals: serialization should be canonical expected "rgba(25, 51, 77, 0.8)" but got "rgba(26, 51, 77, 0.8)"
+FAIL e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 25 +/- 0.0001, expected 25 but got 26
 PASS e.style['color'] = "hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)" should set the property value
 PASS e.style['color'] = "hsl(from rebeccapurple h l s)" should set the property value
 PASS e.style['color'] = "hsl(from rebeccapurple h alpha l / s)" should set the property value
@@ -199,7 +199,7 @@
 PASS e.style['color'] = "lab(from lab(25 20 50 / 40%) l 35 b / alpha)" should set the property value
 PASS e.style['color'] = "lab(from lab(25 20 50 / 40%) l a 35 / alpha)" should set the property value
 PASS e.style['color'] = "lab(from lab(25 20 50 / 40%) l a b / .35)" should set the property value
-FAIL e.style['color'] = "lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)" should set the property value assert_equals: serialization should be canonical expected "lab(200 300 400)" but got "lab(100 300 400)"
+FAIL e.style['color'] = "lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 200 +/- 0.0001, expected 200 but got 100
 PASS e.style['color'] = "lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)" should set the property value
 PASS e.style['color'] = "lab(from lab(25 20 50) l b a)" should set the property value
 PASS e.style['color'] = "lab(from lab(25 20 50) l a a / a)" should set the property value
@@ -269,7 +269,7 @@
 PASS e.style['color'] = "lch(from lch(-200 -300 -400 / -500%) l c h / alpha)" should set the property value
 PASS e.style['color'] = "lch(from lch(from lch(0.7 45 30) l c h) l c h)" should set the property value
 PASS e.style['color'] = "lch(from color(display-p3 0 0 0) l c h / alpha)" should set the property value
-FAIL e.style['color'] = "lch(from lab(0.7 45 30) l c h / alpha)" should set the property value assert_equals: serialization should be canonical expected "lch(0.7 54.08327 33.690067)" but got "lch(0.7 54.0833 33.6901)"
+PASS e.style['color'] = "lch(from lab(0.7 45 30) l c h / alpha)" should set the property value
 PASS e.style['color'] = "lch(from lch(0.7 45 30) 0 0 0)" should set the property value
 PASS e.style['color'] = "lch(from lch(0.7 45 30) 0 0 0deg)" should set the property value
 PASS e.style['color'] = "lch(from lch(0.7 45 30) 0 0 0 / 0)" should set the property value
@@ -320,7 +320,7 @@
 PASS e.style['color'] = "oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)" should set the property value
 PASS e.style['color'] = "oklch(from color(display-p3 0 0 0) l c h / alpha)" should set the property value
-FAIL e.style['color'] = "oklch(from oklab(0.7 45 30) l c h / alpha)" should set the property value assert_equals: serialization should be canonical expected "oklch(0.7 54.08327 33.690067)" but got "oklch(0.7 54.0833 33.6901)"
+PASS e.style['color'] = "oklch(from oklab(0.7 45 30) l c h / alpha)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30) 0 0 0)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30) 0 0 0deg)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)" should set the property value
@@ -345,7 +345,7 @@
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) l c 0.25 / alpha)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)" should set the property value
-FAIL e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)" should set the property value assert_equals: serialization should be canonical expected "oklch(2 3 40)" but got "oklch(1 3 40)"
+FAIL e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 2 +/- 0.0001, expected 2 but got 1
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)" should set the property value
 PASS e.style['color'] = "oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)" should set the property value
@@ -905,7 +905,7 @@
 PASS e.style['color'] = "lab(from var(--mycolor) l a b / calc(alpha * 0.8))" should set the property value
 PASS e.style['color'] = "lab(from var(--mycolor) l a b / calc(alpha - 20%))" should set the property value
 PASS e.style['color'] = "lab(from var(--mycolor) l 0 0)" should set the property value
-FAIL e.style['color'] = "lch(from peru calc(l * 0.8) c h)" should set the property value assert_equals: serialization should be canonical expected "lch(49.80138 54.003296 63.680317)" but got "lch(49.7972 54.0177 63.6639)"
+FAIL e.style['color'] = "lch(from peru calc(l * 0.8) c h)" should set the property value assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 49.80138 +/- 0.0001, expected 49.80138 but got 49.7972
 PASS e.style['color'] = "LCH(from var(--accent) l c calc(h + 180deg))" should set the property value
 PASS e.style['color'] = "lch(from var(--mycolor) l 0 h)" should set the property value
 PASS e.style['color'] = "var(--mygray)" should set the property value
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color.html b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color.html
index 85a27df..3700d69 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-relative-color.html
@@ -10,6 +10,7 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/parsing-testcommon.js"></script>
+<script src="/css/support/color-testcommon.js"></script>
 <style>
     html {
         --bg-color: blue;
@@ -25,690 +26,690 @@
     // rgb(from ...)
 
     // Testing no modifications.
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b / alpha)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `rgba(102, 153, 102, 0.5)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / alpha)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `rgb(from rgb(from rebeccapurple r g b) r g b)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rgb(from rebeccapurple r g b) r g b)`, `rgb(102, 51, 153)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `rgb(from rebeccapurple 0 0 0)`, `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple 0 0 0 / 0)`, `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple 0 g b / alpha)`, `rgb(0, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r 0 b / alpha)`, `rgb(102, 0, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g 0 / alpha)`, `rgb(102, 51, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b / 0)`, `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `rgba(0, 102, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `rgba(51, 0, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `rgba(51, 102, 0, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `rgba(51, 102, 153, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 0 0 0)`, `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 0 0 0 / 0)`, `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 0 g b / alpha)`, `rgb(0, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 0 b / alpha)`, `rgb(102, 0, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g 0 / alpha)`, `rgb(102, 51, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / 0)`, `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `rgba(0, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `rgba(51, 0, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `rgba(51, 102, 0, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `rgba(51, 102, 153, 0)`);
 
     // Testing replacement with a number.
-    test_valid_value(`color`, `rgb(from rebeccapurple 25 g b / alpha)`, `rgb(25, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r 25 b / alpha)`, `rgb(102, 25, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g 25 / alpha)`, `rgb(102, 51, 25)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b / .25)`, `rgba(102, 51, 153, 0.25)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `rgba(25, 102, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `rgba(51, 25, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `rgba(51, 102, 25, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `rgba(51, 102, 153, 0.2)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 25 g b / alpha)`, `rgb(25, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 25 b / alpha)`, `rgb(102, 25, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g 25 / alpha)`, `rgb(102, 51, 25)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / .25)`, `rgba(102, 51, 153, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `rgba(25, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `rgba(51, 25, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `rgba(51, 102, 25, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `rgba(51, 102, 153, 0.2)`);
 
     // Testing replacement with a percentage.
-    test_valid_value(`color`, `rgb(from rebeccapurple 20% g b / alpha)`, `rgb(51, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r 20% b / alpha)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g 20% / alpha)`, `rgb(102, 51, 51)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b / 20%)`, `rgba(102, 51, 153, 0.2)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `rgba(51, 51, 153, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `rgba(51, 102, 51, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `rgba(51, 102, 153, 0.2)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 20% g b / alpha)`, `rgb(51, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 20% b / alpha)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g 20% / alpha)`, `rgb(102, 51, 51)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / 20%)`, `rgba(102, 51, 153, 0.2)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `rgba(51, 51, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `rgba(51, 102, 51, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `rgba(51, 102, 153, 0.2)`);
 
     // Testing replacement with a number for r, g, b but percent for alpha.
-    test_valid_value(`color`, `rgb(from rebeccapurple 25 g b / 25%)`, `rgba(25, 51, 153, 0.25)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r 25 b / 25%)`, `rgba(102, 25, 153, 0.25)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g 25 / 25%)`, `rgba(102, 51, 25, 0.25)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `rgba(25, 102, 153, 0.25)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `rgba(51, 25, 153, 0.25)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `rgba(51, 102, 25, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 25 g b / 25%)`, `rgba(25, 51, 153, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 25 b / 25%)`, `rgba(102, 25, 153, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g 25 / 25%)`, `rgba(102, 51, 25, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `rgba(25, 102, 153, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `rgba(51, 25, 153, 0.25)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `rgba(51, 102, 25, 0.25)`);
 
     // Testing permutation.
-    test_valid_value(`color`, `rgb(from rebeccapurple g b r)`, `rgb(51, 153, 102)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple b alpha r / g)`, `rgba(153, 255, 102, 0.2)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r r r / r)`, `rgba(102, 102, 102, 0.4)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple alpha alpha alpha / alpha)`, `rgb(255, 255, 255)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `rgb(102, 153, 51)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `rgba(153, 204, 51, 0.4)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `rgba(51, 51, 51, 0.2)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `rgba(204, 204, 204, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple g b r)`, `rgb(51, 153, 102)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple b alpha r / g)`, `rgba(153, 255, 102, 0.2)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r r r / r)`, `rgba(102, 102, 102, 0.4)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple alpha alpha alpha / alpha)`, `rgb(255, 255, 255)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `rgb(102, 153, 51)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `rgba(153, 204, 51, 0.4)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `rgba(51, 51, 51, 0.2)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `rgba(204, 204, 204, 0.8)`);
 
     // Testing mixes of number and percentage. (These would not be allowed in the non-relative syntax).
-    test_valid_value(`color`, `rgb(from rebeccapurple r 20% 10)`, `rgb(102, 51, 10)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r 10 20%)`, `rgb(102, 10, 51)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple 0% 10 10)`, `rgb(0, 10, 10)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `rgba(51, 51, 10, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `rgba(51, 10, 51, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `rgba(0, 10, 10, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 20% 10)`, `rgb(102, 51, 10)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r 10 20%)`, `rgb(102, 10, 51)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple 0% 10 10)`, `rgb(0, 10, 10)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `rgba(51, 51, 10, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `rgba(51, 10, 51, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `rgba(0, 10, 10, 0.8)`);
 
         // r    g    b
         // 102  51   153
         // 40%  20%  60%)
     // Testing with calc().
-    test_valid_value(`color`, `rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r calc(g * 2) 10)`, `rgb(102, 102, 10)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple b calc(r * .5) 10)`, `rgb(153, 51, 10)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `rgb(102, 51, 10)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `rgb(102, 51, 10)`);
-    test_valid_value(`color`, `rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(g * 2) 10)`, `rgb(102, 102, 10)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple b calc(r * .5) 10)`, `rgb(153, 51, 10)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `rgb(102, 51, 10)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `rgb(102, 51, 10)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `rgb(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g none)`,                               `rgb(102, 51, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g none / alpha)`,                       `rgb(102, 51, 0)`);
-    test_valid_value(`color`, `rgb(from rebeccapurple r g b / none)`,                           `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`,              `rgba(51, 102, 0, 0.8)`);
-    test_valid_value(`color`, `rgb(from rgb(20% 40% 60% / 80%) r g b / none)`,                  `rgba(51, 102, 153, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g none)`,                               `rgb(102, 51, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g none / alpha)`,                       `rgb(102, 51, 0)`);
+    fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / none)`,                           `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`,              `rgba(51, 102, 0, 0.8)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / 80%) r g b / none)`,                  `rgba(51, 102, 153, 0)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `rgb(from rgb(none none none) r g b)`,                            `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rgb(none none none / none) r g b / alpha)`,             `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `rgb(from rgb(20% none 60%) r g b)`,                              `rgb(51, 0, 153)`);
-    test_valid_value(`color`, `rgb(from rgb(20% 40% 60% / none) r g b / alpha)`,                `rgba(51, 102, 153, 0)`);
+    fuzzy_test_valid_color(`rgb(from rgb(none none none) r g b)`,                            `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rgb(none none none / none) r g b / alpha)`,             `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20% none 60%) r g b)`,                              `rgb(51, 0, 153)`);
+    fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / none) r g b / alpha)`,                `rgba(51, 102, 153, 0)`);
 
 
     // hsl(from ...)
 
     // Testing no modifications.
-    test_valid_value(`color`, `hsl(from rebeccapurple h s l)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s l / alpha)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `rgba(51, 102, 153, 0.8)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `rgba(102, 153, 102, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s l)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / alpha)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `hsl(from hsl(from rebeccapurple h s l) h s l)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hsl(from hsl(from rebeccapurple h s l) h s l)`, `rgb(102, 51, 153)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `hsl(from rebeccapurple 0 0% 0%)`, `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 0deg 0% 0%)`, `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 0 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 0 s l / alpha)`, `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 0deg s l / alpha)`, `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h 0% l / alpha)`, `rgb(102, 102, 102)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s 0% / alpha)`, `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s l / 0)`, `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `rgba(102, 102, 102, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `rgba(0, 0, 0, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `rgba(51, 102, 153, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0 0% 0%)`, `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg 0% 0%)`, `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0 s l / alpha)`, `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg s l / alpha)`, `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h 0% l / alpha)`, `rgb(102, 102, 102)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s 0% / alpha)`, `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / 0)`, `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `rgba(153, 51, 51, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `rgba(102, 102, 102, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `rgba(0, 0, 0, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `rgba(51, 102, 153, 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `hsl(from rebeccapurple 25 s l / alpha)`, `rgb(153, 94, 51)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple 25deg s l / alpha)`, `rgb(153, 94, 51)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h 20% l / alpha)`, `rgb(102, 82, 122)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s 20% / alpha)`, `rgb(51, 25, 77)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s l / .25)`, `rgba(102, 51, 153, 0.25)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `rgba(82, 102, 122, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `rgba(25, 51, 77, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `rgba(51, 102, 153, 0.2)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 25 s l / alpha)`, `rgb(153, 94, 51)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple 25deg s l / alpha)`, `rgb(153, 94, 51)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h 20% l / alpha)`, `rgb(102, 82, 122)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s 20% / alpha)`, `rgb(51, 25, 77)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / .25)`, `rgba(102, 51, 153, 0.25)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `rgba(153, 94, 51, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `rgba(82, 102, 122, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `rgba(25, 51, 77, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `rgba(51, 102, 153, 0.2)`);
 
     // Testing valid permutation (types match).
-    test_valid_value(`color`, `hsl(from rebeccapurple h l s)`, `rgb(128, 77, 179)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h alpha l / s)`, `rgba(102, 0, 204, 0.5)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h l l / l)`, `rgba(102, 61, 143, 0.4)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h alpha alpha / alpha)`, `rgb(255, 255, 255)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `rgba(77, 128, 179, 0.8)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `rgba(20, 102, 184, 0.5)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `rgba(61, 102, 143, 0.4)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(163, 204, 245, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h l s)`, `rgb(128, 77, 179)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h alpha l / s)`, `rgba(102, 0, 204, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h l l / l)`, `rgba(102, 61, 143, 0.4)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h alpha alpha / alpha)`, `rgb(255, 255, 255)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `rgba(77, 128, 179, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `rgba(20, 102, 184, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `rgba(61, 102, 143, 0.4)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(163, 204, 245, 0.8)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `hsl(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s none)`,                               `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s none / alpha)`,                       `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple h s l / none)`,                           `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `hsl(from rebeccapurple none s l / alpha)`,                       `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`,            `rgba(0, 0, 0, 0.5)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) h s l / none)`,                `rgba(102, 153, 102, 0)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`,            `rgba(153, 102, 102, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple none none none)`,                         `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple none none none / none)`,                  `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s none)`,                               `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s none / alpha)`,                       `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / none)`,                           `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`hsl(from rebeccapurple none s l / alpha)`,                       `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`,            `rgba(0, 0, 0, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / none)`,                `rgba(102, 153, 102, 0)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`,            `rgba(153, 102, 102, 0.5)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `hsl(from hsl(none none none) h s l)`,                            `rgb(0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from hsl(none none none / none) h s l / alpha)`,             `rgba(0, 0, 0, 0)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg none 50% / .5) h s l)`,                      `rgba(128, 128, 128, 0.5)`);
-    test_valid_value(`color`, `hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`,             `rgba(102, 153, 102, 0)`);
-    test_valid_value(`color`, `hsl(from hsl(none 20% 50% / .5) h s l / alpha)`,                 `rgba(153, 102, 102, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from hsl(none none none) h s l)`,                            `rgb(0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from hsl(none none none / none) h s l / alpha)`,             `rgba(0, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg none 50% / .5) h s l)`,                      `rgba(128, 128, 128, 0.5)`);
+    fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`,             `rgba(102, 153, 102, 0)`);
+    fuzzy_test_valid_color(`hsl(from hsl(none 20% 50% / .5) h s l / alpha)`,                 `rgba(153, 102, 102, 0.5)`);
 
     // hwb(from ...)
 
     // Testing no modifications.
-    test_valid_value(`color`, `hwb(from rebeccapurple h w b)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w b / alpha)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-    test_valid_value(`color`, `hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `rgba(102, 153, 102, 0.5)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w b)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / alpha)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `rgba(102, 153, 102, 0.5)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `hwb(from hwb(from rebeccapurple h w b) h w b)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hwb(from hwb(from rebeccapurple h w b) h w b)`, `rgb(102, 51, 153)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `hwb(from rebeccapurple 0 0% 0%)`, `rgb(255, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 0deg 0% 0%)`, `rgb(255, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 0 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 0 w b / alpha)`, `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 0deg w b / alpha)`, `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h 0% b / alpha)`, `rgb(77, 0, 153)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w 0% / alpha)`, `rgb(153, 51, 255)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w b / 0)`, `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `rgba(0, 77, 153, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `rgba(51, 153, 255, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `rgba(51, 102, 153, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0 0% 0%)`, `rgb(255, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg 0% 0%)`, `rgb(255, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg 0% 0% / 0)`, `rgba(255, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0 w b / alpha)`, `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg w b / alpha)`, `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h 0% b / alpha)`, `rgb(77, 0, 153)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w 0% / alpha)`, `rgb(153, 51, 255)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / 0)`, `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `rgba(153, 51, 51, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `rgba(0, 77, 153, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `rgba(51, 153, 255, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `rgba(51, 102, 153, 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `hwb(from rebeccapurple 25 w b / alpha)`, `rgb(153, 94, 51)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple 25deg w b / alpha)`, `rgb(153, 94, 51)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h 20% b / alpha)`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w 20% / alpha)`, `rgb(128, 51, 204)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w b / .2)`, `rgba(102, 51, 153, 0.2)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `rgba(51, 102, 153, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `rgba(51, 128, 204, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `rgba(51, 102, 153, 0.2)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 25 w b / alpha)`, `rgb(153, 94, 51)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple 25deg w b / alpha)`, `rgb(153, 94, 51)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h 20% b / alpha)`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w 20% / alpha)`, `rgb(128, 51, 204)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / .2)`, `rgba(102, 51, 153, 0.2)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `rgba(153, 94, 51, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `rgba(51, 128, 204, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `rgba(51, 102, 153, 0.2)`);
 
     // Testing valid permutation (types match).
-    test_valid_value(`color`, `hwb(from rebeccapurple h b w)`, `rgb(153, 102, 204)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h alpha w / b)`, `rgba(213, 213, 213, 0.4)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w w / w)`, `rgba(128, 51, 204, 0.2)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h alpha alpha / alpha)`, `rgb(128, 128, 128)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `rgba(102, 153, 204, 0.8)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `rgba(204, 204, 204, 0.4)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `rgba(51, 128, 204, 0.2)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(128, 128, 128, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h b w)`, `rgb(153, 102, 204)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h alpha w / b)`, `rgba(213, 213, 213, 0.4)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w w / w)`, `rgba(128, 51, 204, 0.2)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h alpha alpha / alpha)`, `rgb(128, 128, 128)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `rgba(102, 153, 204, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `rgba(204, 204, 204, 0.4)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `rgba(51, 128, 204, 0.2)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `rgba(128, 128, 128, 0.8)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `rgb(102, 51, 153)`);
-    test_valid_value(`color`, `hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `rgb(102, 51, 153)`);
+    fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `rgba(51, 102, 153, 0.8)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `hwb(from rebeccapurple none none none)`,                         `rgb(255, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple none none none / none)`,                  `rgba(255, 0, 0, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w none)`,                               `rgb(153, 51, 255)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w none / alpha)`,                       `rgb(153, 51, 255)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple h w b / none)`,                           `rgba(102, 51, 153, 0)`);
-    test_valid_value(`color`, `hwb(from rebeccapurple none w b / alpha)`,                       `rgb(153, 51, 51)`);
-    test_valid_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`,            `rgba(51, 255, 51, 0.5)`);
-    test_valid_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) h w b / none)`,                `rgba(51, 128, 51, 0)`);
-    test_valid_value(`color`, `hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`,            `rgba(128, 51, 51, 0.5)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple none none none)`,                         `rgb(255, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple none none none / none)`,                  `rgba(255, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w none)`,                               `rgb(153, 51, 255)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w none / alpha)`,                       `rgb(153, 51, 255)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / none)`,                           `rgba(102, 51, 153, 0)`);
+    fuzzy_test_valid_color(`hwb(from rebeccapurple none w b / alpha)`,                       `rgb(153, 51, 51)`);
+    fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`,            `rgba(51, 255, 51, 0.5)`);
+    fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) h w b / none)`,                `rgba(51, 128, 51, 0)`);
+    fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`,            `rgba(128, 51, 51, 0.5)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `hwb(from hwb(none none none) h w b)`,                            `rgb(255, 0, 0)`);
-    test_valid_value(`color`, `hwb(from hwb(none none none / none) h w b / alpha)`,             `rgba(255, 0, 0, 0)`);
-    test_valid_value(`color`, `hwb(from hwb(120deg none 50% / .5) h w b)`,                      `rgba(0, 128, 0, 0.5)`);
-    test_valid_value(`color`, `hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`,             `rgba(51, 128, 51, 0)`);
-    test_valid_value(`color`, `hwb(from hwb(none 20% 50% / .5) h w b / alpha)`,                 `rgba(128, 51, 51, 0.5)`);
+    fuzzy_test_valid_color(`hwb(from hwb(none none none) h w b)`,                            `rgb(255, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from hwb(none none none / none) h w b / alpha)`,             `rgba(255, 0, 0, 0)`);
+    fuzzy_test_valid_color(`hwb(from hwb(120deg none 50% / .5) h w b)`,                      `rgba(0, 128, 0, 0.5)`);
+    fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`,             `rgba(51, 128, 51, 0)`);
+    fuzzy_test_valid_color(`hwb(from hwb(none 20% 50% / .5) h w b / alpha)`,                 `rgba(128, 51, 51, 0.5)`);
 
     // lab()
 
     // Testing no modifications.
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(100 300 400)`);
-    test_valid_value(`color`, `lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(100 300 400)`);
+    fuzzy_test_valid_color(`lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`);
 
     // Testing non-lab origin to see conversion.
-    test_valid_value(`color`, `lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`);
+    fuzzy_test_valid_color(`lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`);
-    test_valid_value(`color`, `lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(200 300 400)`);
-    test_valid_value(`color`, `lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`);
+    fuzzy_test_valid_color(`lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(200 300 400)`);
+    fuzzy_test_valid_color(`lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`);
 
     // Testing valid permutation (types match).
-    test_valid_value(`color`, `lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `lab(from lab(25 20 50) none none none)`, `lab(none none none)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) none none none)`, `lab(none none none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `lab(from lab(none none none) l a b)`, `lab(0 0 0)`);
-    test_valid_value(`color`, `lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`);
-    test_valid_value(`color`, `lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`);
-    test_valid_value(`color`, `lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(none none none) l a b)`, `lab(0 0 0)`);
+    fuzzy_test_valid_color(`lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`);
+    fuzzy_test_valid_color(`lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`);
 
     // oklab()
 
     // Testing no modifications.
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`);
-    test_valid_value(`color`, `oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`);
 
     // Testing non-oklab origin to see conversion.
-    test_valid_value(`color`, `oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`);
+    fuzzy_test_valid_color(`oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
-    test_valid_value(`color`, `oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`);
 
     // Testing valid permutation (types match).
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`);
-    test_valid_value(`color`, `oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`);
-    test_valid_value(`color`, `oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`);
+    fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`);
 
     // lch()
 
     // Testing no modifications.
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(100 300 40)`);
-    test_valid_value(`color`, `lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(100 300 40)`);
+    fuzzy_test_valid_color(`lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`);
 
     // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space).
-    test_valid_value(`color`, `lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`);
-    test_valid_value(`color`, `lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`);
+    fuzzy_test_valid_color(`lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`);
+    fuzzy_test_valid_color(`lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(100 300 40)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(100 300 40)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`);
 
     // Testing valid permutation (types match).
     // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>.
-    test_valid_value(`color`, `lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`);
-    test_valid_value(`color`, `lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`);
+    fuzzy_test_valid_color(`lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) none none none)`,                                   `lch(none none none)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) none none none / none)`,                            `lch(none none none / none)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c none)`,                                         `lch(0.7 45 none)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c none / alpha)`,                                 `lch(0.7 45 none)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30) l c h / none)`,                                     `lch(0.7 45 30 / none)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c none / alpha)`,                           `lch(0.7 45 none / 0.4)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / 40%) l c h / none)`,                               `lch(0.7 45 30 / none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) none none none)`,                                   `lch(none none none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) none none none / none)`,                            `lch(none none none / none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c none)`,                                         `lch(0.7 45 none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c none / alpha)`,                                 `lch(0.7 45 none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / none)`,                                     `lch(0.7 45 30 / none)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c none / alpha)`,                           `lch(0.7 45 none / 0.4)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / none)`,                               `lch(0.7 45 30 / none)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `lch(from lch(none none none) l c h)`,                                       `lch(0 0 0)`);
-    test_valid_value(`color`, `lch(from lch(none none none / none) l c h / alpha)`,                        `lch(0 0 0 / 0)`);
-    test_valid_value(`color`, `lch(from lch(0.7 none 30) l c h)`,                                          `lch(0.7 0 30)`);
-    test_valid_value(`color`, `lch(from lch(0.7 45 30 / none) l c h / alpha)`,                             `lch(0.7 45 30 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(none none none) l c h)`,                                       `lch(0 0 0)`);
+    fuzzy_test_valid_color(`lch(from lch(none none none / none) l c h / alpha)`,                        `lch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 none 30) l c h)`,                                          `lch(0.7 0 30)`);
+    fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / none) l c h / alpha)`,                             `lch(0.7 45 30 / 0)`);
 
     // oklch()
 
     // Testing no modifications.
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`);
-    test_valid_value(`color`, `oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`);
+    fuzzy_test_valid_color(`oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`);
 
     // Test nesting relative colors.
-    test_valid_value(`color`, `oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`);
 
     // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space).
-    test_valid_value(`color`, `oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`);
+    fuzzy_test_valid_color(`oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`);
     // TODO: redo conversion with oklab(0.7 0.45 0.3)
-    test_valid_value(`color`, `oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`);
+    fuzzy_test_valid_color(`oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`);
 
     // Testing replacement with 0.
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`);
 
     // Testing replacement with a constant.
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(2 3 40)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(2 3 40)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`);
 
     // Testing valid permutation (types match).
     // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>.
-    test_valid_value(`color`, `oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`);
-    test_valid_value(`color`, `oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`);
+    fuzzy_test_valid_color(`oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`);
 
     // Testing with calc().
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`);
 
     // Testing with 'none'.
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) none none none)`,                                   `oklch(none none none)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) none none none / none)`,                            `oklch(none none none / none)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c none)`,                                         `oklch(0.7 0.45 none)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c none / alpha)`,                                 `oklch(0.7 0.45 none)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30) l c h / none)`,                                     `oklch(0.7 0.45 30 / none)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`,                           `oklch(0.7 0.45 none / 0.4)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`,                               `oklch(0.7 0.45 30 / none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) none none none)`,                                   `oklch(none none none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) none none none / none)`,                            `oklch(none none none / none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c none)`,                                         `oklch(0.7 0.45 none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c none / alpha)`,                                 `oklch(0.7 0.45 none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / none)`,                                     `oklch(0.7 0.45 30 / none)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`,                           `oklch(0.7 0.45 none / 0.4)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`,                               `oklch(0.7 0.45 30 / none)`);
     // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-    test_valid_value(`color`, `oklch(from oklch(none none none) l c h)`,                                       `oklch(0 0 0)`);
-    test_valid_value(`color`, `oklch(from oklch(none none none / none) l c h / alpha)`,                        `oklch(0 0 0 / 0)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 none 30) l c h)`,                                          `oklch(0.7 0 30)`);
-    test_valid_value(`color`, `oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`,                             `oklch(0.7 0.45 30 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(none none none) l c h)`,                                       `oklch(0 0 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(none none none / none) l c h / alpha)`,                        `oklch(0 0 0 / 0)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 none 30) l c h)`,                                          `oklch(0.7 0 30)`);
+    fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`,                             `oklch(0.7 0.45 30 / 0)`);
 
     for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) {
         // Testing no modifications.
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 0.7 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 0.7 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`,                `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 0.7 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 0.7 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`,                `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
 
         // Test nesting relative colors.
-        test_valid_value(`color`, `color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`,   `color(${colorSpace} 0.7 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`,   `color(${colorSpace} 0.7 0.5 0.3)`);
 
         // Testing replacement with 0.
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`,                              `color(${colorSpace} 0 0 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`,                          `color(${colorSpace} 0 0 0 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`,                      `color(${colorSpace} 0 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`,                      `color(${colorSpace} 0.7 0 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`,                      `color(${colorSpace} 0.7 0.5 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`,                          `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`,                `color(${colorSpace} 0 0.5 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`,                `color(${colorSpace} 0.7 0 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`,                `color(${colorSpace} 0.7 0.5 0 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`,                    `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`,                              `color(${colorSpace} 0 0 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`,                          `color(${colorSpace} 0 0 0 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`,                      `color(${colorSpace} 0 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`,                      `color(${colorSpace} 0.7 0 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`,                      `color(${colorSpace} 0.7 0.5 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`,                          `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`,                `color(${colorSpace} 0 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`,                `color(${colorSpace} 0.7 0 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`,                `color(${colorSpace} 0.7 0.5 0 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`,                    `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
 
         // Testing replacement with a constant.
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`,                              `color(${colorSpace} 2 3 4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`,                          `color(${colorSpace} 2 3 4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`,                           `color(${colorSpace} -2 -3 -4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`,                      `color(${colorSpace} -2 -3 -4 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`,                     `color(${colorSpace} 2 3 4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`,              `color(${colorSpace} 2 3 4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`,                  `color(${colorSpace} -2 -3 -4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`,          `color(${colorSpace} -2 -3 -4 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`,                    `color(${colorSpace} 0.2 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`,                    `color(${colorSpace} 0.7 0.2 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`,                    `color(${colorSpace} 0.7 0.5 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`,                        `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`,              `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`,              `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`,              `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`,                  `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`,                              `color(${colorSpace} 2 3 4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`,                          `color(${colorSpace} 2 3 4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`,                           `color(${colorSpace} -2 -3 -4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`,                      `color(${colorSpace} -2 -3 -4 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`,                     `color(${colorSpace} 2 3 4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`,              `color(${colorSpace} 2 3 4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`,                  `color(${colorSpace} -2 -3 -4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`,          `color(${colorSpace} -2 -3 -4 / 0)`);
 
         // Testing valid permutation (types match).
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`,                              `color(${colorSpace} 0.5 0.3 0.7)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`,                      `color(${colorSpace} 0.3 1 0.7 / 0.5)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`,                          `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`,          `color(${colorSpace} 1 1 1)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`,                        `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`,                `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`,                    `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`,    `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`,                              `color(${colorSpace} 0.5 0.3 0.7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`,                      `color(${colorSpace} 0.3 1 0.7 / 0.5)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`,                          `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`,          `color(${colorSpace} 1 1 1)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`,                        `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`,                `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`,                    `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`,    `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`);
 
         // Testing out of gamut components.
-        test_valid_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 1.7 1.5 1.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 1.7 1.5 1.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`,                       `color(${colorSpace} 1.7 1.5 1.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 1.7 1.5 1.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`,                           `color(${colorSpace} -0.7 -0.5 -0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`,                   `color(${colorSpace} -0.7 -0.5 -0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`,                    `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`,                              `color(${colorSpace} 1.7 1.5 1.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`,                      `color(${colorSpace} 1.7 1.5 1.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`,                       `color(${colorSpace} 1.7 1.5 1.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 1.7 1.5 1.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`,                           `color(${colorSpace} -0.7 -0.5 -0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`,                   `color(${colorSpace} -0.7 -0.5 -0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`,                    `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`);
 
         // Testing with calc().
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`,                        `color(${colorSpace} 0.7 0.5 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`,    `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`,                        `color(${colorSpace} 0.7 0.5 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`,    `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`);
 
         // Testing with 'none'.
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`,                     `color(${colorSpace} none none none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`,              `color(${colorSpace} none none none / none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`,                           `color(${colorSpace} 0.7 0.5 none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`,                   `color(${colorSpace} 0.7 0.5 none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`,                       `color(${colorSpace} 0.7 0.5 0.3 / none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`,             `color(${colorSpace} 0.7 0.5 none / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`,                 `color(${colorSpace} 0.7 0.5 0.3 / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`,                     `color(${colorSpace} none none none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`,              `color(${colorSpace} none none none / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`,                           `color(${colorSpace} 0.7 0.5 none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`,                   `color(${colorSpace} 0.7 0.5 none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`,                       `color(${colorSpace} 0.7 0.5 0.3 / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`,             `color(${colorSpace} 0.7 0.5 none / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`,                 `color(${colorSpace} 0.7 0.5 0.3 / none)`);
         // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-        test_valid_value(`color`, `color(from color(${colorSpace} none none none) ${colorSpace} r g b)`,                           `color(${colorSpace} 0 0 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} 0 0 0 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`,                             `color(${colorSpace} 0.7 0 0.3)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} none none none) ${colorSpace} r g b)`,                           `color(${colorSpace} 0 0 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`,            `color(${colorSpace} 0 0 0 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`,                             `color(${colorSpace} 0.7 0 0.3)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`,               `color(${colorSpace} 0.7 0.5 0.3 / 0)`);
     }
 
     for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
         const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;
 
         // Testing no modifications.
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`,                              `color(${resultColorSpace} 7 -20.5 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`,                      `color(${resultColorSpace} 7 -20.5 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`,                `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`,                              `color(${resultColorSpace} 7 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`,                      `color(${resultColorSpace} 7 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`,                `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
 
         // Test nesting relative colors.
-        test_valid_value(`color`, `color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`,        `color(${resultColorSpace} 7 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`,        `color(${resultColorSpace} 7 -20.5 100)`);
 
         // Testing replacement with 0.
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`,                              `color(${resultColorSpace} 0 0 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`,                          `color(${resultColorSpace} 0 0 0 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`,                      `color(${resultColorSpace} 0 -20.5 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`,                      `color(${resultColorSpace} 7 0 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`,                      `color(${resultColorSpace} 7 -20.5 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`,                          `color(${resultColorSpace} 7 -20.5 100 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`,                `color(${resultColorSpace} 0 -20.5 100 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`,                `color(${resultColorSpace} 7 0 100 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`,                `color(${resultColorSpace} 7 -20.5 0 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`,                    `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`,                              `color(${resultColorSpace} 0 0 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`,                          `color(${resultColorSpace} 0 0 0 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`,                      `color(${resultColorSpace} 0 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`,                      `color(${resultColorSpace} 7 0 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`,                      `color(${resultColorSpace} 7 -20.5 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`,                          `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`,                `color(${resultColorSpace} 0 -20.5 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`,                `color(${resultColorSpace} 7 0 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`,                `color(${resultColorSpace} 7 -20.5 0 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`,                    `color(${resultColorSpace} 7 -20.5 100 / 0)`);
 
         // Testing replacement with a constant.
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`,                    `color(${resultColorSpace} 0.2 -20.5 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`,                    `color(${resultColorSpace} 7 0.2 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`,                    `color(${resultColorSpace} 7 -20.5 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`,              `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`,              `color(${resultColorSpace} 7 0.2 100 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`,              `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`,                  `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`,                    `color(${resultColorSpace} 0.2 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`,                    `color(${resultColorSpace} 7 0.2 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`,                    `color(${resultColorSpace} 7 -20.5 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`,                        `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`,              `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`,              `color(${resultColorSpace} 7 0.2 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`,              `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`,                  `color(${resultColorSpace} 7 -20.5 100 / 0.2)`);
 
         // Testing valid permutation (types match).
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`,                              `color(${resultColorSpace} -20.5 100 7)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`,                          `color(${resultColorSpace} 7 7 7)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`,                        `color(${resultColorSpace} -20.5 100 7 / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`,                    `color(${resultColorSpace} 7 7 7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`,                              `color(${resultColorSpace} -20.5 100 7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`,                          `color(${resultColorSpace} 7 7 7)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`,                        `color(${resultColorSpace} -20.5 100 7 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`,                    `color(${resultColorSpace} 7 7 7)`);
 
         // Testing with calc().
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`,                        `color(${resultColorSpace} 7 -20.5 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`,    `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`,                        `color(${resultColorSpace} 7 -20.5 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`,    `color(${resultColorSpace} 7 -20.5 100 / 0.4)`);
 
         // Testing with 'none'.
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`,                     `color(${resultColorSpace} none none none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`,              `color(${resultColorSpace} none none none / none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`,                           `color(${resultColorSpace} 7 -20.5 none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`,                   `color(${resultColorSpace} 7 -20.5 none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`,                       `color(${resultColorSpace} 7 -20.5 100 / none)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`,             `color(${resultColorSpace} 7 -20.5 none / 0.4)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`,                 `color(${resultColorSpace} 7 -20.5 100 / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`,                     `color(${resultColorSpace} none none none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`,              `color(${resultColorSpace} none none none / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`,                           `color(${resultColorSpace} 7 -20.5 none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`,                   `color(${resultColorSpace} 7 -20.5 none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`,                       `color(${resultColorSpace} 7 -20.5 100 / none)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`,             `color(${resultColorSpace} 7 -20.5 none / 0.4)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`,                 `color(${resultColorSpace} 7 -20.5 100 / none)`);
         // FIXME: Clarify with spec editors if 'none' should pass through to the constants.
-        test_valid_value(`color`, `color(from color(${colorSpace} none none none) ${colorSpace} x y z)`,                           `color(${resultColorSpace} 0 0 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`,            `color(${resultColorSpace} 0 0 0 / 0)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`,                               `color(${resultColorSpace} 7 0 100)`);
-        test_valid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`,               `color(${resultColorSpace} 7 -20.5 100 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} none none none) ${colorSpace} x y z)`,                           `color(${resultColorSpace} 0 0 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`,            `color(${resultColorSpace} 0 0 0 / 0)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`,                               `color(${resultColorSpace} 7 0 100)`);
+        fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`,               `color(${resultColorSpace} 7 -20.5 100 / 0)`);
     }
 
     // Spec Examples
 
     // Example 11.
-    test_valid_value(`color`, `rgb(from var(--bg-color) r g b / 80%)`);
+    fuzzy_test_valid_color(`rgb(from var(--bg-color) r g b / 80%)`);
 
     // Example 12.
-    test_valid_value(`color`, `lch(from var(--color) calc(l / 2) c h)`);
+    fuzzy_test_valid_color(`lch(from var(--color) calc(l / 2) c h)`);
 
     // Example 13.
-    test_valid_value(`color`, `rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`);
-    test_valid_value(`color`, `lch(from var(--color) l 0 h)`);
+    fuzzy_test_valid_color(`rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`);
+    fuzzy_test_valid_color(`lch(from var(--color) l 0 h)`);
 
     // Example 14.
-    test_valid_value(`color`, `rgb(from indianred 255 g b)`, `rgb(255, 92, 92)`);
+    fuzzy_test_valid_color(`rgb(from indianred 255 g b)`, `rgb(255, 92, 92)`);
 
     // Example 15.
-    test_valid_value(`color`, `hsl(from var(--accent) calc(h + 180deg) s l)`);
+    fuzzy_test_valid_color(`hsl(from var(--accent) calc(h + 180deg) s l)`);
 
     // Example 16.
-    test_valid_value(`color`, `lab(from var(--mycolor) l a b / 100%)`);
-    test_valid_value(`color`, `lab(from var(--mycolor) l a b / calc(alpha * 0.8))`);
-    test_valid_value(`color`, `lab(from var(--mycolor) l a b / calc(alpha - 20%))`);
+    fuzzy_test_valid_color(`lab(from var(--mycolor) l a b / 100%)`);
+    fuzzy_test_valid_color(`lab(from var(--mycolor) l a b / calc(alpha * 0.8))`);
+    fuzzy_test_valid_color(`lab(from var(--mycolor) l a b / calc(alpha - 20%))`);
 
     // Example 17.
-    test_valid_value(`color`, `lab(from var(--mycolor) l 0 0)`);
+    fuzzy_test_valid_color(`lab(from var(--mycolor) l 0 0)`);
 
     // Example 18.
-    test_valid_value(`color`, `lch(from peru calc(l * 0.8) c h)`, `lch(49.80138 54.003296 63.680317)`);
+    fuzzy_test_valid_color(`lch(from peru calc(l * 0.8) c h)`, `lch(49.80138 54.003296 63.680317)`);
 
     // Example 19.
-    test_valid_value(`color`, `LCH(from var(--accent) l c calc(h + 180deg))`);
+    fuzzy_test_valid_color(`LCH(from var(--accent) l c calc(h + 180deg))`);
 
     // Example 20.
-    test_valid_value(`color`, `lch(from var(--mycolor) l 0 h)`);
-    test_valid_value(`color`, `var(--mygray)`);
-    test_valid_value(`color`, `lch(from var(--mygray) l 30 h)`);
+    fuzzy_test_valid_color(`lch(from var(--mycolor) l 0 h)`);
+    fuzzy_test_valid_color(`var(--mygray)`);
+    fuzzy_test_valid_color(`lch(from var(--mygray) l 30 h)`);
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/predefined-005.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/predefined-005.html.ini
new file mode 100644
index 0000000..1888a77
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/predefined-005.html.ini
@@ -0,0 +1,3 @@
+[predefined-005.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-003.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-003.html.ini
new file mode 100644
index 0000000..a7e1a2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-003.html.ini
@@ -0,0 +1,3 @@
+[rec2020-003.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-004.html.ini
new file mode 100644
index 0000000..6560485
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/rec2020-004.html.ini
@@ -0,0 +1,3 @@
+[rec2020-004.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/rgba-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/rgba-001.html.ini
new file mode 100644
index 0000000..3a5a994
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/rgba-001.html.ini
@@ -0,0 +1,3 @@
+[rgba-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-clip-outside-gamut-b.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-clip-outside-gamut-b.xht.ini
new file mode 100644
index 0000000..07b25f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-clip-outside-gamut-b.xht.ini
@@ -0,0 +1,3 @@
+[t424-hsl-clip-outside-gamut-b.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-h-rotating-b.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-h-rotating-b.xht.ini
new file mode 100644
index 0000000..f654e52
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/t424-hsl-h-rotating-b.xht.ini
@@ -0,0 +1,3 @@
+[t424-hsl-h-rotating-b.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/xyz-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-color/xyz-001.html.ini
new file mode 100644
index 0000000..4c11b4f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/xyz-001.html.ini
@@ -0,0 +1,3 @@
+[xyz-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-016.html.ini b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-016.html.ini
new file mode 100644
index 0000000..2f61643a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-016.html.ini
@@ -0,0 +1,3 @@
+[contain-paint-016.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-025.html.ini b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-025.html.ini
index 96453b6e..387def4e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-025.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-025.html.ini
@@ -2,4 +2,5 @@
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [FAIL, PASS]
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html.ini b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html.ini
index dfd6921..f5ea52b6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html.ini
@@ -1,3 +1,4 @@
 [css3-counter-styles-066.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content_center.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content_center.html.ini
index 2cc16bb..3be6531 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content_center.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content_center.html.ini
@@ -1,3 +1,4 @@
 [align-content_center.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/css-flexbox-row.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/css-flexbox-row.html.ini
index 8d6de9d..2489ca56 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/css-flexbox-row.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/css-flexbox-row.html.ini
@@ -1,4 +1,5 @@
 [css-flexbox-row.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/gap-007-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/gap-007-rtl.html.ini
new file mode 100644
index 0000000..2f65786
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/gap-007-rtl.html.ini
@@ -0,0 +1,3 @@
+[gap-007-rtl.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/intrinsic-size/row-wrap-002.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/intrinsic-size/row-wrap-002.tentative.html.ini
index e7a499b14..76df9ad 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/intrinsic-size/row-wrap-002.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/intrinsic-size/row-wrap-002.tentative.html.ini
@@ -1,3 +1,4 @@
 [row-wrap-002.tentative.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variant-01.html.ini b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variant-01.html.ini
new file mode 100644
index 0000000..a3a8494
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variant-01.html.ini
@@ -0,0 +1,3 @@
+[font-variant-01.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html.ini
new file mode 100644
index 0000000..8e8bb165
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html.ini
@@ -0,0 +1,3 @@
+[math-script-level-font-size-clamping-001.tentative.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/standard-font-family-7.html.ini b/third_party/blink/web_tests/external/wpt/css/css-fonts/standard-font-family-7.html.ini
index 9d1af9ac..3bf2a2b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-fonts/standard-font-family-7.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/standard-font-family-7.html.ini
@@ -1,3 +1,4 @@
 [standard-font-family-7.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html.ini
index 970b2b9..dbaeb382 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html.ini
@@ -1,6 +1,7 @@
 [anonymous-grid-item-001.html]
   expected:
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/aspect-ratio-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/aspect-ratio-001.html.ini
new file mode 100644
index 0000000..5e85ca9f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/aspect-ratio-001.html.ini
@@ -0,0 +1,3 @@
+[aspect-ratio-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-display-grid-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-display-grid-001.html.ini
new file mode 100644
index 0000000..24d9f73
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-display-grid-001.html.ini
@@ -0,0 +1,3 @@
+[grid-display-grid-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-inline-float-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-inline-float-001.html.ini
index fffe13b..e47b91b7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-inline-float-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-model/grid-inline-float-001.html.ini
@@ -1,3 +1,4 @@
 [grid-inline-float-001.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html.ini b/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html.ini
index defe7a9..5c88f9a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html.ini
@@ -1,3 +1,4 @@
 [gradients-with-transparent.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-decimal-vertical-rl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-decimal-vertical-rl.html.ini
new file mode 100644
index 0000000..ee2714d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-decimal-vertical-rl.html.ini
@@ -0,0 +1,3 @@
+[list-style-type-decimal-vertical-rl.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-fieldset-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-fieldset-002.html.ini
new file mode 100644
index 0000000..02d544d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-fieldset-002.html.ini
@@ -0,0 +1,3 @@
+[multicol-span-all-fieldset-002.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/webkit-line-clamp-032.html.ini b/third_party/blink/web_tests/external/wpt/css/css-overflow/webkit-line-clamp-032.html.ini
index 6cf33d49..1ca2b38b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-overflow/webkit-line-clamp-032.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/webkit-line-clamp-032.html.ini
@@ -1,3 +1,4 @@
 [webkit-line-clamp-032.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-replaced-no-intrinsic-size.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-replaced-no-intrinsic-size.tentative.html.ini
new file mode 100644
index 0000000..f5f0eed3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-position/position-absolute-replaced-no-intrinsic-size.tentative.html.ini
@@ -0,0 +1,3 @@
+[position-absolute-replaced-no-intrinsic-size.tentative.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-011.html.ini b/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-011.html.ini
new file mode 100644
index 0000000..f0ff6f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-011.html.ini
@@ -0,0 +1,3 @@
+[active-selection-011.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/input/keyboard.html.ini b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/input/keyboard.html.ini
index d3a1a4a..afc69bc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/input/keyboard.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/input/keyboard.html.ini
@@ -1,10 +1,11 @@
 [keyboard.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [TIMEOUT, OK]
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): TIMEOUT
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): TIMEOUT
   [Snaps to bottom-left after pressing ArrowDown]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/shape-outside-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/shape-outside-004.html.ini
new file mode 100644
index 0000000..0e7a2d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/shape-outside-004.html.ini
@@ -0,0 +1,3 @@
+[shape-outside-004.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-008.html.ini b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-008.html.ini
new file mode 100644
index 0000000..b2046e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-008.html.ini
@@ -0,0 +1,3 @@
+[block-aspect-ratio-008.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.html.ini
index b8c67475..072204fc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.html.ini
@@ -1,3 +1,4 @@
 [intrinsic-size-001.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-dynamic-008.html.ini b/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-dynamic-008.html.ini
index 23cd7ee..35377de 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-dynamic-008.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-dynamic-008.html.ini
@@ -1,3 +1,4 @@
 [intrinsic-percent-replaced-dynamic-008.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/bidi/bidi-lines-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/bidi/bidi-lines-001.html.ini
new file mode 100644
index 0000000..55724dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/bidi/bidi-lines-001.html.ini
@@ -0,0 +1,3 @@
+[bidi-lines-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/line-breaking/segment-break-transformation-rules-044.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/line-breaking/segment-break-transformation-rules-044.html.ini
index 8bedd7a..1437f2a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/line-breaking/segment-break-transformation-rules-044.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/line-breaking/segment-break-transformation-rules-044.html.ini
@@ -1,3 +1,4 @@
 [segment-break-transformation-rules-044.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-justify-006.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-justify-006.html.ini
new file mode 100644
index 0000000..0043c9f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/text-align-justify-006.html.ini
@@ -0,0 +1,3 @@
+[text-align-justify-006.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-011.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-011.html.ini
index a82b5503..ff366a27 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-011.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-011.html.ini
@@ -1,4 +1,5 @@
 [text-transform-capitalize-011.html]
   expected:
-    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-full-size-kana-006.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-full-size-kana-006.html.ini
index d2593716..9cec693 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-full-size-kana-006.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-full-size-kana-006.html.ini
@@ -1,3 +1,4 @@
 [text-transform-full-size-kana-006.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-008.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-008.html.ini
new file mode 100644
index 0000000..cec2c17
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-008.html.ini
@@ -0,0 +1,3 @@
+[pre-wrap-008.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-001.html.ini
new file mode 100644
index 0000000..be2e644
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-001.html.ini
@@ -0,0 +1,3 @@
+[trailing-other-space-separators-break-spaces-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini
new file mode 100644
index 0000000..5ebefaac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini
@@ -0,0 +1,3 @@
+[trailing-other-space-separators-break-spaces-004.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-applies-to-text-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-applies-to-text-001.html.ini
index 6ad967b..e5bab12 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-applies-to-text-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-applies-to-text-001.html.ini
@@ -1,3 +1,4 @@
 [white-space-applies-to-text-001.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-002.html.ini
new file mode 100644
index 0000000..9487021
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-002.html.ini
@@ -0,0 +1,3 @@
+[svg-matrix-002.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-011.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-011.html.ini
new file mode 100644
index 0000000..7def9fe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-011.html.ini
@@ -0,0 +1,3 @@
+[svg-matrix-011.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-014.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-014.html.ini
new file mode 100644
index 0000000..b31addf7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-014.html.ini
@@ -0,0 +1,3 @@
+[svg-matrix-014.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-067.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-067.html.ini
index 42951e89..17b32104 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-067.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/matrix/svg-matrix-067.html.ini
@@ -1,3 +1,4 @@
 [svg-matrix-067.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/skewY/svg-skewy-with-units.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/skewY/svg-skewy-with-units.html.ini
new file mode 100644
index 0000000..72710eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/skewY/svg-skewy-with-units.html.ini
@@ -0,0 +1,3 @@
+[svg-skewy-with-units.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-abspos-006.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-abspos-006.html.ini
new file mode 100644
index 0000000..bc9f552
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-abspos-006.html.ini
@@ -0,0 +1,3 @@
+[transform-abspos-006.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform3d-scale-003.html.ini b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform3d-scale-003.html.ini
index 3113339..74219ad 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform3d-scale-003.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform3d-scale-003.html.ini
@@ -1,3 +1,4 @@
 [transform3d-scale-003.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-start-radius-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-start-radius-001.html.ini
index c5cf46c4..ceb4bdd5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-start-radius-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-start-radius-001.html.ini
@@ -1,7 +1,7 @@
 [kind-of-widget-fallback-button-border-end-start-radius-001.html]
   expected:
-    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): PASS
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): PASS
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): PASS
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): PASS
     if product == "chrome": PASS
     FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-start-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-start-width-001.html.ini
new file mode 100644
index 0000000..b1cea80
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-start-width-001.html.ini
@@ -0,0 +1,3 @@
+[kind-of-widget-fallback-button-border-inline-start-width-001.html]
+  expected:
+    if (product == "content_shell") and (os == "linux"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html.ini
new file mode 100644
index 0000000..952b075
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html.ini
@@ -0,0 +1,3 @@
+[kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-end-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-end-style-001.html.ini
new file mode 100644
index 0000000..30bec5ac8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-end-style-001.html.ini
@@ -0,0 +1,3 @@
+[kind-of-widget-fallback-input-button-border-inline-end-style-001.html]
+  expected:
+    if (product == "content_shell") and (os == "linux"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-style-001.html.ini
index ef3ca1b..d8d0077 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-style-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-style-001.html.ini
@@ -1,5 +1,6 @@
 [kind-of-widget-fallback-input-reset-border-block-end-style-001.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
+    if (product == "content_shell") and (os == "linux"): [FAIL, PASS]
     if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-width-001.html.ini
index ff0b29a..61b667c0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-width-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-width-001.html.ini
@@ -1,3 +1,4 @@
 [kind-of-widget-fallback-input-reset-border-left-width-001.html]
   expected:
     if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL
+    if (product == "content_shell") and (os == "linux"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-style-001.html.ini
index bc2f1f2..e02f498 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-style-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-style-001.html.ini
@@ -1,6 +1,7 @@
 [kind-of-widget-fallback-input-search-border-block-end-style-001.html]
   expected:
+    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
-    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-end-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-end-width-001.html.ini
index 70f270dde..010490b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-end-width-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-end-width-001.html.ini
@@ -1,6 +1,8 @@
 [kind-of-widget-fallback-input-search-text-border-block-end-width-001.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
-    if (product == "content_shell") and (os == "linux"): FAIL
-    if (product == "content_shell") and (os == "win"): FAIL
-    if product == "chrome": FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): PASS
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): PASS
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): PASS
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): PASS
+    FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-outset-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-outset-001.html.ini
index 2cf2aa66..a1b96e14 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-outset-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-outset-001.html.ini
@@ -1,3 +1,4 @@
 [kind-of-widget-fallback-input-search-text-border-image-outset-001.html]
   expected:
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-width-001.html.ini
index 0d018de0..e5e43c0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-width-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-width-001.html.ini
@@ -1,4 +1,5 @@
 [kind-of-widget-fallback-input-search-text-border-left-width-001.html]
   expected:
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-color-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-color-001.html.ini
index 7b33a89c..f073c82 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-color-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-color-001.html.ini
@@ -1,6 +1,7 @@
 [kind-of-widget-fallback-input-search-text-border-right-color-001.html]
   expected:
-    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL
     if (product == "content_shell") and (os == "linux"): FAIL
     if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-attachment-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-attachment-001.html.ini
index 8d7c593..47bdefd7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-attachment-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-attachment-001.html.ini
@@ -1,5 +1,6 @@
 [kind-of-widget-fallback-input-submit-background-attachment-001.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
-    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [FAIL, PASS]
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-style-001.html.ini
index 05c50a9..888bda09 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-style-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-style-001.html.ini
@@ -1,6 +1,7 @@
 [kind-of-widget-fallback-input-submit-border-bottom-style-001.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-color-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-color-001.html.ini
index ae8a90e..14fc2f2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-color-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-color-001.html.ini
@@ -1,4 +1,5 @@
 [kind-of-widget-fallback-input-submit-border-inline-start-color-001.html]
   expected:
     if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html.ini
index f3ec7cbf..c50fb15 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html.ini
@@ -1,4 +1,5 @@
 [kind-of-widget-fallback-textarea-background-clip-001.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
     if (product == "content_shell") and (os == "linux"): FAIL
     if (product == "content_shell") and (os == "win"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html.ini
index 58f3d88..a0cfe1d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html.ini
@@ -1,5 +1,6 @@
 [kind-of-widget-fallback-textarea-background-origin-001.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
     if (product == "content_shell") and (os == "win"): FAIL
     if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-width-001.html.ini
index 265889d..b74280e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-width-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-width-001.html.ini
@@ -1,6 +1,7 @@
 [kind-of-widget-fallback-textarea-border-block-end-width-001.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
     if (product == "content_shell") and (os == "linux"): FAIL
     if (product == "content_shell") and (os == "win"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-style-001.html.ini
index d87f567..d3ee58a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-style-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-style-001.html.ini
@@ -1,5 +1,6 @@
 [kind-of-widget-fallback-textarea-border-bottom-style-001.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [FAIL, PASS]
-    if (product == "content_shell") and (os == "linux"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [FAIL, PASS]
     if (product == "content_shell") and (os == "win"): FAIL
+    if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/calc-min-height-block-1.html.ini b/third_party/blink/web_tests/external/wpt/css/css-values/calc-min-height-block-1.html.ini
index 74527934..f8262c4 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-values/calc-min-height-block-1.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-values/calc-min-height-block-1.html.ini
@@ -1,3 +1,4 @@
 [calc-min-height-block-1.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-clip-path-1.html.ini b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-clip-path-1.html.ini
new file mode 100644
index 0000000..054cbbdf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-clip-path-1.html.ini
@@ -0,0 +1,3 @@
+[will-change-stacking-context-clip-path-1.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-150.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-150.xht.ini
new file mode 100644
index 0000000..45910d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-150.xht.ini
@@ -0,0 +1,3 @@
+[abs-pos-non-replaced-vrl-150.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-192.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-192.xht.ini
new file mode 100644
index 0000000..85a1d6e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-192.xht.ini
@@ -0,0 +1,3 @@
+[abs-pos-non-replaced-vrl-192.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-override-012.html.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-override-012.html.ini
new file mode 100644
index 0000000..950533f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-override-012.html.ini
@@ -0,0 +1,3 @@
+[bidi-override-012.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/block-flow-direction-vrl-026.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/block-flow-direction-vrl-026.xht.ini
new file mode 100644
index 0000000..db1bb0814
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/block-flow-direction-vrl-026.xht.ini
@@ -0,0 +1,3 @@
+[block-flow-direction-vrl-026.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/horizontal-rule-vrl-004.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/horizontal-rule-vrl-004.xht.ini
new file mode 100644
index 0000000..356c2f82
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/horizontal-rule-vrl-004.xht.ini
@@ -0,0 +1,3 @@
+[horizontal-rule-vrl-004.xht]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percent-margin-vlr-007.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percent-margin-vlr-007.xht.ini
index cabbcf0..06dcbf61 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percent-margin-vlr-007.xht.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percent-margin-vlr-007.xht.ini
@@ -1,3 +1,4 @@
 [percent-margin-vlr-007.xht]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/table-progression-vrl-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/table-progression-vrl-002.html.ini
new file mode 100644
index 0000000..ddbbd28
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/table-progression-vrl-002.html.ini
@@ -0,0 +1,3 @@
+[table-progression-vrl-002.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-feimage-001.html.ini b/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-feimage-001.html.ini
new file mode 100644
index 0000000..10ace1d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-feimage-001.html.ini
@@ -0,0 +1,3 @@
+[svg-feimage-001.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-expected.txt b/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-expected.txt
deleted file mode 100644
index b240097..0000000
--- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-This is a testharness.js-based test.
-FAIL Should be known: '(scripting)' assert_true: expected true got false
-FAIL Should be known: '(scripting: enabled)' assert_true: expected true got false
-FAIL Should be known: '(scripting: initial-only)' assert_true: expected true got false
-FAIL Should be known: '(scripting: none)' assert_true: expected true got false
-PASS Should be parseable: '(scripting: 0)'
-PASS Should be unknown: '(scripting: 0)'
-PASS Should be parseable: '(scripting: 10px)'
-PASS Should be unknown: '(scripting: 10px)'
-PASS Should be parseable: '(scripting: invalid)'
-PASS Should be unknown: '(scripting: invalid)'
-FAIL Check that scripting currently matches 'enabled' assert_true: expected true got false
-FAIL Check that scripting currently evaluates to true in the boolean context assert_true: expected true got false
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-noscript.html.ini b/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-noscript.html.ini
deleted file mode 100644
index f8256a3..0000000
--- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-noscript.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scripting-print-noscript.html]
-  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-script.html.ini b/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-script.html.ini
deleted file mode 100644
index 2143b97..0000000
--- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting-print-script.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scripting-print-script.html]
-  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting.html.ini b/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting.html.ini
deleted file mode 100644
index cfe3783..0000000
--- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/scripting.html.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-[scripting.html]
-  [Check that scripting currently evaluates to true in the boolean context]
-    expected: FAIL
-
-  [Check that scripting currently matches 'enabled']
-    expected: FAIL
-
-  [Should be known: '(scripting)']
-    expected: FAIL
-
-  [Should be known: '(scripting: enabled)']
-    expected: FAIL
-
-  [Should be known: '(scripting: initial-only)']
-    expected: FAIL
-
-  [Should be known: '(scripting: none)']
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-shape-rect-002.html.ini b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-shape-rect-002.html.ini
index 9a199c0b..c4d62e1 100644
--- a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-shape-rect-002.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-shape-rect-002.html.ini
@@ -1,3 +1,4 @@
 [offset-path-shape-rect-002.html]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-nesting.html.ini b/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-nesting.html.ini
index df4895b..948d89f 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-nesting.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-nesting.html.ini
@@ -1,3 +1,4 @@
 [nth-last-child-of-nesting.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/old-tests/css3-modsel-175c.xml.ini b/third_party/blink/web_tests/external/wpt/css/selectors/old-tests/css3-modsel-175c.xml.ini
new file mode 100644
index 0000000..e7c78f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/old-tests/css3-modsel-175c.xml.ini
@@ -0,0 +1,3 @@
+[css3-modsel-175c.xml]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/support/color-testcommon.js b/third_party/blink/web_tests/external/wpt/css/support/color-testcommon.js
new file mode 100644
index 0000000..ab0c4ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/support/color-testcommon.js
@@ -0,0 +1,77 @@
+'use strict';
+
+/**
+ * Set up a test for color properties that does not expect exact equality for
+ * numeric values within the color. This is necessary for color-mix and
+ * relative color syntax, which perform float arithmetic on color channels.
+ *
+ * @param {number} epsilon       Epsilon for comparison of numeric values.
+ */
+function set_up_fuzzy_color_test(epsilon) {
+  if (!epsilon) {
+    epsilon = 0.0001;
+  }
+
+  // The function
+  function fuzzy_compare_colors(color1, color2) {
+    const colorElementDividers = /( |\(|,)/;
+    // Return the string stripped of numbers.
+    function getNonNumbers(color) {
+      return color.replace(/[0-9]/g, '');
+    }
+    // Return an array of all numbers in the color.
+    function getNumbers(color) {
+      const result = [];
+      color.split(colorElementDividers).forEach(element => {
+        const numberElement = parseFloat(element);
+        if (!isNaN(numberElement)) {
+          result.push(numberElement);
+        }
+      });
+      return result;
+    }
+
+    assert_array_approx_equals(getNumbers(color1), getNumbers(color2), epsilon, "Numeric parameters are approximately equal.");
+    // Assert that the text of the two colors are equal. i.e. colorSpace, colorFunction and format.
+    assert_equals(getNonNumbers(color1), getNonNumbers(color2), "Color format is correct.");
+  }
+
+  return fuzzy_compare_colors;
+}
+
+/**
+ * Test the computed value of a color with some tolerance for numeric parameters.
+ *
+ * @param {string} specified  A specified value for the color.
+ * @param {string} computed   The expected computed color. If omitted, defaults
+ *                            to the default test_computed_value test, as
+ *                            fuzziness is unnecessary.
+ * @param {object} epsilon    Epsilon for comparison of numeric values.
+ */
+
+function fuzzy_test_computed_color(specified, computed, epsilon) {
+  if (!computed) {
+    test_computed_value("color", specified);
+    return;
+  }
+
+  test_computed_value("color", specified, computed, undefined /* titleExtra */, {comparisonFunction: set_up_fuzzy_color_test(epsilon)});
+}
+
+/**
+ * Test the parsed value of a color.
+ *
+ * @param {string} specified  A specified value for the property.
+ * @param {string} parsed     The expected parsed color. If omitted, defaults
+ *                            to the default test_valid_value test, as
+ *                            fuzziness is unnecessary.
+ * @param {object} epsilon    Epsilon for comparison of numeric values.
+ */
+function fuzzy_test_valid_color(specified, parsed, epsilon) {
+  if (!parsed) {
+    test_valid_value("color", specified);
+    return;
+  }
+
+  test_valid_value("color", specified, parsed, {comparisonFunction: set_up_fuzzy_color_test(epsilon)});
+}
diff --git a/third_party/blink/web_tests/external/wpt/css/support/computed-testcommon.js b/third_party/blink/web_tests/external/wpt/css/support/computed-testcommon.js
index 31bf451e..8e74625 100644
--- a/third_party/blink/web_tests/external/wpt/css/support/computed-testcommon.js
+++ b/third_party/blink/web_tests/external/wpt/css/support/computed-testcommon.js
@@ -9,8 +9,13 @@
  * @param {string|array} computed  The expected computed value,
  *                                 or an array of permitted computed value.
  *                                 If omitted, defaults to specified.
+ * @param {string} titleExtra Additional information to put in test output.
+ * @param {object} options  Additional test information, such as a custom
+ *                          comparison function required for color tests.
+ *                          comparisonFunction is a function that takes two
+ *                          arguments, actual and expected and contains asserts.
  */
-function test_computed_value(property, specified, computed, titleExtra) {
+function test_computed_value(property, specified, computed, titleExtra, options = {}) {
   if (!computed)
     computed = specified;
 
@@ -22,13 +27,12 @@
     target.style[property] = specified;
 
     let readValue = getComputedStyle(target)[property];
-    if (Array.isArray(computed)) {
+    if (options.comparisonFunction) {
+      options.comparisonFunction(readValue, computed);
+    } else if (Array.isArray(computed)) {
       assert_in_array(readValue, computed);
     } else {
-      if (property == "color")
-        colorValuesAlmostEqual(readValue, computed, 0.0001, 1);
-      else
-        assert_equals(readValue, computed);
+      assert_equals(readValue, computed);
     }
     if (readValue !== specified) {
       target.style[property] = '';
@@ -39,32 +43,6 @@
   }, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`);
 }
 
-function colorValuesAlmostEqual(color1, color2, float_epsilon, integer_epsilon) {
-  // Legacy color formats use integers in [0, 255] and thus will have wider epsilons
-  const epsilon = getNonNumbers(color1).startsWith("rgb") ? integer_epsilon : float_epsilon;
-  // Colors can be split by spaces, commas or the '(' character.
-  const colorElementDividers = /( |\(|,)/;
-  // Return the string stripped of numbers.
-  function getNonNumbers(color) {
-    return color.replace(/[0-9]/g, '');
-  }
-  // Return an array of all numbers in the color.
-  function getNumbers(color) {
-    const result = [];
-    color.split(colorElementDividers).forEach(element => {
-      const numberElement = parseFloat(element);
-      if (!isNaN(numberElement)) {
-        result.push(numberElement);
-      }
-    });
-    return result;
-  }
-
-  assert_array_approx_equals(getNumbers(color1), getNumbers(color2), epsilon, "Numeric parameters are approximately equal.");
-  // Assert that the text of the two colors are equal. i.e. colorSpace, colorFunction and format.
-  assert_equals(getNonNumbers(color1), getNonNumbers(color2), "Color format is correct.");
-}
-
 function testComputedValueGreaterOrLowerThan(property, specified, expected, titleExtra) {
     test(() => {
       const target = document.getElementById('target');
diff --git a/third_party/blink/web_tests/external/wpt/css/support/parsing-testcommon.js b/third_party/blink/web_tests/external/wpt/css/support/parsing-testcommon.js
index cc040be..e480f26 100644
--- a/third_party/blink/web_tests/external/wpt/css/support/parsing-testcommon.js
+++ b/third_party/blink/web_tests/external/wpt/css/support/parsing-testcommon.js
@@ -1,9 +1,20 @@
 'use strict';
 
-// serializedValue can be the expected serialization of value,
-// or an array of permitted serializations,
-// or omitted if value should serialize as value.
-function test_valid_value(property, value, serializedValue) {
+/**
+ * Create test that a CSS property computes to the expected value.
+ * The document element #target is used to perform the test.
+ *
+ * @param {string} property  The name of the CSS property being tested.
+ * @param {string} value     A specified value for the property.
+ * @param {string|array} serializedValue  The expected serialized value,
+ *                                 or an array of permitted serializations.
+ *                                 If omitted, defaults to the specified value.
+ * @param {object} options  Additional test information, such as a custom
+ *                          comparison function required for color tests.
+ *                          comparisonFunction is a function that takes two
+ *                          arguments, actual and expected and contains asserts.
+ */
+function test_valid_value(property, value, serializedValue, options = {}) {
     if (arguments.length < 3)
         serializedValue = value;
 
@@ -15,7 +26,9 @@
         div.style[property] = value;
         var readValue = div.style.getPropertyValue(property);
         assert_not_equals(readValue, "", "property should be set");
-        if (Array.isArray(serializedValue))
+        if (options.comparisonFunction)
+            options.comparisonFunction(readValue, serializedValue);
+        else if (Array.isArray(serializedValue))
             assert_in_array(readValue, serializedValue, "serialization should be sound");
         else
             assert_equals(readValue, serializedValue, "serialization should be canonical");
@@ -163,4 +176,4 @@
         const sheet = _set_style(`@keyframes ${keyframes_name} {}`);
         assert_equals(sheet.cssRules.length, 0);
     }, `invalid: @keyframes ${keyframes_name} { }`);
-}
\ No newline at end of file
+}
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/observe-svg-image.html.ini b/third_party/blink/web_tests/external/wpt/element-timing/observe-svg-image.html.ini
new file mode 100644
index 0000000..9f9adbb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/element-timing/observe-svg-image.html.ini
@@ -0,0 +1,4 @@
+[observe-svg-image.html]
+  [Able to observe svg image.]
+    expected:
+      if (product == "content_shell") and (os == "win") and (port == "win11"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/rectangular-image.html.ini b/third_party/blink/web_tests/external/wpt/element-timing/rectangular-image.html.ini
new file mode 100644
index 0000000..a09ff82
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/element-timing/rectangular-image.html.ini
@@ -0,0 +1,4 @@
+[rectangular-image.html]
+  [Element with rectangular image has correct rect and instrinsic size.]
+    expected:
+      if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window-expected.txt b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window-expected.txt
new file mode 100644
index 0000000..1e523a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS Root element has a direction
+PASS Element outside the document tree has a direction
+FAIL Non-HTML element outside the document tree has a direction assert_true: expected true got false
+PASS Element without direction has parent element direction
+FAIL Non-HTML element without direction has parent element direction assert_true: expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js
new file mode 100644
index 0000000..64f99724
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js
@@ -0,0 +1,29 @@
+test(() => {
+  assert_true(document.documentElement.matches(":dir(ltr)"));
+}, "Root element has a direction");
+
+test(() => {
+  const ele = document.createElement("foobar");
+  assert_true(ele.matches(":dir(ltr)"));
+}, "Element outside the document tree has a direction");
+
+test(() => {
+  const ele = document.createElementNS("foobar", "foobar");
+  assert_true(ele.matches(":dir(ltr)"));
+}, "Non-HTML element outside the document tree has a direction");
+
+test(() => {
+  const ele = document.createElement("foobar");
+  ele.dir = "rtl";
+  const ele2 = document.createElement("foobar");
+  ele.append(ele2);
+  assert_true(ele2.matches(":dir(rtl)"));
+}, "Element without direction has parent element direction");
+
+test(() => {
+  const ele = document.createElement("foobar");
+  ele.dir = "rtl";
+  const ele2 = document.createElementNS("foobar", "foobar");
+  ele.append(ele2);
+  assert_true(ele2.matches(":dir(rtl)"));
+}, "Non-HTML element without direction has parent element direction");
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js.ini b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js.ini
new file mode 100644
index 0000000..2332d38
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-assorted.window.js.ini
@@ -0,0 +1,10 @@
+[dir-assorted.window.html]
+  [Non-HTML element outside the document tree has a direction]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [Non-HTML element without direction has parent element direction]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html.ini
index c73d974e..6b9e845 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html.ini
@@ -1,3 +1,4 @@
 [dir-isolation-004a.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-overflow-height.html.ini b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-overflow-height.html.ini
index 6c4c651..af4a23f 100644
--- a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-overflow-height.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-overflow-height.html.ini
@@ -1,3 +1,4 @@
 [contenteditable-overflow-height.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/the-option-element/option-with-br.html.ini b/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/the-option-element/option-with-br.html.ini
index 3eecb68..1f5efed 100644
--- a/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/the-option-element/option-with-br.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/the-option-element/option-with-br.html.ini
@@ -1,6 +1,7 @@
 [option-with-br.html]
   expected:
-    if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): FAIL
     if (product == "content_shell") and (os == "linux") and (flag_specific == ""): FAIL
+    if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
     if (product == "content_shell") and (os == "win"): 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 cb1de3a3..6b38ca4 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,14 +1,14 @@
 [sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): [TIMEOUT, OK]
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
+    if (product == "content_shell") and (os == "win") and (port == "win11"): ERROR
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [TIMEOUT, OK, ERROR]
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): OK
-    if (product == "content_shell") and (os == "win"): ERROR
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
     if product == "chrome": ERROR
     TIMEOUT
   [Allow top with user activation + user activation]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/top-layer-containing-block.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/top-layer-containing-block.html.ini
new file mode 100644
index 0000000..25d45d9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/top-layer-containing-block.html.ini
@@ -0,0 +1,3 @@
+[top-layer-containing-block.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-parsable-url-getter-setter.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-parsable-url-getter-setter.window.js
new file mode 100644
index 0000000..587f9b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-parsable-url-getter-setter.window.js
@@ -0,0 +1,54 @@
+[
+  {
+    "property": "origin",
+    "set": null
+  },
+  {
+    "property": "protocol",
+    "get": ":",
+    "set": "https"
+  },
+  {
+    "property": "username"
+  },
+  {
+    "property": "password"
+  },
+  {
+    "property": "host"
+  },
+  {
+    "property": "hostname"
+  },
+  {
+    "property": "port",
+    "set": "8000"
+  },
+  {
+    "property": "pathname"
+  },
+  {
+    "property": "search"
+  },
+  {
+    "property": "hash"
+  }
+].forEach(({ property, get = "", set = "string" }) => {
+  ["a", "area"].forEach(name => {
+    test(() => {
+      const link = document.createElement(name);
+      link.href = "http://test:test/"; // non-parsable URL
+      assert_equals(link[property], get);
+    }, `<${name} href="http://test:test/">.${property} getter`);
+
+    if (set !== null) {
+      test(() => {
+        const link = document.createElement(name);
+        link.href = "http://test:test/"; // non-parsable URL
+        link[property] = set;
+        assert_equals(link[property], get);
+        assert_equals(link.href, "http://test:test/");
+      }, `<${name} href="http://test:test/">.${property} setter`);
+    }
+  });
+});
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-opaque-path-url-getter-setter.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-opaque-path-url-getter-setter.window.js
new file mode 100644
index 0000000..9549c6e2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-opaque-path-url-getter-setter.window.js
@@ -0,0 +1,59 @@
+[
+  {
+    "property": "origin",
+    "get": "null",
+    "set": null
+  },
+  {
+    "property": "protocol",
+    "get": "non-special:",
+    "set": "super-special",
+    "setget": "super-special:"
+  },
+  {
+    "property": "username"
+  },
+  {
+    "property": "password"
+  },
+  {
+    "property": "host",
+  },
+  {
+    "property": "hostname",
+  },
+  {
+    "property": "port",
+    "set": "8000"
+  },
+  {
+    "property": "pathname",
+    "get": "opaque",
+    "setget": "opaque"
+  },
+  {
+    "property": "search",
+    "setget": "?string"
+  },
+  {
+    "property": "hash",
+    "setget": "#string"
+  }
+].forEach(({ property, get = "", set = "string", setget = get }) => {
+  ["a", "area"].forEach(name => {
+    test(() => {
+      const link = document.createElement(name);
+      link.href = "non-special:opaque";
+      assert_equals(link[property], get);
+    }, `<${name} href="non-special:opaque">.${property} getter`);
+
+    if (set !== null) {
+      test(() => {
+        const link = document.createElement(name);
+        link.href = "non-special:opaque";
+        link[property] = set;
+        assert_equals(link[property], setget);
+      }, `<${name} href="non-special:opaque">.${property} setter`);
+    }
+  });
+});
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window-expected.txt
new file mode 100644
index 0000000..a018b60a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window-expected.txt
@@ -0,0 +1,41 @@
+This is a testharness.js-based test.
+PASS <a href="non-special://test:9001/">.origin getter
+PASS <area href="non-special://test:9001/">.origin getter
+PASS <a href="non-special://test:9001/">.protocol getter
+PASS <a href="non-special://test:9001/">.protocol setter
+PASS <area href="non-special://test:9001/">.protocol getter
+PASS <area href="non-special://test:9001/">.protocol setter
+PASS <a href="non-special://test:9001/">.username getter
+FAIL <a href="non-special://test:9001/">.username setter assert_equals: expected "string" but got ""
+PASS <area href="non-special://test:9001/">.username getter
+FAIL <area href="non-special://test:9001/">.username setter assert_equals: expected "string" but got ""
+PASS <a href="non-special://test:9001/">.password getter
+FAIL <a href="non-special://test:9001/">.password setter assert_equals: expected "string" but got ""
+PASS <area href="non-special://test:9001/">.password getter
+FAIL <area href="non-special://test:9001/">.password setter assert_equals: expected "string" but got ""
+FAIL <a href="non-special://test:9001/">.host getter assert_equals: expected "test:9001" but got ""
+FAIL <a href="non-special://test:9001/">.host setter assert_equals: expected "string:9001" but got ""
+FAIL <area href="non-special://test:9001/">.host getter assert_equals: expected "test:9001" but got ""
+FAIL <area href="non-special://test:9001/">.host setter assert_equals: expected "string:9001" but got ""
+FAIL <a href="non-special://test:9001/">.hostname getter assert_equals: expected "test" but got ""
+FAIL <a href="non-special://test:9001/">.hostname setter assert_equals: expected "string" but got ""
+FAIL <area href="non-special://test:9001/">.hostname getter assert_equals: expected "test" but got ""
+FAIL <area href="non-special://test:9001/">.hostname setter assert_equals: expected "string" but got ""
+FAIL <a href="non-special://test:9001/">.port getter assert_equals: expected "9001" but got ""
+FAIL <a href="non-special://test:9001/">.port setter assert_equals: expected "8000" but got ""
+FAIL <area href="non-special://test:9001/">.port getter assert_equals: expected "9001" but got ""
+FAIL <area href="non-special://test:9001/">.port setter assert_equals: expected "8000" but got ""
+FAIL <a href="non-special://test:9001/">.pathname getter assert_equals: expected "/" but got "//test:9001/"
+FAIL <a href="non-special://test:9001/">.pathname setter assert_equals: expected "/string" but got "//test:9001/"
+FAIL <area href="non-special://test:9001/">.pathname getter assert_equals: expected "/" but got "//test:9001/"
+FAIL <area href="non-special://test:9001/">.pathname setter assert_equals: expected "/string" but got "//test:9001/"
+PASS <a href="non-special://test:9001/">.search getter
+PASS <a href="non-special://test:9001/">.search setter
+PASS <area href="non-special://test:9001/">.search getter
+PASS <area href="non-special://test:9001/">.search setter
+PASS <a href="non-special://test:9001/">.hash getter
+PASS <a href="non-special://test:9001/">.hash setter
+PASS <area href="non-special://test:9001/">.hash getter
+PASS <area href="non-special://test:9001/">.hash setter
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js
new file mode 100644
index 0000000..de528a2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js
@@ -0,0 +1,63 @@
+[
+  {
+    "property": "origin",
+    "get": "null",
+    "set": null
+  },
+  {
+    "property": "protocol",
+    "get": "non-special:",
+    "set": "super-special",
+    "setget": "super-special:"
+  },
+  {
+    "property": "username"
+  },
+  {
+    "property": "password"
+  },
+  {
+    "property": "host",
+    "get": "test:9001",
+    "setget": "string:9001"
+  },
+  {
+    "property": "hostname",
+    "get": "test"
+  },
+  {
+    "property": "port",
+    "get": "9001",
+    "set": "8000"
+  },
+  {
+    "property": "pathname",
+    "get": "/",
+    "setget": "/string"
+  },
+  {
+    "property": "search",
+    "setget": "?string"
+  },
+  {
+    "property": "hash",
+    "setget": "#string"
+  }
+].forEach(({ property, get = "", set = "string", setget = set }) => {
+  ["a", "area"].forEach(name => {
+    test(() => {
+      const link = document.createElement(name);
+      link.href = "non-special://test:9001/";
+      assert_equals(link[property], get);
+    }, `<${name} href="non-special://test:9001/">.${property} getter`);
+
+    if (set !== null) {
+      test(() => {
+        const link = document.createElement(name);
+        link.href = "non-special://test:9001/";
+        link[property] = set;
+        assert_equals(link[property], setget);
+      }, `<${name} href="non-special://test:9001/">.${property} setter`);
+    }
+  });
+});
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js.ini
new file mode 100644
index 0000000..919f2a9d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/links-created-by-a-and-area-elements/non-special-url-getter-setter.window.js.ini
@@ -0,0 +1,100 @@
+[non-special-url-getter-setter.window.html]
+  [<a href="non-special://test:9001/">.host getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.host setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.hostname getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.hostname setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.password setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.pathname getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.pathname setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.port getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.port setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<a href="non-special://test:9001/">.username setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.host getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.host setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.hostname getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.hostname setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.password setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.pathname getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.pathname setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.port getter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.port setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
+
+  [<area href="non-special://test:9001/">.username setter]
+    expected:
+      if debug: PASS
+      [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html.ini
index b062022..8661aca1 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html.ini
@@ -1,3 +1,4 @@
 [bdi-neutral-number.html]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/multiTouchPoints.html.ini b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/multiTouchPoints.html.ini
index e8064d6d..cea16c2a3 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/multiTouchPoints.html.ini
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/multiTouchPoints.html.ini
@@ -1,4 +1,5 @@
 [multiTouchPoints.html]
   [TestDriver actions: two touch points with one moving one pause]
     expected:
-      if (product == "content_shell") and (os == "linux") and (flag_specific == ""): [FAIL, PASS]
+      if (product == "content_shell") and (os == "linux") and (flag_specific == ""): FAIL
+      if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini b/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini
index 04c18643..490878ed 100644
--- a/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini
@@ -1,2076 +1,2072 @@
 [input-events-get-target-ranges-deleting-in-list-items.tentative.html?Backspace,ol]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if product == "chrome": ERROR
     CRASH
   [Backspace at "<div><ol><li>{}<br></li></ol></div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{  <ol><li><br></li></ol>  }</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{  <ol><li><br></li></ol>  }</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li contenteditable="false"><br></li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li contenteditable="false"><br></li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li></ol>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li><li><br></li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li><li><br></li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li><li>list-item2</li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li contenteditable="false">list-item1</li><li>list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li><br></li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li><li><br></li></ol>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li><li>list-item3</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li><ol><li>[list-item1</li></ol></li></ol><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ol><li>[list-item1</li></ol></li></ol><ul><li>}list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ol><li>[list-item1</li></ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li><ol><li>{}<br></li></ol></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ol><li>{}<br></li></ol></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><p>list-item1</p></li><li>[\]list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ul><li>[list-item1</li></ul></li></ol><ol><li>}list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li><ul><li>[list-item1</li></ul></li></ol><ul><li>}list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li><ul><li>{}<br></li></ul></li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li><ul><li>{}<br></li></ul></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>[list-item1</li></ol><ol><li><ol><li>}list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>[list-item1</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>[list-item1</li></ol><ol><ol><li>}list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>[list-item1</li></ol><ul><li><ol><li>}list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>[list-item1</li></ol><ul><ol><li>}list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>[list-item1</li><li><ol><li>list-item2\]</li></ol></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>[list-item1</li><li><ul><li>list-item2\]</li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>[list-item1</li><ol><li>list-item2\]</li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>[list-item1</li><ul><li>list-item2\]</li></ul></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>first line in list-item1<br>list-item1[</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-[item1</li><li>\]list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li><p>[\]list-item2</p></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li>[\]list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li><li>[\]list-item2<br>second line of list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><li>list-item2[</li></ol><ol><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><ol><li>{}<br></li></ol></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li><ul><li>{}<br></li></ul></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li><ul><li>{}<br></li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1<br></li><li>[\]list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1<br><br></li><li>[\]list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><li><ol><li>}list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><li><ol><li>}list-item2<br>second line of list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><li>}list-item2</li><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><li>}list-item2<br>second line in list-item2</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><ol><li>}list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ol><ol><li>}list-item2<br>second line of list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ul><li><ol><li>}list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ul><li><ol><li>}list-item2<br>second line of list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li></ol><ul><ol><li>}list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li></ol><ul><ol><li>}list-item2<br>second line of list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li><li>\]list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><li>list-item1[</li><li>list-item2\]</li></ol><ol><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1[</li><li>list-item2\]</li></ol><ul><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>list-item1{</li><li>list\]-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><li>{}<br></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><ol><li>[list-item1</li></ol></ol><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><ol><li>[list-item1</li></ol></ol><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><ol><li>[list-item1</li></ol><li>list-item2\]</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><ol><li>list-item1</li><li>[list-item2</li></ol><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><ol><li>{}<br></li></ol></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><ol><li>{}<br></li></ol><li>list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ol><ul><li>[list-item1</li></ul></ol><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><ul><li>[list-item1</li></ul></ol><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><ul><li>list-item1</li><li>[list-item2</li></ul><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol><ul><li>{}<br></li></ul></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol><ul><li>{}<br></li></ul><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ol>{<li>list-item1</li>}<li>list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ol>{<li>list-item1</li>}<li>list-item2</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "{<ol><li><br></li></ol>}"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
 
 [input-events-get-target-ranges-deleting-in-list-items.tentative.html?Backspace,ul]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if product == "chrome": ERROR
     CRASH
   [Backspace at "<div><ul><li>{}<br></li></ul></div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{  <ul><li><br></li></ul>  }</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{  <ul><li><br></li></ul>  }</div>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li contenteditable="false"><br></li></ul>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li contenteditable="false"><br></li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li><li><br></li></ul>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li><li><br></li></ul>}</div>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li><li>list-item2</li></ul>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li contenteditable="false">list-item1</li><li>list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<div>{<ul><li><br></li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li><li><br></li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li><li>list-item3</li></ul>}</div>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li><ol><li>[list-item1</li></ol></li></ul><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li><ol><li>[list-item1</li></ol></li></ul><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li><ol><li>{}<br></li></ol></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li><ol><li>{}<br></li></ol></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li><p>list-item1</p></li><li>[\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>[list-item1</li></ul></li></ul><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>[list-item1</li></ul></li></ul><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>[list-item1</li></ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>{}<br></li></ul></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>{}<br></li></ul></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>[list-item1</li></ul><ol><li><ul><li>}list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>[list-item1</li></ul><ol><ul><li>}list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>[list-item1</li></ul><ul><li><ul><li>}list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>[list-item1</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>[list-item1</li></ul><ul><ul><li>}list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>[list-item1</li><li><ol><li>list-item2\]</li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>[list-item1</li><li><ul><li>list-item2\]</li></ul></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>[list-item1</li><ol><li>list-item2\]</li></ol></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>[list-item1</li><ul><li>list-item2\]</li></ul></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>first line in list-item1<br>list-item1[</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-[item1</li><li>\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li><p>[\]list-item2</p></li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1</li><li>[\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li>[\]list-item2<br>second line of list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1</li><li>list-item2[</li></ul><ul><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><ol><li>{}<br></li></ol></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li><ol><li>{}<br></li></ol></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1</li><ul><li>{}<br></li></ul></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1<br></li><li>[\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1<br><br></li><li>[\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ol><li><ul><li>}list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ol><li><ul><li>}list-item2<br>second line of list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ol><ul><li>}list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ol><ul><li>}list-item2<br>second line of list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><li><ul><li>}list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><li><ul><li>}list-item2<br>second line of list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><li>}list-item2</li><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><li>}list-item2<br>second line in list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><ul><li>}list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li></ul><ul><ul><li>}list-item2<br>second line of list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li><li>\]list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li><li>list-item2\]</li></ul><ol><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>list-item1[</li><li>list-item2\]</li></ul><ul><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><li>list-item1{</li><li>list\]-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><li>{}<br></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ol><li>[list-item1</li></ol></ul><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><ol><li>[list-item1</li></ol></ul><ul><li>}list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><ol><li>list-item1</li><li>[list-item2</li></ol><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ol><li>{}<br></li></ol></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ol><li>{}<br></li></ol><li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><ul><li>[list-item1</li></ul></ul><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul><ul><li>[list-item1</li></ul></ul><ul><li>}list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Backspace at "<ul><ul><li>[list-item1</li></ul><li>list-item2\]</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ul><li>list-item1</li><li>[list-item2</li></ul><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ul><li>{}<br></li></ul></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul><ul><li>{}<br></li></ul><li>list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Backspace at "<ul>{<li>list-item1</li>}<li>list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "<ul>{<li>list-item1</li>}<li>list-item2</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Backspace at "{<ul><li><br></li></ul>}"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
 
 [input-events-get-target-ranges-deleting-in-list-items.tentative.html?Delete,ol]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if product == "chrome": ERROR
     CRASH
   [Delete at "<div><ol><li>{}<br></li></ol></div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div><ol><li>{}<br></li></ol></div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{  <ol><li><br></li></ol>  }</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{  <ol><li><br></li></ol>  }</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li contenteditable="false"><br></li></ol>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ol><li contenteditable="false"><br></li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li></ol>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li><li><br></li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li><li><br></li></ol>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li><li>list-item2</li></ol>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ol><li contenteditable="false">list-item1</li><li>list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ol><li><br></li></ol>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ol><li><br></li></ol>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li></ol>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ol><li><br></li><li contenteditable="false">list-item2</li><li><br></li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li></ol>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li></ol>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ol><li>list-item1</li><li contenteditable="false">list-item2</li><li>list-item3</li></ol>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ol><li>[list-item1</li></ol></li></ol><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ol><li>[list-item1</li></ol></li></ol><ul><li>}list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ol><li>[list-item1</li></ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li><ol><li>{}<br></li></ol></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li><ol><li>{}<br></li></ol></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li><p>list-item1[\]</p></li><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li><ul><li>[list-item1</li></ul></li></ol><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ul><li>[list-item1</li></ul></li></ol><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li><ul><li>{}<br></li></ul></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ul><li>{}<br></li></ul></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>[list-item1</li></ol><ol><li><ol><li>}list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li></ol><ol><ol><li>}list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li></ol><ul><li><ol><li>}list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li></ol><ul><ol><li>}list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li><li><ol><li>list-item2\]</li></ol></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>[list-item1</li><li><ul><li>list-item2\]</li></ul></li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>[list-item1</li><ol><li>list-item2\]</li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>[list-item1</li><ul><li>list-item2\]</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>first line in list-item1<br>list-item1[</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-[item1</li><li>\]list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><li>list-item2[</li></ol><ol><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li><ol><li>{}<br></li></ol></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li><ol><li>{}<br></li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li><ul><li>{}<br></li></ul></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li><ul><li>{}<br></li></ul></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><li><ol><li>}list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><li><ol><li>}list-item2<br>second line of list-item2</li></ol></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><li>}list-item2</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><li>}list-item2</li><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><li>}list-item2<br>second line in list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><ol><li>}list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ol><ol><li>}list-item2<br>second line of list-item2</li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1[</li></ol><ul><li><ol><li>}list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ul><li><ol><li>}list-item2<br>second line of list-item2</li></ol></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ul><ol><li>}list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li></ol><ul><ol><li>}list-item2<br>second line of list-item2</li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li><li>\]list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[</li><li>list-item2\]</li></ol><ol><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1[</li><li>list-item2\]</li></ol><ul><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[\]</li><li><p>list-item2</p></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[\]</li><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[\]</li><li>list-item2<br>second line of list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><li>list-item1[\]<br></li><li>list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[\]<br><br></li><li>list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1[\]<br><br></li><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>list-item1{</li><li>list\]-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><li>{}<br></li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><li>{}<br></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ol><li>[list-item1</li></ol></ol><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><ol><li>[list-item1</li></ol></ol><ul><li>}list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ol><li>[list-item1</li></ol><li>list-item2\]</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ol><li>list-item1</li><li>[list-item2</li></ol><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ol><li>{}<br></li></ol></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ol><li>{}<br></li></ol></ol>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ol><li>{}<br></li></ol><li>list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ol><li>{}<br></li></ol><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ul><li>[list-item1</li></ul></ol><ol><li>}list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ul><li>[list-item1</li></ul></ol><ul><li>}list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ul><li>list-item1</li><li>[list-item2</li></ul><li>}list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><ul><li>{}<br></li></ul></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ol><ul><li>{}<br></li></ul></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol><ul><li>{}<br></li></ul><li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol><ul><li>{}<br></li></ul><li>list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ol>{<li>list-item1</li>}<li>list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ol>{<li>list-item1</li>}<li>list-item2</li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "{<ol><li><br></li></ol>}"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "{<ol><li><br></li></ol>}" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
 
 [input-events-get-target-ranges-deleting-in-list-items.tentative.html?Delete,ul]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): OK
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if product == "chrome": ERROR
     CRASH
   [Delete at "<div><ul><li>{}<br></li></ul></div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div><ul><li>{}<br></li></ul></div>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{  <ul><li><br></li></ul>  }</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{  <ul><li><br></li></ul>  }</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li contenteditable="false"><br></li></ul>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li contenteditable="false"><br></li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li></ul>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li><li><br></li></ul>}</div>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li><li><br></li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li><li>list-item2</li></ul>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li contenteditable="false">list-item1</li><li>list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li><br></li></ul>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li><br></li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<div>{<ul><li><br></li><li contenteditable="false">list-item2</li><li><br></li></ul>}</div>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li></ul>}</div>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li></ul>}</div>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<div>{<ul><li>list-item1</li><li contenteditable="false">list-item2</li><li>list-item3</li></ul>}</div>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li><ol><li>[list-item1</li></ol></li></ul><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ol><li>[list-item1</li></ol></li></ul><ul><li>}list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ol><li>{}<br></li></ol></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ol><li>{}<br></li></ol></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ol><li>{}<br></li></ol></li><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><p>list-item1[\]</p></li><li>list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li><ul><li>[list-item1</li></ul></li></ul><ol><li>}list-item2</li></ol>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ul><li>[list-item1</li></ul></li></ul><ul><li>}list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li><ul><li>[list-item1</li></ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li><ul><li>{}<br></li></ul></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li><ul><li>{}<br></li></ul></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li><ul><li>{}<br></li></ul></li><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li></ul><ol><li><ul><li>}list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li></ul><ol><ul><li>}list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li></ul><ul><li><ul><li>}list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li></ul><ul><ul><li>}list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li><li><ol><li>list-item2\]</li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li><li><ul><li>list-item2\]</li></ul></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li><ol><li>list-item2\]</li></ol></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>[list-item1</li><ul><li>list-item2\]</li></ul></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>first line in list-item1<br>list-item1[</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-[item1</li><li>\]list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1</li><li><ol><li>{}<br></li></ol></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li><ul><li>{}<br></li></ul></li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li>list-item2</li>{<ol><li><br></li></ol>}</ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li>list-item2</li>{<ul><li><br></li></ul>}</ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><li>list-item2[</li></ul><ul><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1</li><ol><li>{}<br></li></ol></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><ol><li>{}<br></li></ol></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><ul><li>{}<br></li></ul></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li><ul><li>{}<br></li></ul></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ol><li><br></li></ol></li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<li><ul><li><br></li></ul></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<li>list-item3</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<ol><li><br></li></ol></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1</li>{<li>list-item2</li>}<ul><li><br></li></ul></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ol><li><ul><li>}list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ol><li><ul><li>}list-item2<br>second line of list-item2</li></ul></li></ol>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ol><ul><li>}list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ol><ul><li>}list-item2<br>second line of list-item2</li></ul></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><li><ul><li>}list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><li><ul><li>}list-item2<br>second line of list-item2</li></ul></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><li>}list-item2</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><li>}list-item2</li><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><li>}list-item2<br>second line in list-item2</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><ul><li>}list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li></ul><ul><ul><li>}list-item2<br>second line of list-item2</li></ul></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1[</li><li>\]list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1[</li><li>list-item2\]</li></ul><ol><li>list-item3</li></ol>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[</li><li>list-item2\]</li></ul><ul><li>list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[\]</li><li><p>list-item2</p></li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[\]</li><li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[\]</li><li>list-item2<br>second line of list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[\]<br></li><li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>list-item1[\]<br><br></li><li>list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1[\]<br><br></li><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><li>list-item1{</li><li>list\]-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><li>{}<br></li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><li>{}<br></li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ol><li>[list-item1</li></ol></ul><ol><li>}list-item2</li></ol>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><ol><li>[list-item1</li></ol></ul><ul><li>}list-item2</li></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><ol><li>list-item1</li><li>[list-item2</li></ol><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><ol><li>{}<br></li></ol></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ol><li>{}<br></li></ol></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ol><li>{}<br></li></ol><li>list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><ol><li>{}<br></li></ol><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><ul><li>[list-item1</li></ul></ul><ol><li>}list-item2</li></ol>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><ul><li>[list-item1</li></ul></ul><ul><li>}list-item2</li></ul>"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul><ul><li>[list-item1</li></ul><li>list-item2\]</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ul><li>list-item1</li><li>[list-item2</li></ul><li>}list-item3</li></ul>" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ul><li>{}<br></li></ul></ul>"]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ul><li>{}<br></li></ul></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "<ul><ul><li>{}<br></li></ul><li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul><ul><li>{}<br></li></ul><li>list-item2</li></ul>" - comparing innerHTML]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "<ul>{<li>list-item1</li>}<li>list-item2</li></ul>"]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
 
   [Delete at "<ul>{<li>list-item1</li>}<li>list-item2</li></ul>" - comparing innerHTML]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
 
   [Delete at "{<ul><li><br></li></ul>}"]
     expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
 
   [Delete at "{<ul><li><br></li></ul>}" - comparing innerHTML]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PASS]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-removed-before-load.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-removed-before-load.html.ini
new file mode 100644
index 0000000..b8621cbf3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-removed-before-load.html.ini
@@ -0,0 +1,4 @@
+[image-removed-before-load.html]
+  [Largest Contentful Paint: image removed before loaded does not produce entry.]
+    expected:
+      if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-color-002.html.ini b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-color-002.html.ini
new file mode 100644
index 0000000..03e5eb3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-color-002.html.ini
@@ -0,0 +1,3 @@
+[frac-color-002.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html.ini b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html.ini
index c75514c..42d277d 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html.ini
@@ -1,5 +1,6 @@
 [dynamic-radical-paint-invalidation-001.html]
   expected:
-    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
     if (product == "content_shell") and (os == "linux") and (flag_specific == ""): FAIL
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+    if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [FAIL, PASS]
+    if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html b/third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html
index f920ecc..9215f931 100644
--- a/third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html
+++ b/third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html
@@ -20,9 +20,23 @@
 <script src=/resources/testdriver-vendor.js></script>
 <script src=permission-helper.js></script>
 <script>
-const vid = document.getElementById("vid");
-const cv = document.createElement("canvas");
+
+function assertVideoElementIsBlack(vid) {
+  const cv = document.createElement("canvas");
+  cv.width = vid.videoWidth;
+  cv.height = vid.videoHeight;
+  const ctx = cv.getContext("2d");
+  ctx.drawImage(vid,0,0);
+  const imageData = ctx.getImageData(0, 0, cv.width, cv.height);
+  for (let i = 0; i < imageData.data.length / 4; ++i) {
+    assert_equals(imageData.data[i * 4], 0, "No red component in pixel #" + i);
+    assert_equals(imageData.data[i * 4 + 1], 0, "No green component in pixel #" + i);
+    assert_equals(imageData.data[i * 4 + 2], 0, "No blue component in pixel #" + i);
+  }
+}
+
 promise_test(async t => {
+  const vid = document.getElementById("vid");
   await setMediaPermission("granted", ["camera"]);
   const stream = await navigator.mediaDevices.getUserMedia({video: true});
   t.add_cleanup(() => {
@@ -36,21 +50,12 @@
   vid.srcObject = stream;
   vid.play();
   await new Promise(r => vid.onloadeddata = r);
-
-  cv.width = vid.videoWidth;
-  cv.height = vid.videoHeight;
-  const ctx = cv.getContext("2d");
-  ctx.drawImage(vid,0,0);
-  const imageData = ctx.getImageData(0, 0, cv.width, cv.height);
-  for (let i = 0; i < imageData.data.length / 4; ++i) {
-    assert_equals(imageData.data[i * 4], 0, "No red component in pixel #" + i);
-    assert_equals(imageData.data[i * 4 + 1], 0, "No green component in pixel #" + i);
-    assert_equals(imageData.data[i * 4 + 2], 0, "No blue component in pixel #" + i);
-    assert_equals(imageData.data[i * 4 + 3], 255, "No transparency in pixel #" + i);
-  }
+  assertVideoElementIsBlack(vid);
 }, "Tests that a disabled video track in a MediaStream is rendered as blackness");
 
 promise_test(async t => {
+  const vid = document.getElementById("vid");
+  const cv = document.createElement("canvas");
   const ctx = cv.getContext("2d");
   ctx.fillStyle = "red";
   ctx.fillRect(0, 0, cv.width, cv.height);
@@ -72,6 +77,8 @@
 }, "Test that a video element rendering a disabled video track reports correct intrinsic dimensions");
 
 promise_test(async t => {
+  const vid = document.getElementById("vid");
+  const cv = document.createElement("canvas");
   const originalWidth = cv.width;
   const originalHeight = cv.height;
 
@@ -103,13 +110,9 @@
   ]);
 
   // Test "flow" of the disabled track by checking for "resize" events on a
-  // video element rendering that track. They should not fire. As a reference,
-  // we look for two "resize" events on a different video element rendering an
-  // enabled clone of the disabled track. We look for two and not one event
-  // because then we don't rely on any ordering of events coming from the two
-  // video elements.
+  // video element rendering that track. Any delivered frames must be black.
   let resized = 0;
-  vid.addEventListener("resize", () => ++resized);
+  vid.addEventListener("resize", t.step_func(() => assertVideoElementIsBlack(vid)));
 
   for (let i = 0; i < 2; ++i) {
     cv.width = cv.width / 2;
@@ -117,9 +120,7 @@
     ctx.fillRect(0, 0, cv.width, cv.height);
     await new Promise(r => vid2.onresize = r);
   }
-
-  assert_equals(resized, 0);
-}, "Test that frames don't flow for a disabled video track");
+}, "Test that frames are black for a disabled video track with an enabled clone");
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html.ini b/third_party/blink/web_tests/external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html.ini
index 7cd0306..0ba25d8 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html.ini
@@ -1,10 +1,9 @@
 [pointerevent_mouseevent_key_pressed.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13"): TIMEOUT
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [ERROR, TIMEOUT]
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): TIMEOUT
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): TIMEOUT
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): TIMEOUT
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [ERROR, TIMEOUT]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): TIMEOUT
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): TIMEOUT
     if product == "chrome": OK
     ERROR
   [Tests that the mouse events with some keys pressed.]
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html
index d501ae0..902e23b4 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html
@@ -1,134 +1,110 @@
 <!doctype html>
-<html>
-    <head>
-        <title>Pointer Events properties tests</title>
-        <meta name="viewport" content="width=device-width">
-        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
-        <script src="/resources/testharness.js"></script>
-        <script src="/resources/testharnessreport.js"></script>
-        <script src="/resources/testdriver.js"></script>
-        <script src="/resources/testdriver-actions.js"></script>
-        <script src="/resources/testdriver-vendor.js"></script>
-        <!-- Additional helper script for common checks across event types -->
-        <script type="text/javascript" src="pointerevent_support.js"></script>
-        <script>
-            var detected_pointertypes = {};
-            var detected_eventTypes = {};
-            var eventList = ['pointerover', 'pointerenter', 'pointerdown', 'pointerup', 'pointerout', 'pointerleave'];
-            // TODO(mustaq@chromium.org): missing touch pointermove coverage!
-            var expectedPointerId = NaN;
+<title>Pointer Events no-hover pointer attributes test</title>
+<meta name="variant" content="?touch">
+<meta name="viewport" content="width=device-width">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script type="text/javascript" src="pointerevent_support.js"></script>
+<style>
+  div {
+    height: 80px;
+    width: 80px;
+  }
+</style>
+<body onload="run()">
+  <div id="square1"></div>
+  <div id="done"></div>
+</body>
+<script>
+  'use strict';
+  const pointer_type = location.search.substring(1);
+  const test_pointer = pointer_type + "TestPointer";
 
-            function resetTestState() {
-                detected_eventTypes = {};
-                document.getElementById("square1").style.visibility = 'visible';
-                document.getElementById('innerFrame').contentDocument.getElementById("square2").style.visibility = 'hidden';
-            }
-            function checkPointerEventAttributes(event, targetBoundingClientRect, testNamePrefix) {
-                if (detected_eventTypes[event.type])
-                    return;
-                var expectedEventType =  eventList[Object.keys(detected_eventTypes).length];
-                detected_eventTypes[event.type] = true;
-                var pointerTestName = (testNamePrefix ? testNamePrefix + ' ' : '')
-                    + expectedPointerType + ' ' + expectedEventType;
+  const logged_events = [
+    "pointerover", "pointerenter", "pointerdown",
+    "pointerup", "pointerout", "pointerleave"
+  ];
 
-                detected_pointertypes[event.pointerType] = true;
+  // TODO(mustaq@chromium.org): add pointermove coverage with touch-action:none.
 
-                test(function() {
-                    assert_equals(event.type, expectedEventType);
-                }, pointerTestName + ".type should be " + expectedEventType);
+  function checkPointerEventAttributes(event,
+      expected_pointer_id, expected_event_type,
+      expected_bounding_rect) {
+    assert_equals(event.pointerType, pointer_type,
+        expected_event_type + ".pointerType should match test input");
 
-                // Test button and buttons
-                test(function() {
-                    assert_equals(event.button, 0);
-                }, pointerTestName + ".button attribute is 0 on touch-down.");
+    assert_equals(event.pointerId, expected_pointer_id,
+        expected_event_type + ".pointerId should match all other events");
+    assert_equals(event.type, expected_event_type,
+        expected_event_type + ".type should be " + expected_event_type);
 
-                if (event.type == 'pointerdown' || event.type == 'pointerover' || event.type == 'pointerenter') {
-                    test(function() {
-                        assert_equals(event.buttons, 1);
-                    }, pointerTestName + ".buttons attribute is 1 on touch-down.");
-                } else {
-                    test(function() {
-                        assert_equals(event.buttons, 0);
-                    }, pointerTestName + ".buttons is 0 on touch-release.");
-                }
+    assert_equals(event.button, 0,
+        expected_event_type + ".button should be 0");
 
-                // Test clientX and clientY
-                test(function () {
-                    assert_true(event.clientX >= targetBoundingClientRect.left && event.clientX < targetBoundingClientRect.right && event.clientY >= targetBoundingClientRect.top && event.clientY < targetBoundingClientRect.bottom);
-                }, pointerTestName + ".clientX and .clientY attributes are correct.");
+    if (['pointerover', 'pointerenter', 'pointerdown'].includes(event.type)) {
+      assert_equals(event.buttons, 1,
+          expected_event_type + ".buttons should be 1");
+    } else {
+      assert_equals(event.buttons, 0,
+          expected_event_type + ".buttons should be 0");
+    }
 
-                check_PointerEvent(event, testNamePrefix);
+    assert_true(event.clientX >= expected_bounding_rect.left &&
+        event.clientX < expected_bounding_rect.right,
+        expected_event_type + ".clientX should be within bounding client rect.");
 
-                // Test isPrimary
-                test(function () {
-                    assert_equals(event.isPrimary, true);
-                }, pointerTestName + ".isPrimary attribute is true.");
+    assert_true(event.clientY >= expected_bounding_rect.top &&
+        event.clientY < expected_bounding_rect.bottom,
+        expected_event_type + ".clientY should be within bounding client rect.");
 
-                // Test pointerId value
-                if (isNaN(expectedPointerId)) {
-                    expectedPointerId = event.pointerId;
-                } else {
-                    test(function () {
-                        assert_equals(event.pointerId, expectedPointerId);
-                    }, pointerTestName + ".pointerId should be the same as previous pointer events for this active pointer.");
-                }
-            }
+    check_PointerEvent(event, expected_event_type);
 
-            async function run() {
-                var test_pointerEvent = setup_pointerevent_test("pointerevent attributes", ['touch']);
-                var square1 = document.getElementById("square1");
-                var rectSquare1 = square1.getBoundingClientRect();
-                var innerFrame = document.getElementById('innerFrame');
-                var square2 = innerFrame.contentDocument.getElementById('square2');
-                var rectSquare2 = square2.getBoundingClientRect();
+    assert_equals(event.isPrimary, true,
+        expected_event_type + ".isPrimary is true.");
+  }
 
-                eventList.forEach(function(eventName) {
-                    on_event(square1, eventName, function (event) {
-                        if (square1.style.visibility == 'hidden')
-                            return;
-                        checkPointerEventAttributes(event, rectSquare1, "");
-                        if (Object.keys(detected_eventTypes).length == eventList.length) {
-                            square1.style.visibility = 'hidden';
-                            detected_eventTypes = {};
-                            square2.style.visibility = 'visible';
-                            expectedPointerId = NaN;
-                        }
-                    });
-                    on_event(square2, eventName, function (event) {
-                        checkPointerEventAttributes(event, rectSquare2, "Inner frame ");
-                        if (Object.keys(detected_eventTypes).length == eventList.length) {
-                            square2.style.visibility = 'hidden';
-                            test_pointerEvent.done();
-                        }
-                    });
-                });
+  async function checkEventsOnTarget(test, elem) {
+    const done = document.getElementById("done");
 
-                // Inject touch inputs.
-                await clickInTarget("touch", square1);
-                await clickInTarget("touch", square2);
-            }
-        </script>
-    </head>
-    <body onload="run()">
-        <h1>Pointer Events no-hover pointer attributes test</h1>
-        <h2 id="pointerTypeDescription"></h2>
-        <h4>
-            Test Description: This test checks the properties of pointer events that do not support hover.
-            <ol>
-                 <li>Tap the black square.</li>
-                 <li>Then move it off the black square so that it disappears.</li>
-                 <li>When the red square appears tap on that as well.</li>
-            </ol>
+    let logged_event_promises = [];
+    for (let i = 0; i < logged_events.length; i++) {
+      logged_event_promises.push(getEvent(logged_events[i], elem, test));
+    }
+    let done_promise = getEvent("pointerup", done, test);
 
-            Test passes if the proper behavior of the events is observed.
-        </h4>
-        <div id="square1" class="square"></div>
-        <iframe id="innerFrame" src="resources/pointerevent_attributes_hoverable_pointers-iframe.html"></iframe>
-        <div class="spacer"></div>
-        <div id="complete-notice">
-            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
-            <p>Refresh the page to run the tests again with a different pointer type.</p>
-        </div>
-        <div id="log"></div>
-    </body>
-</html>
+    let actions = new test_driver.Actions();
+    actions = actions
+      .addPointer(test_pointer, pointer_type)
+      .pointerMove(0, 0, {origin:elem, sourceName:test_pointer})
+      .pointerDown({sourceName:test_pointer})
+      .pointerUp({sourceName:test_pointer})
+      .pointerMove(0, 0, {origin:done, sourceName:test_pointer})
+      .pointerDown({sourceName:test_pointer})
+      .pointerUp({sourceName:test_pointer});
+    await actions.send();
+
+    let done_event = await done_promise;
+
+    let expected_pointer_id;
+
+    // All Promises in logged_event_promises are already resolved bynow.
+    for (let i = 0; i < logged_event_promises.length; i++) {
+      let event = await logged_event_promises[i];
+      if (expected_pointer_id === undefined) {
+        expected_pointer_id = event.pointerId;
+      }
+      checkPointerEventAttributes(event, expected_pointer_id,
+          logged_events[i], elem.getBoundingClientRect());
+    }
+  }
+
+  function run() {
+    promise_test(async test => {
+      const target = document.getElementById("square1");
+      checkEventsOnTarget(test, target);
+    }, "PointerEvent attributes");
+  }
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html.ini
index 11ae414..9c0708fd 100644
--- a/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html.ini
+++ b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html.ini
@@ -1,4 +1,6 @@
 [external-stylesheet.html]
+  expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [TIMEOUT, OK]
   [Test styling SVG from external style clip-path]
     expected: 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 c43d33d..551306e4 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,16 +1,28 @@
 [reuse-web-bundle-resource.https.tentative.html]
-  ['remove(), then append() in a separate task' should not reuse webbundle resources]
+  ['remove(), then append()' for the same element should reuse webbundle resources]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [PASS, FAIL]
-
-  ['remove(), then append()' should reuse webbundle resources]
-    expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [PASS, FAIL]
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
 
   [A webbundle should be fetched again when new script element is appended.]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
 
+  [Multiple 'remove(), then append()' for the same element should reuse webbundle resources]
+    expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [PASS, FAIL]
+
+  [Should not reuse webbundle resources if a credential mode is different (same-origin vs include]
+    expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
+
+  [Should not reuse webbundle resources if a credentials mode is different (same-origin vs omit)]
+    expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [PASS, FAIL]
+
+  [Should reuse webbundle resources if a credential mode is same]
+    expected:
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): [FAIL, PASS]
+
   [replaceWith() should reuse webbundle resources.]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac11"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/full-cycle-test.https.any.js.ini b/third_party/blink/web_tests/external/wpt/webcodecs/full-cycle-test.https.any.js.ini
index eb072ad..36fb346 100644
--- a/third_party/blink/web_tests/external/wpt/webcodecs/full-cycle-test.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/full-cycle-test.https.any.js.ini
@@ -29,23 +29,23 @@
 
 [full-cycle-test.https.any.html?h264_avc]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): TIMEOUT
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): TIMEOUT
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): ERROR
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [ERROR, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, ERROR]
   [Encoding and decoding cycle]
     expected:
-      if (product == "content_shell") and (os == "win"): PRECONDITION_FAILED
       if (product == "content_shell") and (os == "linux"): PRECONDITION_FAILED
+      if (product == "content_shell") and (os == "win"): PRECONDITION_FAILED
       if product == "chrome": PRECONDITION_FAILED
       FAIL
 
   [Encoding and decoding cycle w/ stripped color space]
     expected:
-      if (product == "content_shell") and (os == "linux"): PRECONDITION_FAILED
       if (product == "content_shell") and (os == "win"): PRECONDITION_FAILED
+      if (product == "content_shell") and (os == "linux"): PRECONDITION_FAILED
       if product == "chrome": PRECONDITION_FAILED
       FAIL
 
@@ -98,26 +98,27 @@
 [full-cycle-test.https.any.worker.html?h264_avc]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): TIMEOUT
-    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): ERROR
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [ERROR, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, ERROR]
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
   [Encoding and decoding cycle]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       PRECONDITION_FAILED
 
   [Encoding and decoding cycle w/ stripped color space]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac11"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
       PRECONDITION_FAILED
 
 
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/temporal-svc-encoding.https.any.js.ini b/third_party/blink/web_tests/external/wpt/webcodecs/temporal-svc-encoding.https.any.js.ini
index f1e609d3..8f786b7 100644
--- a/third_party/blink/web_tests/external/wpt/webcodecs/temporal-svc-encoding.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/temporal-svc-encoding.https.any.js.ini
@@ -1,15 +1,15 @@
 [temporal-svc-encoding.https.any.html?h264]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [ERROR, CRASH]
     if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, ERROR]
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): ERROR
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
   [SVC L1T2]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       PRECONDITION_FAILED
 
   [SVC L1T3]
@@ -18,16 +18,16 @@
 
 [temporal-svc-encoding.https.any.worker.html?h264]
   expected:
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, ERROR]
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): ERROR
-    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [ERROR, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
   [SVC L1T2]
     expected:
       if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
+      if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       PRECONDITION_FAILED
 
   [SVC L1T3]
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder-h264.https.any.js.ini b/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder-h264.https.any.js.ini
index 32ecbc7..70036c5 100644
--- a/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder-h264.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/video-encoder-h264.https.any.js.ini
@@ -1,13 +1,14 @@
 [video-encoder-h264.https.any.html?baseline]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
       if debug: PASS
       PRECONDITION_FAILED
@@ -16,28 +17,30 @@
 [video-encoder-h264.https.any.html?high]
   expected:
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
       if debug: PASS
       PRECONDITION_FAILED
 
 
 [video-encoder-h264.https.any.html?main]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
       if debug: PASS
       PRECONDITION_FAILED
@@ -45,44 +48,47 @@
 
 [video-encoder-h264.https.any.worker.html?baseline]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
       if debug: PASS
       PRECONDITION_FAILED
 
 
 [video-encoder-h264.https.any.worker.html?high]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
     if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
       if debug: PASS
       PRECONDITION_FAILED
 
 
 [video-encoder-h264.https.any.worker.html?main]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
-    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [OK, CRASH]
-    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
     if (product == "content_shell") and (os == "mac") and (port == "mac13"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): CRASH
+    if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [CRASH, OK]
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): CRASH
   [Test that encoding with a specific H264 profile actually produces that profile.]
     expected:
       if not debug and (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL
-      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): [FAIL, PRECONDITION_FAILED]
+      if not debug and (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL
       if debug: PASS
       PRECONDITION_FAILED
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/codec-specific-metadata.https.html b/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/codec-specific-metadata.https.html
deleted file mode 100644
index bef61b3..0000000
--- a/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/codec-specific-metadata.https.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src=/resources/testdriver.js></script>
-<script src=/resources/testdriver-vendor.js></script>
-<script src='../mediacapture-streams/permission-helper.js'></script>
-<script src="../webrtc/RTCPeerConnection-helper.js"></script>
-<script src="../service-workers/service-worker/resources/test-helpers.sub.js"></script>
-<script src='./helper.js'></script>
-<script>
-"use strict";
-
-promise_test(async t => {
-  const senderReader = await setupLoopbackWithCodecAndGetReader(t, 'VP8');
-  const result = await senderReader.read();
-  const metadata = result.value.getMetadata();
-  // RTCEncodedVideoFrameAdditionalMetadata-only fields.
-  assert_true(Array.isArray(metadata.decodeTargetIndications),
-              'decodeTargetIndication is an array');
-  assert_equals(typeof metadata.isLastFrameInPicture, 'boolean',
-                'isLastFrameInPicture is a boolean');
-  assert_equals(typeof metadata.simulcastIdx, 'number',
-                'simulcastIdx is a number');
-  assert_equals(metadata.codec, 'vp8');
-  assert_equals(typeof metadata.codecSpecifics, 'object',
-                'codecSpecifics is an object');
-  // VP8-only
-  assert_equals(typeof metadata.codecSpecifics.nonReference, 'boolean',
-                'codecSpecifics.nonReference is a boolean');
-  assert_equals(typeof metadata.codecSpecifics.pictureId, 'number',
-                'codecSpecifics.pictureId is a number');
-  assert_equals(typeof metadata.codecSpecifics.tl0PicIdx, 'number',
-                'codecSpecifics.tl0PicIdx is a number');
-  assert_equals(typeof metadata.codecSpecifics.temporalIdx, 'number',
-                'codecSpecifics.temporalIdx is a number');
-  assert_equals(typeof metadata.codecSpecifics.layerSync, 'boolean',
-                'codecSpecifics.layerSync is a boolean');
-  assert_equals(typeof metadata.codecSpecifics.keyIdx, 'number',
-                'codecSpecifics.keyIdx is a number');
-  assert_equals(typeof metadata.codecSpecifics.partitionId, 'number',
-                'codecSpecifics.partitionId is a number');
-  assert_equals(typeof metadata.codecSpecifics.beginningOfPartition, 'boolean',
-                'codecSpecifics.beginningOfPartition is a boolean');
-}, "[VP8] getMetadata() supports the expected codec specifics");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/set-metadata.https.html b/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/set-metadata.https.html
index 712971a..037fefc 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/set-metadata.https.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/set-metadata.https.html
@@ -35,38 +35,6 @@
                 'spatialIndex');
   assert_equals(cloneMetadata.temporalIndex, metadata.temporalIndex,
                 'temporalIndex');
-  assert_equals(cloneMetadata.frameType, metadata.frameType,
-                'frameType');
-  // RTCEncodedVideoFrameAdditionalMetadata-only fields.
-  assert_array_equals(cloneMetadata.decodeTargetIndications,
-                      metadata.decodeTargetIndications,
-                      'decodeTargetIndications');
-  assert_equals(cloneMetadata.isLastFrameInPicture,
-                metadata.isLastFrameInPicture, 'isLastFrameInPicture');
-  assert_equals(cloneMetadata.simulcastIdx, metadata.simulcastIdx,
-                'simulcastIdx');
-  assert_equals(cloneMetadata.codec, metadata.codec, 'codec');
-  // VP8-specifics.
-  assert_equals(cloneMetadata.codecSpecifics.nonReference,
-                metadata.codecSpecifics.nonReference,
-                'codecSpecifics.nonReference');
-  assert_equals(cloneMetadata.codecSpecifics.pictureId,
-                metadata.codecSpecifics.pictureId, 'codecSpecifics.pictureId');
-  assert_equals(cloneMetadata.codecSpecifics.tl0PicIdx,
-                metadata.codecSpecifics.tl0PicIdx, 'codecSpecifics.tl0PicIdx');
-  assert_equals(cloneMetadata.codecSpecifics.temporalIdx,
-                metadata.codecSpecifics.temporalIdx,
-                'codecSpecifics.temporalIdx');
-  assert_equals(cloneMetadata.codecSpecifics.layerSync,
-                metadata.codecSpecifics.layerSync, 'codecSpecifics.layerSync');
-  assert_equals(cloneMetadata.codecSpecifics.keyIdx,
-                metadata.codecSpecifics.keyIdx, 'codecSpecifics.keyIdx.');
-  assert_equals(cloneMetadata.codecSpecifics.partitionId,
-                metadata.codecSpecifics.partitionId,
-                'codecSpecifics.partitionId');
-  assert_equals(cloneMetadata.codecSpecifics.beginningOfPartition,
-                metadata.codecSpecifics.beginningOfPartition,
-                'codecSpecifics.beginningOfPartition');
   // RTP related metadata.
   // TODO(https://crbug.com/webrtc/14709): This information also needs to be
   // settable but isn't - the assertions only pass because clone() copies them
diff --git a/third_party/blink/web_tests/fast/peerconnection/RTCEncodedVideoFrame-set-metadata.html b/third_party/blink/web_tests/fast/peerconnection/RTCEncodedVideoFrame-set-metadata.html
index 1768900..6abb29c 100644
--- a/third_party/blink/web_tests/fast/peerconnection/RTCEncodedVideoFrame-set-metadata.html
+++ b/third_party/blink/web_tests/fast/peerconnection/RTCEncodedVideoFrame-set-metadata.html
@@ -54,17 +54,12 @@
   clone.setMetadata(metadata);
  }, "setMetadata() does allow changes to frameId and dependencies without a flag");
 
-
-// TODO(crbug.com/1464855) : Add test for decodeTargetIndications and codecSpecifics.
 promise_test(async t => {
   const senderReader = await setupLoopbackWithCodecAndGetReader(t, 'VP8');
   const result = await senderReader.read();
   const field_values = {
-    'frameType':'delta',
     'height':600,
-    'isLastFrameInPicture':false,
     'payloadType':17,
-    'simulcastIdx':3,
     'spatialIndex':4,
     'synchronizationSource':17,
     'temporalIndex':5,
@@ -77,22 +72,6 @@
     metadata[field] = field_values[field];
     assert_throws_dom('InvalidModificationError', () => clone.setMetadata(metadata), "For field \"" + field + "\",");
   }
-  const codec_specific_field_values_vp8 = {
-    'beginningOfPartition':true,
-    'keyIdx':-2,
-    'layerSync':true,
-    'nonReference':true,
-    'partitionId':1,
-    'pictureId':17,
-    'temporalIdx':127,
-    'tl0PicIdx':-3
-  }
-  for (const field in codec_specific_field_values_vp8) {
-    const metadata = result.value.getMetadata();
-    const clone = result.value.clone();
-    metadata.codecSpecifics[field] = codec_specific_field_values_vp8[field];
-    assert_throws_dom('InvalidModificationError', () => clone.setMetadata(metadata), "For field \"codecSpecifics." + field + "\",");
-  }
 }, "setMetadata() does not allow changes to fields without a flag");
 
 promise_test(async t => {
@@ -100,37 +79,19 @@
   const result = await senderReader.read();
   const field_values = {
     'contributingSources':[13],
-    'decodeTargetIndications':['required'],
     'dependencies':[1],
     'frameId':2,
-    'frameType':'delta',
     'height':600,
-    'isLastFrameInPicture':false,
-    'simulcastIdx':3,
     'spatialIndex':4,
     'synchronizationSource':1234567,
     'temporalIndex':5,
     'width':800
-    // TODO(https://crbug.com/webrtc/14709): Support setting payloadType
-  }
-  const codec_specific_field_values_vp8 = {
-    'beginningOfPartition':true,
-    'keyIdx':-2,
-    'layerSync':true,
-    'nonReference':true,
-    'partitionId':1,
-    'pictureId':17,
-    'temporalIdx':127,
-    'tl0PicIdx':-3
   }
   const metadata = result.value.getMetadata();
   const clone = result.value.clone();
   for (const field in field_values) {
     metadata[field] = field_values[field];
   }
-  for (const field in codec_specific_field_values_vp8) {
-    metadata.codecSpecifics[field] = codec_specific_field_values_vp8[field];
-  }
   clone.setMetadata(metadata);
   const cloneMetadata = clone.getMetadata();
   for (const field in field_values) {
@@ -140,9 +101,6 @@
       assert_equals(cloneMetadata[field], field_values[field], field);
     }
   }
-  for (const field in codec_specific_field_values_vp8) {
-    assert_equals(cloneMetadata.codecSpecifics[field], codec_specific_field_values_vp8[field], field);
-  }
 }, "setMetadata() allows changes when AllowRTCEncodedVideoFrameSetMetadataAllFields is enabled");
 
 promise_test(async t => {
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.js b/third_party/blink/web_tests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.js
index 0729f34..9293192 100644
--- a/third_party/blink/web_tests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.js
+++ b/third_party/blink/web_tests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.js
@@ -5,6 +5,8 @@
 import {TestRunner} from 'test_runner';
 import {ElementsTestRunner} from 'elements_test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
+
 (async function() {
   TestRunner.addResult(`Tests that computed styles are cached across synchronous requests.\n`);
   await TestRunner.loadLegacyModule('elements');
@@ -38,7 +40,7 @@
   function step1(node) {
     var callsLeft = 2;
     nodeId = node.id;
-    TestRunner.addSniffer(ProtocolClient.SessionRouter.prototype, 'sendMessage', onBackendCall, true);
+    TestRunner.addSniffer(ProtocolClient.InspectorBackend.SessionRouter.prototype, 'sendMessage', onBackendCall, true);
     TestRunner.cssModel.getComputedStyle(nodeId).then(styleCallback);
     TestRunner.cssModel.getComputedStyle(nodeId).then(styleCallback);
     function styleCallback() {
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.js b/third_party/blink/web_tests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.js
index 0a0e712..5e4cbdee 100644
--- a/third_party/blink/web_tests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.js
+++ b/third_party/blink/web_tests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.js
@@ -5,6 +5,8 @@
 import {TestRunner} from 'test_runner';
 import {ElementsTestRunner} from 'elements_test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
+
 (async function() {
   TestRunner.addResult(`Tests that numeric and color values are incremented/decremented correctly.\n`);
   await TestRunner.loadLegacyModule('elements');
@@ -32,7 +34,7 @@
       // PageUp should change to 'FF3'
       colorTreeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('PageUp'));
       // Ctrl/Meta + Shift Down should change to 'EE3'
-      if (Host.isMac())
+      if (Host.Platform.isMac())
         colorTreeElement.valueElement.dispatchEvent(
             TestRunner.createKeyEvent('ArrowDown', /*Ctrl*/ false, /*Alt*/ false, /*Shift*/ true, /*Meta*/ true));
       else
diff --git a/third_party/blink/web_tests/http/tests/devtools/file-system-project.js b/third_party/blink/web_tests/http/tests/devtools/file-system-project.js
index 1878416..8ee4f44a 100644
--- a/third_party/blink/web_tests/http/tests/devtools/file-system-project.js
+++ b/third_party/blink/web_tests/http/tests/devtools/file-system-project.js
@@ -7,6 +7,7 @@
 import {BindingsTestRunner} from 'bindings_test_runner';
 
 import * as Common from 'devtools/core/common/common.js';
+import * as Host from 'devtools/core/host/host.js';
 
 (async function() {
   TestRunner.addResult(`Tests file system project.\n`);
@@ -181,7 +182,7 @@
         dumpWorkspaceUISourceCodes();
 
         dir.addFile('bar.js', '');
-        InspectorFrontendHost.events.dispatchEventToListeners(
+        Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.dispatchEventToListeners(
             Host.InspectorFrontendHostAPI.Events.FileSystemFilesChangedAddedRemoved,
             {changed: [], added: ['/var/www4/html/bar.js'], removed: []});
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/inspector-backend-commands.js b/third_party/blink/web_tests/http/tests/devtools/inspector-backend-commands.js
index d8cb1ae7..8e4e4b3 100644
--- a/third_party/blink/web_tests/http/tests/devtools/inspector-backend-commands.js
+++ b/third_party/blink/web_tests/http/tests/devtools/inspector-backend-commands.js
@@ -4,12 +4,13 @@
 
 import {TestRunner} from 'test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
 import * as SDK from 'devtools/core/sdk/sdk.js';
 
 (async function() {
   TestRunner.addResult(`Tests correctness of promisified protocol commands.\n`);
 
-  ProtocolClient.test.suppressRequestErrors = false;
+  ProtocolClient.InspectorBackend.test.suppressRequestErrors = false;
   function dumpArgument(name, value) {
     TestRunner.addResult(name + ' result: ' + (typeof value === 'string' ? value : JSON.stringify(value)));
   }
@@ -51,19 +52,19 @@
     }]
   };
   // The protocol definition above is not used, but is left as a reference for commands below.
-  ProtocolClient.inspectorBackend.registerCommand('Profiler.commandArgs0', [], []);
-  ProtocolClient.inspectorBackend.registerCommand(
+  ProtocolClient.InspectorBackend.inspectorBackend.registerCommand('Profiler.commandArgs0', [], []);
+  ProtocolClient.InspectorBackend.inspectorBackend.registerCommand(
       'Profiler.commandArgs1Rets0', [{'name': 'arg1', 'type': 'number', 'optional': false}], []);
-  ProtocolClient.inspectorBackend.registerCommand(
+  ProtocolClient.InspectorBackend.inspectorBackend.registerCommand(
       'Profiler.commandArgs1Rets1', [{'name': 'arg1', 'type': 'object', 'optional': false}], ['arg1']);
-  ProtocolClient.inspectorBackend.registerCommand(
+  ProtocolClient.InspectorBackend.inspectorBackend.registerCommand(
       'Profiler.commandArgs3Rets3',
       [
         {'name': 'arg1', 'type': 'object', 'optional': false}, {'name': 'arg2', 'type': 'number', 'optional': true},
         {'name': 'arg3', 'type': 'string', 'optional': true}
       ],
       ['arg1', 'arg2', 'arg3']);
-  ProtocolClient.inspectorBackend.registerCommand(
+  ProtocolClient.InspectorBackend.inspectorBackend.registerCommand(
       'Profiler.commandError', [{'name': 'error', 'type': 'object', 'optional': false}], []);
 
   var sendMessageToBackendOriginal = InspectorFrontendHost.sendMessageToBackend;
diff --git a/third_party/blink/web_tests/http/tests/devtools/load-file-resource-for-frontend.js b/third_party/blink/web_tests/http/tests/devtools/load-file-resource-for-frontend.js
index 0370f8f..456edc1 100644
--- a/third_party/blink/web_tests/http/tests/devtools/load-file-resource-for-frontend.js
+++ b/third_party/blink/web_tests/http/tests/devtools/load-file-resource-for-frontend.js
@@ -4,6 +4,8 @@
 
 import {TestRunner} from 'test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
+
 (async function() {
   TestRunner.addResult(`Test loading file resource from front-end \n`);
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/network/load-resource-for-frontend.js b/third_party/blink/web_tests/http/tests/devtools/network/load-resource-for-frontend.js
index bf49335..ec023e1 100644
--- a/third_party/blink/web_tests/http/tests/devtools/network/load-resource-for-frontend.js
+++ b/third_party/blink/web_tests/http/tests/devtools/network/load-resource-for-frontend.js
@@ -5,6 +5,8 @@
 import {TestRunner} from 'test_runner';
 import {NetworkTestRunner} from 'network_test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
+
 (async function() {
   TestRunner.addResult(
       `Test loading resource for frontend.\n`);
diff --git a/third_party/blink/web_tests/http/tests/devtools/network/network-iframe-load-and-delete.js b/third_party/blink/web_tests/http/tests/devtools/network/network-iframe-load-and-delete.js
index b70a5936..1c0695c 100644
--- a/third_party/blink/web_tests/http/tests/devtools/network/network-iframe-load-and-delete.js
+++ b/third_party/blink/web_tests/http/tests/devtools/network/network-iframe-load-and-delete.js
@@ -6,6 +6,8 @@
 import {NetworkTestRunner} from 'network_test_runner';
 import {ConsoleTestRunner} from 'console_test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
+
 (async function() {
   TestRunner.addResult(
       `Tests that if iframe is loaded and then deleted, inspector could still show its content. Note that if iframe.src is changed to "javascript:'...some html...'" after loading, then we have different codepath, hence two tests;\n`);
@@ -46,7 +48,7 @@
       }
   `);
 
-  ProtocolClient.test.suppressRequestErrors = true;
+  ProtocolClient.InspectorBackend.test.suppressRequestErrors = true;
   NetworkTestRunner.recordNetwork();
   ConsoleTestRunner.addConsoleSniffer(step2);
   TestRunner.evaluateInPage('loadIframe()');
diff --git a/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-activate.js b/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-activate.js
index 8b5bcdd..c0c0133 100644
--- a/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-activate.js
+++ b/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-activate.js
@@ -5,6 +5,7 @@
 import {TestRunner} from 'test_runner';
 import {ElementsTestRunner} from 'elements_test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
 import * as SDK from 'devtools/core/sdk/sdk.js';
 
 (async function() {
@@ -33,7 +34,7 @@
       const rootTarget = SDK.TargetManager.TargetManager.instance().rootTarget();
       await TestRunner.waitForEvent(
           Host.InspectorFrontendHostAPI.Events.ReattachRootTarget,
-          Host.InspectorFrontendHost.events);
+          Host.InspectorFrontendHost.InspectorFrontendHostInstance.events);
       next();
     },
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-nesting-after-adoption.js b/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-nesting-after-adoption.js
index 5fa981a..988fff8 100644
--- a/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-nesting-after-adoption.js
+++ b/third_party/blink/web_tests/http/tests/devtools/portals/portals-elements-nesting-after-adoption.js
@@ -5,6 +5,8 @@
 import {TestRunner} from 'test_runner';
 import {ElementsTestRunner} from 'elements_test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
+
 (async function() {
   TestRunner.addResult(
       `Tests that adopted portal is rendered inline correctly.\n`);
@@ -24,7 +26,7 @@
         TestRunner
             .waitForEvent(
                 Host.InspectorFrontendHostAPI.Events.ReattachRootTarget,
-                Host.InspectorFrontendHost.events)
+                Host.InspectorFrontendHost.InspectorFrontendHostInstance.events)
             .then(next);
       });
     },
diff --git a/third_party/blink/web_tests/http/tests/devtools/profiler/agents-disabled-check.js b/third_party/blink/web_tests/http/tests/devtools/profiler/agents-disabled-check.js
index 6233e09..15f16a6 100644
--- a/third_party/blink/web_tests/http/tests/devtools/profiler/agents-disabled-check.js
+++ b/third_party/blink/web_tests/http/tests/devtools/profiler/agents-disabled-check.js
@@ -4,6 +4,8 @@
 
 import {TestRunner} from 'test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
+
 (async function() {
   TestRunner.addResult(`Test that if a profiler is working all the agents are disabled.\n`);
 
@@ -11,7 +13,7 @@
   function collectMessages(message) {
     messages.push(message);
   }
-  ProtocolClient.test.dumpProtocol = collectMessages;
+  ProtocolClient.InspectorBackend.test.dumpProtocol = collectMessages;
   messages.push('--> SDK.targetManager.suspendAllTargets();');
   await SDK.targetManager.suspendAllTargets();
   messages.push('');
@@ -19,7 +21,7 @@
   await SDK.targetManager.resumeAllTargets();
   messages.push('');
   messages.push('--> done');
-  ProtocolClient.test.dumpProtocol = null;
+  ProtocolClient.InspectorBackend.test.dumpProtocol = null;
   for (var i = 0; i < messages.length; ++i) {
     var message = messages[i];
     if (message.startsWith('backend')) {
diff --git a/third_party/blink/web_tests/http/tests/devtools/report-protocol-errors.js b/third_party/blink/web_tests/http/tests/devtools/report-protocol-errors.js
index c2510cd..2c1f31c 100644
--- a/third_party/blink/web_tests/http/tests/devtools/report-protocol-errors.js
+++ b/third_party/blink/web_tests/http/tests/devtools/report-protocol-errors.js
@@ -4,6 +4,7 @@
 
 import {TestRunner} from 'test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
 import * as SDK from 'devtools/core/sdk/sdk.js';
 
 (async function() {
@@ -43,7 +44,7 @@
 
   var numberOfReports = 0;
 
-  ProtocolClient.InspectorBackend.reportProtocolError = function(error, message) {
+  ProtocolClient.InspectorBackend.InspectorBackend.reportProtocolError = function(error, message) {
     if (numberOfReports < messages.length) {
       TestRunner.addObject(trimErrorMessage(message), {'sessionId': 'skip'});
       TestRunner.addResult('-------------------------------------------------------');
diff --git a/third_party/blink/web_tests/http/tests/devtools/screen-orientation-override.js b/third_party/blink/web_tests/http/tests/devtools/screen-orientation-override.js
index 386ca491..4706706f 100644
--- a/third_party/blink/web_tests/http/tests/devtools/screen-orientation-override.js
+++ b/third_party/blink/web_tests/http/tests/devtools/screen-orientation-override.js
@@ -5,13 +5,15 @@
 import {TestRunner} from 'test_runner';
 import {ConsoleTestRunner} from 'console_test_runner';
 
+import * as ProtocolClient from 'devtools/core/protocol_client/protocol_client.js';
+
 (async function() {
   TestRunner.addResult(`Test screen orientation override.\n`);
   await TestRunner.loadLegacyModule('console');
 
   await TestRunner.navigatePromise('resources/screen-orientation-resource.html');
 
-  ProtocolClient.test.suppressRequestErrors = false;
+  ProtocolClient.InspectorBackend.test.suppressRequestErrors = false;
   function addDumpResult(next) {
     TestRunner.evaluateInPage('dump()', dumpCallback);
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.js b/third_party/blink/web_tests/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.js
index db0cd55..f8f2de1 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.js
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.js
@@ -6,6 +6,7 @@
 import {SourcesTestRunner} from 'sources_test_runner';
 import {SDKTestRunner} from 'sdk_test_runner';
 
+import * as Host from 'devtools/core/host/host.js';
 import * as SDK from 'devtools/core/sdk/sdk.js';
 
 (async function() {
@@ -18,7 +19,7 @@
 
   var debuggerModel = SDK.TargetManager.TargetManager.instance().rootTarget().model(SDK.DebuggerModel.DebuggerModel);
   var functionText = 'function foobar() { \nconsole.log(\'foobar execute!\');\n}';
-  var sourceURL = Host.isWin() ? '\n//# sourceURL=c:\\prog\\foobar.js' : '\n//# sourceURL=/usr/local/home/prog/foobar.js';
+  var sourceURL = Host.Platform.isWin() ? '\n//# sourceURL=c:\\prog\\foobar.js' : '\n//# sourceURL=/usr/local/home/prog/foobar.js';
   await TestRunner.evaluateInPageAnonymously(functionText + sourceURL);
   SourcesTestRunner.showScriptSource('foobar.js', didShowScriptSource);
 
diff --git a/third_party/blink/web_tests/virtual/allow-rtc-encoded-video-frame-set-metadata-all-fields/fast/peerconnection/RTCEncodedVideoFrame-set-metadata-expected.txt b/third_party/blink/web_tests/virtual/allow-rtc-encoded-video-frame-set-metadata-all-fields/fast/peerconnection/RTCEncodedVideoFrame-set-metadata-expected.txt
index 9acd6ec..780ab94 100644
--- a/third_party/blink/web_tests/virtual/allow-rtc-encoded-video-frame-set-metadata-all-fields/fast/peerconnection/RTCEncodedVideoFrame-set-metadata-expected.txt
+++ b/third_party/blink/web_tests/virtual/allow-rtc-encoded-video-frame-set-metadata-all-fields/fast/peerconnection/RTCEncodedVideoFrame-set-metadata-expected.txt
@@ -1,6 +1,6 @@
 This is a testharness.js-based test.
 PASS setMetadata() does allow changes to frameId and dependencies without a flag
-FAIL setMetadata() does not allow changes to fields without a flag assert_throws_dom: For field "frameType", function "() => clone.setMetadata(metadata)" did not throw
+FAIL setMetadata() does not allow changes to fields without a flag assert_throws_dom: For field "height", function "() => clone.setMetadata(metadata)" did not throw
 PASS setMetadata() allows changes when AllowRTCEncodedVideoFrameSetMetadataAllFields is enabled
 PASS setMetadata() does not allow metadata with dependencies but no frameId
 PASS setMetadata() does allow metadata with no dependencies but a frameId
diff --git a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt b/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
index 5192def..8394d85 100644
--- a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-computed-relative-color-expected.txt
@@ -896,19 +896,19 @@
 FAIL Property color value 'color(from color(xyz-d65 7 none 100) xyz-d65 x y z)' assert_true: 'color(from color(xyz-d65 7 none 100) xyz-d65 x y z)' is a supported value for color. expected true got false
 FAIL Property color value 'color(from color(xyz-d65 7 -20.5 100 / none) xyz-d65 x y z / alpha)' assert_true: 'color(from color(xyz-d65 7 -20.5 100 / none) xyz-d65 x y z / alpha)' is a supported value for color. expected true got false
 FAIL Property color value 'rgb(from var(--bg-color) r g b / 80%)' assert_array_approx_equals: Numeric parameters are approximately equal. lengths differ, expected 4 got 3
-FAIL Property color value 'lch(from var(--color) calc(l / 2) c h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 23.138971 +/- 1, expected 23.138971 but got 0
-FAIL Property color value 'rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 76 +/- 1, expected 76 but got 0
-FAIL Property color value 'lch(from var(--color) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 46.277943 +/- 1, expected 46.277943 but got 0
+FAIL Property color value 'lch(from var(--color) calc(l / 2) c h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 23.138971 +/- 0.0001, expected 23.138971 but got 0
+FAIL Property color value 'rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 76 +/- 0.0001, expected 76 but got 0
+FAIL Property color value 'lch(from var(--color) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 46.277943 +/- 0.0001, expected 46.277943 but got 0
 FAIL Property color value 'rgb(from indianred 255 g b)' assert_true: 'rgb(from indianred 255 g b)' is a supported value for color. expected true got false
-FAIL Property color value 'hsl(from var(--accent) calc(h + 180deg) s l)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 178 +/- 1, expected 178 but got 0
-FAIL Property color value 'lab(from var(--mycolor) l a b / 100%)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 1, expected 62.751923 but got 0
+FAIL Property color value 'hsl(from var(--accent) calc(h + 180deg) s l)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 178 +/- 0.0001, expected 178 but got 0
+FAIL Property color value 'lab(from var(--mycolor) l a b / 100%)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 0
 FAIL Property color value 'lab(from var(--mycolor) l a b / calc(alpha * 0.8))' assert_array_approx_equals: Numeric parameters are approximately equal. lengths differ, expected 4 got 3
 FAIL Property color value 'lab(from var(--mycolor) l a b / calc(alpha - 20%))' assert_array_approx_equals: Numeric parameters are approximately equal. lengths differ, expected 4 got 3
-FAIL Property color value 'lab(from var(--mycolor) l 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 1, expected 62.751923 but got 0
+FAIL Property color value 'lab(from var(--mycolor) l 0 0)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 0
 FAIL Property color value 'lch(from peru calc(l * 0.8) c h)' assert_true: 'lch(from peru calc(l * 0.8) c h)' is a supported value for color. expected true got false
-FAIL Property color value 'LCH(from var(--accent) l c calc(h + 180deg))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 65.49473 +/- 1, expected 65.49473 but got 0
-FAIL Property color value 'lch(from var(--mycolor) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 1, expected 62.751923 but got 0
-FAIL Property color value 'var(--mygray)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 1, expected 62.751923 but got 0
-FAIL Property color value 'lch(from var(--mygray) l 30 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 1, expected 62.751923 but got 0
+FAIL Property color value 'LCH(from var(--accent) l c calc(h + 180deg))' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 65.49473 +/- 0.0001, expected 65.49473 but got 0
+FAIL Property color value 'lch(from var(--mycolor) l 0 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 0
+FAIL Property color value 'var(--mygray)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 0
+FAIL Property color value 'lch(from var(--mygray) l 30 h)' assert_array_approx_equals: Numeric parameters are approximately equal. property 0, expected 62.751923 +/- 0.0001, expected 62.751923 but got 0
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/wpt_internal/attribution-reporting/resources/event_level_trigger_filter_data/filters_lookback_window.json b/third_party/blink/web_tests/wpt_internal/attribution-reporting/resources/event_level_trigger_filter_data/filters_lookback_window.json
index b24b710..a474adb 100644
--- a/third_party/blink/web_tests/wpt_internal/attribution-reporting/resources/event_level_trigger_filter_data/filters_lookback_window.json
+++ b/third_party/blink/web_tests/wpt_internal/attribution-reporting/resources/event_level_trigger_filter_data/filters_lookback_window.json
@@ -4,17 +4,27 @@
   },
   "event_trigger_data": [
     {
-      "trigger_data": "4",
+      "trigger_data": "3",
       "filters": {
         "a": [],
         "_lookback_window": 1
       }
     },
     {
+      "trigger_data": "4",
+      "not_filters": {
+        "a": [],
+        "_lookback_window": 100
+      }
+    },
+    {
       "trigger_data": "5",
       "filters": {
         "a": [],
         "_lookback_window": 10000
+      },
+      "not_filters": {
+        "_lookback_window": 1
       }
     }
   ],
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-parsing.html b/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-parsing.html
new file mode 100644
index 0000000..be15486
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-parsing.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<title>CSS Containment Test: @container snapped query parsing</title>
+<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-rule">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/css-contain/container-queries/support/cq-testcommon.js"></script>
+<div style="container-name:name;container-type:snap">
+  <main id="main"></main>
+</div>
+<script>
+  setup(() => assert_implements_container_queries());
+
+  function cleanup_main() {
+    while (main.firstChild)
+      main.firstChild.remove();
+  }
+
+  function set_style(text) {
+    let style = document.createElement('style');
+    style.innerText = text;
+    main.append(style);
+    return style;
+  }
+
+  function test_rule_valid(query) {
+    test(t => {
+      t.add_cleanup(cleanup_main);
+      let style = set_style(`@container ${query} {}`);
+      assert_equals(style.sheet.rules.length, 1);
+    }, query);
+  }
+
+  function test_condition_invalid(condition) {
+    test(t => {
+      t.add_cleanup(cleanup_main);
+      let style = set_style(`@container name ${condition} {}`);
+      assert_equals(style.sheet.rules.length, 0);
+    }, condition);
+  }
+
+  // Tests that 1) the condition parses, and 2) is either "unknown" or not, as
+  // specified.
+  function test_condition_valid(condition, unknown) {
+    test(t => {
+      t.add_cleanup(cleanup_main);
+      let style = set_style(`
+        @container name ${condition} {}
+        @container name (${condition}) or (not (${condition})) { main { --match:true; } }
+      `);
+      assert_equals(style.sheet.rules.length, 2);
+      const expected = unknown ? '' : 'true';
+      assert_equals(getComputedStyle(main).getPropertyValue('--match'), expected);
+    }, condition);
+  }
+
+  function test_condition_known(condition) {
+    test_condition_valid(condition, false /* unknown */);
+  }
+
+  function test_condition_unknown(condition) {
+    test_condition_valid(condition, true /* unknown */);
+  }
+
+  test_condition_known('state(snapped)');
+  test_condition_known('state(snapped: none)');
+  test_condition_known('state(snapped: block)');
+  test_condition_known('state(snapped: inline)');
+  test_condition_known('(state(snapped: block))');
+  test_condition_known('state((snapped: inline))');
+  test_condition_known('state(not ((snapped: inline) and (snapped: block)))');
+  test_condition_known('state((snapped: block) or (snapped: inline))');
+
+  test_condition_unknown('state(snapped: auto)');
+  test_condition_unknown('state(snapped: true)');
+  test_condition_unknown('state(style(snapped: inline))');
+  test_condition_unknown('style(state(snapped: inline))');
+  test_condition_unknown('state(snapped:)');
+</script>
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-serialization.html b/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-serialization.html
new file mode 100644
index 0000000..b0e869a
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/css/css-contain/container-queries/at-container-snapped-serialization.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>CSS Container Queries: state(snapped) conditionText serialization</title>
+<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-queries">
+<link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-rule">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/css-contain/container-queries/support/cq-testcommon.js"></script>
+<style id="testSheet">
+  @container state(        snapped:inline) { }
+  @container STate(snapped:    ) { }
+  @container STate(snapped) { }
+  @container  state(  ( snapped: INLINE) OR ( SNAPPED: BlOCK  ) ) { }
+  @container state (snapped: inline) { }
+</style>
+<script>
+  setup(() => {
+    assert_implements_container_queries();
+    assert_equals(testSheet.sheet.cssRules.length, 5);
+  });
+
+  const tests = [
+      ["state(snapped: inline)", "Normalize spaces"],
+      ["STate(snapped: )", "No value - invalid, serializes as <general-enclosed>"],
+      ["state(snapped)", "Boolean context"],
+      ["state((snapped: inline) or (snapped: block))", "Logical with 'or'"],
+      ["state (snapped: inline)", "Not a state function with space before '('"]
+  ].map((e, i) => [testSheet.sheet.cssRules[i], ...e]);
+
+  tests.forEach((t) => {
+    test(() => assert_equals(t[0].conditionText, t[1]), t[2]);
+  });
+</script>
diff --git a/third_party/blink/web_tests/wpt_internal/ukm/ukm-get-metrics.html.ini b/third_party/blink/web_tests/wpt_internal/ukm/ukm-get-metrics.html.ini
index 243f497..b27821f 100644
--- a/third_party/blink/web_tests/wpt_internal/ukm/ukm-get-metrics.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/ukm/ukm-get-metrics.html.ini
@@ -1,7 +1,8 @@
 [ukm-get-metrics.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac11"): [TIMEOUT, OK]
+    if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): [TIMEOUT, OK]
     if (product == "content_shell") and (os == "mac") and (port == "mac12"): TIMEOUT
+    if (product == "content_shell") and (os == "mac") and (port == "mac11"): TIMEOUT
     if (product == "content_shell") and (os == "linux") and (flag_specific == ""): TIMEOUT
   [UKM recorder should receive the Blink.UpdateTime entry]
     expected:
diff --git a/third_party/chromium-variations b/third_party/chromium-variations
index 1d9fe73..dbb3277 160000
--- a/third_party/chromium-variations
+++ b/third_party/chromium-variations
@@ -1 +1 @@
-Subproject commit 1d9fe73073424c48d77355589c3f1fe1cae8f957
+Subproject commit dbb3277934d7cb4b35b302941437871f2f579879
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal
index 2ef89ce..2c64239 160000
--- a/third_party/devtools-frontend-internal
+++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@
-Subproject commit 2ef89ce126db2ec09937b6eafe38582ee6605531
+Subproject commit 2c6423900dc9b550cba8f3954b60104f3fc433c8
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index d2267b5..e459007 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit d2267b529d602a797f9d326b4a1610ad92373caa
+Subproject commit e4590077122a04c3ab18c08a87bb6eff665fe2a8
diff --git a/third_party/perfetto b/third_party/perfetto
index 10b9801..1d0ca00 160000
--- a/third_party/perfetto
+++ b/third_party/perfetto
@@ -1 +1 @@
-Subproject commit 10b980190fea75c5472eee93fc42a8c4a3eaadd3
+Subproject commit 1d0ca0005e4681498030fc4c1015abbec4a2077c
diff --git a/third_party/skia b/third_party/skia
index b17ee34..91b16a4 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit b17ee34f337883f45840d16927eb9eb799df8768
+Subproject commit 91b16a4fdf6ebbb59df08617886375d21041fe9c
diff --git a/third_party/speedometer/LICENSE b/third_party/speedometer/LICENSE
new file mode 100644
index 0000000..9d1a522
--- /dev/null
+++ b/third_party/speedometer/LICENSE
@@ -0,0 +1,23 @@
+Copyright (C) 2013-2022 Apple Inc. All rights reserved.
+Copyright (C) 2017 Google Inc. All rights reserved.
+Copyright (C) 2022-2023 Mozilla Corporation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1.  Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+2.  Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/third_party/speedometer/OWNERS b/third_party/speedometer/OWNERS
new file mode 100644
index 0000000..555639b
--- /dev/null
+++ b/third_party/speedometer/OWNERS
@@ -0,0 +1,3 @@
+cbruni@chromium.org
+vahl@chromium.org
+thorsten@chromium.org
\ No newline at end of file
diff --git a/third_party/speedometer/README.chromium b/third_party/speedometer/README.chromium
new file mode 100644
index 0000000..18626fb
--- /dev/null
+++ b/third_party/speedometer/README.chromium
@@ -0,0 +1,11 @@
+Name: Speedometer
+Short Name: speedometer
+URL: https://github.com/WebKit/Speedometer
+Version: unknown
+License: BSD 2-Clause
+License File: LICENSE
+Shipped: no
+Security Critical: no
+
+Description:
+This contains versioned snapshots of the Speedometer interaction benchmark.
diff --git a/third_party/speedometer/v2.0/README.md b/third_party/speedometer/v2.0/README.md
new file mode 100644
index 0000000..b8efad1
--- /dev/null
+++ b/third_party/speedometer/v2.0/README.md
@@ -0,0 +1,3 @@
+# Speedometer 2.0
+
+v2.0 is part of the [third_party/blink/perf_tests/](../../blink/perf_tests/Speedometer20) folder.
\ No newline at end of file
diff --git a/third_party/speedometer/v2.1/README.md b/third_party/speedometer/v2.1/README.md
new file mode 100644
index 0000000..ba42089
--- /dev/null
+++ b/third_party/speedometer/v2.1/README.md
@@ -0,0 +1,3 @@
+# Speedometer 2.1
+
+v2.1 is part of the [third_party/blink/perf_tests/](../../blink/perf_tests/Speedometer21) folder.
\ No newline at end of file
diff --git a/third_party/webrtc b/third_party/webrtc
index 0720e9a..92fe5c4 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit 0720e9ac1dd4230e051b3e415f69ff4fc505315b
+Subproject commit 92fe5c4db3bf97b559640b196d8c40a7b3e10a78
diff --git a/tools/metrics/histograms/README.md b/tools/metrics/histograms/README.md
index a3726ca0..92136dbad 100644
--- a/tools/metrics/histograms/README.md
+++ b/tools/metrics/histograms/README.md
@@ -715,12 +715,16 @@
 
 #### Add an Obsoletion Message
 
+An obsoletion message is displayed on the dashboard and provides developers
+context for why the histogram was removed and, if applicable, which histogram
+it was replaced by.
+
 **Note:** You can skip this step if the histogram is already expired or
 obsolete. This is because tooling automatically records the date and milestone
 of a histogram's expiration or obsoletion.
 
-There are a couple options for adding a message to the removed histogram's
-entry to provide relevant information to interested Chrome developers.
+You can provide a custom obsoletion message for a removed histogram via tags
+on the CL description:
 
 * Add the obsoletion message in the CL description in the format
   OBSOLETE_HISTOGRAM[histogram name]=obsoletion message (e.g.
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 40b44ca..72b0070 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10510,6 +10510,7 @@
   <int value="16"
       label="Trace finalization started with a local output location"/>
   <int value="17" label="Failed to initialize the trace report database"/>
+  <int value="18" label="Failed to clean the trace report database"/>
 </enum>
 
 <enum name="BackingStoreResults">
@@ -19154,6 +19155,7 @@
   <int value="104" label="Cookie Controls Metadata"/>
   <int value="105" label="3PCD Support"/>
   <int value="106" label="Auto Picture-in-Picture"/>
+  <int value="107" label="3PCD Metadata Grants"/>
 </enum>
 
 <enum name="ContentTypeParseableResult">
@@ -27333,12 +27335,12 @@
   <int value="83" label="Style property inside a keyframe rule edited"/>
   <int value="84" label="Override Content From Sources Context Menu"/>
   <int value="85" label="Override Content From Network Context Menu"/>
-  <int value="86" label="Override Script"/>
-  <int value="87" label="Override StyleSheet"/>
-  <int value="88" label="Override Document"/>
-  <int value="89" label="Override Fetch and XHR"/>
-  <int value="90" label="Override Image"/>
-  <int value="91" label="Override Font"/>
+  <int value="86" label="Override resource type - Script"/>
+  <int value="87" label="Override resource type - StyleSheet"/>
+  <int value="88" label="Override resource type - Document"/>
+  <int value="89" label="Override resource type - Fetch and XHR"/>
+  <int value="90" label="Override resource type - Image"/>
+  <int value="91" label="Override resource type - Font"/>
   <int value="92" label="Override Content Context Menu Setup"/>
   <int value="93" label="Override Content Context Menu Abandon Setup"/>
   <int value="94" label="Override Content Context Menu Activate Disabled"/>
@@ -33837,6 +33839,7 @@
   <int value="1145" label="MicrosoftOfficeCloudUpload"/>
   <int value="1146" label="GoogleWorkspaceCloudUpload"/>
   <int value="1147" label="ShortcutCustomizationAllowed"/>
+  <int value="1148" label="MicrosoftOneDriveMount"/>
 </enum>
 
 <enum name="EnterprisePoliciesSources">
@@ -101756,6 +101759,8 @@
   <int value="4"
       label="Storage access allowed by the top-level version of the API"/>
   <int value="5" label="Storage access allowed by 3PCD setting"/>
+  <int value="6"
+      label="Storage access allowed by 3PCD metadata grants content settings"/>
 </enum>
 
 <enum name="StorageBucketDurabilityParameter">
diff --git a/tools/metrics/histograms/metadata/image/histograms.xml b/tools/metrics/histograms/metadata/image/histograms.xml
index 04e7293..273cd8f 100644
--- a/tools/metrics/histograms/metadata/image/histograms.xml
+++ b/tools/metrics/histograms/metadata/image/histograms.xml
@@ -401,6 +401,43 @@
       variants="ImageAnnotationServiceAnnotationType"/>
 </histogram>
 
+<histogram name="ImageDecoder.Png.UiGfxIntoSkBitmap" units="microseconds"
+    expires_after="M120">
+  <owner>lukasza@chromium.org</owner>
+  <owner>chrome-rust-experiments@google.com</owner>
+  <summary>
+    Measures the runtime of the `gfx::PNGCodec::Decode(..., SkBitmap* bitmap)`
+    API. Logged every time the API is called. Primarily used to evaluate the
+    go/rusty-png-ui-gfx-decoder project.
+
+    The metric is reported for only clients with high-resolution clocks (i.e.
+    excludes a small percentage of Windows users population - see the
+    Windows.HasHighResolutionTimeTicks metric). This is okay, because we are
+    mostly interested in comparing C++ vs Rust and it seems okay to assume that
+    such comparison would give similar results for the filtered and non-filtered
+    population.
+  </summary>
+</histogram>
+
+<histogram name="ImageDecoder.Png.UiGfxIntoVector" units="microseconds"
+    expires_after="M120">
+  <owner>lukasza@chromium.org</owner>
+  <owner>chrome-rust-experiments@google.com</owner>
+  <summary>
+    Measures the runtime of the `gfx::PNGCodec::Decode(...,
+    std::vector&lt;unsigned char&gt;* output, ...)` API. Logged every time the
+    API is called. Primarily used to evaluate the go/rusty-png-ui-gfx-decoder
+    project.
+
+    The metric is reported for only clients with high-resolution clocks (i.e.
+    excludes a small percentage of Windows users population - see the
+    Windows.HasHighResolutionTimeTicks metric). This is okay, because we are
+    mostly interested in comparing C++ vs Rust and it seems okay to assume that
+    such comparison would give similar results for the filtered and non-filtered
+    population.
+  </summary>
+</histogram>
+
 <histogram name="ImageFetcher.CacheMetadataCount{ImageFetcherCacheStrategy}"
     units="records" expires_after="2024-01-20">
   <owner>fgorski@chromium.org</owner>
diff --git a/ui/gfx/codec/png_codec.cc b/ui/gfx/codec/png_codec.cc
index 2cc1c43..fb6d8329 100644
--- a/ui/gfx/codec/png_codec.cc
+++ b/ui/gfx/codec/png_codec.cc
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ptr_exclusion.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/strings/string_util.h"
 #include "third_party/libpng/png.h"
@@ -343,6 +344,8 @@
 bool PNGCodec::Decode(const unsigned char* input, size_t input_size,
                       ColorFormat format, std::vector<unsigned char>* output,
                       int* w, int* h) {
+  SCOPED_UMA_HISTOGRAM_TIMER_MICROS("ImageDecoder.Png.UiGfxIntoVector");
+
   PngReadStructInfo si;
   if (!si.Build(input, input_size))
     return false;
@@ -381,6 +384,8 @@
 bool PNGCodec::Decode(const unsigned char* input, size_t input_size,
                       SkBitmap* bitmap) {
   DCHECK(bitmap);
+  SCOPED_UMA_HISTOGRAM_TIMER_MICROS("ImageDecoder.Png.UiGfxIntoSkBitmap");
+
   PngReadStructInfo si;
   if (!si.Build(input, input_size))
     return false;
diff --git a/ui/gfx/codec/png_codec_unittest.cc b/ui/gfx/codec/png_codec_unittest.cc
index 3c37f53..e723f69 100644
--- a/ui/gfx/codec/png_codec_unittest.cc
+++ b/ui/gfx/codec/png_codec_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/check.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libpng/png.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -292,12 +293,21 @@
                                std::vector<PNGCodec::Comment>(),
                                &encoded));
 
-  // decode, it should have the same size as the original
+  // decode
   std::vector<unsigned char> decoded;
   int outw, outh;
-  ASSERT_TRUE(PNGCodec::Decode(&encoded[0], encoded.size(),
-                               PNGCodec::FORMAT_RGBA, &decoded,
-                               &outw, &outh));
+  {
+    base::HistogramTester histograms;
+    ASSERT_TRUE(PNGCodec::Decode(&encoded[0], encoded.size(),
+                                 PNGCodec::FORMAT_RGBA, &decoded, &outw,
+                                 &outh));
+    std::vector<base::Bucket> buckets =
+        histograms.GetAllSamples("ImageDecoder.Png.UiGfxIntoVector");
+    ASSERT_EQ(buckets.size(), 1u);
+    ASSERT_GE(buckets[0].min, 0);
+  }
+
+  // It should have the same size as the original
   ASSERT_EQ(w, outw);
   ASSERT_EQ(h, outh);
   ASSERT_EQ(original.size(), decoded.size());
@@ -685,8 +695,16 @@
 
   // Decode the encoded string.
   SkBitmap decoded_bitmap;
-  ASSERT_TRUE(PNGCodec::Decode(&encoded.front(), encoded.size(),
-                               &decoded_bitmap));
+  {
+    base::HistogramTester histograms;
+    ASSERT_TRUE(
+        PNGCodec::Decode(&encoded.front(), encoded.size(), &decoded_bitmap));
+    std::vector<base::Bucket> buckets =
+        histograms.GetAllSamples("ImageDecoder.Png.UiGfxIntoSkBitmap");
+    ASSERT_EQ(buckets.size(), 1u);
+    ASSERT_GE(buckets[0].min, 0);
+  }
+
   EXPECT_EQ(decoded_bitmap.alphaType(), kOpaque_SkAlphaType);
 
   for (int x = 0; x < w; x++) {
diff --git a/ui/gfx/hdr_metadata.h b/ui/gfx/hdr_metadata.h
index df1f23d..5a0873be 100644
--- a/ui/gfx/hdr_metadata.h
+++ b/ui/gfx/hdr_metadata.h
@@ -113,11 +113,13 @@
 
 // HDR metadata common for HDR10 and WebM/VP9-based HDR formats.
 struct COLOR_SPACE_EXPORT HDRMetadata {
+  // Mastering display color volume (MDCV) metadata.
   absl::optional<HdrMetadataSmpteSt2086> smpte_st_2086;
+
+  // Content light level information (CLLI) metadata.
   absl::optional<HdrMetadataCta861_3> cta_861_3;
 
   // Brightness points for extended range color spaces.
-  // NOTE: Is not serialized over IPC.
   absl::optional<HdrMetadataExtendedRange> extended_range;
 
   HDRMetadata() = default;
diff --git a/ui/views/cocoa/native_widget_mac_ns_window_host.h b/ui/views/cocoa/native_widget_mac_ns_window_host.h
index 58f1b79..2daaf2b 100644
--- a/ui/views/cocoa/native_widget_mac_ns_window_host.h
+++ b/ui/views/cocoa/native_widget_mac_ns_window_host.h
@@ -155,6 +155,10 @@
   // screen coordinates).
   void SetBoundsInScreen(const gfx::Rect& bounds);
 
+  // Changes the size of the window, leaving the top-left corner in its current
+  // location.
+  void SetSize(const gfx::Size& size);
+
   // Tell the window to transition to being fullscreen or not-fullscreen.
   // If `fullscreen` is true, then `target_display_id` specifies the display to
   // which window should move (or an invalid display, to use the default).
diff --git a/ui/views/cocoa/native_widget_mac_ns_window_host.mm b/ui/views/cocoa/native_widget_mac_ns_window_host.mm
index 5981bfa..53bdb4d 100644
--- a/ui/views/cocoa/native_widget_mac_ns_window_host.mm
+++ b/ui/views/cocoa/native_widget_mac_ns_window_host.mm
@@ -528,6 +528,33 @@
   }
 }
 
+void NativeWidgetMacNSWindowHost::SetSize(const gfx::Size& size) {
+  DCHECK(!size.IsEmpty() ||
+         !native_widget_mac_->GetWidget()->GetMinimumSize().IsEmpty())
+      << "Zero-sized windows are not supported on Mac";
+  GetNSWindowMojo()->SetSize(size,
+                             native_widget_mac_->GetWidget()->GetMinimumSize());
+
+  if (remote_ns_window_remote_) {
+    // Reflecting the logic above in SetBoundsInScreen, update our local
+    // version of what we think the bounds of the window are. These bounds
+    // are going to be not quite correct until OnWindowGeometryChanged is
+    // called by the remote process but this is better than keeping the old
+    // bounds around as code might try to make decisions based on the current
+    // perceived bounds of the window.
+    gfx::Rect bounds(GetWindowBoundsInScreen().origin(), size);
+    UpdateLocalWindowFrame(bounds);
+
+    gfx::Rect window_in_screen =
+        gfx::ScreenRectFromNSRect([in_process_ns_window_ frame]);
+    gfx::Rect content_in_screen =
+        gfx::ScreenRectFromNSRect([in_process_ns_window_
+            contentRectForFrameRect:[in_process_ns_window_ frame]]);
+
+    OnWindowGeometryChanged(window_in_screen, content_in_screen);
+  }
+}
+
 void NativeWidgetMacNSWindowHost::SetFullscreen(bool fullscreen,
                                                 int64_t target_display_id) {
   // Note that when the NSWindow begins a fullscreen transition, the value of
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index 8a7074b..d49861c 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -514,10 +514,7 @@
 void NativeWidgetMac::SetSize(const gfx::Size& size) {
   if (!ns_window_host_)
     return;
-  // Ensure the top-left corner stays in-place (rather than the bottom-left,
-  // which -[NSWindow setContentSize:] would do).
-  ns_window_host_->SetBoundsInScreen(
-      gfx::Rect(GetWindowBoundsInScreen().origin(), size));
+  ns_window_host_->SetSize(size);
 }
 
 void NativeWidgetMac::StackAbove(gfx::NativeView native_view) {
diff --git a/ui/webui/resources/js/mojo_type_util.ts b/ui/webui/resources/js/mojo_type_util.ts
index e02a584..08264d8 100644
--- a/ui/webui/resources/js/mojo_type_util.ts
+++ b/ui/webui/resources/js/mojo_type_util.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import {String16} from 'chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-webui.js';
+import {Url} from 'chrome://resources/mojo/url/mojom/url.mojom-webui.js';
 
 export function stringToMojoString16(s: string): String16 {
   return {data: Array.from(s, c => c.charCodeAt(0))};
@@ -11,3 +12,8 @@
 export function mojoString16ToString(str16: String16): string {
   return str16.data.map((ch: number) => String.fromCodePoint(ch)).join('');
 }
+
+// Note: This does not do any validation of the URL string.
+export function stringToMojoUrl(s: string): Url {
+  return {url: s};
+}
diff --git a/v8 b/v8
index eaac5ac..cb7e3eb 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit eaac5ac5bf7c449ca20198abbb8961b7038bc38d
+Subproject commit cb7e3eb9cb05d2f42d99a8e6fef4df6f81263d53